Redis主从同步可以让从服务器从主服务器备份数据,主从复制分为全量同步和增量同步,⾸次同步是全量同步, ⽽且从服务器还可与有从服务器,redis的主从同步是⾮阻塞的
从服务器连接主服务器,发送SYNC命令(2.8版本之前是PSYNC);
主服务器接收到SYNC命名后,会fork⼀个⼦进程在后台执行bgsave命令,将Redis内存数据⽣成RDB快照⽂件并使⽤缓冲区记录此后执⾏的所有写命令;
主服务器BGSAVE执行完后,向所有从服务器发送快照⽂件,并在发送期间继续记录被执⾏的写命令;
从服务器收到快照文件后丢弃所有旧数据,载⼊收到的快照;
主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令;
从服务器完成对快照的载⼊,开始接收命令请求,并执行来自主服务器缓冲区的写命令;
后期同步会先发送自己slave_repl_offset位置,只同步新增加的数据,不再全量同步。
| 主机名 | 服务器IP | 类型 |
|---|---|---|
| redis-server1 | 192.168.100.161 | master |
| redis-server2 | 192.168.100.162 | slave1 |
| redis-server3 | 192.168.100.163 | slave2 |
这里用脚本通过编译的方式安装
指定连接的master地址及权限
补充:redis3+版本用的是slaveof 而不是replicaof
master写入数据
slave只能读不能写
当master挂了的时候,主从模式是不会自动切换身份的,需要手动修改slave为master
1,即配置的master密码不对,导致验证不通过⽽⽆法建⽴主从同步关系。
2,Redis版本不⼀致,不同的redis 版本之间存在兼容性问题,因此各master和slave之间必须保持版本⼀致。
3,在开启了安全模式情况下,没有设置bind地址或者密码
4,被防⽕墙、安全组等限制访问一般情况下,我们建议从配置文件实现主从
主从版本要一致
1.⼿动将redis节点192.168.100.162配置为192.168.100.161的slave
2.查看日志
3.查看slave状态
4.查看master状态
5.slave提升为master
如果后期slave不再需要向master同步数据,可以取消slave的同步
6.角色切换为master
7.查看日志
验证数据写⼊
https://redis.io/docs/clients/ #redis官方客户端
redis主从架构中⽆法实现master和slave⻆⾊的⾃动切换,即当master出现redis服务异常、主机断电、磁 盘损坏等问题导致master⽆法使⽤,⽽redis主从⽆法实现⾃故障转移(将slave提升为master),需要⼿动改环境配 置才能切换到slave redis服务器,另外也⽆法横向扩展Redis服务的并⾏写⼊性能,当单台Redis服务器性能⽆法满 ⾜业务写⼊需求的时候就必须需要⼀种⽅式解决以上的两个核⼼问题。即redis sentinel机制。
哨兵在Redis主从架构中是一个非常重要的组件,被集成在redis 2.6+的版本中,Redis的哨兵模式到了2.8版本之后就稳定了下来。⼀般在⽣产环境也建议使⽤Redis的2.8版本的以后版本。它不负责数据的读写,只用来监控Redis实例
Redis Sentinel主要⽤于监控master状态
当master不可⽤时⾃动实现故障转移
通知app客户端连接新的master。
维护配置⽂件| 主机名 | 服务器IP | 类型 | 组件 |
|---|---|---|---|
| redis-server1 | 192.168.100.161 | master | sentinel |
| redis-server2 | 192.168.100.162 | slave1 | sentinel |
| redis-server3 | 192.168.100.163 | slave2 | sentinel |
redis sentinel以redis主从模式为基础部署,且最少要一主两从
root@redis-server1:~#
root@redis-server1:~# systemctl stop redis.serviceslave1
slave2
可以详细的看到整个角色切换的过程
由于新的master已经切换为redis-server2了,所以redis.conf要在配置文件重新指定新master的地址,重新把redis-server1加入主从模式

1.当多个Sentinel同意一个master不再可用的时候,就执行故障检测。这明显降低了错误概率。
2.即使并非全部的Sentinel都在工作,Sentinel也可以正常工作,这种特性,让系统非常的健康(最好是奇数个,因为不容易选举成为同票)。
在哨兵集群下,哨兵实例进行通信,是基于Redis提供的pub/sub机制的,也就是发布/订阅模式。而不是直接与其他sentinel节点建立起连接。
为了防止sentinel由于通信等原因出现误判,在哨兵集群中,判定主库是否处于下线状态,不是由一个哨兵来决定的
一般来说,我把哨兵选举新主的过程总结为"筛选+排序"。首先,哨兵会按照一定的筛选机制筛选掉不符合要求的从库,然后从符合条件的从库中进行排序,从而诞生出新库。
筛选机制:
排序机制:
基础要求
集群环境准备
测试环境为节省服务器资源可以使⽤三台服务器,每台服务器启动6379和6380两个redis 服务:
192.168.100.161:6379/6380
192.168.100.162:6379/6380
192.168.100.163:6379/6380⽣产环境
| 主机名 | 服务器IP | 类型 |
|---|---|---|
| redis-server1 | 192.168.100.161 | master1 |
| redis-server2 | 192.168.100.162 | master2 |
| redis-server3 | 192.168.100.163 | master3 |
| redis-server4 | 192.168.100.164 | slave1 |
| redis-server5 | 192.168.100.165 | slave2 |
| redis-server6 | 192.168.100.166 | slave3 |
| redis-server7 | 192.168.100.167 | 预留服务器演示更换服务器 |
| redis-server8 | 192.168.100.168 | 预留服务器演示更换服务器 |
Redis3和4版本:
redis 3/4版本,创建redis cluster集群需要使⽤到集群管理⼯具redis-trib.rb,这个⼯具是redis官⽅推出的管理redis集群的⼯具,集成在redis的源码src⽬录下,是基于redis提供的集群命令封装成简单、便捷、实⽤的操作⼯具,redis-trib.rb是redis作者⽤ruby开发完成的,centos系统yum安装的ruby存在版本较低问题
解决ruby版本较低的问题
[root@s1 ~]# redis-trib.rb create --replicas 1 192.168.100.161:6379 192.168.100.161:6379 192.168.100.161:6379 192.168.100.161:6379 192.168.100.161:6379 192.168.100.161:6379Redis5及更新版本
直接使⽤redis-cli创建和管理redis cluster集群
命令使用简介
确认各节点集群功能开启
开启方法
root@redis-server1:~# vi /apps/redis/etc/redis.con
....
cluster-enabled
初始化集群(在任意一个节点执行)
验证集群状态
原因可能是
1,网络问题
2,redis版本不统一
3,配置文件文件问题再次查看master节点状态
查看slave状态
命令行写入
python客户端写入
https://redis.io/docs/clients/ #不用语言的客户端
集群slave节点验证数据读取
集群维护主要是集群监控,另外集群运⾏时间⻓久之后,难免由于硬件故障、⽹络规划、业务增⻓等原因对已有集 群进⾏相应的调整, ⽐如增加Redis node节点、服务器过保更换、服务器因故障下线等
显示集群信息
检查集群
集群修复
在所有节点批量执⾏命令
redis-cli --cluster help #其他命令可以看帮助说明https://github.com/tair-opensource/RedisShake #RedisShake项目地址
rdb_reader: ⽀持读取解析本地rdb⽂件,向⽬的redis/redis cluster恢复数据
sync_reader: ⽀持对源redis和⽬的redis进⾏数据在线远程同步,需要⽀持psync(redis 2.8开始⽀持), psync具备了数据全量重同步和增量重同步模式
scan_reader:⽀持基于dump从源主机导出key,然后在⽬的主机使⽤RESTORE导⼊key,通过SCAN命令遍历源端数 据库中的所有 Key,不推荐。
将主机192.168.100.168的数据导⼊到redis cluster,源主机与redis cluster的key不要冲突
清空redis cluster数据
写⼊数据
https://tair-opensource.github.io/RedisShake/zh/reader/scan_reader.html
https://github.com/tair-opensource/RedisShake/blob/v4/shake.toml
下载redis-shake包,并编写shake.toml
执行数据同步
目的Redis cluster验证数据
实现基于redis实现php访问mysql数据的缓存
这里要确保开启了redis模块

https://github.com/predis/predis #如果要访问Redis cluster或Redis sentinel,需要使用支持cluster及sentinel的PHP client
https://redis.io/resources/clients/ #所有客户端
以下为单机Redis:

首次访问未命中缓存

重新访问命中redis缓存

验证redis数据
因公司业务发展迅猛,现有的三主三从redis cluster架构可能⽆法满⾜现有业务的并发写⼊需求,因此公司紧急采 购两台服务器192.168.100.167、192.168.100.168,需要将其动态添加到集群当中其不能影响业务使⽤和数据丢失,则添 加过程如下
前提条件:
主要过程:添加master 添加slave 重新分配槽位 验证
这个操作尽量避开业务高峰期
root@redis-server1:~# redis-cli -a q1w2e3r4ys@123 --cluster reshard 192.168.100.161:6379验证集群槽位状态
测试数据写入
由于192.168.100.167/192.168.100.168服务器使⽤年限已经超过三年,已经超过⼚商质保期⽽且硬盘出现异常报警,经运维部架构师提交⽅案并同开发同事开会商议,决定将其从现有Redis Cluster中的4台主服务器分别中下线,剩余其他三台服务器的并发写⼊性能⾜够⽀出未来1-2年的业务需求,则删除Redis node 192.168.100.167/192.168.100.168的操作如下
主要过程:
root@redis-server1:~# redis-cli -a q1w2e3r4ys@123 --cluster reshard 192.168.100.161:6379
这个操作尽量避开业务高峰期
测试关闭⼀个master,验证能否实现故障转移
测试关闭192.168.100.161节点,其对应的slave节点为192.168.100.165
root@redis-server1:~# systemctl stop redis.serviceroot@ubuntu20:~# ls
redis-7.2.0.tar.gz
root@ubuntu20:~# tar xvf redis-7.2.0.tar.gz
root@ubuntu20:~# sudo dpkg-reconfigure debconf #选择dekp非交互模式
依次选择-->Noninteractive-->critical
root@ubuntu20:~# bash redis-install.shroot@redis-server2:~# vi /apps/redis/etc/redis.conf
....
replicaof 192.168.100.161 6379
masterauth q1w2e3r4ys@123
# replicaof <masterip> <masterport>
....
root@redis-server3:~# vi /apps/redis/etc/redis.conf
....
replicaof 192.168.100.161 6379
masterauth q1w2e3r4ys@123
# replicaof <masterip> <masterport>
....
root@redis-server2:~# systemctl restart redis.service
root@redis-server3:~# systemctl restart redis.service192.168.100.162:6379> info
# Replication
role:slave
master_host:192.168.100.161
master_port:6379
master_link_status:up #与master的链接是up的
master_last_io_seconds_ago:4 #最近⼀次与master通信已经过去多少秒。
master_sync_in_progress:0 #是否正在与master通信。
slave_read_repl_offset:168
slave_repl_offset:168 #当前同步的偏移量。
slave_priority:100 #slave优先级
slave_read_only:1 #slave只读
replica_announced:1 #通过slave节点
connected_slaves:0 #slave的slave
master_failover_state:no-failover
master_replid:3636a0eccdfed789c31a09f72c8c6ea1112c5f19 #master的ID
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:168
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:536870912
repl_backlog_first_byte_offset:15
repl_backlog_histlen:154192.168.100.161:6379> info
# Replication
role:master
connected_slaves:2 #slave节点的数量
slave0:ip=192.168.100.162,port=6379,state=online,offset=90480,lag=1 #slave1
slave1:ip=192.168.100.163,port=6379,state=online,offset=90480,lag=0 #slave2
master_failover_state:no-failover #是否做故障转移
master_replid:3636a0eccdfed789c31a09f72c8c6ea1112c5f19 #指向⾃⼰的ID
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:994
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:536870912
repl_backlog_first_byte_offset:1
repl_backlog_histlen:994root@redis-server1:~# redis-cli -h 192.168.100.161
192.168.100.161:6379> auth q1w2e3r4ys@123
OK
192.168.100.161:6379> set aaa 111
OK----查看slave1 数据----
root@redis-server2:~# redis-cli -h 192.168.100.162
192.168.100.163:6379> auth q1w2e3r4ys@123
192.168.100.162:6379> set aaa xxx
(error) READONLY You can't write against a read only replica.
192.168.100.162:6379> get aaa
"111"
----查看slave2 数据----
root@redis-server3:~# redis-cli -h 192.168.100.163
192.168.100.163:6379> auth q1w2e3r4ys@123
OK
192.168.100.163:6379> set aaa xxx
(error) READONLY You can't write against a read only replica.
192.168.100.163:6379> get aaa
"111" root@ubuntu20:~# tail -f /apps/redis/logs/redis_6379.log
190032:C 11 Sep 2023 08:08:00.093 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB
187211:M 11 Sep 2023 08:08:00.093 * Diskless rdb transfer, done reading from pipe, 1 replicas still up.
187211:M 11 Sep 2023 08:08:00.098 * Background RDB transfer terminated with success
187211:M 11 Sep 2023 08:08:00.099 * Streamed RDB transfer with replica 192.168.100.162:6379 succeeded (socket). Waiting for REPLCONF ACK from replica to enable streaming
187211:M 11 Sep 2023 08:08:00.099 * Synchronization with replica 192.168.100.162:6379 succeeded
187211:M 11 Sep 2023 08:40:18.022 * 1 changes in 3600 seconds. Saving...
187211:M 11 Sep 2023 08:40:18.024 * Background saving started by pid 190870
190870:C 11 Sep 2023 08:40:18.069 * DB saved on disk
190870:C 11 Sep 2023 08:40:18.072 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB
187211:M 11 Sep 2023 08:40:18.125 * Background saving terminated with successroot@redis-s2:~# redis-cli -h 192.168.100.162 -a q1w2e3r4ys@123
192.168.100.162:6379> SLAVEOF no one
OKroot@redis-s2:~# redis-cli -h 192.168.100.162 -a q1w2e3r4ys@123
192.168.100.162:6379> SLAVEOF 192.168.100.161 6379
OK
192.168.100.162:6379> CONFIG SET masterauth q1w2e3r4ys@123
OKroot@redis-s2:~# tail -f -n 200 /apps/redis/logs/redis_6379.log
70122:S 04 Sep 2023 12:41:12.094 # MASTER aborted replication with an error: NOAUTH Authentication required.
70122:S 04 Sep 2023 12:41:12.095 * Reconnecting to MASTER 172.31.7.201:6379 after failure
70122:S 04 Sep 2023 12:41:12.095 * MASTER <-> REPLICA sync started
70122:S 04 Sep 2023 12:41:12.095 * Non blocking connect for SYNC fired the event.
70122:S 04 Sep 2023 12:41:12.096 * Master replied to PING, replication
192.168.100.162:6379> info Replication
# Replication
role:slave
master_host:192.168.100.162
master_port:6379
master_link_status:up #与master的链接是up的
master_last_io_seconds_ago:2 #最近⼀次与master通信已经过去多少秒。
master_sync_in_progress:0 #是否正在与master通信。
slave_read_repl_offset:4579393
slave_repl_offset:4579393 #当前同步的偏移量。
slave_priority:100 #slave优先级
slave_read_only:1 #slave只读
replica_announced:1 #通过slave节点
connected_slaves:0 #slave的slave
master_failover_state:no-failover
master_replid:4a334697d807a6ff1e19b936ae60a399de4bbecb #master的ID
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:4579393
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:536870912
repl_backlog_first_byte_offset:4578721
repl_backlog_histlen:67192.168.100.161:6379> info Replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.100.162,port=6379,state=online,offset=4579365,lag=1
master_failover_state:no-failover
master_replid:4a334697d807a6ff1e19b936ae60a399de4bbecb #指向⾃⼰
master_replid2:0000000000000000000000000000000000000000
1.1.1.4:主从复制过程:
Redis主从同步可以让从服务器从主服务器备份数据,主从复制分为全量同步和增量同步,⾸次同步是全量同步,⽽且从服务器还可与有从服务器,redis的主从同步是⾮阻塞的
master_repl_offset:4579365
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:536870912
repl_backlog_first_byte_offset:2
repl_backlog_histlen:4579364----slave设置了只读后不能写⼊数据,否则报错如下:----
192.168.100.162:6379> SET key111 value111
(error) READONLY You can't write against a read only replica.root@redis-s2:~# redis-cli -h 192.168.100.162 -a q1w2e3r4ys@123
192.168.100.162:6379> SLAVEOF no one
OKroot@redis-s2:~# tail -f -n 200 /apps/redis/logs/redis_6379.log
70122:M 04 Sep 2023 12:56:54.502 * Connection with master lost.
70122:M 04 Sep 2023 12:56:54.502 * Caching the disconnected master state.
70122:M 04 Sep 2023 12:56:54.502 * Discarding previously cached master state.
70122:M 04 Sep 2023 12:56:54.502 * Setting secondary replication ID to
4a334697d807a6ff1e19b936ae60a399de4bbecb, valid up to offset: 4580108. New replication ID is 7b5da4b330a006d3ad62021666fd0e5580ee7209
70122:M 04 Sep 2023 12:56:54.502 * MASTER MODE enabled (user request from 'id=9 addr=172.31.7.202:53456 laddr=172.31.7.202:6379 fd=9 name= age=9 idle=0 flags=N db=0
sub=0 psub=0 ssub=0 multi=-1 qbuf=34 qbuf-free=20440 argv-mem=12 multi-mem=0 rbs=1024 rbp=0 obl=0 oll=0 omem=0 tot-mem=22436 events=r cmd=slaveof user=default redir=-1
resp=2 lib-name= lib-ver=')192.168.100.162:6379> SLAVEOF no one
OK
192.168.100.162:6379> SET key111 value111
OK
192.168.100.162:6379> get key111
"value111"----源码包里面有个sentinel.conf文件----
root@redis-server1:~/redis-7.2.0# ll /root/redis-7.2.0/
----创建哨兵数据目录----
root@redis-server1:~# mkdir -p /data/sentinel
root@redis-server2:~# mkdir -p /data/sentinel
root@redis-server3:~# mkdir -p /data/sentinel
root@redis-server1:~# cp /root/redis-7.2.0/sentinel.conf /data/sentinel/
root@redis-server1:~# vim /data/sentinel/sentinel.conf
----去注释查看----
root@redis-server1:~# cat /data/sentinel/sentinel.conf | grep -v "#" | grep -v "^$"
protected-mode no
port 26379
daemonize yes
pidfile /var/run/redis-sentinel.pid
loglevel notice
logfile "sentinel_26379.log"
dir "/data/sentinel"
dir /data/sentinel
sentinel monitor mymaster 192.168.100.161 6379 2
sentinel auth-pass mymaster q1w2e3r4ys@123
sentinel down-after-milliseconds mymaster 10000
acllog-max-len 128
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
SENTINEL resolve-hostnames no
SENTINEL announce-hostnames no
SENTINEL master-reboot-down-after-period mymaster 0
root@redis-server1:~# scp /data/sentinel/sentinel.conf 192.168.100.162:/data/sentinel/sentinel.conf
root@redis-server1:~# scp /data/sentinel/sentinel.conf 192.168.100.163:/data/sentinel/sentinel.confroot@redis-server1:~# tail -f /data/sentinel/sentinel_26379.log
219702:X 12 Sep 2023 03:18:22.163 * Sentinel ID is 59b77db90de47e9aca877a4f299d20a40deaef16
219702:X 12 Sep 2023 03:18:22.163 # +monitor master mymaster 192.168.100.161 6379 quorum 2
219910:X 12 Sep 2023 03:26:09.278 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
219910:X 12 Sep 2023 03:26:09.278 * Redis version=7.2.0, bits=64, commit=00000000, modified=0, pid=219910, just started
219910:X 12 Sep 2023 03:26:09.278 * Configuration loaded
219910:X 12 Sep 2023 03:26:09.281 * Increased maximum number of open files to 10032 (it was originally set to 1024).
219910:X 12 Sep 2023 03:26:09.281 * monotonic clock: POSIX clock_gettime
219910:X 12 Sep 2023 03:26:09.283 * Running mode=sentinel, port=26379.
219910:X 12 Sep 2023 03:26:09.285 * Sentinel ID is 59b77db90de47e9aca877a4f299d20a40deaef16
219910:X 12 Sep 2023 03:26:09.285 # +monitor master mymaster 192.168.100.161 6379 quorum 2
root@redis-server2:/data/sentinel# tail -f /data/sentinel/sentinel_26379.log
214687:X 12 Sep 2023 03:26:18.613 * +sentinel-address-switch master mymaster 192.168.100.161 6379 ip 192.168.100.161 port 26379 for 59b77db90de47e9aca877a4f299d20a40deaef16
214687:X 12 Sep 2023 03:26:18.618 * Sentinel new configuration saved on disk
214687:X 12 Sep 2023 03:26:19.247 * +sentinel-address-switch master mymaster 192.168.100.161 6379 ip 192.168.100.163 port 26379 for 59b77db90de47e9aca877a4f299d20a40deaef16
214687:X 12 Sep 2023 03:26:19.276 * Sentinel new configuration saved on disk
214687:X 12 Sep 2023 03:26:20.045 * +sentinel-address-switch master mymaster 192.168.100.161 6379 ip 192.168.100.162 port 26379 for 59b77db90de47e9aca877a4f299d20a40deaef16
214687:X 12 Sep 2023 03:26:20.127 * Sentinel new configuration saved on disk
root@redis-server3:/data/sentinel# tail -f /data/sentinel/sentinel_26379.log
213400:X 12 Sep 2023 03:28:14.662 * +sentinel-address-switch master mymaster 192.168.100.161 6379 ip 192.168.100.163 port 26379 for 59b77db90de47e9aca877a4f299d20a40deaef16
213400:X 12 Sep 2023 03:28:14.672 * Sentinel new configuration saved on disk
213400:X 12 Sep 2023 03:28:15.011 * +sentinel-address-switch master mymaster 192.168.100.161 6379 ip 192.168.100.161 port 26379 for 59b77db90de47e9aca877a4f299d20a40deaef16
213400:X 12 Sep 2023 03:28:15.016 * Sentinel new configuration saved on disk
213400:X 12 Sep 2023 03:28:16.606 * +sentinel-address-switch master mymaster 192.168.100.161 6379 ip 192.168.100.162 port 26379 for 59b77db90de47e9aca877a4f299d20a40deaef16
213400:X 12 Sep 2023 03:28:16.611 * Sentinel new configuration saved on diskroot@redis-server1:~# redis-cli -h 192.168.100.161 -p 26379
192.168.100.161:26379> info
....
#与哨兵相关的信息,尤其是最后⼀⾏,涉及到master IP是多少、有⼏个slave、有⼏个sentinels、必须是符合全 部服务器数量的
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_tilt_since_seconds:-1
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.100.161:6379,slaves=2,sentinels=3 ----master写入数据----
root@redis-server1:~# redis-cli -h 192.168.100.161 -a q1w2e3r4ys@123
192.168.100.161:6379> set aaa 111
OK
192.168.100.161:6379> get aaa
"111"
----slave验证状态及数据----
root@redis-server2:~# redis-cli -h 192.168.100.162 -a q1w2e3r4ys@123
192.168.100.162:6379> get aaa
"111"
192.168.100.162:6379> info Replication
# Replication
role:slave
master_host:192.168.100.161
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
....
root@redis-server3:/data/sentinel# redis-cli -h 192.168.100.163 -a q1w2e3r4ys@123
192.168.100.163:6379> get aaa
"111"
192.168.100.163:6379> info Replication
# Replication
role:slave
master_host:192.168.100.161
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
....----slave 192.168.100.162已经提升为master⻆⾊----
192.168.100.162:6379> info Replication
# Replication
role:master #角色为master
connected_slaves:1
slave0:ip=192.168.100.163,port=6379,state=online,offset=568715,lag=0
master_failover_state:no-failover
master_replid:d3e9a41f0954ead87470db8afca23f7c5bb96157
master_replid2:3636a0eccdfed789c31a09f72c8c6ea1112c5f19
master_repl_offset:568715
second_repl_offset:554240
repl_backlog_active:1
repl_backlog_size:536870912
repl_backlog_first_byte_offset:15
repl_backlog_histlen:568701----master被指向了192.168.100.162----
192.168.100.163:6379> info Replication
# Replication
role:slave
master_host:192.168.100.162 #指向slave1为master
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_read_repl_offset:578921
slave_repl_offset:578921
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:d3e9a41f0954ead87470db8afca23f7c5bb96157
master_replid2:3636a0eccdfed789c31a09f72c8c6ea1112c5f19
master_repl_offset:578921
second_repl_offset:554240
repl_backlog_active:1
repl_backlog_size:536870912
repl_backlog_first_byte_offset:91825
repl_backlog_histlen:487097root@redis-server1:~# tail -f /data/sentinel/sentinel_26379.log
219910:X 12 Sep 2023 03:45:02.586 * +failover-state-wait-promotion slave 192.168.100.162:6379 192.168.100.162 6379 @ mymaster 192.168.100.161 6379
219910:X 12 Sep 2023 03:45:02.656 * +sentinel-invalid-addr sentinel 9d2140ff21a50cd869a4ab024fd5c308c42a4dc9 192.168.100.162 26379 @ mymaster 192.168.100.161 6379
219910:X 12 Sep 2023 03:45:02.656 * +sentinel sentinel 59b77db90de47e9aca877a4f299d20a40deaef16 192.168.100.162 26379 @ mymaster 192.168.100.161 6379
219910:X 12 Sep 2023 03:45:02.704 * Sentinel new configuration saved on disk
219910:X 12 Sep 2023 03:45:02.704 # +config-update-from sentinel 59b77db90de47e9aca877a4f299d20a40deaef16 192.168.100.162 26379 @ mymaster 192.168.100.161 6379
219910:X 12 Sep 2023 03:45:02.704 # +switch-master mymaster 192.168.100.161 6379 192.168.100.162 6379
219910:X 12 Sep 2023 03:45:02.704 * +slave slave 192.168.100.163:6379 192.168.100.163 6379 @ mymaster 192.168.100.162 6379
219910:X 12 Sep 2023 03:45:02.704 * +slave slave 192.168.100.161:6379 192.168.100.161 6379 @ mymaster 192.168.100.162 6379
219910:X 12 Sep 2023 03:45:02.735 * Sentinel new configuration saved on disk
219910:X 12 Sep 2023 03:45:12.712 # +sdown slave 192.168.100.161:6379 192.168.100.161 6379 @ mymaster 192.168.100.162 6379root@redis-server2:~# tail -f /data/sentinel/sentinel_26379.log
214687:X 12 Sep 2023 03:45:01.628 # +new-epoch 2
214687:X 12 Sep 2023 03:45:01.636 * Sentinel new configuration saved on disk
214687:X 12 Sep 2023 03:45:01.636 # +vote-for-leader 59b77db90de47e9aca877a4f299d20a40deaef16 2
214687:X 12 Sep 2023 03:45:02.106 * +sentinel-address-switch master mymaster 192.168.100.161 6379 ip 192.168.100.162 port 26379 for 59b77db90de47e9aca877a4f299d20a40deaef16
214687:X 12 Sep 2023 03:45:02.112 * Sentinel new configuration saved on disk
214687:X 12 Sep 2023 03:45:02.208 * 9d2140ff21a50cd869a4ab024fd5c308c42a4dc9 voted for 59b77db90de47e9aca877a4f299d20a40deaef16 2
214687:X 12 Sep 2023 03:45:02.208 * 7cfc823a557bbf763422ef9b3ac751c9e95eb2ab voted for 59b77db90de47e9aca877a4f299d20a40deaef16 2
214687:X 12 Sep 2023 03:45:02.420 * +sentinel-address-switch master mymaster 192.168.100.161 6379 ip 192.168.100.161 port 26379 for 59b77db90de47e9aca877a4f299d20a40deaef16
214687:X 12 Sep 2023 03:45:02.471 * Sentinel new configuration saved on disk
214687:X 12 Sep 2023 03:45:02.552 * Sentinel new configuration saved on disk
214687:X 12 Sep 2023 03:45:02.552 # +promoted-slave slave 192.168.100.162:6379 192.168.100.162 6379 @ mymaster 192.168.100.161 6379
214687:X 12 Sep 2023 03:45:02.553 # +failover-state-reconf-slaves master mymaster 192.168.100.161 6379
214687:X 12 Sep 2023 03:45:02.639 * +slave-reconf-sent slave 192.168.100.163:6379 192.168.100.163 6379 @ mymaster 192.168.100.161 6379
214687:X 12 Sep 2023 03:45:02.639 * +sentinel-address-switch master mymaster 192.168.100.161 6379 ip 192.168.100.162 port 26379 for 59b77db90de47e9aca877a4f299d20a40deaef16
214687:X 12 Sep 2023 03:45:02.724 * Sentinel new configuration saved on disk
214687:X 12 Sep 2023 03:45:03.136 * +slave-reconf-inprog slave 192.168.100.163:6379 192.168.100.163 6379 @ mymaster 192.168.100.161 6379
214687:X 12 Sep 2023 03:45:03.136 * +slave-reconf-done slave 192.168.100.163:6379 192.168.100.163 6379 @ mymaster 192.168.100.161 6379
214687:X 12 Sep 2023 03:45:03.188 # +failover-end master mymaster 192.168.100.161 6379
214687:X 12 Sep 2023 03:45:03.188 # +switch-master mymaster 192.168.100.161 6379 192.168.100.162 6379
214687:X 12 Sep 2023 03:45:03.188 * +slave slave 192.168.100.163:6379 192.168.100.163 6379 @ mymaster 192.168.100.162 6379
214687:X 12 Sep 2023 03:45:03.188 * +slave slave 192.168.100.161:6379 192.168.100.161 6379 @ mymaster 192.168.100.162 6379root@redis-server3:~# tail -f /data/sentinel/sentinel_26379.log
213400:X 12 Sep 2023 03:45:01.197 # +new-epoch 1
213400:X 12 Sep 2023 03:45:01.203 * Sentinel new configuration saved on disk
213400:X 12 Sep 2023 03:45:01.203 # +vote-for-leader 59b77db90de47e9aca877a4f299d20a40deaef16 1
213400:X 12 Sep 2023 03:45:01.497 # +sdown master mymaster 192.168.100.161 6379
213400:X 12 Sep 2023 03:45:01.599 # +odown master mymaster 192.168.100.161 6379 #quorum 3/2
213400:X 12 Sep 2023 03:45:01.599 # +new-epoch 2
213400:X 12 Sep 2023 03:45:01.600 # +try-failover master mymaster 192.168.100.161 6379
213400:X 12 Sep 2023 03:45:01.612 * Sentinel new configuration saved on disk
213400:X 12 Sep 2023 03:45:01.613 # +vote-for-leader 59b77db90de47e9aca877a4f299d20a40deaef16 2
213400:X 12 Sep 2023 03:45:01.613 * 7cfc823a557bbf763422ef9b3ac751c9e95eb2ab voted for 59b77db90de47e9aca877a4f299d20a40deaef16 2
213400:X 12 Sep 2023 03:45:01.613 * 59b77db90de47e9aca877a4f299d20a40deaef16 voted for 59b77db90de47e9aca877a4f299d20a40deaef16 2
213400:X 12 Sep 2023 03:45:01.635 * 9d2140ff21a50cd869a4ab024fd5c308c42a4dc9 voted for 59b77db90de47e9aca877a4f299d20a40deaef16 2
213400:X 12 Sep 2023 03:45:01.666 # +elected-leader master mymaster 192.168.100.161 6379
213400:X 12 Sep 2023 03:45:01.666 # +failover-state-select-slave master mymaster 192.168.100.161 6379
213400:X 12 Sep 2023 03:45:01.755 * +sentinel-address-switch master mymaster 192.168.100.161 6379 ip 192.168.100.161 port 26379 for 59b77db90de47e9aca877a4f299d20a40deaef16
213400:X 12 Sep 2023 03:45:01.775 * Sentinel new configuration saved on disk
213400:X 12 Sep 2023 03:45:01.775 # +selected-slave slave 192.168.100.162:6379 192.168.100.162 6379 @ mymaster 192.168.100.161 6379
213400:X 12 Sep 2023 03:45:01.775 * +failover-state-send-slaveof-noone slave 192.168.100.162:6379 192.168.100.162 6379 @ mymaster 192.168.100.161 6379
213400:X 12 Sep 2023 03:45:01.834 * +failover-state-wait-promotion slave 192.168.100.162:6379 192.168.100.162 6379 @ mymaster 192.168.100.161 6379
213400:X 12 Sep 2023 03:45:02.469 * +sentinel-address-switch master mymaster 192.168.100.161 6379 ip 192.168.100.162 port 26379 for 59b77db90de47e9aca877a4f299d20a40deaef16
213400:X 12 Sep 2023 03:45:02.479 * Sentinel new configuration saved on disk
213400:X 12 Sep 2023 03:45:02.637 # +config-update-from sentinel 59b77db90de47e9aca877a4f299d20a40deaef16 192.168.100.162 26379 @ mymaster 192.168.100.161 6379
213400:X 12 Sep 2023 03:45:02.637 # +switch-master mymaster 192.168.100.161 6379 192.168.100.162 6379
213400:X 12 Sep 2023 03:45:02.637 * +slave slave 192.168.100.163:6379 192.168.100.163 6379 @ mymaster 192.168.100.162 6379
213400:X 12 Sep 2023 03:45:02.637 * +slave slave 192.168.100.161:6379 192.168.100.161 6379 @ mymaster 192.168.100.162 6379----日志可以看到master切换为192.168.100.162----
root@redis-server2:~# tail -f /apps/redis/logs/redis_6379.log
184245:S 12 Sep 2023 03:45:01.350 * MASTER <-> REPLICA sync started
184245:S 12 Sep 2023 03:45:01.351 # Error condition on socket for SYNC: Connection refused
184245:M 12 Sep 2023 03:45:01.437 * Discarding previously cached master state.
184245:M 12 Sep 2023 03:45:01.437 * Setting secondary replication ID to 3636a0eccdfed789c31a09f72c8c6ea1112c5f19, valid up to offset: 554240. New replication ID is d3e9a41f0954ead87470db8afca23f7c5bb96157
184245:M 12 Sep 2023 03:45:01.437 * MASTER MODE enabled (user request from 'id=20 addr=192.168.100.162:46186 laddr=192.168.100.162:6379 fd=13 name=sentinel-59b77db9-cmd age=1130 idle=0 flags=x db=0 sub=0 psub=0 ssub=0 multi=4 qbuf=188 qbuf-free=20286 argv-mem=4 multi-mem=169 rbs=8192 rbp=5951 obl=45 oll=0 omem=0 tot-mem=29861 events=r cmd=exec user=default redir=-1 resp=2 lib-name= lib-ver=')
184245:M 12 Sep 2023 03:45:01.464 * CONFIG REWRITE executed with success.
184245:M 12 Sep 2023 03:45:01.888 * CONFIG REWRITE executed with success.
184245:M 12 Sep 2023 03:45:02.584 * CONFIG REWRITE executed with success.
184245:M 12 Sep 2023 03:45:02.717 * Replica 192.168.100.163:6379 asks for synchronization
184245:M 12 Sep 2023 03:45:02.724 * Partial resynchronization request from 192.168.100.163:6379 accepted. Sending 168 bytes of backlog starting from offset 554240.----redis-server3为slave节点,显示增量同步成功----
root@redis-server3:~# tail -f /apps/redis/logs/redis_6379.log
211502:S 12 Sep 2023 03:45:02.610 * MASTER <-> REPLICA sync started
211502:S 12 Sep 2023 03:45:02.610 # Error condition on socket for SYNC: Connection refused
211502:S 12 Sep 2023 03:45:02.637 * Connecting to MASTER 192.168.100.162:6379
211502:S 12 Sep 2023 03:45:02.637 * MASTER <-> REPLICA sync started
211502:S 12 Sep 2023 03:45:02.637 * REPLICAOF 192.168.100.162:6379 enabled (user request from 'id=19 addr=192.168.100.162:56814 laddr=192.168.100.163:6379 fd=13 name=sentinel-59b77db9-cmd age=1131 idle=0 flags=x db=0 sub=0 psub=0 ssub=0 multi=4 qbuf=348 qbuf-free=20126 argv-mem=4 multi-mem=183 rbs=8192 rbp=5884 obl=45 oll=0 omem=0 tot-mem=29875 events=r cmd=exec user=default redir=-1 resp=2 lib-name= lib-ver=')
211502:S 12 Sep 2023 03:45:02.714 * CONFIG REWRITE executed with success.
211502:S 12 Sep 2023 03:45:02.714 * Non blocking connect for SYNC fired the event.
211502:S 12 Sep 2023 03:45:02.715 * Master replied to PING, replication can continue...
211502:S 12 Sep 2023 03:45:02.715 * Trying a partial resynchronization (request 3636a0eccdfed789c31a09f72c8c6ea1112c5f19:554240).
211502:S 12 Sep 2023 03:45:02.722 * Successful partial resynchronization with master. #增量同步成功
211502:S 12 Sep 2023 03:45:02.722 * Master replication ID changed to d3e9a41f0954ead87470db8afca23f7c5bb96157
211502:S 12 Sep 2023 03:45:02.722 * MASTER <-> REPLICA sync: Master accepted a Partial Resynchronization.root@redis-server1:~# vi /apps/redis/etc/redis.conf
....
replicaof 192.168.100.161 6379
masterauth q1w2e3r4ys@123
# replicaof <masterip> <masterport>
....
root@redis-server1:~# systemctl restart redis.service
----查看当前状态----
root@redis-server1:~# redis-cli -h 192.168.100.161 -a q1w2e3r4ys@123
192.168.100.161:6379> info Replication
# Replication
role:slave
master_host:192.168.100.162 #master已经指向redis-server2
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
....root@redis-server2:~# redis-cli -h 192.168.100.162 -a q1w2e3r4ys@123
192.168.100.162:6379> info Replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.100.163,port=6379,state=online,offset=2705417,lag=0
slave1:ip=192.168.100.161,port=6379,state=online,offset=2705417,lag=0
master_failover_state:no-failover
....[root@s1 ~]# yum install ruby rubygems -y
[root@s1 ~]# find / -name redis-trib.rb
/usr/local/src/redis-4.0.14/src/redis-trib.rb
[root@s1 ~]# cp /usr/local/src/redis-4.0.14/src/redis-trib.rb /usr/bin/
[root@s1 src]# gem install redis
Fetching: redis-4.1.2.gem (100%)
ERROR: Error installing redis:
redis requires Ruby version >= 2.3.0.[root@s1 src]# yum remove ruby rubygems -y
[root@s1 src]# wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.5.tar.gz
[root@s1 src]# tar xf ruby-2.5.5.tar.gz
[root@s1 src]# cd ruby-2.5.5
[root@s1 ruby-2.5.5]# ./configure
[root@s1 ruby-2.5.5]# make -j 2
[root@s1 ruby-2.5.5]# make install
[root@s1 ruby-2.5.5]# gem install redis #https://rubygems.org/gems/redis, # gem install -l redis-3.3.0.gem如果有之前的操作导致Redis 集群创建报错,则执⾏清空数据和集群命令:
127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> cluster reset
OKroot@redis-server1:~# redis-cli --cluster help
Cluster Manager Commands:
create host1:port1 ... hostN:portN #创建集群并执⾏节点数
--cluster-replicas <arg> #指定master的副本数量
check <host:port> or <host> <port> - separated by either colon or space #节点地址及IP格式
--cluster-search-multiple-owners #检查是否有槽位同时被分配给了多个节点
info <host:port> or <host> <port> - separated by either colon or space #查看集群主机信息
fix <host:port> or <host> <port> - separated by either colon or space #修复集群
--cluster-search-multiple-owners #修复槽位被同时分配过多个节点的问题
--cluster-fix-with-unreachable-masters #修复不可达的主机
reshard <host:port> or <host> <port> - separated by either colon or space #⼿动热迁移集群指定主机的slots数据到新的⽬的主机(⽤于特定主机维护、下线、更换主机)
--cluster-from <arg>
--cluster-to <arg>
--cluster-slots <arg>
--cluster-yes
--cluster-timeout <arg>
--cluster-pipeline <arg>
--cluster-replace
rebalance <host:port> or <host> <port> - separated by either colon or space #如果各master的slot槽位差异很⼤(No rebalancing needed! All nodes are within the 2.00%threshold),可以使⽤rebalance实现⾃动平衡集群中各主机的slot数量
--cluster-weight <node1=w1...nodeN=wN>
--cluster-use-empty-masters
--cluster-timeout <arg>
--cluster-simulate
--cluster-pipeline <arg>
--cluster-threshold <arg>
--cluster-replace
add-node new_host:new_port existing_host:existing_port #添加节点到集群
--cluster-slave
--cluster-master-id <arg>
del-node host:port node_id #从集群删除主机
call host:port command arg arg .. arg #在集群上的所有节点上执⾏命令
--cluster-only-masters
--cluster-only-replicas
set-timeout host:port milliseconds #设置节点的超时时间
import host:port #将外部redis服务器的数据导⼊到当前集群
--cluster-from <arg>
--cluster-from-user <arg>
--cluster-from-pass <arg>
--cluster-from-askpass
--cluster-copy
--cluster-replace
backup host:port backup_directory #备份集群数据
help
For check, fix, reshard, del-node, set-timeout, info, rebalance, call, import, backup you can specify the host and port of any working node in the cluster.
#check, fix, reshard, del-node, set-timeout, info, rebalance, call, import, backup,可在 任意⼀台节点执⾏
Cluster Manager Options:
--cluster-yes Automatic yes to cluster commands prompts #交互式的时候⾃动应答 yesroot@redis-server1:~# redis-cli
127.0.0.1:6379> auth q1w2e3r4ys@123
OK
127.0.0.1:6379> info cluster
# Cluster
cluster_enabled:1root@redis-server1:~# redis-cli -a q1w2e3r4ys@123 --cluster create 192.168.100.161:6379 192.168.100.162:6379 192.168.100.163:6379 192.168.100.164:6379 192.168.100.165:6379 192.168.100.166:6379 --cluster-replicas 1Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460 #⾃动为master分配槽位
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.100.165:6379 to 192.168.100.161:6379 #自动将192.168.100.165:6379添加为192.168.100.161:6379的slave
Adding replica 192.168.100.166:6379 to 192.168.100.162:6379 #自动将192.168.100.166:6379添加为192.168.100.162:6379的slave
----可以看到slave并没有连接上来----
root@redis-server1:~# redis-cli -h 192.168.100.161 -a q1w2e3r4ys@123
192.168.100.161:6379> INFO Replication
# Replication
role:master
connected_slaves:0 #连接的slave
master_failover_state:no-failover
master_replid:dc6867acc3e6b76c6c405432eeef60dc56d78493
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:536870912
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0----slave节点修改配置文件----
root@redis-server4:~# vi /apps/redis/etc/redis.con
masterauth q1w2e3r4ys@123
root@redis-server5:~# vi /apps/redis/etc/redis.con
masterauth q1w2e3r4ys@123
root@redis-server6:~# vi /apps/redis/etc/redis.con
masterauth q1w2e3r4ys@123
----master节点为了避免重启导致主从重新分配,用命令行修改,同时修改配置文件----
root@redis-server1:~# redis-cli -a q1w2e3r4ys@123
127.0.0.1:6379> CONFIG SET masterauth q1w2e3r4ys@123
OK
root@redis-server2:~# redis-cli -a q1w2e3r4ys@123
127.0.0.1:6379> CONFIG SET masterauth q1w2e3r4ys@123
OK
root@redis-server3:~# redis-cli -a q1w2e3r4ys@123
127.0.0.1:6379> CONFIG SET masterauth q1w2e3r4ys@123
OK----重启所有slave节点----
root@redis-server4:~# systemctl restart redis.service
root@redis-server5:~# systemctl restart redis.service
root@redis-server6:~# systemctl restart redis.service----slave已连接----
root@redis-server1:~# redis-cli -h 192.168.100.161
192.168.100.161:6379> auth q1w2e3r4ys@123
OK
192.168.100.161:6379> INFO Replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.100.165,port=6379,state=online,offset=700,lag=0
master_failover_state:no-failover
master_replid:8f3424563a608c0bc114a661c9333f2ecea0e260
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:700
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:536870912
repl_backlog_first_byte_offset:1
repl_backlog_histlen:700root@redis-server4:~# redis-cli -h 192.168.100.164
192.168.100.164:6379> auth q1w2e3r4ys@123
OK
192.168.100.164:6379> info Replication
# Replication
role:slave
master_host:192.168.100.163
master_port:6379
master_link_status:up
master_last_io_seconds_ago:2
....root@redis-server1:~# redis-cli -h 192.168.100.161 -a q1w2e3r4ys@123
192.168.100.161:6379> set qbn aaa
OK
192.168.100.161:6379> set qbn2 bbb #经过算法计算,当前key不在master1槽位,无法写入
(error) MOVED 16382 192.168.100.163:6379 #提示槽位在master3
----master3成功写入----
root@redis-server3:~# redis-cli -h 192.168.100.163 -a q1w2e3r4ys@123
192.168.100.163:6379> set qbn2 bbb
OK
192.168.100.163:6379> get qbn2
"bbb"----安装python3以及redis-py-cluster模块----
root@redis-server8:~# apt install python3-pip
root@redis-server8:~# pip3 --version
pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8)
root@redis-server8:~# mkdir ~/.pip
root@redis-server8:~# vim ~/.pip/pip.conf
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
root@redis-server8:~# pip3 install redis-py-cluster----编写python脚本----
root@redis-server8:~# vim redis-cluster-client.py
#!/usr/bin/env python
#coding:utf-8
#Author:Zhang ShiJie
#python 2.7/3.8
#pip install redis-py-cluster
import sys
from rediscluster import RedisCluster
def init_redis():
startup_nodes = [
{'host': '192.168.100.161', 'port': 6379},
{'host': '192.168.100.162', 'port': 6379},
{'host': '192.168.100.163', 'port': 6379},
{'host': '192.168.100.164', 'port': 6379},
{'host': '192.168.100.165', 'port': 6379},
{'host': '192.168.100.166', 'port': 6379},
]
try:
conn = RedisCluster(startup_nodes=startup_nodes,
# 有密码要加上密码
decode_responses=True, password='q1w2e3r4ys@123')
print('OK! 连接成功!!!!!1', conn)
#conn.set("key-cluster","value-cluster")
for i in range(100):
conn.set("key%s" % i, "value%s" % i)
# time.sleep(0.1)
data = conn.get("key%s" % i)
print(data)
#return conn
except Exception as e:
print("connect error ", str(e))
sys.exit(1)
init_redis()----执行py脚本----
root@redis-server8:~# python3 redis-cluster-client.py
OK! 连接成功!!!!!1 RedisCluster<192.168.100.161:6379, 192.168.100.162:6379, 192.168.100.163:6379, 192.168.100.164:6379, 192.168.100.165:6379, 192.168.100.166:6379>
value0
value1
value2
value3
value4
value5
....----对应槽位的key在master可读写----
root@redis-server1:~# redis-cli -h 192.168.100.164 -a q1w2e3r4ys@123
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.100.164:6379> keys *
1) "key67"
2) "key41"
3) "key30"
4) "key23"
....
192.168.100.161:6379> get key21
"value21"
192.168.100.161:6379> get key22
(error) MOVED 9163 192.168.100.162:6379----slave只能存数据,不能读,读需要在对应槽位的master节点----
root@redis-server4:~# redis-cli -h 192.168.100.164 -a q1w2e3r4ys@123
192.168.100.164:6379> keys *
1) "key67"
2) "key41"
3) "key30"
....
192.168.100.164:6379> get key67
(error) MOVED 16298 192.168.100.163:6379
192.168.100.164:6379> get key41
(error) MOVED 14606 192.168.100.163:6379root@redis-server4:~# redis-cli -a q1w2e3r4ys@123 --no-auth-warning --cluster info 192.168.100.161:6379
192.168.100.161:6379 (d80786f3...) -> 33 keys | 5461 slots | 1 slaves.
192.168.100.163:6379 (ab91069f...) -> 37 keys | 5461 slots | 1 slaves.
192.168.100.162:6379 (7e0d980b...) -> 32 keys | 5462 slots | 1 slaves.
[OK] 102 keys in 3 masters.
0.01 keys per slot on average.root@redis-server4:~# redis-cli -a q1w2e3r4ys@123 --no-auth-warning --cluster check 192.168.100.161:6379
192.168.100.161:6379 (d80786f3...) -> 33 keys | 5461 slots | 1 slaves.
192.168.100.163:6379 (ab91069f...) -> 37 keys | 5461 slots | 1 slaves.
192.168.100.162:6379 (7e0d980b...) -> 32 keys | 5462 slots | 1 slaves.
[OK] 102 keys in 3 masters.
0.01 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.100.161:6379)
M: d80786f363c7e2c8664e69b4fab47cbd7417dbe4 192.168.100.161:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: d18c35eaaa7db9d0f9e0223ccf95aa834ab9ca4e 192.168.100.166:6379
slots: (0 slots) slave
replicates 7e0d980b0f2d067ec797a9b76cecde50f532844a
S: 1466ec80241f619bf11c729c166c8dadbce0df74 192.168.100.165:6379
slots: (0 slots) slave
replicates d80786f363c7e2c8664e69b4fab47cbd7417dbe4
S: 4b5028a691c29d4d7964b02dcc07e30c7dc419fe 192.168.100.164:6379
slots: (0 slots) slave
replicates ab91069f9d0a4773d857119c6cc3bd29db6c0552
M: ab91069f9d0a4773d857119c6cc3bd29db6c0552 192.168.100.163:6379
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
M: 7e0d980b0f2d067ec797a9b76cecde50f532844a 192.168.100.162:6379
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.root@redis-server4:~# redis-cli -a q1w2e3r4ys@123 --no-auth-warning --cluster fix 192.168.100.161:6379
192.168.100.161:6379 (d80786f3...) -> 33 keys | 5461 slots | 1 slaves.
192.168.100.163:6379 (ab91069f...) -> 37 keys | 5461 slots | 1 slaves.
192.168.100.162:6379 (7e0d980b...) -> 32 keys | 5462 slots | 1 slaves.
[OK] 102 keys in 3 masters.
0.01 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.100.161:6379)
M: d80786f363c7e2c8664e69b4fab47cbd7417dbe4 192.168.100.161:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: d18c35eaaa7db9d0f9e0223ccf95aa834ab9ca4e 192.168.100.166:6379
slots: (0 slots) slave
replicates 7e0d980b0f2d067ec797a9b76cecde50f532844a
S: 1466ec80241f619bf11c729c166c8dadbce0df74 192.168.100.165:6379
slots: (0 slots) slave
replicates d80786f363c7e2c8664e69b4fab47cbd7417dbe4
S: 4b5028a691c29d4d7964b02dcc07e30c7dc419fe 192.168.100.164:6379
slots: (0 slots) slave
replicates ab91069f9d0a4773d857119c6cc3bd29db6c0552
M: ab91069f9d0a4773d857119c6cc3bd29db6c0552 192.168.100.163:6379
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
M: 7e0d980b0f2d067ec797a9b76cecde50f532844a 192.168.100.162:6379
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.root@redis-server1:~# redis-cli -a q1w2e3r4ys@123 --cluster call 192.168.100.161:6379 dbsize
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Calling dbsize
192.168.100.161:6379: 32
192.168.100.166:6379: 32
192.168.100.165:6379: 32
192.168.100.164:6379: 36
192.168.100.163:6379: 36
192.168.100.162:6379: 32----仅在master执行命令----
root@redis-server1:~# redis-cli -a q1w2e3r4ys@123 --cluster call --cluster-only-masters 192.168.100.161:6379 dbsize --no-auth-warning
>>> Calling dbsize
192.168.100.161:6379: 33
192.168.100.163:6379: 37
192.168.100.162:6379: 32root@redis-server1:~# redis-cli -h 192.168.100.161 -a q1w2e3r4ys@123 -p 6379 --no-auth-warning ping
PONG #服务是否可以正常响应
root@redis-server1:~# redis-cli -h 192.168.100.161 -a q1w2e3r4ys@123 -p 6379 --no-auth-warning info | grep -w "used_memory" | awk -F ':' '{print$2}'
2079896 #已⽤内存字节数
root@redis-server1:~# redis-cli -h 192.168.100.161 -a q1w2e3r4ys@123 -p 6379 --no-auth-warning info | grep -w "connected_clients" | awk -F ':' '{print$2}'
1 #已经连接的客户端数量
root@redis-server1:~# redis-cli -h 192.168.100.161 -a q1w2e3r4ys@123 -p 6379 --no-auth-warning cluster info | grep "cluster_state"
cluster_state:ok #获取集群状态
root@redis-server1:~# redis-cli -h 192.168.100.161 -a q1w2e3r4ys@123 -p 6379 --no-auth-warning cluster info | grep -w "cluster_slots_assigned" | awk -F':' '{print $2}'
16384 #获取已分配的槽位
root@redis-server1:~# redis-cli -h 192.168.100.161 -a q1w2e3r4ys@123 -p 6379 --no-auth-warning cluster info | grep -w "cluster_slots_ok" | awk -F':' '{print $2}'
16384 #获取 状态是ok的槽位
root@redis-server1:~# redis-cli -h 192.168.100.161 -a q1w2e3r4ys@123 -p 6379 --no-auth-warning cluster info | grep -w "cluster_slots_pfail" | awk -F':' '{print $2}'
0 #获取PFAIL状态的槽位数量,PFAIL表示暂时与当前节点通信、但数据可能会恢复
root@redis-server1:~# redis-cli -h 192.168.100.161 -a q1w2e3r4ys@123 -p 6379 --no-auth-warning cluster info | grep -w "cluster_slots_fail" | awk -F':' '{print $2}'
0 #获取已经失败的槽位
root@redis-server1:~# redis-cli -h 192.168.100.161 -a q1w2e3r4ys@123 -p 6379 --no-auth-warning cluster info | grep -w "cluster_size" | awk -F':' '{print $2}'
3 #集群中的主节点数量
root@redis-server1:~# redis-cli -h 192.168.100.161 -a q1w2e3r4ys@123 -p 6379 --no-auth-warning cluster info | grep -w "cluster_known_nodes" | awk -F':' '{print $2}'
6 #集群中的所有节点数
root@redis-server1:~# redis-cli -h 192.168.100.161 -a q1w2e3r4ys@123 -p 6379 --no-auth-warning info | grep -w keyspace_hits | awk -F':' '{print $2}'
32 #当前节点访问数据命中次数
root@redis-server1:~# redis-cli -h 192.168.100.161 -a q1w2e3r4ys@123 -p 6379 --no-auth-warning info | grep -w keyspace_misses | awk -F':' '{print $2}'
2 #由于集群没有此数据,当前节点的未命中次数----监控策略-----
节点命中率=keyspace_hits/(keyspace_hits+keyspace_misses)
集群命中率=keyspace_hits(master1 + master2 + master3) /[keyspace_hits(master1 + master2 +master3)+keyspace_misses(master1 + master2 + master3)]root@redis-server1:~# redis-cli -h 192.168.100.161 -a q1w2e3r4ys@123 -p 6379 --no-auth-warning flushall
OK
root@redis-server1:~# redis-cli -h 192.168.100.162 -a q1w2e3r4ys@123 -p 6379 --no-auth-warning flushall
OK
root@redis-server1:~# redis-cli -h 192.168.100.163 -a q1w2e3r4ys@123 -p 6379 --no-auth-warning flushall
OK
root@redis-server1:~# redis-cli -a q1w2e3r4ys@123 --cluster call 192.168.100.161:6379 dbsize --no-auth-warning
>>> Calling dbsize
192.168.100.161:6379: 0
192.168.100.166:6379: 0
192.168.100.165:6379: 0
192.168.100.164:6379: 0
192.168.100.163:6379: 0
192.168.100.162:6379: 0----创建一个自动写数据脚本----
root@redis-server8:~# vi redis-client.sh
#!/bin/bash
#Author: ZhangJie
NUM=`seq 1 100000`
for i in ${NUM};do
redis-cli -h 127.0.0.1 -a q1w2e3r4ys@123 set key-${i} value-${i}
echo "key-${i} value-${i} 写入完成"
done
echo "十万个key写入到Redis完成"----执行脚本,写入数据----
root@redis-server8:~# bash redis-client.sh
....
key-99998 value-99998 写入完成
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
OK
key-99999 value-99999 写入完成
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
OK
key-100000 value-100000 写入完成
十万个key写入到Redis完成root@redis-server8:~# cd /usr/local/src/
root@redis-server8:/usr/local/src# wget https://github.com/tair-opensource/RedisShake/releases/download/v4.0.0/redis-shake-linux-amd64.tar.gz
root@redis-server8:/usr/local/src# tar xvf redis-shake-linux-amd64.tar.gzroot@redis-server8:/usr/local/src# vi shake.toml
function = ""
[sync_reader] #读取数据的配置=源主机
cluster = false
address = "192.168.100.168:6379"
username = "" # keep empty if not using ACL
password = "q1w2e3r4ys@123" # keep empty if no authentication is required
tls = false
[redis_writer] #写数据的配置=⽬的主机
cluster = true #是否是集群模式
address = "192.168.100.161:6379"
username = "" # keep empty if not using ACL
password = "q1w2e3r4ys@123" # keep empty if no authentication is required
tls = false
[advanced]
dir = "data"
ncpu = 0 # runtime.GOMAXPROCS, 0 means use runtime.NumCPU() cpu cores
pprof_port = 0 # pprof port, 0 means disable
status_port = 0 # status port, 0 means disable
# log
log_file = "shake.log"
log_level = "info" # debug, info or warn
log_interval = 5 # in seconds
rdb_restore_command_behavior = "panic" # panic, rewrite or skip
pipeline_count_limit = 1024
target_redis_client_max_querybuf_len = 1024_000_000
target_redis_proto_max_bulk_len = 512_000_000
aws_psync = "" # example: aws_psync = "10.0.0.1:6379@nmfu2sl5osync,10.0.0.1:6379@xhma21xfkssync"root@redis-server8:/usr/local/src# ./redis-shake shake.toml
2023-09-13 08:23:12 INF load config from file: shake.toml
2023-09-13 08:23:12 INF log_level: [info], log_file: [/usr/local/src/data/shake.log]
2023-09-13 08:23:12 INF changed work dir to [/usr/local/src/data]
2023-09-13 08:23:12 INF GOMAXPROCS defaults to the value of runtime.NumCPU [2]
2023-09-13 08:23:12 INF not set pprof port
2023-09-13 08:23:12 INF no function script
2023-09-13 08:23:12 INF create SyncStandaloneReader: 192.168.100.168:6379
2023-09-13 08:23:12 INF redisClusterWriter load cluster nodes. line=d80786f363c7e2c8664e69b4fab47cbd7417dbe4 192.168.100.161:6379@16379 myself,master - 0 1694593390000 1 connected 0-5460
2023-09-13 08:23:12 INF redisClusterWriter load cluster nodes. line=ab91069f9d0a4773d857119c6cc3bd29db6c0552 192.168.100.163:6379@16379 master - 0 1694593391631 3 connected 10923-16383
2023-09-13 08:23:12 INF redisClusterWriter load cluster nodes. line=7e0d980b0f2d067ec797a9b76cecde50f532844a 192.168.100.162:6379@16379 master - 0 1694593389000 2 connected 5461-10922
2023-09-13 08:23:12 INF redisClusterWriter connected to redis cluster successful. addresses=[192.168.100.161:6379 192.168.100.163:6379 192.168.100.162:6379]
2023-09-13 08:23:12 INF create RedisClusterWriter: 192.168.100.161:6379
2023-09-13 08:23:12 INF not set status port
2023-09-13 08:23:12 INF start syncing...
2023-09-13 08:23:17 INF read_count=[100000], read_ops=[868.16], write_count=[100000], write_ops=[869.16], syncing aof, diff=[100000]
2023-09-13 08:23:22 INF read_count=[100000], read_ops=[0.00], write_count=[100000], write_ops=[0.00], syncing aof, diff=[0]
2023-09-13 08:23:27 INF read_count=[100000], read_ops=[0.00], write_count=[100000], write_ops=[0.00], syncing aof, diff=[0]
2023-09-13 08:23:32 INF read_count=[100000], read_ops=[0.00], write_count=[100000], write_ops=[0.00], syncing aof, diff=[0]root@redis-server1:~# redis-cli -a q1w2e3r4ys@123 --cluster call 192.168.100.161:6379 dbsize --no-auth-warning
>>> Calling dbsize
192.168.100.161:6379: 33365
192.168.100.166:6379: 33279
192.168.100.165:6379: 33365
192.168.100.164:6379: 33356
192.168.100.163:6379: 33356
192.168.100.162:6379: 33279----安装docker----
root@ubuntu20:~# cd /usr/local/src/
root@ubuntu20:/usr/local/src# tar xvf runtime-docker24.0.2-containerd1.6.21-binary-install.tar.gz
root@ubuntu20:/usr/local/src# bash runtime-install.sh docker
----创建并运行mysql容器----
root@ubuntu20:~# mkdir -p /data/mysql
root@ubuntu20:~# docker run -d -p 3306:3306 --name mysql-container-test -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD="mypass@123" registry.cn-hangzhou.aliyuncs.com/zhangshijie/mysql:5.7.36
root@ubuntu20:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6c45f0656444 registry.cn-hangzhou.aliyuncs.com/zhangshijie/mysql:5.7.36 "docker-entrypoint.s…" 3 minutes ago Up 2 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql-container-test
root@ubuntu20:~# apt install mysql-client-core-8.0
----初始化数据裤----
root@ubuntu20:~# mysql -u root -h 192.168.100.250 -pmypass@123
mysql> CREATE database test_store; #创建数据库
Query OK, 1 row affected (0.00 sec)
mysql> USE test_store; #切换DB
Database changed
mysql> CREATE table products ( product_id BIGINT PRIMARY KEY AUTO_INCREMENT, product_name VARCHAR(50), price DOUBLE ) Engine = InnoDB; #创建表
Query OK, 0 rows affected (0.14 sec)
mysql> INSERT INTO products(product_name, price) VALUES ('Virtual Private Servers', '5.00'); #插⼊数据
Query OK, 1 row affected (0.03 sec)
mysql> INSERT INTO products(product_name, price) VALUES ('Managed Databases', '15.00');
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO products(product_name, price) VALUES ('Block Storage', '10.00');
Query OK, 1 row affected (0.03 sec)
mysql> INSERT INTO products(product_name, price) VALUES ('Managed Kubernetes', '60.00');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO products(product_name, price) VALUES ('Load Balancer', '10.00');
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM products; #验证数据
+------------+-------------------------+-------+
| product_id | product_name | price |
+------------+-------------------------+-------+
| 1 | Virtual Private Servers | 5 |
| 2 | Managed Databases | 15 |
| 3 | Block Storage | 10 |
| 4 | Managed Kubernetes | 60 |
| 5 | Load Balancer | 10 |
+------------+-------------------------+-------+
5 rows in set (0.00 sec)
mysql> quit
Bye
----安装redis---
root@redis-server8:/usr/local/src# tarx cvf redis-7.2.0-onekey-install.tar.gz
root@redis-server8:/usr/local/src# bash redis-install.shroot@ubuntu20.04:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: focal
root@ubuntu20.04:~# apt update
root@ubuntu20.04:~# apt install apache2 php-fpm libapache2-mod-php php7.4-mysql php7.4-redis
root@ubuntu20.04:/var/www/html# cd /var/www/html/
root@ubuntu20.04:/var/www/html# vi index.php
<?php
phpinfo();
?>root@redis-server7:/var/www/html# cat redis.php
<?php
$redis = new Redis();
$redis->connect('192.168.100.168', 6379); //连接Redis
$redis->auth('q1w2e3r4ys@123'); //密码验证
$redis->select(0);//选择数据库,int类型,⼀般是0-16,选⼀个
$redis->set( "testKey" , "Hello Redis"); //设置测试key
#echo $redis->get("testKey");//输出value
#echo $redis->get("key1");//输出value
?>root@redis-server7:/var/www/html# cat redis-mysql.php
<?php
$redis = new Redis();
$redis->connect('192.168.100.168', 6379);
$redis->auth('q1w2e3r4ys@123');
$key = 'qbn';
if (!$redis->get($key)) {
$source = '未命中缓存:数据来源MySQL Server';
$database_name = 'test_store';
$database_user = 'root';
$database_password = 'mypass@123';
$mysql_host = '192.168.100.250';
$pdo = new PDO('mysql:host=' . $mysql_host . '; dbname=' . $database_name,$database_user, $database_password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT * FROM products";
$stmt = $pdo->prepare($sql);
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$products[] = $row;
}
$redis->set($key, serialize($products));
$redis->expire($key, 60);
} else {
$source = '成功命中缓存:数据来源 Redis Server';
$products = unserialize($redis->get($key));
}
echo $source . ': <br>';
print_r($products);root@redis-server8:/var/www/html# redis-cli -h 192.168.100.168 -a q1w2e3r4ys@123
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.100.168:6379> keys *
1) "testKey"
192.168.100.168:6379> keys *
1) "qbn"
2) "testKey"
192.168.100.168:6379> get qbn
"a:5:{i:0;a:3:{s:10:\"product_id\";s:1:\"1\";s:12:\"product_name\";s:23:\"Virtual Private Servers\";s:5:\"price\";s:1:\"5\";}i:1;a:3:{s:10:\"product_id\";s:1:\"2\";s:12:\
"product_name\";s:17:\"Managed Databases\";s:5:\"price\";s:2:\"15\";}i:2;a:3:{s:10:\"product_id\";s:1:\"3\";s:12:\"product_name\";s:13:\"Block Storage\";s:5:\"price\";s:2:\
"10\";}i:3;a:3:{s:10:\"product_id\";s:1:\"4\";s:12:\"product_name\";s:18:\"Managed Kubernetes\";s:5:\"price\";s:2:\"60\";}i:4;a:3:{s:10:\"product_id\";s:1:\"5\";s:12:\
"product_name\";s:13:\"Load Balancer\";s:5:\"price\";s:2:\"10\";}}"
192.168.100.168:6379> ttl qbn #我们设置了60s的过期时间,所以key只能保存60秒
(integer) 47
192.168.100.168:6379> ttl qbn
(integer) 46
192.168.100.168:6379> ttl qbn
(integer) 44root@redis-server7:~# vi /apps/redis/etc/redis.conf
....
cluster-enabled yes
cluster-config-file nodes-6379.con
masterauth q1w2e3r4ys@123
....
root@redis-server8:~# vi /apps/redis/etc/redis.conf
....
cluster-enabled yes
cluster-config-file nodes-6379.con
masterauth q1w2e3r4ys@123
....
root@redis-server7:~# systemctl restart redis.service
root@redis-server8:~# systemctl restart redis.service----查看使用说明----
root@redis-server7:~# redis-cli --cluster help
add-node new_host:new_port existing_host:existing_port #格式为:新节点:集群已经存在的节点
--cluster-slave
--cluster-master-id <arg>
#添加的新redis节点IP和端⼝,新的node节点加到集群之后默认是master节点,但是没有slots数据,需要重新分配。
----验证数据是否是空的----
root@redis-server8:~# redis-cli -h 192.168.100.167 -a q1w2e3r4ys@123 --no-auth-warning
192.168.100.167:6379> keys *
(empty array)
root@redis-server8:~# redis-cli -h 192.168.100.168 -a q1w2e3r4ys@123 --no-auth-warning
192.168.100.168:6379> keys *
(empty array)
----将节点192.168.100.167:6379 添加到⽬的集群192.168.100.161:6379----
root@redis-server8:~# redis-cli -a q1w2e3r4ys@123 --cluster add-node 192.168.100.167:6379 192.168.100.161:6379
>>> Adding node 192.168.100.167:6379 to cluster 192.168.100.161:6379
>>> Performing Cluster Check (using node 192.168.100.161:6379)
M: d80786f363c7e2c8664e69b4fab47cbd7417dbe4 192.168.100.161:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: d18c35eaaa7db9d0f9e0223ccf95aa834ab9ca4e 192.168.100.166:6379
slots: (0 slots) slave
replicates 7e0d980b0f2d067ec797a9b76cecde50f532844a
S: 1466ec80241f619bf11c729c166c8dadbce0df74 192.168.100.165:6379
slots: (0 slots) slave
replicates d80786f363c7e2c8664e69b4fab47cbd7417dbe4
S: 4b5028a691c29d4d7964b02dcc07e30c7dc419fe 192.168.100.164:6379
slots: (0 slots) slave
replicates ab91069f9d0a4773d857119c6cc3bd29db6c0552
M: ab91069f9d0a4773d857119c6cc3bd29db6c0552 192.168.100.163:6379
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
M: 7e0d980b0f2d067ec797a9b76cecde50f532844a 192.168.100.162:6379
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Getting functions from cluster
>>> Send FUNCTION LIST to 192.168.100.167:6379 to verify there is no functions in it
>>> Send FUNCTION RESTORE to 192.168.100.167:6379
>>> Send CLUSTER MEET to node 192.168.100.167:6379 to make it join the cluster.
[OK] New node added correctly.----192.168.100.167默认为master、没有slot没 有slave----
root@redis-server8:~# redis-cli -a q1w2e3r4ys@123 --cluster info 192.168.100.161:6379
192.168.100.161:6379 (d80786f3...) -> 33365 keys | 5461 slots | 1 slaves.
192.168.100.167:6379 (a458282f...) -> 0 keys | 0 slots | 0 slaves.
192.168.100.163:6379 (ab91069f...) -> 33356 keys | 5461 slots | 1 slaves.
192.168.100.162:6379 (7e0d980b...) -> 33279 keys | 5462 slots | 1 slaves.
[OK] 100000 keys in 4 masters.
6.10 keys per slot on average.root@redis-server1:~# redis-cli -a q1w2e3r4ys@123 cluster nodes
a458282fde42f63d4c5e18be5a17ea7b47025273 192.168.100.167:6379@16379 master - 0 1694596846531 0 connected
d18c35eaaa7db9d0f9e0223ccf95aa834ab9ca4e 192.168.100.166:6379@16379 slave 7e0d980b0f2d067ec797a9b76cecde50f532844a 0 1694596844520 2 connected
d80786f363c7e2c8664e69b4fab47cbd7417dbe4 192.168.100.161:6379@16379 myself,master - 0 1694596844000 1 connected 0-5460
1466ec80241f619bf11c729c166c8dadbce0df74 192.168.100.165:6379@16379 slave d80786f363c7e2c8664e69b4fab47cbd7417dbe4 0 1694596845000 1 connected
4b5028a691c29d4d7964b02dcc07e30c7dc419fe 192.168.100.164:6379@16379 slave ab91069f9d0a4773d857119c6cc3bd29db6c0552 0 1694596843000 3 connected
ab91069f9d0a4773d857119c6cc3bd29db6c0552 192.168.100.163:6379@16379 master - 0 1694596845526 3 connected 10923-16383
7e0d980b0f2d067ec797a9b76cecde50f532844a 192.168.100.162:6379@16379 master - 0 1694596843513 2 connected 5461-10922----添加节点192.168.100.168:6379并设置为192.168.100.167:6379的slave----
root@redis-server1:~# redis-cli -a q1w2e3r4ys@123 --cluster add-node 192.168.100.168:6379 192.168.100.161:6379 --cluster-slave --cluster-master-id a458282fde42f63d4c5e18be5a17ea7b47025273
>>> Adding node 192.168.100.168:6379 to cluster 192.168.100.161:6379
>>> Performing Cluster Check (using node 192.168.100.161:6379)
M: d80786f363c7e2c8664e69b4fab47cbd7417dbe4 192.168.100.161:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
M: a458282fde42f63d4c5e18be5a17ea7b47025273 192.168.100.167:6379
slots: (0 slots) master
S: d18c35eaaa7db9d0f9e0223ccf95aa834ab9ca4e 192.168.100.166:6379
slots: (0 slots) slave
replicates 7e0d980b0f2d067ec797a9b76cecde50f532844a
S: 1466ec80241f619bf11c729c166c8dadbce0df74 192.168.100.165:6379
slots: (0 slots) slave
replicates d80786f363c7e2c8664e69b4fab47cbd7417dbe4
S: 4b5028a691c29d4d7964b02dcc07e30c7dc419fe 192.168.100.164:6379
slots: (0 slots) slave
replicates ab91069f9d0a4773d857119c6cc3bd29db6c0552
M: ab91069f9d0a4773d857119c6cc3bd29db6c0552 192.168.100.163:6379
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
M: 7e0d980b0f2d067ec797a9b76cecde50f532844a 192.168.100.162:6379
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 192.168.100.168:6379 to make it join the cluster.
Waiting for the cluster to join
>>> Configure node as replica of 192.168.100.167:6379.
[OK] New node added correctly.root@redis-server1:~# redis-cli -a q1w2e3r4ys@123 cluster nodes
a458282fde42f63d4c5e18be5a17ea7b47025273 192.168.100.167:6379@16379 master - 0 1694597190000 0 connected
d18c35eaaa7db9d0f9e0223ccf95aa834ab9ca4e 192.168.100.166:6379@16379 slave 7e0d980b0f2d067ec797a9b76cecde50f532844a 0 1694597192727 2 connected
9d8d562e4cc5fc632cd05d44e51cc3f70eee682a 192.168.100.168:6379@16379 slave a458282fde42f63d4c5e18be5a17ea7b47025273 0 1694597191000 0 connected
d80786f363c7e2c8664e69b4fab47cbd7417dbe4 192.168.100.161:6379@16379 myself,master - 0 1694597189000 1 connected 0-5460
1466ec80241f619bf11c729c166c8dadbce0df74 192.168.100.165:6379@16379 slave d80786f363c7e2c8664e69b4fab47cbd7417dbe4 0 1694597191722 1 connected
4b5028a691c29d4d7964b02dcc07e30c7dc419fe 192.168.100.164:6379@16379 slave ab91069f9d0a4773d857119c6cc3bd29db6c0552 0 1694597188000 3 connected
ab91069f9d0a4773d857119c6cc3bd29db6c0552 192.168.100.163:6379@16379 master - 0 1694597192000 3 connected 10923-16383
7e0d980b0f2d067ec797a9b76cecde50f532844a 192.168.100.162:6379@16379 master - 0 1694597190000 2 connected 5461-10922Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing Cluster Check (using node 192.168.100.161:6379)
M: d80786f363c7e2c8664e69b4fab47cbd7417dbe4 192.168.100.161:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
M: a458282fde42f63d4c5e18be5a17ea7b47025273 192.168.100.167:6379
slots: (0 slots) master
1 additional replica(s)
S: d18c35eaaa7db9d0f9e0223ccf95aa834ab9ca4e 192.168.100.166:6379
slots: (0 slots) slave
replicates 7e0d980b0f2d067ec797a9b76cecde50f532844a
S: 9d8d562e4cc5fc632cd05d44e51cc3f70eee682a 192.168.100.168:6379
slots: (0 slots) slave
replicates a458282fde42f63d4c5e18be5a17ea7b47025273
S: 1466ec80241f619bf11c729c166c8dadbce0df74 192.168.100.165:6379
slots: (0 slots) slave
replicates d80786f363c7e2c8664e69b4fab47cbd7417dbe4
S: 4b5028a691c29d4d7964b02dcc07e30c7dc419fe 192.168.100.164:6379
slots: (0 slots) slave
replicates ab91069f9d0a4773d857119c6cc3bd29db6c0552
M: ab91069f9d0a4773d857119c6cc3bd29db6c0552 192.168.100.163:6379
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
M: 7e0d980b0f2d067ec797a9b76cecde50f532844a 192.168.100.162:6379
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)? 4096 #要分配多少个槽位
What is the receiving node ID? a458282fde42f63d4c5e18be5a17ea7b47025273 #⽬的服务器ID
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
Source node #1: all #将哪些源主机的槽位分配给⽬的主机,all是⾃动在所有的redis node选择划分,如果是从redis cluster删除主机可以使⽤此⽅式将主机上的槽位全部移动到别的redis主机
Ready to move 4096 slots.
Source nodes:
M: d80786f363c7e2c8664e69b4fab47cbd7417dbe4 192.168.100.161:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
M: ab91069f9d0a4773d857119c6cc3bd29db6c0552 192.168.100.163:6379
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
M: 7e0d980b0f2d067ec797a9b76cecde50f532844a 192.168.100.162:6379
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
Destination node:
M: a458282fde42f63d4c5e18be5a17ea7b47025273 192.168.100.167:6379
slots: (0 slots) master
1 additional replica(s)
Resharding plan:
Moving slot 5461 from 7e0d980b0f2d067ec797a9b76cecde50f532844a
Moving slot 5462 from 7e0d980b0f2d067ec797a9b76cecde50f532844a
Moving slot 5463 from 7e0d980b0f2d067ec797a9b76cecde50f532844a
Moving slot 5464 from 7e0d980b0f2d067ec797a9b76cecde50f532844a
Moving slot 5465 from 7e0d980b0f2d067ec797a9b76cecde50f532844aroot@redis-server1:~# redis-cli -a q1w2e3r4ys@123 --cluster info 192.168.100.161:6379
192.168.100.161:6379 (d80786f3...) -> 25013 keys | 4096 slots | 1 slaves.
192.168.100.167:6379 (a458282f...) -> 25024 keys | 4096 slots | 1 slaves.
192.168.100.163:6379 (ab91069f...) -> 24999 keys | 4096 slots | 1 slaves.
192.168.100.162:6379 (7e0d980b...) -> 24964 keys | 4096 slots | 1 slaves.
[OK] 100000 keys in 4 masters.
6.10 keys per slot on average.root@redis-server1:~# redis-cli -a q1w2e3r4ys@123 --cluster call 192.168.100.161:6379 dbsize
>>> Calling dbsize
192.168.100.161:6379: 25013
192.168.100.167:6379: 25024 #已同步数据
192.168.100.166:6379: 24964
192.168.100.168:6379: 25024 #已分发数据
192.168.100.165:6379: 25013
192.168.100.164:6379: 24999
192.168.100.163:6379: 24999
192.168.100.162:6379: 24964----清空集集群数据----
root@redis-server1:~# redis-cli -a q1w2e3r4ys@123 --cluster call 192.168.100.161:6379 flushall
>>> Calling flushall
192.168.100.161:6379: OK
192.168.100.167:6379: OK
192.168.100.163:6379: OK
192.168.100.162:6379: OK
root@redis-server1:~# redis-cli -a q1w2e3r4ys@123 --cluster call 192.168.100.161:6379 dbsize
>>> Calling dbsize
192.168.100.161:6379: 0
192.168.100.167:6379: 0
192.168.100.166:6379: 0
192.168.100.168:6379: 0
192.168.100.165:6379: 0
192.168.100.164:6379: 0
192.168.100.163:6379: 0
192.168.100.162:6379: 0
----执行脚本,连接redis cluster批量写入数据----
root@redis-server8:~# python3 redis-cluster-client.py
OK! 连接成功!!!!!1 RedisCluster<192.168.100.161:6379, 192.168.100.162:6379, 192.168.100.163:6379, 192.168.100.164:6379, 192.168.100.165:6379, 192.168.100.166:6379>
value0
value1
value2
value3
value4
....
----查看写入结果----
root@redis-server1:~# redis-cli -a q1w2e3r4ys@123 --cluster call 192.168.100.161:6379 dbsize
>>> Calling dbsize
192.168.100.161:6379: 25
192.168.100.167:6379: 25
192.168.100.166:6379: 25
192.168.100.168:6379: 25
192.168.100.165:6379: 25
192.168.100.164:6379: 25
192.168.100.163:6379: 25
192.168.100.162:6379: 25Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing Cluster Check (using node 192.168.100.161:6379)
M: d80786f363c7e2c8664e69b4fab47cbd7417dbe4 192.168.100.161:6379 #⽬的主机ID
slots:[1365-5460] (4096 slots) master
1 additional replica(s)
M: a458282fde42f63d4c5e18be5a17ea7b47025273 192.168.100.167:6379 #源主机ID(下架主机)
slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master
1 additional replica(s)
S: d18c35eaaa7db9d0f9e0223ccf95aa834ab9ca4e 192.168.100.166:6379
slots: (0 slots) slave
replicates 7e0d980b0f2d067ec797a9b76cecde50f532844a
S: 9d8d562e4cc5fc632cd05d44e51cc3f70eee682a 192.168.100.168:6379
slots: (0 slots) slave
replicates a458282fde42f63d4c5e18be5a17ea7b47025273
S: 1466ec80241f619bf11c729c166c8dadbce0df74 192.168.100.165:6379
slots: (0 slots) slave
replicates d80786f363c7e2c8664e69b4fab47cbd7417dbe4
S: 4b5028a691c29d4d7964b02dcc07e30c7dc419fe 192.168.100.164:6379
slots: (0 slots) slave
replicates ab91069f9d0a4773d857119c6cc3bd29db6c0552
M: ab91069f9d0a4773d857119c6cc3bd29db6c0552 192.168.100.163:6379
slots:[12288-16383] (4096 slots) master
1 additional replica(s)
M: 7e0d980b0f2d067ec797a9b76cecde50f532844a 192.168.100.162:6379
slots:[6827-10922] (4096 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)? 4096 #需要分配的槽位数
What is the receiving node ID? d80786f363c7e2c8664e69b4fab47cbd7417dbe4 #分配的⽬的master主机
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
Source node #1: a458282fde42f63d4c5e18be5a17ea7b47025273 #从哪个源主机分配
Source node #2: done #完成
....
Moving slot 12285 from a458282fde42f63d4c5e18be5a17ea7b47025273
Moving slot 12286 from a458282fde42f63d4c5e18be5a17ea7b47025273
Moving slot 12287 from a458282fde42f63d4c5e18be5a17ea7b47025273
Do you want to proceed with the proposed reshard plan (yes/no)? yes #确认分配
Moving slot 0 from 192.168.100.167:6379 to 192.168.100.161:6379:
Moving slot 1 from 192.168.100.167:6379 to 192.168.100.161:6379:
Moving slot 2 from 192.168.100.167:6379 to 192.168.100.161:6379:
....----验证集群主机状态----
root@redis-server1:~# redis-cli -a q1w2e3r4ys@123 --cluster check 192.168.100.161:6379
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.100.161:6379 (d80786f3...) -> 50 keys | 8192 slots | 3 slaves.
192.168.100.163:6379 (ab91069f...) -> 25 keys | 4096 slots | 1 slaves.
192.168.100.162:6379 (7e0d980b...) -> 25 keys | 4096 slots | 1 slaves.
[OK] 100 keys in 3 masters.
0.01 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.100.161:6379)
M: d80786f363c7e2c8664e69b4fab47cbd7417dbe4 192.168.100.161:6379
slots:[0-6826],[10923-12287] (8192 slots) master
3 additional replica(s)
S: a458282fde42f63d4c5e18be5a17ea7b47025273 192.168.100.167:6379 #slave⻆⾊
slots: (0 slots) slave
replicates d80786f363c7e2c8664e69b4fab47cbd7417dbe4
S: d18c35eaaa7db9d0f9e0223ccf95aa834ab9ca4e 192.168.100.166:6379
slots: (0 slots) slave
replicates 7e0d980b0f2d067ec797a9b76cecde50f532844a
S: 9d8d562e4cc5fc632cd05d44e51cc3f70eee682a 192.168.100.168:6379 #slave⻆⾊
slots: (0 slots) slave
replicates d80786f363c7e2c8664e69b4fab47cbd7417dbe4
S: 1466ec80241f619bf11c729c166c8dadbce0df74 192.168.100.165:6379
slots: (0 slots) slave
replicates d80786f363c7e2c8664e69b4fab47cbd7417dbe4
S: 4b5028a691c29d4d7964b02dcc07e30c7dc419fe 192.168.100.164:6379
slots: (0 slots) slave
replicates ab91069f9d0a4773d857119c6cc3bd29db6c0552
M: ab91069f9d0a4773d857119c6cc3bd29db6c0552 192.168.100.163:6379
slots:[12288-16383] (4096 slots) master
1 additional replica(s)
M: 7e0d980b0f2d067ec797a9b76cecde50f532844a 192.168.100.162:6379
slots:[6827-10922] (4096 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.root@redis-server1:~# redis-cli -a q1w2e3r4ys@123 --cluster del-node 192.168.100.167:6379 a458282fde42f63d4c5e18be5a17ea7b47025273
>>> Removing node a458282fde42f63d4c5e18be5a17ea7b47025273 from cluster 192.168.100.167:6379
>>> Sending CLUSTER FORGET messages to the cluster...
>>> Sending CLUSTER RESET SOFT to the deleted node.
root@redis-server1:~# redis-cli -a q1w2e3r4ys@123 --cluster del-node 192.168.100.168:6379 9d8d562e4cc5fc632cd05d44e51cc3f70eee682a
>>> Removing node 9d8d562e4cc5fc632cd05d44e51cc3f70eee682a from cluster 192.168.100.168:6379
>>> Sending CLUSTER FORGET messages to the cluster...
>>> Sending CLUSTER RESET SOFT to the deleted node.root@redis-server1:~# redis-cli -a q1w2e3r4ys@123 --cluster check 192.168.100.161:6379
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.100.161:6379 (d80786f3...) -> 50 keys | 8192 slots | 1 slaves. #槽位太多,需要重新平衡一下
192.168.100.163:6379 (ab91069f...) -> 25 keys | 4096 slots | 1 slaves.
192.168.100.162:6379 (7e0d980b...) -> 25 keys | 4096 slots | 1 slaves.
[OK] 100 keys in 3 masters.
0.01 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.100.161:6379)
M: d80786f363c7e2c8664e69b4fab47cbd7417dbe4 192.168.100.161:6379
slots:[0-6826],[10923-12287] (8192 slots) master
1 additional replica(s)
S: d18c35eaaa7db9d0f9e0223ccf95aa834ab9ca4e 192.168.100.166:6379
slots: (0 slots) slave
replicates 7e0d980b0f2d067ec797a9b76cecde50f532844a
S: 1466ec80241f619bf11c729c166c8dadbce0df74 192.168.100.165:6379
slots: (0 slots) slave
replicates d80786f363c7e2c8664e69b4fab47cbd7417dbe4
S: 4b5028a691c29d4d7964b02dcc07e30c7dc419fe 192.168.100.164:6379
slots: (0 slots) slave
replicates ab91069f9d0a4773d857119c6cc3bd29db6c0552
M: ab91069f9d0a4773d857119c6cc3bd29db6c0552 192.168.100.163:6379
slots:[12288-16383] (4096 slots) master
1 additional replica(s)
M: 7e0d980b0f2d067ec797a9b76cecde50f532844a 192.168.100.162:6379
slots:[6827-10922] (4096 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.----重新平衡槽位----
root@redis-server1:~# redis-cli -a q1w2e3r4ys@123 --cluster check 192.168.100.161:6379
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.100.161:6379 (d80786f3...) -> 50 keys | 8192 slots | 1 slaves.
192.168.100.163:6379 (ab91069f...) -> 25 keys | 4096 slots | 1 slaves.
192.168.100.162:6379 (7e0d980b...) -> 25 keys | 4096 slots | 1 slaves.
[OK] 100 keys in 3 masters.
0.01 keys per slot on average.
>>> Performing Cluster Check
----验证槽位状态----
root@redis-server1:~# redis-cli -a q1w2e3r4ys@123 --cluster check 192.168.100.161:6379
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.100.161:6379 (d80786f3...) -> 37 keys | 5461 slots | 1 slaves.
192.168.100.163:6379 (ab91069f...) -> 32 keys | 5462 slots | 1 slaves.
192.168.100.162:6379 (7e0d980b...) -> 31 keys | 5461 slots | 1 slaves.
[OK] 100 keys in 3 masters.
0.01 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.100.161:6379)
M: d80786f363c7e2c8664e69b4fab47cbd7417dbe4 192.168.100.161:6379
slots:[2731-6826],[10923-12287] (5461 slots) master
1 additional replica(s)
S: d18c35eaaa7db9d0f9e0223ccf95aa834ab9ca4e 192.168.100.166:6379
slots: (0 slots) slave
replicates 7e0d980b0f2d067ec797a9b76cecde50f532844a
S: 1466ec80241f619bf11c729c166c8dadbce0df74 192.168.100.165:6379
slots: (0 slots) slave
replicates d80786f363c7e2c8664e69b4fab47cbd7417dbe4
S: 4b5028a691c29d4d7964b02dcc07e30c7dc419fe 192.168.100.164:6379
slots: (0 slots) slave
replicates ab91069f9d0a4773d857119c6cc3bd29db6c0552
M: ab91069f9d0a4773d857119c6cc3bd29db6c0552 192.168.100.163:6379
slots:[0-1365],[12288-16383] (5462 slots) master
1 additional replica(s)
M: 7e0d980b0f2d067ec797a9b76cecde50f532844a 192.168.100.162:6379
slots:[1366-2730],[6827-10922] (5461 slots) master
1 additional replica(s)root@redis-server1:~# redis-cli -a q1w2e3r4ys@123 --no-auth-warning cluster nodes
d18c35eaaa7db9d0f9e0223ccf95aa834ab9ca4e 192.168.100.166:6379@16379 slave 7e0d980b0f2d067ec797a9b76cecde50f532844a 0 1694658162973 11 connected
d80786f363c7e2c8664e69b4fab47cbd7417dbe4 192.168.100.161:6379@16379 myself,master - 0 1694658161000 9 connected 2731-6826 10923-12287
1466ec80241f619bf11c729c166c8dadbce0df74 192.168.100.165:6379@16379 slave d80786f363c7e2c8664e69b4fab47cbd7417dbe4 0 1694658163978 9 connected
4b5028a691c29d4d7964b02dcc07e30c7dc419fe 192.168.100.164:6379@16379 slave ab91069f9d0a4773d857119c6cc3bd29db6c0552 0 1694658163000 10 connected
ab91069f9d0a4773d857119c6cc3bd29db6c0552 192.168.100.163:6379@16379 master - 0 1694658163000 10 connected 0-1365 12288-16383
7e0d980b0f2d067ec797a9b76cecde50f532844a 192.168.100.162:6379@16379 master - 0 1694658158000 11 connected 1366-2730 6827-10922root@redis-server5:~# tail -f /apps/redis/logs/redis_6379.log
187641:S 14 Sep 2023 02:33:28.978 * Connecting to MASTER 192.168.100.161:6379
187641:S 14 Sep 2023 02:33:28.978 * MASTER <-> REPLICA sync started
187641:S 14 Sep 2023 02:33:28.979 # Error condition on socket for SYNC: Connection refused
187641:S 14 Sep 2023 02:33:29.990 * Connecting to MASTER 192.168.100.161:6379
187641:S 14 Sep 2023 02:33:29.991 * MASTER <-> REPLICA sync started
187641:S 14 Sep 2023 02:33:29.991 # Error condition on socket for SYNC: Connection refused
187641:S 14 Sep 2023 02:33:30.137 * FAIL message received from d18c35eaaa7db9d0f9e0223ccf95aa834ab9ca4e () about d80786f363c7e2c8664e69b4fab47cbd7417dbe4 ()
187641:S 14 Sep 2023 02:33:30.138 # Cluster state changed: fail
187641:S 14 Sep 2023 02:33:30.192 * Start of election delayed for 588 milliseconds (rank #0, offset 2561406).
187641:S 14 Sep 2023 02:33:30.799 * Starting a failover election for epoch 12.
187641:S 14 Sep 2023 02:33:30.874 * Failover election won: I'm the new master.
187641:S 14 Sep 2023 02:33:30.874 * configEpoch set to 12 after successful failover
187641:M 14 Sep 2023 02:33:30.874 * Discarding previously cached master state.
187641:M 14 Sep 2023 02:33:30.874 * Setting secondary replication ID to 8f3424563a608c0bc114a661c9333f2ecea0e260, valid up to offset: 2561407. New replication ID is 4dc1f3f2386a7992a67b212b8d1547d2edb38eb7
187641:M 14 Sep 2023 02:33:30.876 * Cluster state changed: okroot@redis-server5:~# redis-cli -a q1w2e3r4ys@123 --no-auth-warning cluster nodes
1466ec80241f619bf11c729c166c8dadbce0df74 192.168.100.165:6379@16379 myself,master - 0 1694658957000 12 connected 2731-6826 10923-12287 #被提升为master
4b5028a691c29d4d7964b02dcc07e30c7dc419fe 192.168.100.164:6379@16379 slave ab91069f9d0a4773d857119c6cc3bd29db6c0552 0 1694658958594 10 connected
7e0d980b0f2d067ec797a9b76cecde50f532844a 192.168.100.162:6379@16379 master - 0 1694658959605 11 connected 1366-2730 6827-10922
ab91069f9d0a4773d857119c6cc3bd29db6c0552 192.168.100.163:6379@16379 master - 0 1694658960000 10 connected 0-1365 12288-16383
d80786f363c7e2c8664e69b4fab47cbd7417dbe4 192.168.100.161:6379@16379 master,fail - 1694658795820 1694658789000 9 disconnected
d18c35eaaa7db9d0f9e0223ccf95aa834ab9ca4e 192.168.100.166:6379@16379 slave 7e0d980b0f2d067ec797a9b76cecde50f532844a 0 1694658960616 11 connectedroot@redis-server5:~# redis-cli -a q1w2e3r4ys@123 --no-auth-warning -h 192.168.100.165
192.168.100.165:6379> set qbn aaa
OKroot@redis-server1:~# cat /apps/redis/etc/redis.conf |grep masterauth
masterauth q1w2e3r4ys@123
root@redis-server1:~# systemctl restart redis.service----192.168.100.161已经加入集群,并且是192.168.100.165的slave----
root@redis-server1:~# redis-cli -a q1w2e3r4ys@123 --no-auth-warning cluster nodes
4b5028a691c29d4d7964b02dcc07e30c7dc419fe 192.168.100.164:6379@16379 slave ab91069f9d0a4773d857119c6cc3bd29db6c0552 0 1694659845000 10 connected
ab91069f9d0a4773d857119c6cc3bd29db6c0552 192.168.100.163:6379@16379 master - 0 1694659842000 10 connected 0-1365 12288-16383
7e0d980b0f2d067ec797a9b76cecde50f532844a 192.168.100.162:6379@16379 master - 0 1694659843000 11 connected 1366-2730 6827-10922
1466ec80241f619bf11c729c166c8dadbce0df74 192.168.100.165:6379@16379 master - 0 1694659844641 12 connected 2731-6826 10923-12287
d80786f363c7e2c8664e69b4fab47cbd7417dbe4 192.168.100.161:6379@16379 myself,slave 1466ec80241f619bf11c729c166c8dadbce0df74 0 1694659841000 12 connected
d18c35eaaa7db9d0f9e0223ccf95aa834ab9ca4e 192.168.100.166:6379@16379 slave 7e0d980b0f2d067ec797a9b76cecde50f532844a 0 1694659845648 11 connectedroot@redis-server1:~# redis-cli -a q1w2e3r4ys@123 --cluster check 192.168.100.161:6379
192.168.100.163:6379 (ab91069f...) -> 32 keys | 5462 slots | 1 slaves.
192.168.100.162:6379 (7e0d980b...) -> 31 keys | 5461 slots | 1 slaves.
192.168.100.165:6379 (1466ec80...) -> 38 keys | 5461 slots | 1 slaves.
[OK] 101 keys in 3 masters.
0.01 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.100.161:6379)
S: d80786f363c7e2c8664e69b4fab47cbd7417dbe4 192.168.100.161:6379
slots: (0 slots) slave
replicates 1466ec80241f619bf11c729c166c8dadbce0df74
S: 4b5028a691c29d4d7964b02dcc07e30c7dc419fe 192.168.100.164:6379
slots: (0 slots) slave
replicates ab91069f9d0a4773d857119c6cc3bd29db6c0552
M: ab91069f9d0a4773d857119c6cc3bd29db6c0552 192.168.100.163:6379
slots:[0-1365],[12288-16383] (5462 slots) master
1 additional replica(s)
M: 7e0d980b0f2d067ec797a9b76cecde50f532844a 192.168.100.162:6379
slots:[1366-2730],[6827-10922] (5461 slots) master
1 additional replica(s)
M: 1466ec80241f619bf11c729c166c8dadbce0df74 192.168.100.165:6379
slots:[2731-6826],[10923-12287] (5461 slots) master
1 additional replica(s)
S: d18c35eaaa7db9d0f9e0223ccf95aa834ab9ca4e 192.168.100.166:6379
slots: (0 slots) slave
replicates 7e0d980b0f2d067ec797a9b76cecde50f532844a