Redis-Cluster搭建笔记
集群节点分配原理
Redis Cluster可靠集群至少需要3个节点,6个Redis实例(3M3S),每个节点上保存1M1S实例且不能互为主从,当然这些Redis Cluster会自动分配。
该情况下,集群的16384个slot会被分配至3个Master节点上,分别为:
M1:0 - 5460
M2:5461 - 10922
M3:10923 - 16383
集群的HASH算法为:CRC16('key')%16384,根据结果分配至目标Master实例;
安装redis实例
1:准备3个CentOS7节点,注意打开需要的端口
2:下载redis-4.0.8源码,地址为:https://redis.io/download/
3:解压压缩包并安装:
tar -xzf redis-4.0.8.tar.gz cd redis-4.0.8 make make install PREFIX=/usr/etc/redis-cluster
4:进入集群目录/usr/etc/redis-cluster
5:修改bin文件夹为redis01,并复制redis.conf配置文件至redis01目录
6:修改配置文件redis.con:
daemonize yes # 以后台进程运行 port 7001 # 监听端口 cluster-enabled yes # 开启cluster cluster-config-file nodes.conf # 集群节点文件 appendonly yes
除此以外,为支持网络连接,需要将redis的保护模式关闭,或设置访问密码:
protected-mode no # 保护模式关闭
requirepass # 访问密码
7:复制redis01至redis02-redis06,一共六份,分别对应6个实例,修改相关的redis.conf,分配各自的端口号(或IP地址)
安装redis cluster集群
1:复制redis源码文件夹下src下的redis-trib.rb至redis-cluster目录
cp /usr/etc/redis-4.0.8/src/redis-trib.rb /usr/etc/redis-cluster
2:安装ruby及rubygems
yum install ruby yum install rubygems
3:CentOS7的yum安装的ruby版本为2.0.0,需要升级:
yum install centos-release-scl-rh # 会在/etc/yum.repos.d/目录下多出一个CentOS-SCLo-scl-rh.repo源 yum install rh-ruby23 -y # 直接yum安装即可 scl enable rh-ruby23 bash # 必要一步 ruby -v # 可查看ruby版本为2.3
4:之后安装gem的redis,以下未指定版本,对redis-4.0.8会安装redis-4.0.1.gem
gem install redis
5:编写所有实例的启动脚本:
cd redis01 ./redis-server redis.conf cd .. cd redis02 ./redis-server redis.conf cd .. cd redis03 ./redis-server redis.conf cd .. cd redis04 ./redis-server redis.conf cd .. cd redis05 ./redis-server redis.conf cd .. cd redis06 ./redis-server redis.conf cd ..
6:设置脚本权限并启动
chmod 777 ./start-all.sh ./start-all.sh
7:可用以下指令查看redis实例状态,或关闭所有节点服务
ps -ef | grep redis # 查看redis实例状态 pkill -9 redis # 杀死所有redis进程
8:使用redis-trib.rb创建集群
./redis-trib.rb create --replicas 1 192.168.137.129:7001 192.168.137.129:7002 192.168.137.129:7003 192.168.137.129:7004 192.168.137.129:7005 192.168.137.129:7006
9:检查集群
./redis-trib.rb check 192.168.137.129:7001 ./redis-trib.rb info 192.168.137.129:7001
正常情况下集群创建完毕,6个实例组成3M3S集群,客户端使用时可连接集群中任意一个节点(通过配置连接池即可);
集群扩容及缩容、Reshard
1:向集群中添加新的节点
先向192.168.137.129:7001实例所在集群添加一个新的Master节点(节点IP为192.168.137.129:7007,红色散列值为节点ID):
./redis-trib.rb add-node --master-id 19007025ca203a9c12878549aa8e50a1627a5353 192.168.137.129:7007 192.168.137.129:7001
再向节点添加Slave节点(节点IP为192.168.137.129:7008),如不指定Master节点的话,会默认挂接Slave节点最少的主节点:
./redis-trib.rb add-node --slave 192.168.137.129:7008 192.168.137.129:7001
2:检查集群当前状态,正常情况下目前集群是一个4M4S的集群,但新增节点未分配Slot,可通过reshard指令重新分配slot:
./redis-trib.rb reshard 192.168.137.129:7001
开始对192.168.137.129:7001实例所在集群开始重新分配slot,根据命令行提示,会需要指定将多少slot分配至新节点,以及新节点的节点ID(散列值);
在指定来源节点的时候,如果希望从整个集群平均分配slot至新节点,则直接输入all即可。
3:移除集群中的节点
./redis-trib.rb del-node 192.168.137.129:7008 ${node-id}
node-id为节点ID(散列值)
需要注意的是:
如果删除节点为M节点,则需要先将该节点上的slot重新reshard到该集群中其它M节点之上才能移除该节点;
如果删除节点为S节点,则可直接使用del-node进行删除;