借助阿里云工具redis-sync-manager实现redis_cluster集群迁移

前提.需要了解部分

1.redis-xx.gem download for all version: https://rubygems.org/gems/redis/versions

2.Ruby Version Manager: http://rvm.io/

3.cluster-tutorial: https://redis.io/topics/cluster-tutorial

4. If you are using Redis 5, this is very easy to accomplish as we are helped by the Redis Cluster command line utility embedded into redis-cli, that can be used to create new clusters, check or reshard an existing cluster, and so forth.

5. For Redis version 3 or 4, there is the older tool called redis-trib.rb which is very similar. You can find it in the src directory of the Redis source code distribution. You need to install redis gem to be able to run redis-trib.

6. redis 创建集群前不要设置密码,待集群创建完毕后再进行动态设置或者手动设置密码

7. 集群信息
  cluster1 ip: 192.168.2.45
  cluster2 ip: 192.168.2.46

8. 集群创建命令
   /usr/local/redis/bin/redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 

9. redis 集群迁移参考
   https://help.aliyun.com/document_detail/85180.html?spm=5176.10695662.1996646101.searchclickresult.44de3227LKgrA7

一.场景描述

1.1 cluster1中的数据 因为业务原因 需要实时同步到cluster2 调研发现 阿里云提供的redis-sync-manager工具满足需要。

1.2 使用脚本模拟数据插入 以便于模拟迁移。

#!/bin/bash
# Redis 集群key写入测试
# redis-cli -c 切记 必须加-c参数启动集群模式 否则redis操作key时出现以下错误
# (error) MOVED 5798 127.0.0.1:6379

for ((i=0;i<10000000;i++))
do
  echo "key$i 写入完毕!"
  echo -en  "hiredis$i"|/usr/local/redis/bin/redis-cli -c -x set jesse$i
done

二.安装redis-sync-manager 并将A集群数据实时同步至B集群

(一).使用前提

1.需要在环境变量$PATH中定义redis-port,因为redis-sync-manager在运行过程中会依赖于redis-port。
2.运行时需要注意集群的基本数据及当前并发度可能会占用的内存。
3.请保证源集群不处于slot迁移的中间态。
4.redis-port && redis-sync-manager
5.下载redis-port 到 /bin/下因为redis集群迁移工具redis-sync-manager会依赖redis-port
6.redis-port:用于实现从单个Redis进程到目标集群的数据同步。具体操作请参见使用redis-port进行迁移。
7.redis-sync-manager:用于从自建Redis集群到云数据库Redis集群版的数据同步。
8.wget http://dl.zhangluya.com/redis/aliyun_redis-tools/redis-port -P /bin/ && chmod a+x /bin/redis-port 
9.wget http://dl.zhangluya.com/redis/aliyun_redis-tools/redis-sync-manager -P /bin/ && chmod a+x /bin/redis-sync-manager

(二).迁移操作

redis-sync-manager --from=127.0.0.1:6379  
   --target=192.168.2.46:6379 --rewrite   
   --logfile=/tmp/sync.log --sync-parallel=1 --sync-role=master

// 如集群有密码 请添加如下命令  
  redis-sync-manager --from=127.0.0.1:6379  
  --target=192.168.2.46:6379 --password=src_password  
  --auth=dst_password --rewrite --logfile=/tmp/sync.log   
  --sync-parallel=1 --sync-role=master

1.相关参数

redis-sync-manager参数信息

2.执行命令截图

redis-sync-manager执行图片

3.Redis异地集群同步截图

Redis异地集群同步截图

三.注意事项

1.redis-snyc-manager因为默认不提供后台模式 我们可以借助screen/nohup  
将其放入后台运行。
2.需要注意如下参数 可能会导致同步失败
  rdbchecksum yes
  client-output-buffer-limit slave 1024mb 1024mb 300
3. 需要些脚本定期检查后台进程是否正常运行 如果进程失败需要手动处理下。

四.redis.conf 配置文件参考

daemonize yes
pidfile /data/redis/6379/6379.pid
port 6379

# TCP监听的最大容纳数量在高并发的环境下,你需要把这个值调高以避免客户端连接缓慢的问题
# Linux内核会一声不响的把这个值缩小成/proc/sys/net/core/somaxconn对应的值,所以你要
# 修改这两个值才能达到你的预期
tcp-backlog 10240

timeout 300
unixsocket /dev/shm/redis.sock
unixsocketperm 700
tcp-keepalive 60
loglevel notice
logfile "/data/redis/6379/6379.log"

# 如果做数据持久化 则打开如下设置
save 600 1
save 300 10
save 60 10000

databases 16
stop-writes-on-bgsave-error yes
rdbcompression no
rdbchecksum yes
dbfilename 6379.rdb
dir /data/redis/6379/
slave-serve-stale-data yes

# slave提升为master 则需要注意此行
slave-read-only yes

repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

# redis在启动的时候可以加载被截断的AOF文件 默认启用
aof-load-truncated yes
lua-time-limit 5000

# 超过10毫秒的操作就被记录下来
slowlog-log-slower-than 10000

# 保留的最大条数
slowlog-max-len 1024

maxmemory 10gb

# 默认为10240 峰值保持在5000左右为正常状态
maxclients 19999

latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
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 1024mb 1024mb 300
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
bind 0.0.0.0

# 如果为集群 请打开此项
cluster-enabled yes
cluster-config-file /data/redis/6379/nodes.conf
cluster-node-timeout 5000

# 默认情况下集群master无slave的情况下 如果挂掉 整个集群将会进入fail状态
# 启用该配置 即使有部分slot没有被覆盖 被覆盖到的那部分slot构成的子集群仍然可用。
cluster-require-full-coverage yes

# 设置验证登陆密码
# requirepass lqVWeFhz3IamycK2L3hAI76u3Ucd17jN

# 危险命令重命名
rename-command FLUSHALL lqVWeFhz3IamycK2L3hAI76u3Ucd17jN

# 规避Redis未授权访问缺陷可轻易导致系统被黑问题
# rename-command CONFIG 4g4EC-dLThmp37%L#TGsA8Z

# 如果要禁用某些命令 那么可以将这些字符串重命名为空字符串
# rename-command keys ""

# 如果是slave 则打开如下
# slaveof master-ip master-port
# masterauth master-pwd
# requirepass 7ed3560c54ae6469799ad17a588d7f3b
Copyright © zhangluya.com 2019            UPDATE 2019-09-03 18:05:06

results matching ""

    No results matching ""