You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Riak集群分区移交等待问题求助:142个Secondary分区移交失败

Riak集群分区移交停滞问题解决指南

问题概况

  • 集群规格:24节点、1024分区,Riak KV版本 <<"2.1.7-226">>
  • 异常:142个分区等待移交超10天,无活跃传输任务;待移交分区被标记为secondary(预期为primary)
  • 关键错误:节点riak@0037-internal.xx.com出现提示移交失败,错误栈:
    <0.30120.441>@riak_core_handoff_sender:start_fold:282 hinted transfer of riak_kv_vnode from 'riak@0037-internal.xx.com' 994791641816054037097625320706298110058774396928 to 'riak@0029-internal.xx.com' 994791641816054037097625320706298110058774396928 failed because of error:{badmatch,{error,closed}} [{riak_core_handoff_sender,start_fold,5,[{file,"src/riak_core_handoff_sender.erl"},{line,132}]}]
    <0.9143.441>@riak_core_handoff_sender:start_fold:282 hinted transfer of riak_kv_vnode from 'riak@0037-internal.xx.com' 616571003248974668617179538802181898917346541568 to 'riak@0035-internal.xx.com' 616571003248974668617179538802181898917346541568 failed because of error:{badmatch,{error,closed}} [{riak_core_handoff_sender,start_fold,5,[{file,"src/riak_core_handoff_sender.erl"},{line,132}]}]
    
  • 已尝试操作:移除并重新加入涉事节点,无效

分步解决步骤

1. 排查节点间网络连通性

{error,closed}错误大概率是节点间handoff端口不通导致:

  • 测试涉事节点(riak@0037、riak@0029、riak@0035)的8099端口连通性(Riak默认handoff端口):
    nc -zv riak@0029-internal.xx.com 8099
    nc -zv riak@0035-internal.xx.com 8099
    
  • 检查节点防火墙、安全组,确保8099(handoff)和8087(节点通信)端口无拦截
  • 确认所有节点时间同步,时间偏差过大可能导致TCP握手失败

2. 清理陈旧提示移交数据

提示移交失败后残留的无效数据会阻碍后续操作:

  • 在riak@0037-internal.xx.com节点停止Riak:
    riak stop
    
  • 删除对应目标节点的提示移交目录(默认路径):
    rm -rf /var/lib/riak/handoff/hinted/riak@0029-internal.xx.com
    rm -rf /var/lib/riak/handoff/hinted/riak@0035-internal.xx.com
    
  • 重启Riak服务:
    riak start
    

3. 强制触发分区移交

自动移交停滞时,手动触发指定分区的移交:

  • 先确认集群状态正常:
    riak-admin status
    
  • 针对报错的分区执行强制移交:
    riak-admin handoff trigger riak_kv_vnode 994791641816054037097625320706298110058774396928 riak@0029-internal.xx.com
    riak-admin handoff trigger riak_kv_vnode 616571003248974668617179538802181898917346541568 riak@0035-internal.xx.com
    
  • 实时查看移交进度:
    riak-admin handoff status
    

4. 修复环状态不一致

分区标记异常通常是环状态不同步导致:

  • 检查所有节点的环状态一致性:
    riak-admin ring status
    
  • 若存在不一致,在一个健康节点上重建环:
    riak-admin ring rebuild
    
  • 等待环同步完成后,再次检查分区状态:
    riak-admin cluster partitions
    

5. 排查节点资源与磁盘情况

磁盘满或资源耗尽会直接导致移交失败:

  • 检查涉事节点的磁盘空间:
    df -h /var/lib/riak
    
  • 查看CPU、内存使用率:
    top
    
  • 检查Riak日志(默认/var/log/riak/riak.log),是否有磁盘IO错误、内存溢出等相关报错

6. 升级Riak版本(可选)

Riak 2.1.7存在多个已知的handoff相关bug,升级到该分支的最新补丁版本(如2.1.10)可修复部分底层问题,升级前务必做好全量数据备份。


内容的提问来源于stack exchange,提问作者Patrick Kokou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 13:57:49