PD 节点故障替换

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:
    3.0.4
  • 【问题描述】:
    一个tidb集群,3个节点的pd,其中有一个节点故障,无法启动,我如何新加入一个节点把故障这个节点彻底丢弃呢,按这个文章里面扩容节点无法启动
    https://pingcap.com/docs-cn/stable/how-to/scale/with-ansible/
    若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

麻烦您上传一下,无法启动的那个 pd 的日志呢。

刚才看了一下启动成功了,只是日志里面有报错,但是现在执行ansible-playbook rolling_update.yml这边报错了,我这边描述下我的操作步骤:
一、环境说明
pd集群信息:
172.21.184.43(故障,无法启动,需要彻底下线)
172.21.184.44
172.21.184.45
172.21.184.49(新增的节点)
二、操作步骤
1、 编辑 inventory.ini 文件,添加节点信息置于 [pd_servers] 主机组最后一行添加172.21.184.49
2、部署新增节点,这步上面没有初始化机器,是因为这个机器上部署了tidb,已经初始化过了
ansible-playbook deploy.yml --tags=pd -l 172.21.184.49
3、 登录新增的 PD 节点,编辑启动脚本: {deploy_dir}/scripts/run_pd.sh

a. 移除 --initial-cluster="xxxx" 配置,注意这里不能在行开头加注释符 #。
b. 添加 --join="http://172.21.184.44:2379"


c. 在新增 PD 节点中手动启动 PD 服务:

4、滚动升级整个集群:
ansible-playbook rolling_update.yml


这步的时候就报错了。说我这个节点不健康,但是我通过命令查看集群是正常的

看你的 member 结果现在有四个 Pd 节点,43节点先下线吧。这个报错有可能跟那个没下线的节点有关,还要去确认下

http://{{ ansible_host }}:{{ pd_client_port }}/pd/health 这个命令看一下吧

一个三节点的pd集群,如果有一台故障无法恢复,需要新添加一台节点,正确的姿势是咋样的? 官网的这个文档说的不清楚,https://pingcap.com/docs-cn/stable/how-to/scale/with-ansible/

可以参考这篇文章看看 https://pingcap.com/docs-cn/stable/how-to/scale/horizontally/#tidb-集群扩容缩容方案

ansible-playbook rolling_update.yml
ansible-playbook rolling_update_monitor.yml --tags=prometheus
上面这两步都执行正常,但是在监控页面看不到新加的pd节点

hello~ Instance 里面记录的是做过 leader 角色 PD ,所以这个如果新加入的 PD 不是 leader,就不会在这里面出现的。

通过这个节点看监控数据都没有了,通过另一个节点看是正常的,这个啥原因,这两个pd节点都是正常的

注意 instance 选择的是 PD leader 节点,follower 节点的信息不准的。
image

通过pd-ctl看172.21.184.45是leader,但是监控页面上看到的是follower

我看了一下我这里3个集群的pd监控,所有节点都是follower角色,没有leader,是不是我集群的监控都有问题了,

确认一下 Prometheus 监控的 PD 的状态和情况,然后整体滚动一下监控,然后确认是否正常。


如果有问题,那么需要反馈版本和具体操作过程和情况,我们再确认一下。

滚动升级之后只能看到一个follower节点,其他节点都看不到了,这个是预期的嘛?



原因

目前 PD 状态为 follower 这个不是预期的,应该是状态显示问题。但是其他的数据应该是准确的,可以再观察一下,也可能 PD 信息状态在 Prometheus 没有同步完成。

办法

调整一下这个监控项的查询语句 将 “count(delta(pd_tso_events{type=“save”,instance="$instance"}[1m]))” 修改为 “count(delta(pd_server_tso{type=“save”,instance="$instance"}[1m]))”

这样调整后显示正常了,instance下拉只出现一个节点并且是leader,这样才是预期对吧,如果重新多个节点是不正常的吧,那现在这个问题是因为监控展示的问题,希望在后续版本修复这个问题吧

是的,我们已经提 issue,可以关注一下这个 issue 的进展 https://github.com/pingcap/pd/issues/2003 。 如果有新的问题麻烦单独提问,以为问题信息混乱。

感谢感谢