TiDB怎么移除DOWN的节点

【 TiDB 使用环境】生产环境
【 TiDB 版本】v5.4.2
【复现路径】做过哪些操作出现的问题

【遇到的问题:问题现象及影响】

  • 问题:1台物理机故障,机器频繁重启,我手动将这台物理机上面的leader驱除,然后stop这些store,目前副本也在重建中,怎么手动剔除这些down的节点

【资源配置】
【附件:截图/日志/监控】

现在节点的状态是什么?

  1. 可以 tiup cluster display XXXX 来查看;XXXX为集群名称
  2. pd ctl查看对应的store,状态是什么?

down,我现在需要把这些移除集群,需要设置手动设置为tombstone?

看这个节点还有没有region @robert233

store的状态是在 pd 中是down,时间上已经超过了max-store-down-time 默认的30min,从监控看,集群已经开始在存活的store上补足各个region的副本
这些down节点上肯定有非leader region,怎么能把store从集群中剔除掉

  1. 你集群是几副本的?集群拓扑结构是什么?我看目前是有两个节点是down的
  2. 先不要着急执行删除操作,如果3副本,可能会有多副本丢失的情况
  3. 如果没有丢失多副本,就等region在其他节点补齐后,再执行删除store的操作

3台物理机9个TiKV,宕机一台物理机3个TiKV,我查过了,没有确实副本的region

没有确实副本的region

region补齐后,store会从down变成 tombstone状态?

  1. 先问一下,tikv有没有设置label?
  2. 如果没有label,直接 tiup cluster scale-in XXX IP:Port 就行 (XXX为集群名称,ip:port为要下线节点的ip和端口)
    等状态成tombstone后,执行prune操作即可

具体store的状态你可以参考这个

!!!!
你的length<3,别忘了还tiflash的副本
还是先pd ctl查看下要下线的节点,有没有region,在执行下线节点操作

单机多实例部署,按照官方,配置了labels

  config:
    server.labels:
      host: host1

另外,down掉的store上,我并没有找到所有down副本数量大于正常副本数量的所有 region,以下结果为空

region --jq=".regions[] | {id: .id, peer_stores: [.peers[].store_id] | select(length as $total | map(if .==(4,5,918726) then . else empty end) | length>=$total-length) }"

至于4,5,918726这些宕掉的stone上,查到有副本的所有region

region --jq=".regions[] | {id: .id, peer_stores: [.peers[].store_id] | select(any(.==(4,5,918726)))}"

以上:意思是需要将downstore所有有副本的region,手动operator add remove-peer吗?

  1. 你如果设置了label,其他两个物理机的节点上应该是补充不了副本的,建议查看方式:
    ptctl 下,执行 store XX(XX为store id),将这部分信息贴上来
  2. 3副本的集群,你应该先添加一台机器,设置好相关的label;
    等副本补齐后,就可以正常 scale-in了

store信息

{
  "store": {
    "id": 4,
    "address": "xxxxxx:port",
    "labels": [
      {
        "key": "host",
        "value": "host1"
      }
    ],
    "version": "5.4.2",
    "status_address": "xxxxxx:port",
    "git_hash": "0d22a1b74abbf54ae259b498f6584dd26365fed2",
    "start_timestamp": 1680501021,
    "deploy_path": "/home/tidb/tidb50/tidb-deploy/tikv2/bin",
    "last_heartbeat": 1680500631931783705,
    "state_name": "Down"
  },
  "status": {
    "capacity": "1.431TiB",
    "available": "358.4GiB",
    "used_size": "982.8GiB",
    "leader_count": 0,
    "leader_weight": 1,
    "leader_score": 0,
    "leader_size": 0,
    "region_count": 33682,
    "region_weight": 1,
    "region_score": 4512805.377294815,
    "region_size": 2802845,
    "slow_score": 1,
    "start_ts": "2023-04-03T13:50:21+08:00",
    "last_heartbeat_ts": "2023-04-03T13:43:51.931783705+08:00"
  }
}

问题是这台物理机已经宕机,起不来了,在扩容新机器后补完region,在scale-in有用吗?

  1. 现在的状态,是不能正常scale-in的,因为剩余的机器不能满足三副本。正常的流程是满足三副本了再下线机器。
  2. 如果非要强制下线机器,那就得先把这台机器上的region干掉,否则下线会失败。
  3. 因为你这是生产环境,建议你按正常的流程下线,这是最简单稳妥的办法
1 个赞

如大佬所言,按照正常的扩缩容方式解决问题👍

解决了就好 :+1:t2::+1:t2::+1:t2: