redis集群双活-数据迁移
一、redis双活
1、集群搭建 (一主两从)
Redis-Sentinel是redis官方推荐的高可用性解决方案,sentinel哨兵是特殊的redis服务,不提供读写服务,主要用来监控redis实例节点,当用redis作master-slave的高可用时,如果master本身宕机,redis本身或者客户端都没有实现主从切换的功能,而redis-sentinel就是一个独立运行的进程,用于监控多个master-slave集群, 自动发现master宕机,进行自动切换slave > master,类似Java这类客户端会通过sentinel发现redis主节点并与其建立连接,也可以实现读写分离。
环境准备:
192.168.43.145 (master)
192.168.43.146 (slave)
192.168.43.121 (slave)
三台机器下载安装包:
#存放目录
/app/redis
#下载安装包
#解压
tar -zxvf redis-7.0.9.tar.gz
#由于redis是c语言编写的,所以我们需要先安装gcc,安装的命令如下:
yum install gcc-c++
#然后
cd redis-7.0.9
make
主节点下:
vim redis.conf
修改
bind 192.168.43.145
replica-read-only no
vim sentinel.conf
修改
sentinel monitor mymaster 192.168.43.145 6379 2
192.168.43.146从节点下:
vim redis.conf
修改
bind 192.168.43.146
replicaof 192.168.43.145 6379
vim sentinel.conf
修改
sentinel monitor mymaster 192.168.43.145 6379 2
192.168.43.121从节点下:
vim redis.conf
修改
bind 192.168.43.121
replicaof 192.168.43.145 6379
vim sentinel.conf
修改
sentinel monitor mymaster 192.168.43.145 6379 2
启动服务:
./src/redis-sentinel ./sentinel.conf >> sentinel.log &
./src/redis-server ./redis.conf >> server.log &
#是否有报错
tail -f server.log
注:如果报从节点无法copy,关闭主节点防火墙后,再重启防火墙
systemctl stop firewalld
systemctl start firewalld
systemctl status firewalld
登录主机节点查看集群信息:
cd src
./redis-cli -h 192.168.43.145 -p 6379
info replication
至此集群搭建完毕!
二、数据迁移实时同步:redis-shake
安装目录 /app/redis-shake
tar -zxvf redis-shake-linux-amd64.tar.gz
修改配置文件 shake.toml
vim shake.toml
[sync_reader]下
cluster = false #主从模式这里为fales
address = "xxx.xxx.xxx.xxx:6379" # 源集群主节点ip
username = "" # redis源集群用户名,没有可为空
password = "" # 源集群密码,没有可为空
[redis_writer]下
cluster = false # 主从模式这里为fales
address = "xxx.xxx.xxx.xxx:6379" # 目标集群主节点ip
username = "" #redis目标集群用户名,没有可为空L
password = "" # 目标集群密码,没有可为空
#同步数据在目标集群下将进行重写
rdb_restore_command_behavior = "rewrite " # panic, rewrite or skip
保存退出后
启动命令:
./redis-shake shake.tool >> shake.log &
验证:
1、登录新老集群 执行 DBSIZE 查看数据量是否一致
2、在老集群下新增数据 新集群下能否实时查到
注:redis-shake 工具可能因为某些原因进程挂掉
建议编写自启脚本 启动
放置 /app/redis-shake 目录下
直接启动,start.sh即可
当需要切换集群时,将工具反向配置一下即可。注不能在两个集群中同时启动redis-shake,负责数据将不断在两集群间无限复制