目录
1.准备2台服务器,修改主机名称192.168.1.134(redis-master)、 192.168.1.135(redis-slave),关闭防火墙
3.修改redis-master和redis-slave的redis.conf配置文件
3.在redis-master服务器上操作:创建redis-cluster集群
5.批量导入数据观察key的集群分布情况,分析cluster集群key的节点分布情况
2.redis-cluster集群从库的添加,在redis-master上操作
7.重新启动7000端口的redis-server,再次查看
8.手动将redis-server 7000 端口重新切换为主库
一、哨兵原理
通过向主节点执行info命令,获取从节点的信息,这也是为什么Sentinel节点不需要显示配置监控从节点
当有新的从节点加入时都可以立刻感知出来
节点不可达或者故障转移后,可以通过info命令实时更新节点拓扑信息
每隔1秒,每个Sentinel节点会向主节点、从节点、其余Sentinel节点发送一条ping命令做一次心跳检测,来确认这些节点当前是否可达
发现新的Sentinel节点:通过订阅主节点的__sentinel__:hello了解其他的Sentinel节点信息,如果是新加入的Sentinel节点,将该Sentinel节点信息保存起来,并与该Sentinel节点创建连接。
Sentinel节点之间交换主节点的状态,作为后面客观下线以及领导者选举的依据
二、准备环境
1.准备2台服务器,修改主机名称192.168.1.134(redis-master)、 192.168.1.135(redis-slave),关闭防火墙
[root@localhost ~] hostnamectl set-hostname redis-master
[root@localhost ~] bash
[root@redis-master ~] systemctl stop firewalld
[root@redis-master ~] setenforce 0
[root@redis-master ~] iptables -F
2.下载依赖包、获取redis-4.0.10.tar包
[root@slave ~] yum -y install wget gcc gcc-c++ make tar openssl openssl-devel cmake
[root@slave ~] rz
[root@slave ~] ll
总用量 1704
-rw-------. 1 root root 1257 6月 16 18:40 anaconda-ks.cfg
-rw-r--r--. 1 root root 1738465 7月 3 18:03 redis-4.0.10.tar.gz
[root@master ~] cd /usr/src/redis-4.0.10/
[root@master redis-4.0.10] make
[root@slave redis-4.0.10] make MALLOC=jemalloc #避免碎片和可伸缩的并发支持
[root@master redis-4.0.10] make PREFIX=/usr/local/redis install
[root@master redis-4.0.10] mkdir -p /usr/local/redis/conf #创建配置文件目录
[root@master redis-4.0.10] cp sentinel.conf /usr/local/redis/conf/ #redis哨兵配置文件
[root@master redis-4.0.10] cp src/redis-trib.rb /usr/local/redis/bin/ #创建集群的工具
[root@master redis-4.0.10] ln -s /usr/local/redis/bin/* /usr/local/bin/ #优化命令
3.redis文件精简
[root@master redis-4.0.10] cp redis.conf /usr/local/redis/conf/
[root@master redis-4.0.10] cd /usr/local/redis/
[root@master redis] cp conf/redis.conf{,.bak}
[root@master redis] egrep -v "^$|^#" conf/redis.conf.bak > conf/redis.conf
4.系统调优配置
启用透明大页面压缩
[root@master redis] echo never > /sys/kernel/mm/transparent_hugepage/enabled
[root@master redis] echo never > /sys/kernel/mm/transparent_hugepage/defrag
[root@master redis] echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local
[root@master redis] echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.local
进一步优化
# 修改文件并发数
[root@master redis] echo "* - nofile 10240" >> /etc/security/limits.conf
#监听队列
[root@master redis] echo "net.core.somaxconn = 10240" >> /etc/sysctl.conf
# 0内存不够,就会拒绝申请
#1物理内存都允许分配给你,只要有内存就给你用,这样可以避免申请内存失败的问题。
[root@master redis] echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
三、redis哨兵配置
1.在redis-master服务器上操作
[root@master redis] mkdir -p /data/redis-cluster #创建集群工具目录
[root@master redis] cd /data/redis-cluster
[root@master redis-cluster] mkdir 7000 7001 7002 #创建3个redis目录
[root@master redis-cluster] cp /usr/local/redis/conf/redis.conf /data/redis-cluster/7000/
[root@master redis-cluster] cp /usr/local/redis/conf/redis.conf /data/redis-cluster/7001/
[root@master redis-cluster] cp /usr/local/redis/conf/redis.conf /data/redis-cluster/7002/
2.在redis-slave服务器上操作
[root@redis-slave redis] mkdir -p /data/redis-cluster
[root@redis-slave redis] cd /data/redis-cluster/
[root@redis-slave redis-cluster] mkdir 8000 8001 8002
[root@redis-slave redis-cluster] scp 192.168.1.134:/data/redis-cluster/7000/redis.conf 8000
The authenticity of host '192.168.1.134 (192.168.1.134)' can't be established.
ECDSA key fingerprint is SHA256:mgc4iZ/w11vaana8aZbfLvgUSFhlAbUK/ghw1ANkBNw.
ECDSA key fingerprint is MD5:c2:c7:85:09:96:72:84:a1:13:6b:72:f2:e1:d5:2b:e6.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.134' (ECDSA) to the list of known hosts.
root@192.168.1.134's password:
redis.conf 100% 1313 704.6KB/s 00:00
[root@redis-slave redis-cluster] scp 192.168.1.134:/data/redis-cluster/7000/redis.conf 8001
root@192.168.1.134's password:
redis.conf 100% 1313 762.3KB/s 00:00
[root@redis-slave redis-cluster] scp 192.168.1.134:/data/redis-cluster/7000/redis.conf 8002
root@192.168.1.134's password:
redis.conf 100% 1313 852.6KB/s 00:00
3.修改redis-master和redis-slave的redis.conf配置文件
[root@redis-master 7000] vim redis.conf
cluster-enabled yes #手动添加
bind 0.0.0.0
port 7000
tcp-backlog 1024
daemonize yes
pidfile /data/redis-cluster/7000/redis.pid
logfile "/data/redis-cluster/7000/redis.log"
dir /data/redis-cluster/7000/
7001和7002只需要替换7000即可
[root@redis-master redis-cluster] redis-server /data/redis-cluster/7001/redis.conf
[root@redis-master redis-cluster] redis-server /data/redis-cluster/7002/redis.conf
[root@redis-master redis-cluster] redis-server /data/redis-cluster/7000/redis.conf
[root@redis-master redis-cluster] netstat -antup |grep redis
tcp 0 0 0.0.0.0:7000 0.0.0.0:* LISTEN 19152/redis-server
tcp 0 0 0.0.0.0:7001 0.0.0.0:* LISTEN 19142/redis-server
tcp 0 0 0.0.0.0:7002 0.0.0.0:* LISTEN 19147/redis-server
tcp 0 0 0.0.0.0:17000 0.0.0.0:* LISTEN 19152/redis-server
tcp 0 0 0.0.0.0:17001 0.0.0.0:* LISTEN 19142/redis-server
tcp 0 0 0.0.0.0:17002 0.0.0.0:* LISTEN 19147/redis-server
redis-slave服务器一样复制
[root@redis-slave redis-cluster] scp 192.168.1.134:/data/redis-cluster/7000/redis.conf 8000
root@192.168.1.134's password:
redis.conf 100% 1401 1.1MB/s 00:00
[root@redis-slave redis-cluster] scp 192.168.1.134:/data/redis-cluster/7000/redis.conf 8001
root@192.168.1.134's password:
redis.conf 100% 1401 834.5KB/s 00:00
[root@redis-slave redis-cluster] scp 192.168.1.134:/data/redis-cluster/7000/redis.conf 8002
root@192.168.1.134's password:
redis.conf 100% 1401 941.9KB/s 00:00
#然后我们一样替换
[root@redis-slave redis-cluster] vim 8001/redis.conf
:%s/7000/8001/g #末行模式
4 次替换,共 4 行
[root@redis-slave redis-cluster] redis-server 8000/redis.conf
[root@redis-slave redis-cluster] redis-server 8001/redis.conf
[root@redis-slave redis-cluster] redis-server 8002/redis.conf
[root@redis-slave redis-cluster] netstat -anptl |grep redis
tcp 0 0 0.0.0.0:18000 0.0.0.0:* LISTEN 19072/redis-server
tcp 0 0 0.0.0.0:18001 0.0.0.0:* LISTEN 19077/redis-server
tcp 0 0 0.0.0.0:18002 0.0.0.0:* LISTEN 19082/redis-server
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 19072/redis-server
tcp 0 0 0.0.0.0:8001 0.0.0.0:* LISTEN 19077/redis-server
tcp 0 0 0.0.0.0:8002 0.0.0.0:* LISTEN 19082/redis-server
四、构建redis cluster集群
1.上传工具,解码编译
-rw-r--r--. 1 root root 15923244 12月 2 2020 ruby-2.5.1.tar.gz
[root@redis-master redis-cluster] tar xf ruby-2.5.1.tar.gz -C /usr/src/
[root@redis-master redis-cluster] cd /usr/src/ruby-2.5.1/
[root@redis-master ruby-2.5.1] ./configure && make && make install
[root@redis-master ruby-2.5.1] ruby --version
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux] #完成
2.安装ruby的redis扩展
[root@redis-master ruby-2.5.1] /usr/local/bin/gem install redis-3.2.0.gem
3.在redis-master服务器上操作:创建redis-cluster集群
[root@redis-master ~] redis-trib.rb create 192.168.1.134:7000 192.168.1.134:7001 192.168.1.134:7002
>>> Creating cluster
/usr/local/lib/ruby/gems/2.5.0/gems/redis-3.2.0/lib/redis/client.rb:422: warning: constant ::Fixnum is deprecated
>>> Performing hash slots allocation on 3 nodes...
Using 3 masters:
192.168.1.134:7000
192.168.1.134:7001
192.168.1.134:7002
M: 2c5a4a7db65088e1d4825033e568ee9efef53290 192.168.1.134:7000
slots:0-5460 (5461 slots) master
M: 17e761dfeb1aacf4da9a063cf67871dc2989434f 192.168.1.134:7001
slots:5461-10922 (5462 slots) master
M: ca4b7a19524133e5a2466cb3e7b59076e123ce62 192.168.1.134:7002
slots:10923-16383 (5461 slots) master
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join..
>>> Performing Cluster Check (using node 192.168.1.134:7000)
M: 2c5a4a7db65088e1d4825033e568ee9efef53290 192.168.1.134:7000
slots:0-5460 (5461 slots) master
0 additional replica(s)
M: ca4b7a19524133e5a2466cb3e7b59076e123ce62 192.168.1.134:7002
slots:10923-16383 (5461 slots) master
0 additional replica(s)
M: 17e761dfeb1aacf4da9a063cf67871dc2989434f 192.168.1.134:7001
slots:5461-10922 (5462 slots) master
0 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[root@redis-master ~] ps -ef |grep cluster |grep -v grep
root 19142 1 0 18:58 ? 00:00:08 redis-server 0.0.0.0:7001 [cluster]
root 19147 1 0 18:58 ? 00:00:08 redis-server 0.0.0.0:7002 [cluster]
root 19152 1 0 18:58 ? 00:00:08 redis-server 0.0.0.0:7000 [cluster]
4.测试用redis-slave远程控制
#在slave执行的 Redis 命令,将字符串 "crushlinux" 存储在键名为 "name" 的键值对中
[root@redis-slave redis-cluster] redis-cli -h 192.168.1.134 -c -p 7000 set name crushlinux
OK
#用7001、7002查看
[root@redis-slave redis-cluster] redis-cli -h 192.168.1.134 -c -p 7001 get name
"crushlinux"
[root@redis-slave redis-cluster] redis-cli -h 192.168.1.134 -c -p 7002 get name
"crushlinux"
5.批量导入数据观察key的集群分布情况,分析cluster集群key的节点分布情况
[root@redis-slave ~] for line in `seq -w 10000`;do redis-cli -h 192.168.1.134 -p 7000 -c set key3_${line} value_${line};done
[root@redis-slave ~] redis-cli -h 192.168.1.134 -p 7000 info Keyspace
# Keyspace
db0:keys=3338,expires=0,avg_ttl=0
[root@redis-slave ~] redis-cli -h 192.168.1.134 -p 7001 info Keyspace
# Keyspace
db0:keys=3354,expires=0,avg_ttl=0
[root@redis-slave ~] redis-cli -h 192.168.1.134 -p 7002 info Keyspace
# Keyspace
db0:keys=3310,expires=0,avg_ttl=0
六、redis cluster 集群故障切换
1.启动redis-slave上所有的从库
[root@redis-slave ~] netstat -lnpt |grep redis
tcp 0 0 0.0.0.0:18000 0.0.0.0:* LISTEN 19072/redis-server
tcp 0 0 0.0.0.0:18001 0.0.0.0:* LISTEN 19077/redis-server
tcp 0 0 0.0.0.0:18002 0.0.0.0:* LISTEN 19082/redis-server
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 19072/redis-server
tcp 0 0 0.0.0.0:8001 0.0.0.0:* LISTEN 19077/redis-server
tcp 0 0 0.0.0.0:8002 0.0.0.0:* LISTEN 19082/redis-server
2.redis-cluster集群从库的添加,在redis-master上操作
添加第一组从服务器
[root@redis-master ~] redis-trib.rb add-node --slave 192.168.1.135:8000 192.168.1.134:7000
>>> Adding node 192.168.1.135:8000 to cluster 192.168.1.134:7000
/usr/local/lib/ruby/gems/2.5.0/gems/redis-3.2.0/lib/redis/client.rb:422: warning: constant ::Fixnum is deprecated
>>> Performing Cluster Check (using node 192.168.1.134:7000)
M: 2c5a4a7db65088e1d4825033e568ee9efef53290 192.168.1.134:7000
slots:0-5460 (5461 slots) master
0 additional replica(s)
M: ca4b7a19524133e5a2466cb3e7b59076e123ce62 192.168.1.134:7002
slots:10923-16383 (5461 slots) master
0 additional replica(s)
M: 17e761dfeb1aacf4da9a063cf67871dc2989434f 192.168.1.134:7001
slots:5461-10922 (5462 slots) master
0 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
Automatically selected master 192.168.1.134:7000
>>> Send CLUSTER MEET to node 192.168.1.135:8000 to make it join the cluster.
Waiting for the cluster to join.
>>> Configure node as replica of 192.168.1.134:7000.
[OK] New node added correctly.
添加第二组服务器
[root@redis-master ~] redis-trib.rb add-node --slave 192.168.1.135:8001 192.168.1.134:7001
>>> Adding node 192.168.1.135:8001 to cluster 192.168.1.134:7001
/usr/local/lib/ruby/gems/2.5.0/gems/redis-3.2.0/lib/redis/client.rb:422: warning: constant ::Fixnum is deprecated
>>> Performing Cluster Check (using node 192.168.1.134:7001)
M: 17e761dfeb1aacf4da9a063cf67871dc2989434f 192.168.1.134:7001
slots:5461-10922 (5462 slots) master
0 additional replica(s)
M: ca4b7a19524133e5a2466cb3e7b59076e123ce62 192.168.1.134:7002
slots:10923-16383 (5461 slots) master
0 additional replica(s)
M: 2c5a4a7db65088e1d4825033e568ee9efef53290 192.168.1.134:7000
slots:0-5460 (5461 slots) master
1 additional replica(s)
S: c9ea0afbd1734f3b1fb7ea1cd8b8d4e2357ff07f 192.168.1.135:8000
slots: (0 slots) slave
replicates 2c5a4a7db65088e1d4825033e568ee9efef53290
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
Automatically selected master 192.168.1.134:7001
>>> Send CLUSTER MEET to node 192.168.1.135:8001 to make it join the cluster.
Waiting for the cluster to join.
>>> Configure node as replica of 192.168.1.134:7001.
[OK] New node added correctly.
添加第三组服务器
[root@redis-master ~] redis-trib.rb add-node --slave 192.168.1.135:8002 192.168.1.134:7002
>>> Adding node 192.168.1.135:8002 to cluster 192.168.1.134:7002
/usr/local/lib/ruby/gems/2.5.0/gems/redis-3.2.0/lib/redis/client.rb:422: warning: constant ::Fixnum is deprecated
>>> Performing Cluster Check (using node 192.168.1.134:7002)
M: ca4b7a19524133e5a2466cb3e7b59076e123ce62 192.168.1.134:7002
slots:10923-16383 (5461 slots) master
0 additional replica(s)
S: 2d2fd7a884e8e1c388be576bbc83a82bfd34874d 192.168.1.135:8001
slots: (0 slots) slave
replicates 17e761dfeb1aacf4da9a063cf67871dc2989434f
M: 2c5a4a7db65088e1d4825033e568ee9efef53290 192.168.1.134:7000
slots:0-5460 (5461 slots) master
1 additional replica(s)
M: 17e761dfeb1aacf4da9a063cf67871dc2989434f 192.168.1.134:7001
slots:5461-10922 (5462 slots) master
1 additional replica(s)
S: c9ea0afbd1734f3b1fb7ea1cd8b8d4e2357ff07f 192.168.1.135:8000
slots: (0 slots) slave
replicates 2c5a4a7db65088e1d4825033e568ee9efef53290
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
Automatically selected master 192.168.1.134:7002
>>> Send CLUSTER MEET to node 192.168.1.135:8002 to make it join the cluster.
Waiting for the cluster to join.
>>> Configure node as replica of 192.168.1.134:7002.
[OK] New node added correctly.
3.查看集群所有节点信息
[root@redis-master ~] redis-cli -p 7000 cluster nodes
2c5a4a7db65088e1d4825033e568ee9efef53290 192.168.1.134:7000@17000 myself,master - 0 1688387168000 1 connected 0-5460
770de8d62fb988f4e5354cde0b973904716a301c 192.168.1.135:8002@18002 slave ca4b7a19524133e5a2466cb3e7b59076e123ce62 0 1688387170174 3 connected
c9ea0afbd1734f3b1fb7ea1cd8b8d4e2357ff07f 192.168.1.135:8000@18000 slave 2c5a4a7db65088e1d4825033e568ee9efef53290 0 1688387167147 1 connected
ca4b7a19524133e5a2466cb3e7b59076e123ce62 192.168.1.134:7002@17002 master - 0 1688387169000 3 connected 10923-16383
2d2fd7a884e8e1c388be576bbc83a82bfd34874d 192.168.1.135:8001@18001 slave 17e761dfeb1aacf4da9a063cf67871dc2989434f 0 1688387167000 2 connected
17e761dfeb1aacf4da9a063cf67871dc2989434f 192.168.1.134:7001@17001 master - 0 1688387169165 2 connected 5461-10922
4.slave从库的读写测试
[root@redis-slave ~] redis-cli -h 192.168.1.135 -c -p 8000
192.168.1.135:8000> set address henan
-> Redirected to slot [3680] located at 192.168.1.134:7000
OK
192.168.1.134:7000> exit
[root@redis-slave ~] redis-cli -h 192.168.1.135 -c -p 8000 get address
"henan"
[root@redis-slave ~] redis-cli -h 192.168.1.135 -c -p 8001 get address
"henan"
[root@redis-slave ~] redis-cli -h 192.168.1.135 -c -p 8002 get address
"henan"
[root@redis-slave ~] redis-cli -h 192.168.1.134 -c -p 7000 get address
"henan"
[root@redis-slave ~] redis-cli -h 192.168.1.134 -c -p 7001 get address
"henan"
[root@redis-slave ~] redis-cli -h 192.168.1.134 -c -p 7002 get address
"henan"
通过测试,我们发现redis的cluster集群不论是主库还是从库都可以进行set和get。因此,在使用中我们就没必要都去主库了。
5.查看主从cluster集群key的分布情况
[root@redis-master ~] redis-cli -h 192.168.1.134 -c -p 7000 info Keyspace
# Keyspace
db0:keys=3339,expires=0,avg_ttl=0
[root@redis-master ~] redis-cli -h 192.168.1.135 -c -p 8000 info Keyspace
# Keyspace
db0:keys=3339,expires=0,avg_ttl=0
[root@redis-master ~] redis-cli -h 192.168.1.134 -c -p 7001 info Keyspace
# Keyspace
db0:keys=3354,expires=0,avg_ttl=0
[root@redis-master ~] redis-cli -h 192.168.1.135 -c -p 8001 info Keyspace
# Keyspace
db0:keys=3354,expires=0,avg_ttl=0
[root@redis-master ~] redis-cli -h 192.168.1.134 -c -p 7002 info Keyspace
# Keyspace
db0:keys=3310,expires=0,avg_ttl=0
[root@redis-master ~] redis-cli -h 192.168.1.135 -c -p 8002 info Keyspace
# Keyspace
db0:keys=3310,expires=0,avg_ttl=0
发现7000和8000、7001和8001、7002和8002分布相同,主从正常
6.关掉7000端口的redis-server查看
[root@redis-master ~] redis-cli -h 192.168.1.134 -p 7000 shutdown
[root@redis-master ~] redis-cli -h 192.168.1.135 -p 8000 cluster nodes
770de8d62fb988f4e5354cde0b973904716a301c 192.168.1.135:8002@18002 slave ca4b7a19524133e5a2466cb3e7b59076e123ce62 0 1688387680826 3 connected
2d2fd7a884e8e1c388be576bbc83a82bfd34874d 192.168.1.135:8001@18001 slave 17e761dfeb1aacf4da9a063cf67871dc2989434f 0 1688387682854 2 connected
17e761dfeb1aacf4da9a063cf67871dc2989434f 192.168.1.134:7001@17001 master - 0 1688387680000 2 connected 5461-10922
2c5a4a7db65088e1d4825033e568ee9efef53290 192.168.1.134:7000@17000 master,fail - 1688387667273 1688387665657 1 disconnected 0-5460
c9ea0afbd1734f3b1fb7ea1cd8b8d4e2357ff07f 192.168.1.135:8000@18000 myself,slave 2c5a4a7db65088e1d4825033e568ee9efef53290 0 1688387683000 0 connected
ca4b7a19524133e5a2466cb3e7b59076e123ce62 192.168.1.134:7002@17002 master - 0 1688387683867 3 connected 10923-16383
8000被切换成master
7.重新启动7000端口的redis-server,再次查看
[root@redis-master ~] redis-server /data/redis-cluster/7000/redis.conf
[root@redis-master ~] redis-cli -h 192.168.1.135 -p 8000 cluster nodes
770de8d62fb988f4e5354cde0b973904716a301c 192.168.1.135:8002@18002 slave ca4b7a19524133e5a2466cb3e7b59076e123ce62 0 1688387876067 3 connected
2d2fd7a884e8e1c388be576bbc83a82bfd34874d 192.168.1.135:8001@18001 slave 17e761dfeb1aacf4da9a063cf67871dc2989434f 0 1688387873037 2 connected
17e761dfeb1aacf4da9a063cf67871dc2989434f 192.168.1.134:7001@17001 master - 0 1688387874046 2 connected 5461-10922
2c5a4a7db65088e1d4825033e568ee9efef53290 192.168.1.134:7000@17000 slave c9ea0afbd1734f3b1fb7ea1cd8b8d4e2357ff07f 0 1688387875057 4 connected
c9ea0afbd1734f3b1fb7ea1cd8b8d4e2357ff07f 192.168.1.135:8000@18000 myself,master - 0 1688387874000 4 connected 0-5460
ca4b7a19524133e5a2466cb3e7b59076e123ce62 192.168.1.134:7002@17002 master - 0 1688387875000 3 connected 10923-16383
7000变成了slave
8.手动将redis-server 7000 端口重新切换为主库
[root@redis-master ~] redis-cli -h 192.168.1.134 -c -p 7000 cluster failover
OK
[root@redis-master ~] redis-cli -h 192.168.1.135 -p 8000 cluster nodes
770de8d62fb988f4e5354cde0b973904716a301c 192.168.1.135:8002@18002 slave ca4b7a19524133e5a2466cb3e7b59076e123ce62 0 1688388038000 3 connected
2d2fd7a884e8e1c388be576bbc83a82bfd34874d 192.168.1.135:8001@18001 slave 17e761dfeb1aacf4da9a063cf67871dc2989434f 0 1688388038518 2 connected
17e761dfeb1aacf4da9a063cf67871dc2989434f 192.168.1.134:7001@17001 master - 0 1688388037000 2 connected 5461-10922
2c5a4a7db65088e1d4825033e568ee9efef53290 192.168.1.134:7000@17000 master - 0 1688388037511 5 connected 0-5460
c9ea0afbd1734f3b1fb7ea1cd8b8d4e2357ff07f 192.168.1.135:8000@18000 myself,slave 2c5a4a7db65088e1d4825033e568ee9efef53290 0 1688388036000 4 connected
ca4b7a19524133e5a2466cb3e7b59076e123ce62 192.168.1.134:7002@17002 master - 0 1688388037000 3 connected 10923-16383
7000端口重新变为master
9.如何删除节点? 不清空数据无法重新加入!
#查看8001节点ID
[root@redis-master ~] redis-cli -h 192.168.1.135 -p 8000 cluster nodes
770de8d62fb988f4e5354cde0b973904716a301c 192.168.1.135:8002@18002 slave ca4b7a19524133e5a2466cb3e7b59076e123ce62 0 1688388499015 3 connected
2d2fd7a884e8e1c388be576bbc83a82bfd34874d 192.168.1.135:8001@18001 slave 17e761dfeb1aacf4da9a063cf67871dc2989434f 0 1688388497000 2 connected
17e761dfeb1aacf4da9a063cf67871dc2989434f 192.168.1.134:7001@17001 master - 0 1688388499000 2 connected 5461-10922
2c5a4a7db65088e1d4825033e568ee9efef53290 192.168.1.134:7000@17000 master - 0 1688388500023 5 connected 0-5460
c9ea0afbd1734f3b1fb7ea1cd8b8d4e2357ff07f 192.168.1.135:8000@18000 myself,slave 2c5a4a7db65088e1d4825033e568ee9efef53290 0 1688388498000 4 connected
ca4b7a19524133e5a2466cb3e7b59076e123ce62 192.168.1.134:7002@17002 master - 0 1688388498004 3 connected 10923-16383
#删除8001节点
[root@redis-master ~] redis-trib.rb del-node 192.168.1.135:8001 '2d2fd7a884e8e1c388be576bbc83a82bfd34874d'
>>> Removing node 2d2fd7a884e8e1c388be576bbc83a82bfd34874d from cluster 192.168.1.135:8001
/usr/local/lib/ruby/gems/2.5.0/gems/redis-3.2.0/lib/redis/client.rb:422: warning: constant ::Fixnum is deprecated
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.
#清空8001节点现有数据
[root@redis-slave ~]# ps -ef|grep 8001
root 29157 18970 0 20:54 pts/0 00:00:00 grep --color=auto 8001
[root@redis-slave ~]# kill -9 18970
已杀死
[root@slave ~] cd /data/redis-cluster/8001/
[root@slave 8001]# ll
总用量 92
-rw-r--r--. 1 root root 80672 7月 3 20:50 dump.rdb
-rw-r--r--. 1 root root 805 7月 3 20:40 nodes.conf
-rw-r--r--. 1 root root 1401 7月 3 19:18 redis.conf
-rw-r--r--. 1 root root 4046 7月 3 20:50 redis.log
[root@slave 8001] rm -rf dump.rdb
[root@slave 8001] rm -rf nodes.conf
10.重新加入节点
[root@slave 8001] redis-server /data/redis-cluster/8001/redis.conf
[root@master ~] redis-trib.rb add-node --slave 192.168.1.135:8001 192.168.1.134:7001
>>> Adding node 192.168.1.135:8001 to cluster 192.168.1.134:7001
/usr/local/lib/ruby/gems/2.5.0/gems/redis-3.2.0/lib/redis/client.rb:422: warning: constant ::Fixnum is deprecated
>>> Performing Cluster Check (using node 192.168.1.134:7001)
M: 17e761dfeb1aacf4da9a063cf67871dc2989434f 192.168.1.134:7001
slots:5461-10922 (5462 slots) master
0 additional replica(s)
S: 770de8d62fb988f4e5354cde0b973904716a301c 192.168.1.135:8002
slots: (0 slots) slave
replicates ca4b7a19524133e5a2466cb3e7b59076e123ce62
M: ca4b7a19524133e5a2466cb3e7b59076e123ce62 192.168.1.134:7002
slots:10923-16383 (5461 slots) master
1 additional replica(s)
M: 2c5a4a7db65088e1d4825033e568ee9efef53290 192.168.1.134:7000
slots:0-5460 (5461 slots) master
1 additional replica(s)
S: c9ea0afbd1734f3b1fb7ea1cd8b8d4e2357ff07f 192.168.1.135:8000
slots: (0 slots) slave
replicates 2c5a4a7db65088e1d4825033e568ee9efef53290
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
Automatically selected master 192.168.1.134:7001
>>> Send CLUSTER MEET to node 192.168.1.135:8001 to make it join the cluster.
Waiting for the cluster to join.
>>> Configure node as replica of 192.168.1.134:7001.
[OK] New node added correctly.
七、总结
redis cluster 集群,无论主库还是从库都可以进行set和get,有一个主机master宕机,自动切换其从服务器变成主服务器,宕机的服务器重新加入后i,自动变为从服务器!