一、redis迁移概述。
生产环境Redis当前部署环境为六台16核126G服务器,服务器资源整体配置较高,使用率较低(具体使用率参见表一)。为了更好地提升资源使用率,优化成本,故对redis cluster集群做迁移和合并。Redis cluster集群的迁移步骤为:首先安装redis集群,再次迁移redis数据,最后做业务切换。切换完成后做业务检查和服务器其他部署业务迁移,服务迁移后关机观察。观察一段时间待系统平稳运行后,释放服务器。
二、redis迁移前后架构分析。
Redis迁移前集群主要是六台服务器三主三从组成,不存在主从节点在同一节点的问题。Redis缩容后只保留三台服务器节点,所以必须做到主从交叉,不然当一个主节点服务器出现故障后,从节点和主节点在一个服务器上面便会出现主从不一致的情况。
图二 当前部署模式
图三 缩容后部署模式。
三、迁移前部署环境。
- K8s集群节点。
- Redis集群环境。Redis 版本4.0.14。
- Redis硬件部署环境,详见下表。
服务器IP |
内核 |
内存 |
内存使用率 |
服务器硬盘使用率 |
xxx.xxx.51.180 |
16 |
126 |
0.70% |
根目录:23% /data:3% 其他(260G):2% |
xxx.xxx.51.181 |
16 |
126 |
16% |
根目录:43% 其他(260G):2% |
xxx.xxx.51.182 |
16 |
126 |
40% |
根目录:59% /data:1% 其他(252G):2% |
xxx.xxx.51.183 |
16 |
126 |
52% |
根目录:40% /data:1% 其他(252G):2% |
xxx.xxx.51.184 |
16 |
126 |
37% |
根目录:4% /data:84% 其他(252G):2% |
xxx.xxx.51.185 |
16 |
126 |
38% |
根目录:67% /data:38% 其他(252G):2% |
表一
四、Redis新集群部署。
- 安装依赖。
yum -y install gcc-c++ wget
yum install gcc g++ gcc-c++ make -y
yum install ruby rubygems -y
yum install -y rh-ruby30
scl enable rh-ruby30 bash
ruby -v
gem source -a http://mirrors.aliyun.com/rubygems/ -remove https://rubygems.org/
gem install redis -v 4.1.0
- Redis 下载编译安装。
下载redis 安装包,服务器已经下载在xxx.xxx.79.56地址下的/usr/local/redis-4.0.14.tar.gz。
tar axf redis-4.0.10.tar.gz && cd redis-4.0.10
make&&make install PREFIX=/usr/local/redis
cp -a /usr/local/redis/redis-server /usr/local/bin/redis-server
scp -rp /usr/local/redis [email protected]:/usr/local/
scp -rp /usr/local/redis [email protected]:/usr/local/
- 修改配置文件
sed -i 's#xxx.xxx.56.67#xxx.xxx.79.56#g' /usr/local/redis/conf*.conf
- 启动redis服务。
[root@master2 redis]# cat start-all.sh
#!/bin/bash
cd /usr/local/redis/conf/
redis-server redis-6377.conf
redis-server redis-6378.conf
- 设置redis 加入集群。
cd /usr/local/redis
./redis-trib.rb create --replicas 1 xxx.xxx.79.56:6377 xxx.xxx.79.56:6378 xxx.xxx.51.179:6377 xxx.xxx.51.179:6378 xxx.xxx.79.44:6377 xxx.xxx.79.44:6378
- 检查redis集群状态。
/usr/local/redis/redis-cli -h xxx.xxx.79.56 -p 6378 -c
检查redis nodes 状态
Redis会随机分配,如果主从在一个节点上则需要重新制定主节点。
在从节点上面指定新的主节点:
cluster replicate bb0437622d05d9020fd588a8a6e379f8d34681a2
Redis配置文件如下:
[root@master2 conf]# cat redis-6377.conf
bind xxx.xxx.79.56
protected-mode yes
port 6377
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis_6377.pid
logfile "/usr/local/redis/logs/6377.log"
dir "/usr/local/redis/data/"
loglevel notice
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump-6377.rdb
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
slave-lazy-flush no
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble no
lua-time-limit 5000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
cluster-require-full-coverage no
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
五、Redis 数据平滑迁移。
git clone https://github.com/vipshop/redis-migrate-tool.git
cd redis-migrate-tool
yum -y install automake libtool autoconf bzip2
autoreconf -fvi
./configure
make
./src/redis-migrate-tool
修改 rmt.conf 文件为:
[source]
type: redis cluster # 源redis类型
servers :
- 127.0.0.1:7001 # 源redis地址,可以只填一个,保证cluster nodes能获取到正常信息即可
[target]
type: redis cluster # 目标redis类型
servers:
- 127.0.0.1:8001 # 目标redis地址
[common]
listen: 0.0.0.0:8888 # 服务启动后,监听的地址和端口
启动迁移工具:
./src/redis-migrate-tool -c rmt.conf
查看全部完成迁移的提示。
All nodes' rdb file parsed finished for this write thread(0).
六、服务切换新的redis地址。
根据项目的不同进入到gitlab代码库修改配置文件和nacos修改redis的配置文件。gitlab代码库位置http://xxx.xxx.55.114:8087/
nodeAddresses: redis://xxx.xxx.51.180:6380,redis://xxx.xxx.51.181:6380,redis://xxx.xxx.51.182:6380,redis://xxx.xxx.51.183:6380,redis://xxx.xxx.51.184:6380,redis://xxx.xxx.51.185:6380
nodes: # Comma-separated list of "host:port" pairs to bootstrap from.
"xxx.xxx.51.180:6380,xxx.xxx.51.181:6380,xxx.xxx.51.182:6380,xxx.xxx.51.183:6380,xxx.xxx.51.184:6380,xxx.xxx.51.185:6380"
Nacos 具体链接询问开发。
七、切换后业务业务检查。
- 切换完成后,检查后端pod服务等运行是否正常,后端是否有报错等异常情况。
- 检查业务运行速度是否正常。
- 检查系统资源使用是否正常,预防高配置迁移低配置系统资源占用过高的情况。
八、业务切换完成后驱逐pod。
1.node节点配置pod不可调度到该节点上。
kubectl get nodes
kubectl cordon nodename或IP
执行完成后检查为不可调度,再执行下一步。
2.node节点上的服务驱逐。
kubectl drain --ignore-daemonsets <NODE_NAME>
kubectl get pod --all-namespaces -o wide
检查节点pod是否驱逐完成
3.node节点下线。
kubectl delete nodes k8s-node2
4.驱逐前后需要观察pod的状态是否在其他节点正常。
九、服务全部迁移后系统关机观察。
关机一段时间后,确认业务已迁移和备份后做后释放云主机。
TRANSLATE with x English TRANSLATE with COPY THE URL BELOW Back EMBED THE SNIPPET BELOW IN YOUR SITE Enable collaborative features and customize widget: Bing Webmaster Portal Back 标签:xxx,redis,cluster,xxx.51,usr,迁移,local,节点 From: https://www.cnblogs.com/gaoyuechen/p/18076965