> 文章列表 > redis集群版本升级小测试

redis集群版本升级小测试

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实例的版本

日月晶采美妆网