由于Redis集群Cluster模式在创建时自动维护了集群信息,迁移完成后需要重建集群。
操作步骤
- 在所有目标服务器上安装Redis。
- 可选:安装完成之后,可配置systemd。
- 将Redis默认service拷贝至/usr/lib/systemd/system。可通过如下命令查找redis.service所在路径。
| find / -name redis.service
|
- 打开redis.service文件,修改"ExecStart="内容,格式为:
| ExecStart={install_path}/bin/redis-server {conf_path}
|
- 修改完成后加载redis.service。
- 启动Redis服务。
| systemctl start redis.service
|
- 检查服务是否启动。
| systemctl status redis.service
|
当“Active”字段显示包含“active(running)”表示成功。
- 启动Redis服务。
- 方式一:使用Redis自带脚本启动
| ${redis-server目录} ${redis.conf目录}
|
- 方式二:使用systemd启动
- 启动Redis服务。
| systemctl start redis.service
|
- 检查服务是否启动。
| systemctl status redis.service
|
当“Active”字段显示包含“active(running)”表示成功。
确保所有参与集群的Redis实例均已启动,并且运行在集群模式下,即redis.conf文件中设置cluster-enabled yes和相应的cluster-config-file配置。
- 根据版本选择合适的命令构建集群。
- 在目标集群任意节点,通过以下查询Redis集群Master节点。
进入Redis的src目录下,通过redis-cli连接Redis实例,默认端口号为6379。
| ./redis-cli -c -p 6379
cluster nodes
|
- 安装RedisShake工具,并使用工具分别在每个节点上迁移对应的Redis数据文件。该工具各版本配置存在差异,本指导以v4.1.1为例。
- 下载RedisShake工具,并将下载的安装包上传至每个目标节点,示例安装目录:/home/redisShake/。
| mkdir -p /home/redisShake/
|
- 解压安装包。
| tar xzvf redis-shake-linux-arm64.tar.gz -C /home/redisShake/
|
- 进入解压后目录,修改配置文件“shake.toml”。
- 需注释的reader配置:[sync_reader]、[scan_reader]
- 需使用的reader配置:[rdb_reader]、[aof_reader]、[redis_writer]
- 根据源数据文件路径修改[rdb_reader]和[aof_reader]的“filepath”字段,若同时配置[rdb_reader]和[aof_reader],则[rdb_reader]优先级较高。
- 将[redis_writer]的“cluster”字段设置为“true”。
- 将[redis_writer]的“address”字段设置为<节点_IP地址>:<端口>,配置任意Master节点的IP地址和端口号即可。
如下为示例,其余配置保持默认或按需修改即可:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | [rdb_reader]
filepath = "/devkit_sysmig_disk/path/to/your/redis/data/dump.rdb"
[aof_reader]
filepath = "/devkit_sysmig_disk/path/to/your/redis/data/appendonly.aof"
timestamp = 0 # subsecond
[redis_writer]
cluster = true # set to true if target is a redis cluster
sentinel = false # set to true if target is a redis sentinel
master = "" # set to master name if target is a redis sentinel
address = "ip:port" # when cluster is true, set address to one of the cluster node
username = "" # keep empty if not using ACL
password = "" # keep empty if no authentication is required
tls = false
off_reply = false # turn off the server reply
|
- 使用如下命令进行迁移。
回显或日志中出现“all done”,代表同步完成。
- 在目标集群任意节点,通过get key方式确认数据是否已迁移。key为源Redis存储的键值,请根据实际键值进行替换。
进入Redis的src目录下,通过redis-cli连接Redis实例,默认端口号为6379。
| ./redis-cli -c -p 6379
get key
|
当key存在时,会返回相应的值。