从旧Redis集群导入数据出现Segmentation fault错误咨询
Redis集群导入数据段错误问题排查与解决方案
问题原因
- 你使用的Redis 6.2.4版本自带的
redis-cli存在已知bug:在执行--cluster import操作时,若源节点的key包含哈希标签{}、特殊字符或大体积value,会触发空指针访问,直接抛出Segmentation fault,该问题在6.2.5及之后的稳定版本已被官方修复。 - 你使用IBM Infosphere Streams DPS Toolkit实现应用层分片时,生成的key默认会携带专属哈希标签用于分片计算,刚好触发了上述版本bug。
- 若源Redis节点版本低于4.0,跨大版本迁移时6.2.4版本的
redis-cli处理旧版本序列化返回值时也会出现内存越界问题,导致段错误。
解决方案
- 优先仅升级
redis-cli二进制文件到6.2.7及以上稳定版本即可,无需升级整个Redis集群,替换后重新执行导入命令即可正常运行。 - 若暂时无法升级
redis-cli,可换用其他成熟迁移工具:- 用redis-shake做在线迁移,自动完成slot计算,支持从单节点实例平滑迁移到Redis集群
- 先通过
redis-cli -h 10.162.53.248 -p 6380 --rdb dump.rdb导出源节点全量数据,再通过redis-cli --cluster pipe命令批量导入到集群,导入前需确认key的哈希规则和集群slot计算逻辑匹配
- 额外注意:由于你之前使用的是应用层分片策略,迁移到Redis官方集群后需要确认应用的分片逻辑和集群slot计算逻辑一致,若要保留原有分片逻辑,需保留key中原有的哈希标签,避免应用无法正常访问迁移后的key。
内容的提问来源于stack exchange,提问作者Shahzad
相关产品推荐
相关产品推荐

