redis集群版本升级小测试
redis版本升级的一个小测试
redis-5.0.14.tar.gz 升级到 redis-6.0.16.tar.gz
源码编译
[root@node1 ~]# yum -y install gcc make
[root@node1 ~]# tar xf redis-5.0.14.tar.gz
[root@node1 ~]# cd redis-5.0.14/
[root@node1 redis-5.0.14]# make
[root@node1 redis-5.0.14]# make PREFIX=/opt/redis5 install
[root@node1 ~]# cd /opt/redis5
[root@node1 redis5]# ls -R
./bin:
redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server
双节点:192.168.1.11 192.168.1.12
六实例:192.168.1.11:6381 192.168.1.11:6382 192.168.1.11:6383
192.168.1.12:6381 192.168.1.12:6382 192.168.1.12:6383
192.168.1.11:6381
[root@node1 redis5]# ss -antup |egrep '6381|6382|6383' #查看端口是否占用
[root@node1 redis5]# mkdir {6381,6382,6383}
[root@node1 redis5]# cp /root/redis-5.0.14/redis.conf 6381/
[root@node1 redis5]# vim 6381/redis.conf
69 bind 192.168.11
92 port 6381
136 daemonize yes
159 pidfile /opt/redis5/6381/redis_6381.pid
172 logfile "/opt/redis5/6381/redis6381.log"
264 dir /opt/redis5/6381/ # 设置redis数据写入目录
#501 # requirepass 12345 #如果需要密码,可以打开
673 appendonly yes # aof日志开启 有需要就开启
677 appendfilename "appendonly.aof" # aof日志文件名
815 cluster-enabled yes
192.168.1.11:6382
[root@node1 redis5]# cp 6381/redis.conf 6382/
[root@node1 redis5]# sed -i 's/6381/6382/g' 6382/redis.conf
port 6382
pidfile /opt/redis5/6382/redis_6382.pid
logfile "/opt/redis5/6382/redis6382.log"
dir /opt/redis5/6382/ #其他实例配置相同,不再记录步骤
启动实例
[root@node1 redis5]# /opt/redis5/bin/redis-server 6381/redis.conf
...
[root@node1 redis5]# ps -ef |grep redis
root 5657 1 0 15:41 ? 00:00:00 ./bin/redis-server 192.168.1.11:6381 [cluster]
root 5662 1 0 15:41 ? 00:00:00 ./bin/redis-server 192.168.1.11:6382 [cluster]
root 5667 1 0 15:41 ? 00:00:00 ./bin/redis-server 192.168.1.11:6383 [cluster]
创建集群
[root@node1 redis5]# ./bin/redis-cli --cluster create --cluster-replicas 1 192.168.1.11:6381 192.168.1.11:6382 192.168.1.11:6383 192.168.1.12:6381 192.168.1.12:6382 192.168.1.12:6383
[root@node1 redis5]# ./bin/redis-cli -h 192.168.1.11 -p 6381
192.168.1.11:6381> cluster nodes
9a46ec469a5d8ff955a10d6d1f797605b8c127a2 192.168.1.12:6381@16381 master - 0 1663141654000 4 connected 5461-10922
877ef47d822dc17a68e05b3cf7f7a0d8502864e1 192.168.1.12:6383@16383 slave aa4f11b33c386570a1daee5ac5e2d0fe6e9fa85e 0 1663141656159 6 connected
e6b40ada37f8ffa40f3c4a0ba30b0144e85d9a30 192.168.1.11:6382@16382 master - 0 1663141655000 2 connected 10923-16383
6bec0674d1eddc10feff237f75baf75d8aa85c69 192.168.1.11:6383@16383 slave 9a46ec469a5d8ff955a10d6d1f797605b8c127a2 0 1663141655143 4 connected
aa4f11b33c386570a1daee5ac5e2d0fe6e9fa85e 192.168.1.11:6381@16381 myself,master - 0 1663141652000 1 connected 0-5460
7291871072e6b4127b61621736019a2db1f90100 192.168.1.12:6382@16382 slave e6b40ada37f8ffa40f3c4a0ba30b0144e85d9a30 0 1663141654000 5 connected
master-slave 关系如下
192.168.1.11:6381@16381 master 192.168.1.12:6383@16383 slave
192.168.1.11:6382@16382 master 192.168.1.12:6382@16382 slave
192.168.1.12:6381@16381 master 192.168.1.11:6383@16383 slave
连接master实例顺便写入几个数据,用于测试
[root@node1 redis5]# ./bin/redis-cli -h 192.168.1.11 -p 6381 set name1 01
...
[root@node1 redis5]# ./bin/redis-cli -h 192.168.1.11 -p 6381 dbsize
(integer) 6
[root@node1 redis5]# ./bin/redis-cli -h 192.168.1.11 -p 6382 dbsize
(integer) 2
[root@node1 redis5]# ./bin/redis-cli -h 192.168.1.12 -p 6381 dbsize
(integer) 1
slave数据同步情况
[root@node1 redis5]# ./bin/redis-cli -h 192.168.1.12 -p 6383 dbsize
(integer) 6
[root@node1 redis5]# ./bin/redis-cli -h 192.168.1.12 -p 6382 dbsize
(integer) 2
[root@node1 redis5]# ./bin/redis-cli -h 192.168.1.11 -p 6383 dbsize
(integer) 1
安装redis6
[root@node1 ~]# tar xf redis-6.0.16.tar.gz
[root@node1 ~]# cd redis-6.0.16/
[root@node1 redis-6.0.16]# make
... #报错就,需要升级gcc重新编译
In file included from server.c:30:0:
server.h:1084:5: error: expected specifier-qualifier-list before ‘_Atomic’_Atomic unsigned int lruclock; /* Clock for LRU eviction */
[root@node1 redis-6.0.16]# sudo yum install centos-release-scl
[root@node1 redis-6.0.16]# sudo yum install devtoolset-7-gcc*
[root@node1 redis-6.0.16]# scl enable devtoolset-7 bash
[root@node1 redis-6.0.16]# gcc -v
....
gcc version 7.3.1 20180303 (Red Hat 7.3.1-5) (GCC)
[root@node1 redis-6.0.16]# make
[root@node1 redis-6.0.16]# make PREFIX=/opt/redis6 install
[root@node1 redis-6.0.16]# ls /opt/
redis5 redis6
新的六实例:
192.168.1.11:6481 192.168.1.11:6482 192.168.1.11:6483
192.168.1.12:6481 192.168.1.12:6482 192.168.1.12:6483
搭建同上,不再记录
升级考虑一 加入新从,删掉旧从,切换主从,(失败了)
#指定master加入
[root@node1 redis5]# ./bin/redis-cli add-node --slave --master-id aa4f11b33c386570a1daee5ac5e2d0fe6e9fa85e 192.168.1.11:6481 192.168.1.11:6381
#第一个为新增节点,第二个为集群中已知存在节点
#直接加入的话,会默认为master,不要这样加入
[root@node1 redis5]# ./bin/redis-cli --cluster add-node 192.168.1.11:6481 192.168.1.11:6381
#删除节点
[root@node1 redis5]# ./bin/redis-cli --cluster del-node 192.168.1.11:6481 382f910845f25d89a26848bc731876296dae6a91
查看从
[root@node1 redis5]# ./bin/redis-cli -h 192.168.1.11 -p 6381
现在192.168.1.11:6381下有两个从了
192.168.1.11:6381> cluster nodes
...
f0275563e6998d7c29ad4c78fff494518144cf83 192.168.1.11:6481@16481 slave aa4f11b33c386570a1daee5ac5e2d0fe6e9fa85e 0 1663152638000 1 connectedaa4f11b33c386570a1daee5ac5e2d0fe6e9fa85e 192.168.1.11:6381@16381 myself,master - 0 1663152636000 1 connected 0-5460877ef47d822dc17a68e05b3cf7f7a0d8502864e1 192.168.1.12:6383@16383 slave aa4f11b33c386570a1daee5ac5e2d0fe6e9fa85e 0 1663152638990 6 connected
#查看从数据信息完整性
[root@node1 redis5]# ./bin/redis-cli -h 192.168.1.11 -p 6481 dbsize
(integer) 6
删除旧的从
[root@node1 redis5]# ./bin/redis-cli --cluster del-node 192.168.1.12:6383 877ef47d822dc17a68e05b3cf7f7a0d8502864e1>>> Removing node 877ef47d822dc17a68e05b3cf7f7a0d8502864e1 from cluster 192.168.1.12:6383
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.
手动切主从: 报AOF不支持,考虑加入两个新从,停掉旧主让他自动切换主从
192.168.1.11:6381> slaveof 192.168.1.11 6481
(error) ERR REPLICAOF not allowed in cluster mode.
# 切换时,报错了,不能直接切 考虑 加入两个从 停掉master
[root@node1 redis6]# ./bin/redis-cli --cluster add-node --cluster-slave 192.168.1.11:6482 192.168.1.11:6381 #实例ip记得分散一下,这里没区分[root@node1 redis6]# ./bin/redis-cli -h 192.168.1.11 -p 6381
192.168.1.11:6381> cluster nodes 只看了6381的redis
4d0594a5cd2c3613489181fbfa0e97c65222c89e 192.168.1.11:6482@16482 slave aa4f11b33c386570a1daee5ac5e2d0fe6e9fa85e 0 1663154435000 1 connected
f0275563e6998d7c29ad4c78fff494518144cf83 192.168.1.11:6481@16481 slave aa4f11b33c386570a1daee5ac5e2d0fe6e9fa85e 0 1663154435000 1 connected
aa4f11b33c386570a1daee5ac5e2d0fe6e9fa85e 192.168.1.11:6381@16381 myself,master - 0 1663154435000 1 connected 0-5460
检查第二个从数据信息一致性
[root@node1 redis6]# ./bin/redis-cli -h 192.168.1.11 -p 6482 dbsize
(integer) 6
其他两个master同样操作。操作完成后一主(redis5的主)两从(redis6的从)九个实例
配置服务新的redis集群连信息,准备重启, 等到业务访问较低的时候,停掉3个旧的master
让他自动切换主从。
[root@node1 redis6]# ps -ef | grep 6381
root 1455 1 0 16:44 ? 00:00:23 ./bin/redis-server 192.168.1.11:6381 [cluster]
[root@node1 redis6]# kill -9 1455
[root@node1 redis6]# ./bin/redis-cli -h 192.168.1.11 -p 6481
192.168.1.11:6481> cluster nodes #一组新的redis主从 使用的是648x的端口
f0275563e6998d7c29ad4c78fff494518144cf83 192.168.1.11:6481@16481 myself,slave 4d0594a5cd2c3613489181fbfa0e97c65222c9e 0 1663154544000 7 connected
4d0594a5cd2c3613489181fbfa0e97c65222c89e 192.168.1.11:6482@16482 master - 0 1663154546849 7 connected 0-5460
192.168.1.11:6481> info
# Server
redis_version:6.0.16 #查看redis实例的版本