常见问题排查方法

DataNode

节点故障处理

当三副本的卷其中一个 datanode 所处的机器故障导致宕机,从而使得节点上的所有的 data partition 处于 unavailable 状态时,需要及时进行迁移下线处理,防止其他节点再宕机造成某些 data partition 同时缺少两副本导致不可用。

下线节点

curl -v "http://192.168.0.11:17010/dataNode/decommission?addr=192.168.0.33:17310"

提示

下线命令均发送到 master 节点,下面均已单机 docker 环境为例,master:192.168.0.11

参数类型描述
addrstring数据节点地址

从集群中下线某个数据节点, 该数据节点上的所有数据分片都会被异步的迁移到集群中其它可用的数据节点

设置迁移速率

当被迁移的节点有大量的 extent 文件时,其中副本所在的其他节点带来大量的读 IO,以及对被迁移到的节点造成大量的写 IO,如果负载较高时,可以限制迁移的速率:

curl -v "http://192.168.0.11:17010/admin/setNodeInfo?autoRepairRate=2000"
参数类型描述
batchCountuint64metanode 删除批量大小
markDeleteRateuint64datanode 批量删除限速设置. 0代表未做限速设置
autoRepairRateuint64datanode 上同时修复的 extent 个数
deleteWorkerSleepMsuint64删除间隔时间
loadFactoruint64集群超卖比,默认0,不限制
maxDpCntLimituint64每个节点上 dp 最大数量,默认3000, 0 代表默认值

查看下线迁移状态

如果需要判断下线是否完成,可以看下当前当前集群的 data partition 状态

curl -v "http://192.168.0.11:17010/dataPartition/diagnose"

BadDataPartitionIDs字段为空说明下线完成

{
    "code": 0,
    "data": {
        "BadDataPartitionIDs": [],
        "BadReplicaDataPartitionIDs": [],
        "CorruptDataPartitionIDs": [],
        "InactiveDataNodes": [],
        "LackReplicaDataPartitionIDs": []
    },
    "msg": "success"
}

磁盘故障处理

当 datanode 节点上发生某个磁盘故障时,可以根据具体磁盘执行该磁盘的下线迁移

curl -v http://192.168.0.11:17010/disk/decommission?addr=192.168.0.30:17310&disk=/path/to/disk/dir"
参数类型描述
addrstring要下线的磁盘的节点地址
diskstring故障磁盘
countint每次下线个数,默认0,代表全部下线

同样可以根据 datanode 的负载情况来设置迁移速率

MetaNode

节点故障处理

当节点不可用(机器故障或者网络不同),需要执行节点的下线,防止节点上的 meta partition 出现多数副本不可用从而导致整个 partition 出现 unavailable 的情况。

下线节点

从集群中下线某个元数据节点, 该节点上的所有元数据分片都会被异步的迁移到集群中其它可用的元数据节点。

curl -v "http://10.196.59.198:17010/metaNode/decommission?addr=10.196.59.202:17210"
参数类型描述
addrstring元数据节点地址

同时为了避免下线 node 时其被写入新数据,可以先进行设置节点状态操作

curl -v "http://192.168.0.11:17010/admin/setNodeRdOnly?addr=192.168.0.40:17210&nodeType=1&rdOnly=true"
参数类型描述
addrstringmetanode 的节点地址
nodeTypestring1:metanode, 2:datanode
rdOnlybooltrue,false

查看下线迁移状态

如果需要判断下线是否完成,可以看下当前当前集群的 meta partition 状态

curl -v "http://192.168.0.11:17010/metaPartition/diagnose"

BadMetaPartitionIDs字段为空说明下线完成

{
    "code": 0,
    "data": {
        "BadMetaPartitionIDs": [],
        "CorruptMetaPartitionIDs": [],
        "InactiveMetaNodes": [],
        "LackReplicaMetaPartitionIDs": []
    },
    "msg": "success"
}

纠删码子系统

Access、Proxy 均为无状态节点,不涉及到数据搬迁,这里仅介绍 Clustermgr 与 BlobNode 的故障处理

Clustermgr

节点故障

集群可用,宕机的节点数不超过集群的大多数

  • 在新的节点启用 clustermgr 服务,将新服务中的配置中加上当前节点的成员信息;
  • 调用成员移除接口 API 移除宕机的节点;
  • 调用成员添加接口 API 将刚启动的 Clustermgr 节点加到集群中;
  • 等待数据自动同步即可

BlobNode

磁盘故障

调用 clusterMgr 接口设置坏盘,走坏盘修复流程,详细参考磁盘管理

curl -X POST --header 'Content-Type: application/json' -d '{"disk_id":2,"status":2}' "http://127.0.0.1:9998/disk/set"

节点故障

  1. 机器可用的情况,重启 blobnode 服务,观察能否自动恢复;
  2. 机器不可用或者服务不能自动恢复,手动下线该机器
# 列举下线节点的个磁盘(返回数据包含之前下线或修复的磁盘id)
curl "http://127.0.0.1:9998/disk/list?host=http://下线节点IP:8899&count=XX"
# 手动下线磁盘,走坏盘修复流程
在github上编辑