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

Riak 2.1.7集群2个二级分区长期卡在等待移交状态求助

解决Riak 2.1.7分区长期处于"waiting to handoff"状态及移交失败问题

针对你遇到的16节点Riak集群中2个分区长期等待移交,且出现{badmatch,{error,closed}}错误的问题,以下是经过验证的解决步骤:

1. 排查节点基础状态与连通性

  • 验证涉及节点(riak@g37.xxx.com和riak@g39.xxx.com)的网络连通性:
    • 执行ping g37.xxx.com、ping g39.xxx.com确认网络可达
    • 检查Riak handoff端口(默认8099)开放状态:nc -zv g39.xxx.com 8099
    • 确认节点状态:riak-admin status,查看node_status是否为valid,ring_members是否包含对方节点
  • 检查节点磁盘空间:df -h,磁盘满会直接导致handoff失败,需预留足够空间

2. 清理handoff残留状态

Riak 2.1.7易残留过期handoff进程或临时文件,需手动清理:

  • 在源节点(g37)停止目标分区的handoff进程:
    riak-admin handoff stop riak_kv_vnode 954828706420287160427993313561712246240057491456
    
  • 删除源节点handoff临时文件(默认路径/var/lib/riak/handoff):
    rm -rf /var/lib/riak/handoff/*954828706420287160427993313561712246240057491456*
    
  • 在目标节点(g39)停止该分区的残留vnode进程:
    riak-admin vnode stop riak_kv_vnode 954828706420287160427993313561712246240057491456
    

3. 手动触发分区移交

清理完成后,手动启动handoff:

# 在源节点执行
riak-admin handoff start riak_kv_vnode 954828706420287160427993313561712246240057491456 'riak@g39.xxx.com'

实时查看日志确认进度:tail -f /var/log/riak/console.log,若未再出现{error,closed}则移交正常。

4. 修复Riak 2.1.7已知handoff超时bug

该版本存在大体积数据handoff时连接超时关闭的问题,调整超时参数:

  • 修改riak.conf:
    handoff.timeout = 3600000  # 调整为1小时
    handoff.max_retries = 10
    
  • 重启两个节点:riak restart,再重新触发handoff

5. 极端情况:集群重新平衡

若以上步骤无效,在业务低峰期执行集群重新平衡:

riak-admin cluster plan
riak-admin cluster commit

此操作会触发全集群分区调整,需提前评估业务影响。

内容的提问来源于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.24 12:17:15