条件
l 基于redis5.0.*版本进行集群的搭建
l 集群要求至少六个节点,即每个主节点配置1个从节点,本集群是使用了3个主节点并每个下面挂一个从节点,三个主节点分布在3台服务器上
l 集群配置信息如下:
服务器 |
Master |
Slave |
172.16.114.52 |
7001 |
7002 |
172.16.239.95 |
7003 |
7004 |
172.16.239.89 |
7005 |
7006 |
集群配置
在第一台服务器(172.16.114.52)上操作
1. 下载redis源码包并解压
wget -c http://download.redis.io/releases/redis-5.0.7.tar.gz tar -zxvf redis-5.0.7.tar.gz
2. 新建集群配置目录
mkdir -p /usr/local/redis-cluster/7001 /usr/local/redis-cluster/7002
3. 将解压后的文件中的redis.conf配置文件拷贝到集群目录之下 并执行redis安装命令
cd redis-5.0.7 cp redis.conf /usr/local/redis-cluster make install PREFIX=/usr/local/redis2 # 注意 这里PREFIX一定是大写
4. 进入/usr/local/redis2,复制bin文件到7001,7002目录下
cd /usr/local/redis2 cp -r bin /usr/local/redis-cluster/7001 cp -r bin /usr/local/redis-cluster/7002
5. 进入redis-cluster目录,修改redis.conf并分别拷贝到7001,7002
修改配置文件内容如下:
1) 屏蔽限制本地访问, 将bind 127.0.0.1 修改为 bind 0.0.0.0
2) protected-mode保护模式从yes改为no
3) daemonize后的no改为yes
4) 去掉cluster-enabled yes 前面的注释
5) 去掉cluster-node-timeout 前面的注释
6) port后的端口改为7001, 将redis.conf文件,复制到对应的目录下.
cp redis.conf 7001
7) 再次编辑redis.conf 将port参数修改 7001 ==> 7002,复制到对应目录下.
sed -i 's/7001/7002/g' redis.conf cp redis.conf 7002
8)修改pidfile参数
pidfile /var/run/redis_7001.pid
9)修改node
cluster-config-file nodes-7001.conf # 修改为对应的节点ID
6. 启动redis服务
/usr/local/redis-cluster/7001/bin/redis-server /usr/local/redis-cluster/7001/redis.conf /usr/local/redis-cluster/7002/bin/redis-server /usr/local/redis-cluster/7002/redis.conf
注意点: 在启动服务之前要修改配置文件中对应的dump dir目录,否则默认目录是 ./ 需要改成对应的绝对路径,否则会造成路径冲突,导致启动失败
查看启动的服务:
7. 在另外两台机器上重复以上的操作,需要注意的是,需要设置对应的端口与目录
效果:
第一台(172.16.114.52)
第二台(172.16.239.95):
第三台(172.16.239.89):
集群搭建
使用Redis客户端执行命令:
/usr/local/redis-cluster/7001/bin/redis-cli --cluster create --cluster-replicas 1 172.16.114.52:7001 172.16.114.52:7002 172.16.239.95:7003 172.16.239.95:7004 172.16.239.89:7005 172.16.239.89:7006
参数说明:
--cluster 集群管理命令 后面可以执行集群相关的命令
--cluster-replicas 1 代表每个Master携带一个Slave
create 创建集群命令
至此已经配置成功
客户端测试
开启客户端 链接任意一个Master节点
/usr/local/redis2/bin/redis-cli -h 172.16.114.52 -c -a 密码 -p 端口
参数:
-c: 连接到集群
我们可以看到,当我们set一个键值对的时候,Redis会自动为我们的key计算CRC16值,然后对16384取模,获取key对应的hash slot,然后通过判断该槽被那个Master所占用,帮我们重定向到那个Master节点,将键值对存入。
查看集群信息:
cluster nodes
常见问题:
- 出现节点的状态为handshake并且无法使用cluster forget 删除掉该节点,节点的唯一ID一直发生变化
解决: 这是因为集群所有的节点都持有该节点的信息,不停的再发起重新连接操作,需要在所有节点上(包括从节点)执行 cluster forget xxx操作, 才能彻底移除掉无效节点
- 集群中出现无用节点
例如:76e6fb6341fd43aaa1be5b2f8bb68a8c8a0572ae :0@0 slave,fail,noaddr - 1585662914903 1585662914903 6 disconnected
可以将其移除 cluster forget 76e6fb6341fd43aaa1be5b2f8bb68a8c8a0572ae