K8S Pod异常情况下pd如何强制指定leader

提供pvc 的csi 是啥?

longhorn

我看你最早的日志 是有 pd-3 的是什么原因没了,按理说3个pd的话 sts 规则是pd-{0,1,2},为啥能通过headless svc 发现 pd-3,

  1. pd log level 开成debug,详细日志看下到底哪里出了问题
  2. 随便进一个容器, 在pvc dir 里 试下fsync 是不是etcd提到issue。最好做个fio

建议尝试下, 先 scale-in 被你删掉pvc的pd ,还有那个没有的pd-3

正常应该是3个pd pod,pd-0到pd-2,pd-2故障时出现冗余的pd-3但是pd-3没起来。
之后我手动清理了pd-2和pd-3的pod,pvc,pv,然后conroller-manager故障我看到只有pd-2开始重建。
等到故障恢复后,pd-2对应的pvc已经没了,所以能看到日志显示的waiting for discovery service to return start args ...
pd-0和pd-1则是2个pv一直没动过的pod(但是pod尝试删过)。其他信息之前提过,是这样的:

“故障发生后3个pd pod还有2个是正常的,剩下一个失败,但这时候就无法选主。
后来把故障pd pod所在的pvc和pv全部清理掉了,现在恢复之后剩下的2个pd pod依然无法选主。

在pd-0的/var/lib/pd目录中touch 111.txt && fsync 111.txt正常无报错。

我尝试下把pd replica数量缩减到2试试

可以试试

如果是 pd 是4个 意味着 raft member 也是4个, 看你的 pre-election 日志 只有两票 不满足 多数派原则 所以一直选不出来leader ,感觉缩了就好了

pd replica数目降为2之后pd pod个数未减少。
目前pd0和pd1的日志都显示自己有2票:
pd0日志:["421a3f57baa87a69 has received 2 MsgPreVoteResp votes and 0 vote rejections"]
pd1日志:["1fc86372bff5e101 has received 2 MsgPreVoteResp votes and 0 vote rejections"]
那2个字符串分别是pd0 pd1的member-id.

https://book.tidb.io/session3/chapter6/tidb-operator-trouble-shooting.html

看下 跟你的情况一样

你可能需要 pd unsafe recover

不行,目前针对这个集群的edit不会生效,无论是改日志level还是增删pod replica。
unsafe-recover在容器化环境下还没试过,我去找下资料。

1。删掉当前的所有pd pod,及其pv
2。直接执行pd-recover指定旧的cluster-id和新的alloc-id
请问下这个步骤合理吗?

目前我对tidbcluster CRD做了一些edit,pd-2已经起来了,只是pd2的日志里显示的cluster-id和status显示的不一样。这两个有什么区别吗?


一个16进制数字,一个10进制数字

:scream_cat: 你看下你kv 正常吗,之前 恢复pd 的时候 就是 按文档操作的没啥问题

kv不正常,报错预料之中:
[FATAL] [server.rs:683] [“failed to bootstrap node id: “[src/server/node.rs:229]: cluster ID mismatch, local 7002884490461809209 != remote 7109013331720823557, you are trying to connect to another cluster, please reconnect to the correct PD””]

https://docs.pingcap.com/zh/tidb/stable/pd-recover#pd-recover-使用文档 你是按这个文档来的吗

还没开始,之前只是在尝试edit。
准备按这个文档来,但是新建pd集群那一步不会做,不知道k8s上怎么操作:sob:
补充:是否可以按我上边发的做,清掉现在的pd pod,然后其他几步照常。
第2个问题就是: 文档里的cluster-id是个十进制数字,所以我上边截图里发的cluster-id=b47381cb145a5cb1这个有什么影响吗,一个etcd id一个tidb集群id?

才发现,应该是这个链接:dizzy_face:
https://docs.pingcap.com/zh/tidb-in-kubernetes/stable/pd-recover
我去尝试一遍。

处理掉了:sob:
另外说明下,pd-recover使用的cluster-id是那个十进制的数字,alloc-id现在没查到,昨天隐约记得是几千,所以今天直接用了100000。

好了?操作步骤方便整理一下不,我有点晕