Redis-Cluster集群
集群部署(三主三从)
环境准备
准备六台机器(关闭防火墙和selinux)
master1 192.168.13.111
master2 192.168.13.113
master3 192.168.13.114
slave1 192.168.13.115
slave2 192.168.13.121
slave3 192.168.13.122
安装Redis(7.4.0)
wget https://download.redis.io/releases/redis-7.4.0.tar.gz
##安装编译工具
yum -y install gcc make
tar xvzf redis-7.4.0.tar.gz -C /usr/local/
cd /usr/local/
mv redis-7.4.0/ redis
cd redis
make
修改配置文件
vim /usr/local/redis/redis.conf
bind 0.0.0.0
protected no #关闭加密保护 否则从节点无法连接
daemonize yes #开启后台模式将no改为yes
timeout 300 #连接超时时间
port 6379 #端口号
logfile "/var/log/redis.log" ###存放日志
pidfile /var/run/redis_6379.pid #定义pid文件
dbfilename dump.rdb
dir ./data ###存放在安装目录下的data目录下 用于存放数据(目录需要提前创建)
save 3600 1 300 100 60 10000 #snapshot触发的时机
stop-writes-on-bgsave-error yes #当snapshot时出现错误无法继续时,阻塞客户端“变更操作”,“错误”可能因为磁盘已满/磁盘故障/OS级别异常等
rdbcompression yes #启用rdb文件压缩,默认为“yes”,压缩往往意味着“额外的cpu消耗”,同时也意味这较小的文件尺寸以及较短的网络传输时间
appendonly yes #开启aof功能,只有在“yes”下,aof重写/文件同步等特性才会生效
appendfilename "appendonly.aof" #AOF文件名称
appendfsync everysec #表示对写操作进行累积,每秒同步一次
以下为打开注释并修改
cluster-enabled yes #启用集群
cluster-config-file nodes-6379.conf #集群配置文件,由redis自动更新,不需要手动配置,运行多实例时请注修改为对应端口
cluster-node-timeout 5000 #单位毫秒。集群节点超时时间,即集群中主从节点断开连接时间阈值,超过该值则认为主节点不可以,从节点将有可能转为master
cluster-replica-validity-factor 10 #在进行故障转移的时候全部slave都会请求申请为master,但是有些slave可能与master断开连接一段时间了导致数据过于陈旧,不应该被提升为master。该参数就是用来判断slave节点与master断线的时间是否过长。(计算方法为:cluster-node-timeout * cluster-replica-validity-factor,此处为:5000 * 10 毫秒)
cluster-migration-barrier 1 #一个主机将保持连接的最小数量的从机,以便另一个从机迁移到不再被任何从机覆盖的主机
cluster-require-full-coverage yes #集群中的所有slot(16384个)全部覆盖,才能提供服务
将redis同步到其余机器
##创建数据存放目录
mkdir data
##通过scp将配置后的redis发送到其余的机器
scp -r /usr/local/redis/ 192.168.13.113:/usr/local/
scp -r /usr/local/redis/ 192.168.13.114:/usr/local/
scp -r /usr/local/redis/ 192.168.13.115:/usr/local/
scp -r /usr/local/redis/ 192.168.13.121:/usr/local/
scp -r /usr/local/redis/ 192.168.13.122:/usr/local/
启动redis(六台机器)
./src/redis-server redis.conf

