已进入 tombstone 的 store 是否可重加回 tidb cluster

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决: 【 TiDB 使用环境】k8s 与 tidb cluster

【TiDB 版本】 4.0.16

【背景】 在进行 tkv 缩容时,因有两个 store 的 leader count 和 region count 卡在 1 超过半小时, 透过人为手动 curl -X POST ‘http://{pd_ip}:{pd_port}/pd/api/v1/store/{store_id}/state?state=Tombstone’ 强制让 store 1002 1004 进入 tombstone

而后才发现,有一 region 10353493 的状态不正常,有一 peer 是 learner 另两个 peer 因其 store 被设为 tombstone 而无法存取 Tidb cluster ready 状态为 true 目前已尝试透过 curl -X POST ‘http://{pd_ip}:{pd_port}/pd/api/v1/store/{store_id}/state?state=Up’ 再把 1002 叫起 并试图把 tikv replica 再次扩充,想要重新跑出新的 tikv node 并挂载其对应的 store 1002 但目前看起来似乎没有作用,tikv 的 statefulset 也没有进行相对应的修改

不正常的 region 状态: by 使用 ./pd-ctl region 10353493

{
  "id": 10353493,
  "start_key": "7480000000000000FF175F728000000000FF15D0A10000000000FA",
  "end_key": "7480000000000000FF175F728000000000FF15D1720000000000FA",
  "epoch": {
    "conf_ver": 269722,
    "version": 1216
  },
  "peers": [
    {
      "id": 10385018,
      "store_id": 1002
    },
    {
      "id": 10389925,
      "store_id": 1004
    },
    {
      "id": 10344516,
      "store_id": 1013,
      "is_learner": true
    }
  ],
  "leader": {
    "id": 10385018,
    "store_id": 1002
  },
  "down_peers": [
    {
      "peer": {
        "id": 10344516,
        "store_id": 1013,
        "is_learner": true
      },
      "down_seconds": 300
    }
  ],
  "pending_peers": [
    {
      "id": 10344516,
      "store_id": 1013,
      "is_learner": true
    }
  ],
  "written_bytes": 0,
  "read_bytes": 0,
  "written_keys": 0,
  "read_keys": 0,
  "approximate_size": 1,
  "approximate_keys": 0
}

【业务影响】 使用 sql 语法 select * from mysql.stats_histograms 和 select * from information_schema.tables; 得到以下错误 (1105, ‘no available peers, region: {id:10353493 start_key:“t\200\000\000\000\000\000\000\027_r\200\000\000\000\000\025\320\241” end_k ey:“t\200\000\000\000\000\000\000\027_r\200\000\000\000\000\025\321r” region_epoch:<conf_ver:269722 version:1216 > peers:<id:10385018 s tore_id:1002 > peers:<id:10389925 store_id:1004 > }’)

br 进行 backup 时,会失败

【问题】 想请问说:

因目前这个 region 现在三个 peer 的状态是 tombstone, tombstone, learner,

请问能否从 tombstone 把 region 找回,或是直接移除该 region

或是能否把 region 直接移除? (例如 drop table) 目前 region 是属于 mysql.stats_histograms 下的资料,掉了应该不会影响其他资料

感谢


offline 状态的可以使用pd-ctl 变成up状态后重新加回,tombstone后只能prune然后重新scale-out添加

不能直接复用,只能重新扩容,重新均衡数据

那请问说,有问题的 region 有什么方法可以移除? 是不是只能用 tiup cluster prune 让 cluster 进行相对应的动作?

https://docs.pingcap.com/zh/tidb/v4.0/pd-control#恢复数据时寻找相关-region

可以尝试恢复region

目前只有一个Leaner peer了,没有leader不能通过pd-ctl add operator等让它达到正常状态,可以尝试的方式

  1. 如果运行停机尝试使用tikv-ctl unsafe-recover恢复多副本失败的region。
    2、使用tikv-ctl recreate-region 重建region。
    3、使用tikv-ctl tombstone 方式丢弃region。
    2、3方式都会丢数据,mysql.stats_histograms 属于统计信息,不知道后续处理后会不会影响统计信息加载。
    https://docs.pingcap.com/zh/tidb/v4.0/tikv-control

请问, tikv-ctl 是不是也一样无法对 tombstore 进行操作

另外想问一个蠢问题:要如何停机一个 tikv node,是透过 pd-ctl 将该 store 的 weight 改为 0 后并 delete 吗?

感谢

tikv-ctl无法操作tombstone store ,pe-ctl delete store是offline过程,这个过程将region / leader转移到其他tikv, 都转移完成后会变成tombestone store。,你的版本没tiup吗,尽量使用tiup scale-in 缩容。 另外tombestone后 用 pd-ctl -u http://pd_ip:2379 store remove-tombstone 或 curl -X DELETE pd-addr:port/pd/api/v1/stores/remove-tombstone 清理下

我记得k8s缩容是改replica ,但是缩容是按照顺序缩容的。

哦,k8s的操作不太了解,确实没有tiup。

你现在两台tikv的pod是否已经缩容完成了?
如果缩容完成,region check 一下

是,已缩容完成,store 进入 tombstone 后,也将其 tikv node 砍了

用 pd-ctl region check 后

除了 上述提到的 region 10353493 一直处于 pendding peer 和 down peer 外

其余的状态的 peer 都是短暂的

如果只有一个down peer是在已经缩容的kv pod上,可以remove peer 然后让pd自动补。

主要是这个 region 现在三个 peer 的状态是 tombstone, tombstone, learner,

所以才好奇问说 能否从 tombstone 把 region 找回,或是直接移除该 region

目前已多次使用 pd-ctl remove-tombstone 来试图移除

但这两个 tombstone 依然存在

https://docs.pingcap.com/zh/tidb/v4.0/tikv-control#强制-region-从多副本失败状态恢复服务慎用

看起来是多副本全部丢失了 这个要进行破坏性修复了。 在参考一下 https://tidb.net/blog/ad45bad9

该主题在最后一个回复创建后60天后自动关闭。不再允许新的回复。