部署:
https://blog.csdn.net/qq_42815754/article/details/82912130
操作命令:
启动redis服务
在redis-cluster路径下创建一个start.sh的文件写入如下命令并且执行:
cd redis01
sudo ./redis-server redis.conf &
cd ..
cd redis02
sudo ./redis-server redis.conf &
cd ..
cd redis03
sudo ./redis-server redis.conf &
cd ..
cd redis04
sudo ./redis-server redis.conf &
cd ..
cd redis05
sudo ./redis-server redis.conf &
cd ..
cd redis06
sudo ./redis-server redis.conf &
cd ..
创建集群服务:
./redis01/redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004
127.0.0.1:7005 127.0.0.1:7006
查询集群服务:
zhen@zhen-H110SD3-C:/usr/local/redis-cluster/redis08$ sudo ./redis-cli -p 7001
127.0.0.1:7001> cluster nodes
新增master节点(新建redis07,redis08文件步骤和上面一样并且启动服务):
./redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7001
新增slave节点:
登录到从节点的redis-cli,使用replicate为该节点指定主节点
192.168.0.2:7006> cluster replicate 01c944eb66564d41e355388dc468ee79e71fe789 # master节点序列号
删除节点:
sudo ./redis-cli --cluster del-node 127.0.0.1:7008 ea617bc761b5b533edbda3faafa90f50c352ad31 # 节点序列号
操作问题:
1 设置值:
设置值的时候按照CRC16算法随机分配到各个槽,然后看6147对应哪个集群的节点这个值就存在这个节点中.
>>> import crc16
>>> res=(crc16.crc16xmodem(b'200'))
>>> res%16384
>>> 6147
2 kill master/slave 情况
1)如果slave连接master,如果把master kill 掉slave就变成了master,重启master就变成slave
2)master/slave 都kill 掉,写入数据失败.
3 执行迁移slot命令
如果有一个或多个master或者slave的进程被kill掉的时候,无法执行迁移命令,但是加入的节点不是slave关联的master或者master没有关联slot则可以迁移,不管它的状态与否正常.
BUG解决:
1 问题一,一直提示Waiting for the cluster to join...
最近在进行redis集群的时候遇到一个问题
一直提示Waiting for the cluster to join....
这里直接ctrl+c了
解决方案:
1:打开所有节点的redis.conf 配置bind属性 值是服务器的外网IP
如:bind 192.168.46.133
2:使用redis desktop Manager连接所有节点 调出命令窗口输入一下 命令
flushall
cluster reset
3:进入各个节点的redis的rdb文件保存位置
删除rdb持久化文件和nodes.conf文件
4:关闭所有redis示例
5:启动redis
6:用redis-trib.rb创建集群查看是否成功
前提:各节点保证可以正常通信 端口放通,云服务器记得在云计算厂商的防火墙上放通端口
2 问题二 ,[ERR] Node 172.18.40.32:7008 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0
解决:
进入对应的数据库执行,cluster reset
zhen:$ ./redis-cli -h 172.18.40.32 -p 7008
172.18.40.32:7008> cluster reset
OK
3 问题三,(error) ERR To set a master the node must be empty and without assigned slots.
解决:
新增Slave节点与新增Master的前三步骤相同,这里不再介绍,不同的是需要登录到从节点的redis-cli,使用replicate为该节点指定主节点,具体如下:
方式一:
// 登录到从节点的redis-cli,使用replicate为该节点指定主节点
192.168.0.2:7006> cluster replicate 01c944eb66564d41e355388dc468ee79e71fe789
方式二:
#./redis-trib.rb add-node --slave --master-id '01c944eb66564d41e355388dc468ee79e71fe789' 192.168.0.2:7006 192.168.0.2:7001
注释:
--slave,表示添加的是从节点
--master-id 01c944eb66564d41e355388dc468ee79e71fe789 ,主节点的node id,在这里是前面新添加的7006的node id
192.168.0.2:7006,新节点
192.168.0.2:7001,集群任一个旧节点