中间件 · 2023年12月26日 0

无缝(在线)迁移redis节点

1、提前准备好新节点

# 下载安装包
wget https://download.redis.io/releases/redis-6.2.7.tar.gz

#解压
tar zxvf redis-6.2.7.tar.gz

# 依赖包安装
yum -y install gcc 

# 安装
cd ./redis-6.2.7
make distclean && make MALLOC=jemalloc && make install

# 启动
redis-server

# systemctl管理
systemctl start redis
vim /usr/lib/systemd/system/redis.service

[Unit]
Description=Redis persistent key-value database
After=network.target

[Service]
WorkingDirectory=/opt/redis
##Type=forking
#PIDFile和redis.conf配置中一致
PIDFile=/var/run/redis.pid
ExecStart=/usr/local/bin/redis-server /opt/redis/redis.conf --supervised systemd
#重新加载和停止服务的命令
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=on-failure
RestartSec=42s

#系统以默认多用户方式启动时,此服务自动运行。
[Install]
#Alias:服务别名
WantedBy=multi-user.target

2、查看当前状态

redis-cli -h 10.10.1.10 -p 6379 cluster nodes

3、把要退出的节点切换为从节点,如果已经是从节点了,则不用执行切换命令

redis-cli -h 10.10.1.10 -p 6379 cluster failover

4、把新节点新加入集群

redis-cli -h 10.10.1.10 -p 6379 cluster meet 10.10.1.5 6379 

5、把新节点设置为从节点

redis-cli -h 10.10.1.5 -p 6379 cluster replicate 1986c6fdf42ed3306268bacf1b4c7badb9afc357

6、查看同步进度

redis-cli -h 10.10.1.10 -p 6379 info Replication

7、当新从节点同步完成后,把旧从节点关闭

# 如果是systemctl管理,则使用 systemctl stop redis

ps aux |grep redis-server|grep -v grep |awk '{print $2}' |xargs kill

8、将关闭的从节点从集群中退出

# 每个节点都要执行一次
redis-cli -h 10.10.1.10 -p 6379 cluster forget fd86263ec08c7b9d6f7265285d8311fdf5c9ac7a

咨询请添加V:oneaicat