1. 项目背景与核心目标最近在RockyLinux 8环境下测试了redis-shake工具的数据同步功能这个经历让我想分享一些实战心得。redis-shake是阿里云开源的一款Redis数据迁移与同步工具支持多种场景下的数据操作而RockyLinux作为RHEL的替代发行版在企业级环境中应用越来越广泛。这次测试的主要目标是验证redis-shake在不同Redis实例间的数据同步能力特别是在RockyLinux 8这个相对较新的系统环境下的兼容性和性能表现。通过实际测试我发现了一些官方文档中没有详细说明的配置技巧和性能优化点这些经验对于需要在类似环境中实施Redis数据迁移的团队应该会很有帮助。2. 环境准备与工具安装2.1 系统环境配置RockyLinux 8作为测试平台首先需要确保系统基础环境就绪。我使用的是最小化安装的RockyLinux 8.5版本内核版本为4.18.0-348.el8.x86_64。建议在开始前执行以下系统更新sudo dnf update -y sudo dnf install -y epel-releaseredis-shake是Go语言编写的工具因此需要安装Go运行环境。在RockyLinux 8上安装Go 1.17版本的命令如下sudo dnf install -y golang验证安装是否成功go version2.2 redis-shake获取与编译可以从GitHub获取redis-shake的最新源码git clone https://github.com/alibaba/RedisShake cd RedisShake make编译完成后会在当前目录生成redis-shake二进制文件。为了方便使用可以将其移动到系统PATH包含的目录sudo mv redis-shake /usr/local/bin/注意如果遇到编译错误可能是由于Go版本不兼容导致的。建议使用Go 1.17或更高版本。3. 同步测试配置详解3.1 基础同步配置redis-shake支持多种同步模式我们主要测试从源Redis到目标Redis的单向同步。创建配置文件sync.conf内容如下source.type: standalone source.address: 192.168.1.100:6379 source.password_raw: source_redis_password target.type: standalone target.address: 192.168.1.101:6379 target.password_raw: target_redis_password # 同步模式配置 sync.type: sync sync.parallel: 32 sync.batch_size: 1024 sync.key_exists: rewrite关键参数说明sync.parallel并发线程数根据服务器CPU核心数调整sync.batch_size每次批量同步的数据量sync.key_exists目标端已存在相同key时的处理策略rewrite表示覆盖3.2 性能优化配置在RockyLinux 8环境下通过以下配置可以显著提升同步性能# 网络优化 http_profile: -1 qps: 1000000 # 内存优化 filter.db.whitelist: 0,1,2 # 只同步指定的DB filter.key.whitelist: user:* # 只同步特定模式的key # 日志配置 log.file: /var/log/redis-shake.log log.level: info提示在大数据量同步场景下建议将log.level设置为warn或error减少日志IO对性能的影响。4. 同步测试执行与监控4.1 启动同步进程使用以下命令启动同步任务redis-shake -typesync -confsync.conf为了确保进程在后台稳定运行可以使用nohup结合screen或tmuxnohup redis-shake -typesync -confsync.conf /dev/null 21 4.2 监控同步状态redis-shake提供了内置的HTTP接口用于监控同步状态。在配置文件中启用http_profile后可以通过以下命令查看curl http://localhost:9320/metric输出示例{ rdb_received_bytes: 12582912, rdb_parsed_ok: true, increment_bytes: 3145728, total_entries: 12543, full_sync_remaining_bytes: 0, full_sync_total_bytes: 12582912 }关键指标说明rdb_received_bytes已接收的RDB文件大小increment_bytes增量同步数据量full_sync_remaining_bytes全量同步剩余数据量5. 常见问题与解决方案5.1 网络连接问题在测试过程中可能会遇到源Redis或目标Redis连接不稳定的情况。可以通过以下方式排查检查网络连通性telnet 192.168.1.100 6379检查Redis配置redis-cli -h 192.168.1.100 config get bind redis-cli -h 192.168.1.100 config get protected-mode检查防火墙设置sudo firewall-cmd --list-ports sudo firewall-cmd --add-port6379/tcp --permanent sudo firewall-cmd --reload5.2 性能瓶颈分析当同步速度不理想时可以从以下几个方面排查网络带宽使用iftop或nethogs监控网络流量服务器负载使用top或htop查看CPU和内存使用情况Redis性能使用redis-cli --latency检测Redis响应时间优化建议增加sync.parallel值不超过CPU核心数的2倍调整sync.batch_size建议512-4096之间在低峰期执行全量同步5.3 数据一致性验证同步完成后建议进行数据一致性检查。可以使用以下方法使用redis-cli对比key数量redis-cli -h 192.168.1.100 dbsize redis-cli -h 192.168.1.101 dbsize抽样检查特定key的值redis-cli -h 192.168.1.100 get user:1001 redis-cli -h 192.168.1.101 get user:1001使用redis-full-check工具进行全量比对阿里云提供6. RockyLinux 8特定优化在RockyLinux 8环境下针对redis-shake的性能优化有以下几点经验内核参数调整echo net.core.somaxconn 2048 | sudo tee -a /etc/sysctl.conf echo vm.overcommit_memory 1 | sudo tee -a /etc/sysctl.conf sudo sysctl -p文件描述符限制echo * soft nofile 65535 | sudo tee -a /etc/security/limits.conf echo * hard nofile 65535 | sudo tee -a /etc/security/limits.conf使用性能更好的I/O调度器echo echo deadline /sys/block/sda/queue/scheduler | sudo tee -a /etc/rc.local sudo chmod x /etc/rc.local禁用透明大页THPecho echo never /sys/kernel/mm/transparent_hugepage/enabled | sudo tee -a /etc/rc.local7. 高级功能测试7.1 断点续传测试redis-shake支持断点续传功能这在长时间同步过程中非常有用。测试方法启动同步任务在同步过程中手动终止redis-shake进程重新启动redis-shake观察是否从断点处继续配置文件需要添加# 断点续传配置 sync.resume_from_break_point: true break_point_path: /var/lib/redis-shake7.2 多DB同步策略当源Redis有多个DB需要同步时可以灵活配置# 同步所有DB filter.db.whitelist: # 只同步特定DB filter.db.whitelist: 0,1,2 # 排除特定DB filter.db.blacklist: 157.3 Key过滤功能redis-shake支持基于正则表达式的key过滤# 只同步user:开头的key filter.key.whitelist: user:* # 不同步temp:开头的key filter.key.blacklist: temp:*8. 性能测试数据在RockyLinux 8环境下使用不同配置测试了100万条记录的同步性能配置同步时间平均QPS默认配置12分35秒1,315并行度328分12秒2,032并行度64批量40965分48秒2,873优化网络参数后4分56秒3,378测试环境服务器4核8G内存网络千兆局域网Redis版本6.2.6数据特征平均key大小128字节value大小512字节9. 生产环境部署建议基于测试经验给出以下生产环境部署建议资源规划每100GB数据预留至少2核CPU和4GB内存网络带宽应至少是数据量的2倍考虑RDB传输高可用方案使用supervisor或systemd管理redis-shake进程配置日志轮转避免日志文件过大sudo cp RedisShake/logrotate/redis-shake /etc/logrotate.d/监控集成通过HTTP接口集成到Prometheus监控系统配置关键指标告警如同步延迟、错误率安全建议使用TLS加密Redis连接配置文件设置适当权限chmod 600定期清理断点文件10. 与其他工具的对比在RockyLinux 8环境下redis-shake相比其他Redis同步工具的优势特性redis-shakeredis-migrate-toolrump支持断点续传✓××并行同步✓✓×Key过滤✓××增量同步✓✓×监控接口✓××RockyLinux 8兼容性✓需要编译✓11. 实际应用场景根据测试结果redis-shake在RockyLinux 8环境下特别适合以下场景跨机房Redis迁移利用断点续传功能应对不稳定的跨机房网络Redis版本升级从旧版本同步数据到新版本实例数据拆分将特定模式的key同步到专用Redis实例灾备建设建立实时同步的灾备Redis实例云迁移将本地Redis数据同步到云Redis服务12. 测试总结与经验分享经过在RockyLinux 8上的全面测试redis-shake表现出了良好的稳定性和性能。几个关键经验值得分享批量大小batch_size对性能影响显著建议根据网络延迟调整低延迟环境1024-4096高延迟环境512-1024并行度parallel并非越大越好超过CPU核心数2倍后收益递减在RockyLinux 8上禁用透明大页THP可减少性能波动对于TB级数据同步建议分批次进行每批不超过500GB同步过程中监控目标Redis内存使用避免OOM最后建议在正式使用前先在测试环境进行同等数据量的同步测试记录基准性能数据这样在生产环境部署时能更准确地预估时间和资源需求。