创建集群
##在任意一台节点服务器上操作
./src/redis-cli --cluster create --cluster-replicas 1 192.168.13.111:6379 192.168.13.113:6379 192.168.13.114:6379 192.168.13.115:6379 192.168.13.121:6379 192.168.13.122:6379
(注:前面三个IP为主节点 Redis是根据IP和Port的顺序,确定master和slave的,所以要排好序,再执行。)
如果有以下错误
![]()
就将redis停止,并删除安装目录下的date目录下的文件
rm -rf /usr/local/redis/data/*
重新启动并执行操作
查看集群状态
查看集群状态可连接集群中的任一节点,此处连接了集群中的节点192.168.13.111:6379
# 登录集群客户端,-c标识以集群方式登录
./src/redis-cli -c -h 192.168.13.111 -p 6379
192.168.13.111:6379> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
192.168.13.111:6379> cluster nodes ###查看集群节点信息

集群操作
###存储的数据会随机存储到主节点
192.168.13.111:6379> set name jack
-> Redirected to slot [5798] located at 192.168.13.116:6379
OK
192.168.13.116:6379> get name
"jack"
192.168.13.116:6379> set id 1
-> Redirected to slot [7568] located at 192.168.13.113:6379
OK
192.168.13.113:6379> get id
"1"
添加主从节点
环境准备
准备两台机器(关闭防火墙和selinux)
master4 192.168.13.116
slave4 192.168.13.123
安装redis
##将任意节点上的redis发送到新机器中
scp -r /usr/local/redis 192.168.13.116:/usr/local/
scp -r /urs/local/redis 192.168.13.123:/usr/local/
启动redis
./src/redis-server redis.conf
添加主节点
##任意一台机器操作
cd /usr/local/redis
./src/redis-cli --cluster add-node 192.168.13.116:6379 192.168.13.113:6379 ##后面的IP为任意一个主节点的IP 前面的IP为要添加的主节点IP
分配卡槽
##为新添加的节点分配卡槽(redis数据是存储在卡槽中,如果主节点没有卡槽等于没有加入集群)
./src/redis-cli --cluster reshard 192.168.13.116:6379


添加从节点
./src/redis-cli --cluster add-node 192.168.13.123:6379 192.168.13.116:6379 --cluster-slave --cluster-master-id cfec6fb8f016937f39d017190110dd4aad6b40db
--192.168.13.123:6379 从节点ip+port
--192.168.13.116:6379 主节点ip+port
--cluster-master-id 主节点id

查看集群实例

均衡分配卡槽
##任意节点执行
./src/redis-cli --cluster rebalance --cluster-threshold 1 192.168.13.116:6379
--cluster-threshold 1 主节点之间卡槽数相差超过1,就分配


删除主从节点
流程
删除从节点
将主节点中的slot卡槽转移到其他的主节点
删除主节点
平衡卡槽数量
删除从节点
./src/redis-cli --cluster del-node 192.168.13.123:6379 9046043da5cc80841154fdb2349fbfe1cc0bca47
--192.168.13.123:6379 #被删除节点的IP+port
--9046043da5cc80841154fdb2349fbfe1cc0bca47 #被删除节点的ID
./src/redis-cli --cluster info 192.168.13.113:6379 ##查询集群信息
转移主节点中slot卡槽(两种方法)**
第一种直接平均分配
要删除的当前主节点哈希槽状态:0-1364 5461-6826 10923-12287
共有哈希槽=1365 + 1366 + 1365 = 4096个
./redis-cli --cluster reshard 192.168.116.116:6379 --cluster-from cfec6fb8f016937f39d017190110dd4aad6b40db --cluster-to 2de95f82e739d5f0a445fba620917060e0dcc2a0 --cluster-slots 1365 --cluster-yes
./redis-cli --cluster reshard 192.168.116.116:6379 --cluster-from cfec6fb8f016937f39d017190110dd4aad6b40db --cluster-to 0d0cca8fcdfe0703c013b64035f253d2233fce4c --cluster-slots 1366 --cluster-yes
./redis-cli --cluster reshard 192.168.116.116:6379 --cluster-from cfec6fb8f016937f39d017190110dd4aad6b40db --cluster-to 86c6df14633454c5c4e305f0f55b1f26ad5ecefe --cluster-slots 1365 --cluster-yes
第二种全部分配到一个节点 再自动平衡卡槽数量
./src/redis-cli --cluster reshard 192.168.13.116:6379 --cluster-from cfec6fb8f016937f39d017190110dd4aad6b40db --cluster-to 86c6df14633454c5c4e305f0f55b1f26ad5ecefe --cluster-slots 4096 --cluster-yes
--cluster-from 被分配节点的ID
--cluster-to 接收分配节点的ID
--cluster-slots 4096 分配卡槽的数量
##使用这种方式之后 被分配的主节点自动将为该主节点的从节点
./src/redis-cli -cluster info 192.168.13.113:6379 ##查看集群节点信息
删除主节点
./src/redis-cli --cluster del-node 192.168.13.116:6379 cfec6fb8f016937f39d017190110dd4aad6b40db
平衡slot卡槽数量
./src/redis-cli --cluster rebalance --cluster-threshold 1 192.168.13.113:6379
./src/redis-cli --cluster info 192.168.13.113:6379
完成删除