redis之集群理论及部署

编程入门 行业动态 更新时间:2024-10-09 19:20:47

redis之<a href=https://www.elefans.com/category/jswz/34/1771240.html style=集群理论及部署"/>

redis之集群理论及部署

文章目录

  • Redis 集群模式
    • 作用
      • (1) 数据分区
      • (2) 高可用
    • 数据分片
  • 部署
      • 开启群集功能
      • 启动集群
      • 测试集群

Redis 集群模式

  • 他是redis 3.0开始引入的分布式存储方案,由多个节点组成,redis的数据分布在这些节点中
  • 集群中的节点分为主节点和从节点:只有主节点负责读写请求和集群信息的维护,从节点只进行主节点数据和状态信息的复制

作用

(1) 数据分区

数据分区(或称数据分片)是集群最核心的功能
集群将数据分散到多个节点,一方面突破了 Redis 单机内存大小的限制,存储容量大大增加,另一方面每个主节点都可以对外提供读服务和写服务,大大提高了集群的响应能力
Redis 单机内存大小受限问题,在介绍持久化和主从复制时都有提及
例如,如果单机内存太大,bgsave 和 bgrewriteaof 的 fork 操作可能导致主进程阻塞,主从环境下主机切换时可能导致从节点长时间无法提供服务,全量复制阶段主节点的复制缓冲区可能溢出

(2) 高可用

集群支持主从复制和主节点的自动故障转移(与哨兵类似),当任意节点发送故障时,集群仍然可以对外提供服务

数据分片

Redis 集群引入了哈希槽的概念,有 16384 个哈希槽(编号 0~16383)
集群的每个节点负责一部分哈希槽,每个 Key 通过 CRC16 校验后对 16384 取余来决定放置哪个哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作
以 3 个节点组成的集群为例:
节点 A 包含 0~5469 号的哈希槽
节点 B 包含 5461~10922 号的哈希槽
节点 C 包含 10923~16383 号的哈希槽

部署

环境
Node1节点 node 192.168.3.11 主端口6001 从6004
Node2节点 node 192.168.3.11 主端口6002 从6005
Node3节点 node 192.168.3.11 主端口6003 从6006
安装好redis(前面有一件执行脚本博客)

关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
搭建Cluster集群
redis的集群一般需要6个节点,3主3从。方便起见,这里所有节点在同一台服务器上模拟:
以端口号进行区分:3个主节点端口号:6001/6002/6003, 对应的从节点端口号:6004/ 6005/ 6006。#回车,直到出现以下选项,手动修改为“/usr/local/redis/bin/redis-server”
Please select the redis executable path [/usr/local/bin/redis-server] /usr/local/redis/bin/redis-serverln -s /usr/local/redis/bin/* /usr/local/bin/
#创建redis 6个端口的工作目录
cd /etc/redis/
mkdir -p redis-cluster/redis600{1..6}
for i in {1..6}
do
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis600$i
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis600$i
done

开启群集功能

仅以redis6001为例,其他5个文件夹的配置文件以此类推修改,特别注意端口号的修改。

[root@localhost redis]# cd redis-cluster/redis6001
[root@localhost redis6001]# vim redis.conf bind 127.0.0.1  #69行,注释掉bind项,默认监听所有网卡protected-mode no  #88行,修改,关闭保护模式port 6001   #92行,修改,redis监听端口daemonize yes  #136行,开启守护进程,以独立进程启动cluster-enabled yes  #832行,取消注释,开启群集功能cluster-config-file nodes-6001.conf   #840行,注销注释,群集名称文件设置cluster-node-timeout 15000   #846行,注销注释,群集超时时间设置appendonly yes   #699行,修改,开启AOF持久化
。
。
。
6002-6006同样配置

启动集群

分别进入那六个文件夹,执行命令:“redis-server redis.conf”,来启动redis节点

[root@localhost redis6006]# for s in {1..6}
> do
> cd /etc/redis/redis-cluster/redis600$s
> redis-server redis.conf 
> done[root@localhost redis6006]# ps -ef |grep redis
root      78255      1  0 19:19 ?        00:00:13 /usr/local/redis/bin/redis-server 0.0.0.0:6379
root      87931      1  0 21:20 ?        00:00:00 redis-server 127.0.0.1:6001 [cluster]
root      87933      1  0 21:20 ?        00:00:00 redis-server 127.0.0.1:6002 [cluster]
root      87935      1  0 21:20 ?        00:00:00 redis-server 127.0.0.1:6003 [cluster]
root      87943      1  0 21:20 ?        00:00:00 redis-server 127.0.0.1:6004 [cluster]
root      87945      1  0 21:20 ?        00:00:00 redis-server 127.0.0.1:6005 [cluster]
root      87947      1  0 21:20 ?        00:00:00 redis-server 127.0.0.1:6006 [cluster]
root      88663  10549  0 21:21 pts/1    00:00:00 grep --color=auto redis
  • 六个实例分为三组,每组一主一从,前面的做主节点,后面的做从节点。下面交互的时候需要输入yes才可以成功创建。
    –replicas 1表示每个主节点有1个从节点。

测试集群

[root@localhost redis6006]# redis-cli -p 6001 -c
127.0.0.1:6001> cluster slots
1) 1) (integer) 54612) (integer) 109223) 1) "127.0.0.1"2) (integer) 60023) "5c7b5aeb7176cec662062c70be5dbbad51ec0fcc"4) 1) "127.0.0.1"2) (integer) 60063) "baa3db68e50976528d87ad3f9a26a9e31c9f514d"
2) 1) (integer) 109232) (integer) 163833) 1) "127.0.0.1"2) (integer) 60033) "77936d91222960730e5a20b2d9ef46c458857d5b"4) 1) "127.0.0.1"2) (integer) 60043) "fbd24590da776d08fb7a604c76f0e5fe6cf4f54b"
3) 1) (integer) 02) (integer) 54603) 1) "127.0.0.1"2) (integer) 60013) "4cc03641967f0bb1bb70b1e372a5b76e1c6bb249"4) 1) "127.0.0.1"2) (integer) 60053) "088e361b7af17e6ec7f971512edeb494cda158d6"
127.0.0.1:6001> set num 1
OK
127.0.0.1:6001> get num
"1"
127.0.0.1:6001> keys *
1) "num"
127.0.0.1:6001> quit
[root@localhost redis6006]# redis-cli -p 6002 -c
127.0.0.1:6002> keys *
(empty list or set)
127.0.0.1:6002> get num
-> Redirected to slot [2765] located at 127.0.0.1:6001
"1"
127.0.0.1:6001> set key1 11111
-> Redirected to slot [9189] located at 127.0.0.1:6002
OK
127.0.0.1:6002> 

更多推荐

redis之集群理论及部署

本文发布于:2024-03-07 22:43:59,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1719107.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:集群   理论   redis

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!