一、集群搭建
1.1 环境准备
- 服务器
- redis-5.0.x压缩包
1.2 配置参数
- redis解压到工作目录下,新建cluster/文件夹,在cluster/目录下再分别新建6个对应端口号的子文件夹7000/、7001/、7002/、7003/、7004/、7005/;
注:这里准备运行6个redis实例跑官方推荐的最低配置——三主三从。 - 将默认配置文分别复制到6个文件夹下,逐一修改配置参数:
所有配置文件需要修改如下配置(其余使用默认配置即可):
bind xx.xx.xx.xx
protected-mode no
port xxx
daemonize yes
pidfile /var/run/redis_xxx.pid
logfile "./logxxx.log"
requirepass <yourpassword>
cluster-enabled yes
cluster-node-timeout 15000
注意:如果主节点(7000、7002、7004)配置了密码,则从节点需要配置以下参数,否则如果主节点意外宕机从节点将无法自动切换为主节点,造成集群对jedis等客户端不可用
!!!
masterauth <master-password>
二、集群启动和重启
2.1 首次启动
redis-cli -a password --cluster create --cluster-replicas 1 ip:7000 ip:7001 ip:7002 ip:7003 ip:7004 ip:7005
2.2 故障重启
注意:此处仅是测试环境导致集群故障后的操作,需清空数据后再重启。
pkill redis
停止所有redis实例;- 依次进入各个实例的文件夹中将除了redis.conf外产生的数据文件清空;
- 重新执行2.1的命令。
三、其他集群操作
本章节参考并整理以下文章:
https://blog.csdn.net/weixin_42440345/article/details/95048739
3.1 扩容
1) 查看每个集群节点的node ID和身份
进入任意集群master节点:redis-cli -c -h xx.xx.xx.xx -p <port> -a password
查看节点ID:cluster nodes
2)添加master节点过程
a)redis-cli --cluster add-node ip:7001 ip:7000
注意:这里只是将节点7001加入了7000所在集群中,但是并没有分配slot,所以这个节点并没有真正的开始分担集群工作。
b)分配slot
redis-cli --cluster reshard ip:7000 --cluster-from nodeID1,nodeID2,xxx --cluster-to nodeID_7001 --cluster-slots 1024
reshard 后跟集群已有节点中的其中一个节点;
cluster-from:表示slot目前所在的节点的node ID,多个ID用逗号分隔;
cluster-to:表示需要新分配节点的node ID,即步骤a中的7001节点对应的node ID;
cluster-slots:分配的slot数量;
3)添加slave节点
redis-cli --cluster add-node ip:7001 ip:7000 --cluster-slave --cluster-master-id nodeID_7000
add-node: 后面的分别跟着新加入的slave和slave对应的master;
cluster-slave:表示加入的是slave节点;
cluster-master-id:表示slave对应的master的node ID;
3.2 收缩集群
1)下线从节点
即删除master对应的slave
redis-cli --cluster del-node 127.0.0.1:7001 nodeID_7001
del-node 后面跟着slave节点的 ip:port 和node ID
2)下线主节点
a)先清空master的slot
redis-cli --cluster reshard 127.0.0.1:7000 --cluster-from nodeID_7000 --cluster-to nodeID_target --cluster-slots 1024 --cluster-yes
reshard子命令3.1.2.b小结已介绍,这里需要注意,由于集群一共有三个主节点,而每次reshard只能写一个目的节点,因此以上命令需要执行两次(cluster-to对应不同的目的节点);
1024 这个值如何得出的:cluster nodes
查看待删除节点的slot数量,再除以剩下的主节点数,目的是保证slot均匀分配到剩下的节点上;
cluster-yes:不回显需要迁移的slot,直接迁移。
b)再下线(删除)节点
redis-cli --cluster del-node 127.0.0.1:7000 nodeID_7000
至此就是redis cluster 简单的操作过程。