Redis集群重建
由于Redis集群Cluster模式在创建时自动维护了集群信息,迁移完成后需要重建集群。
操作步骤
- 在所有目标服务器上安装Redis。
- 方案一:源码编译安装
可参考Redis官方安装部署教程,请根据自身需求选择具体的操作系统版本。
- 下载目标版本源码包。
- 解压Redis压缩包。
1
tar -zxvf redis-{version}.tar.gz
- 进入Redis解压目录。
1
cd redis-{version}
- 执行编译make操作。
1
make
Redis 5.0之后版本编译支持systemd,6.0版本之后编译支持TLS,编译时选择需要的编译选项。
1
make USE_SYSTEMD=yes BUILD_TLS=yes
(1). 若执行TLS显示缺少OpenSSL,则需要安装OpenSSL开发库:
1
sudo yum install openssl openssl-devel
(2). 若执行systemd显示缺少开发库,则需要安装systemd开发库:
1
sudo yum install systemd-devel
- 执行make install安装操作,可选择默认安装地址,也可使用PREFIX来指定安装地址。
1 2
make install make PREFIX={install_path} install
- 方案二:软件包管理工具安装
- 方案一:源码编译安装
- 可选:安装完成之后,可配置systemd。
- 将Redis默认service拷贝至/usr/lib/systemd/system。可通过如下命令查找redis.service所在路径。
1
find / -name redis.service
- 打开redis.service文件,修改"ExecStart="内容,格式为:
1
ExecStart={install_path}/bin/redis-server {conf_path}
- 修改完成后加载redis.service。
1
systemctl daemon-reload
- 启动Redis服务。
1
systemctl start redis.service
- 检查服务是否启动。
1
systemctl status redis.service
当“Active”字段显示包含“active(running)”表示成功。
- 将Redis默认service拷贝至/usr/lib/systemd/system。可通过如下命令查找redis.service所在路径。
- 启动Redis服务。
- 方式一:使用Redis自带脚本启动
1
${redis-server目录} ${redis.conf目录}
- 方式二:使用systemd启动
- 启动Redis服务。
1
systemctl start redis.service
- 检查服务是否启动。
1
systemctl status redis.service
当“Active”字段显示包含“active(running)”表示成功。
- 启动Redis服务。
确保所有参与集群的Redis实例均已启动,并且运行在集群模式下,即redis.conf文件中设置cluster-enabled yes和相应的cluster-config-file配置。
- 方式一:使用Redis自带脚本启动
- 根据版本选择合适的命令构建集群。
- 对于Redis 4.1.14及之前版本如果迁移目标是Redis 4.1.14或更早的版本,请进入redis-trib.rb脚本所在路径,执行以下命令构建集群。
1 2 3
./redis-trib.rb create --replicas 1 \ <节点1_IP地址>:<端口1> <节点2_IP地址>:<端口2> <节点3_IP地址>:<端口3> \ <节点4_IP地址>:<端口4> <节点5_IP地址>:<端口5> <节点6_IP地址>:<端口6>
- 请替换<节点_IP地址>和<端口>为实际节点的IP地址和端口号。
- 建议在集群中的任意一个节点或一个专门的管理节点上执行该脚本。
如果构建失败,检查redis-trib.rb依赖:
- 执行以下命令检查Ruby是否已安装:
1
ruby -v
如果未安装Ruby,系统将返回“command not found”或类似的错误。
- 使用以下命令安装Ruby。
1
sudo yum install ruby -y
- 下载所需版本的Redis gem,或者使用以下命令直接安装指定版本(以4.1.0版本为例):
1
gem install redis -v 4.1.0
- 安装Ruby和Redis gem成功后,请进入redis-trib.rb脚本所在路径,重新执行集群构建命令。
1 2 3
./redis-trib.rb create --replicas 1 \ <节点1_IP地址>:<端口1> <节点2_IP地址>:<端口2> <节点3_IP地址>:<端口3> \ <节点4_IP地址>:<端口4> <节点5_IP地址>:<端口5> <节点6_IP地址>:<端口6>
- 对于Redis 6.2.14版本
- 对于Redis 4.1.14及之前版本
- 在目标集群任意节点,通过以下查询Redis集群Master节点。
进入Redis的src目录下,通过redis-cli连接Redis实例,默认端口号为6379。
1 2
./redis-cli -c -p 6379 cluster nodes
- 安装RedisShake工具,并使用工具分别在每个节点上迁移对应的Redis数据文件。该工具各版本配置存在差异,本指导以v4.1.1为例。
- 下载RedisShake工具,并将下载的安装包上传至每个目标节点,示例安装目录:/home/redisShake/。
1
mkdir -p /home/redisShake/
- 解压安装包。
1
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
- 使用如下命令进行迁移。
1
./redis-shake shake.toml
回显或日志中出现“all done”,代表同步完成。
- 下载RedisShake工具,并将下载的安装包上传至每个目标节点,示例安装目录:/home/redisShake/。
- 在目标集群任意节点,通过get key方式确认数据是否已迁移。key为源Redis存储的键值,请根据实际键值进行替换。
进入Redis的src目录下,通过redis-cli连接Redis实例,默认端口号为6379。
1 2
./redis-cli -c -p 6379 get key
当key存在时,会返回相应的值。
父主题: 中间件迁移相关指导