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进行删除;

原文地址:https://www.cnblogs.com/you-you-111/p/8639826.html