kill掉pd的leader进程后,一些问题请教

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

【TiDB 版本】
v4.0.10
【问题描述】
今天尝试kill掉pd的leader节点的pd进程,发现组件状态都是down,但是很快重新启动了,,这个不应该是剩下两个还是好的,重新选择pd的leader角色嘛?怎么会都变为down的呢?tikv也全是N/A?我想知道一下这里面的具体的原因以及选择机制等,谢谢


若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

方便上传以下所有的操作步骤吗?

我按照您的思路做了一个简单的测试

Starting component `cluster`: /root/.tiup/components/cluster/v1.3.2/tiup-cluster display tidb-c3-v409
Cluster type:       tidb
Cluster name:       tidb-c3-v409
Cluster version:    v4.0.9
SSH type:           builtin
Dashboard URL:      http://192.168.12.22:32379/dashboard
ID                   Role          Host           Ports        OS/Arch       Status  Data Dir                              Deploy Dir
--                   ----          ----           -----        -------       ------  --------                              ----------
192.168.12.24:39093  alertmanager  192.168.12.24  39093/39094  linux/x86_64  Up      /opt/tidb-c3/data/alertmanager-29093  /opt/tidb-c3/alertmanager-29093
192.168.12.24:33000  grafana       192.168.12.24  33000        linux/x86_64  Up      -                                     /opt/tidb-c3/grafana-33000
192.168.12.22:32379  pd            192.168.12.22  32379/32380  linux/x86_64  Up|UI   /opt/tidb-c3/data/pd-32379            /opt/tidb-c3/pd-32379
192.168.12.23:32379  pd            192.168.12.23  32379/32380  linux/x86_64  Up      /opt/tidb-c3/data/pd-32379            /opt/tidb-c3/pd-32379
192.168.12.24:32379  pd            192.168.12.24  32379/32380  linux/x86_64  Up|L    /opt/tidb-c3/data/pd-32379            /opt/tidb-c3/pd-32379
192.168.12.24:39090  prometheus    192.168.12.24  39090        linux/x86_64  Up      /opt/tidb-c3/data/prometheus-39090    /opt/tidb-c3/prometheus-39090
192.168.12.22:34000  tidb          192.168.12.22  34000/32080  linux/x86_64  Up      -                                     /opt/tidb-c3/tidb-34000
192.168.12.23:34000  tidb          192.168.12.23  34000/32080  linux/x86_64  Up      -                                     /opt/tidb-c3/tidb-34000
192.168.12.24:34000  tidb          192.168.12.24  34000/32080  linux/x86_64  Up      -                                     /opt/tidb-c3/tidb-34000
192.168.12.22:32160  tikv          192.168.12.22  32160/32180  linux/x86_64  Up      /opt/tidb-c3/data/tikv-32160          /opt/tidb-c3/tikv-32160
192.168.12.23:32160  tikv          192.168.12.23  32160/32180  linux/x86_64  Up      /opt/tidb-c3/data/tikv-32160          /opt/tidb-c3/tikv-32160
192.168.12.24:32160  tikv          192.168.12.24  32160/32180  linux/x86_64  Up      /opt/tidb-c3/data/tikv-32160          /opt/tidb-c3/tikv-32160
Total nodes: 12

停止 leader 的 pd
[root@r24 ~]# systemctl stop pd-32379

[root@r20 topology]# tiup cluster display tidb-c3-v409
Found cluster newer version:

    The latest version:         v1.3.4
    Local installed version:    v1.3.2
    Update current component:   tiup update cluster
    Update all components:      tiup update --all

Starting component `cluster`: /root/.tiup/components/cluster/v1.3.2/tiup-cluster display tidb-c3-v409
Cluster type:       tidb
Cluster name:       tidb-c3-v409
Cluster version:    v4.0.9
SSH type:           builtin
Dashboard URL:      http://192.168.12.22:32379/dashboard
ID                   Role          Host           Ports        OS/Arch       Status  Data Dir                              Deploy Dir
--                   ----          ----           -----        -------       ------  --------                              ----------
192.168.12.24:39093  alertmanager  192.168.12.24  39093/39094  linux/x86_64  Up      /opt/tidb-c3/data/alertmanager-29093  /opt/tidb-c3/alertmanager-29093
192.168.12.24:33000  grafana       192.168.12.24  33000        linux/x86_64  Up      -                                     /opt/tidb-c3/grafana-33000
192.168.12.22:32379  pd            192.168.12.22  32379/32380  linux/x86_64  Up|UI   /opt/tidb-c3/data/pd-32379            /opt/tidb-c3/pd-32379
192.168.12.23:32379  pd            192.168.12.23  32379/32380  linux/x86_64  Up|L    /opt/tidb-c3/data/pd-32379            /opt/tidb-c3/pd-32379
192.168.12.24:32379  pd            192.168.12.24  32379/32380  linux/x86_64  Down    /opt/tidb-c3/data/pd-32379            /opt/tidb-c3/pd-32379
192.168.12.24:39090  prometheus    192.168.12.24  39090        linux/x86_64  Up      /opt/tidb-c3/data/prometheus-39090    /opt/tidb-c3/prometheus-39090
192.168.12.22:34000  tidb          192.168.12.22  34000/32080  linux/x86_64  Up      -                                     /opt/tidb-c3/tidb-34000
192.168.12.23:34000  tidb          192.168.12.23  34000/32080  linux/x86_64  Up      -                                     /opt/tidb-c3/tidb-34000
192.168.12.24:34000  tidb          192.168.12.24  34000/32080  linux/x86_64  Up      -                                     /opt/tidb-c3/tidb-34000
192.168.12.22:32160  tikv          192.168.12.22  32160/32180  linux/x86_64  Up      /opt/tidb-c3/data/tikv-32160          /opt/tidb-c3/tikv-32160
192.168.12.23:32160  tikv          192.168.12.23  32160/32180  linux/x86_64  Up      /opt/tidb-c3/data/tikv-32160          /opt/tidb-c3/tikv-32160
192.168.12.24:32160  tikv          192.168.12.24  32160/32180  linux/x86_64  Up      /opt/tidb-c3/data/tikv-32160          /opt/tidb-c3/tikv-32160
Total nodes: 12

我是使用的kill -9 进程号,直接杀掉的。
你的那个停掉的步骤:systemctl stop pd-32379和tiup cluster stop pd -N 192.168.12.24:32379的效果一样嘛?这两个的区别是?

不一样。 你可以看一下 kill -9 以后又会重启。因为这是一个 systemd 的守护进程。pd 的进程会一直 fork 在那里。被 kill 掉就会重启。

嗯,是的,kill掉后,会被重新启动的,


我现在疑问的是:
1、在重新启动前pd组件都会是down状态,这是为什么?
2、systemctl stop pd-32379和tiup cluster stop pd -N 192.168.12.24:32379的效果不一样,它们的区别具体是什么呢?麻烦再解答一下,辛苦了

按照你的方式使用 kill 命令重新做了一下,

Starting component `cluster`: /root/.tiup/components/cluster/v1.3.2/tiup-cluster display tidb-c3-v409
Cluster type:       tidb
Cluster name:       tidb-c3-v409
Cluster version:    v4.0.9
SSH type:           builtin
Dashboard URL:      http://192.168.12.22:32379/dashboard
ID                   Role          Host           Ports        OS/Arch       Status  Data Dir                              Deploy Dir
--                   ----          ----           -----        -------       ------  --------                              ----------
192.168.12.24:39093  alertmanager  192.168.12.24  39093/39094  linux/x86_64  Up      /opt/tidb-c3/data/alertmanager-29093  /opt/tidb-c3/alertmanager-29093
192.168.12.24:33000  grafana       192.168.12.24  33000        linux/x86_64  Up      -                                     /opt/tidb-c3/grafana-33000
192.168.12.22:32379  pd            192.168.12.22  32379/32380  linux/x86_64  Up|UI   /opt/tidb-c3/data/pd-32379            /opt/tidb-c3/pd-32379
192.168.12.23:32379  pd            192.168.12.23  32379/32380  linux/x86_64  Up      /opt/tidb-c3/data/pd-32379            /opt/tidb-c3/pd-32379
192.168.12.24:32379  pd            192.168.12.24  32379/32380  linux/x86_64  Up|L    /opt/tidb-c3/data/pd-32379            /opt/tidb-c3/pd-32379
192.168.12.24:39090  prometheus    192.168.12.24  39090        linux/x86_64  Up      /opt/tidb-c3/data/prometheus-39090    /opt/tidb-c3/prometheus-39090
192.168.12.22:34000  tidb          192.168.12.22  34000/32080  linux/x86_64  Up      -                                     /opt/tidb-c3/tidb-34000
192.168.12.23:34000  tidb          192.168.12.23  34000/32080  linux/x86_64  Up      -                                     /opt/tidb-c3/tidb-34000
192.168.12.24:34000  tidb          192.168.12.24  34000/32080  linux/x86_64  Up      -                                     /opt/tidb-c3/tidb-34000
192.168.12.22:32160  tikv          192.168.12.22  32160/32180  linux/x86_64  Up      /opt/tidb-c3/data/tikv-32160          /opt/tidb-c3/tikv-32160
192.168.12.23:32160  tikv          192.168.12.23  32160/32180  linux/x86_64  Up      /opt/tidb-c3/data/tikv-32160          /opt/tidb-c3/tikv-32160
192.168.12.24:32160  tikv          192.168.12.24  32160/32180  linux/x86_64  Up      /opt/tidb-c3/data/tikv-32160          /opt/tidb-c3/tikv-32160
Total nodes: 12

kill 掉 192.168.12.24 上的 pd leader
[root@r24 ~]# kill -9 pgrep pd-server

立即查看一下 cluster 的状态

[root@r20 topology]# tiup cluster display tidb-c3-v409
Found cluster newer version:

    The latest version:         v1.3.4
    Local installed version:    v1.3.2
    Update current component:   tiup update cluster
    Update all components:      tiup update --all

Starting component `cluster`: /root/.tiup/components/cluster/v1.3.2/tiup-cluster display tidb-c3-v409
Cluster type:       tidb
Cluster name:       tidb-c3-v409
Cluster version:    v4.0.9
SSH type:           builtin
ID                   Role          Host           Ports        OS/Arch       Status  Data Dir                              Deploy Dir
--                   ----          ----           -----        -------       ------  --------                              ----------
192.168.12.24:39093  alertmanager  192.168.12.24  39093/39094  linux/x86_64  Up      /opt/tidb-c3/data/alertmanager-29093  /opt/tidb-c3/alertmanager-29093
192.168.12.24:33000  grafana       192.168.12.24  33000        linux/x86_64  Up      -                                     /opt/tidb-c3/grafana-33000
192.168.12.22:32379  pd            192.168.12.22  32379/32380  linux/x86_64  Down    /opt/tidb-c3/data/pd-32379            /opt/tidb-c3/pd-32379
192.168.12.23:32379  pd            192.168.12.23  32379/32380  linux/x86_64  Down    /opt/tidb-c3/data/pd-32379            /opt/tidb-c3/pd-32379
192.168.12.24:32379  pd            192.168.12.24  32379/32380  linux/x86_64  Down    /opt/tidb-c3/data/pd-32379            /opt/tidb-c3/pd-32379
192.168.12.24:39090  prometheus    192.168.12.24  39090        linux/x86_64  Up      /opt/tidb-c3/data/prometheus-39090    /opt/tidb-c3/prometheus-39090
192.168.12.22:34000  tidb          192.168.12.22  34000/32080  linux/x86_64  Up      -                                     /opt/tidb-c3/tidb-34000
192.168.12.23:34000  tidb          192.168.12.23  34000/32080  linux/x86_64  Up      -                                     /opt/tidb-c3/tidb-34000
192.168.12.24:34000  tidb          192.168.12.24  34000/32080  linux/x86_64  Up      -                                     /opt/tidb-c3/tidb-34000
192.168.12.22:32160  tikv          192.168.12.22  32160/32180  linux/x86_64  N/A     /opt/tidb-c3/data/tikv-32160          /opt/tidb-c3/tikv-32160
192.168.12.23:32160  tikv          192.168.12.23  32160/32180  linux/x86_64  N/A     /opt/tidb-c3/data/tikv-32160          /opt/tidb-c3/tikv-32160
192.168.12.24:32160  tikv          192.168.12.24  32160/32180  linux/x86_64  N/A     /opt/tidb-c3/data/tikv-32160          /opt/tidb-c3/tikv-32160
Total nodes: 12

大概三秒以后在查询一下 cluster 的状态

[root@r20 topology]# tiup cluster display tidb-c3-v409
Found cluster newer version:

    The latest version:         v1.3.4
    Local installed version:    v1.3.2
    Update current component:   tiup update cluster
    Update all components:      tiup update --all

Starting component `cluster`: /root/.tiup/components/cluster/v1.3.2/tiup-cluster display tidb-c3-v409
Cluster type:       tidb
Cluster name:       tidb-c3-v409
Cluster version:    v4.0.9
SSH type:           builtin
Dashboard URL:      http://192.168.12.22:32379/dashboard
ID                   Role          Host           Ports        OS/Arch       Status   Data Dir                              Deploy Dir
--                   ----          ----           -----        -------       ------   --------                              ----------
192.168.12.24:39093  alertmanager  192.168.12.24  39093/39094  linux/x86_64  Up       /opt/tidb-c3/data/alertmanager-29093  /opt/tidb-c3/alertmanager-29093
192.168.12.24:33000  grafana       192.168.12.24  33000        linux/x86_64  Up       -                                     /opt/tidb-c3/grafana-33000
192.168.12.22:32379  pd            192.168.12.22  32379/32380  linux/x86_64  Up|L|UI  /opt/tidb-c3/data/pd-32379            /opt/tidb-c3/pd-32379
192.168.12.23:32379  pd            192.168.12.23  32379/32380  linux/x86_64  Up       /opt/tidb-c3/data/pd-32379            /opt/tidb-c3/pd-32379
192.168.12.24:32379  pd            192.168.12.24  32379/32380  linux/x86_64  Up       /opt/tidb-c3/data/pd-32379            /opt/tidb-c3/pd-32379
192.168.12.24:39090  prometheus    192.168.12.24  39090        linux/x86_64  Up       /opt/tidb-c3/data/prometheus-39090    /opt/tidb-c3/prometheus-39090
192.168.12.22:34000  tidb          192.168.12.22  34000/32080  linux/x86_64  Up       -                                     /opt/tidb-c3/tidb-34000
192.168.12.23:34000  tidb          192.168.12.23  34000/32080  linux/x86_64  Up       -                                     /opt/tidb-c3/tidb-34000
192.168.12.24:34000  tidb          192.168.12.24  34000/32080  linux/x86_64  Up       -                                     /opt/tidb-c3/tidb-34000
192.168.12.22:32160  tikv          192.168.12.22  32160/32180  linux/x86_64  Up       /opt/tidb-c3/data/tikv-32160          /opt/tidb-c3/tikv-32160
192.168.12.23:32160  tikv          192.168.12.23  32160/32180  linux/x86_64  Up       /opt/tidb-c3/data/tikv-32160          /opt/tidb-c3/tikv-32160
192.168.12.24:32160  tikv          192.168.12.24  32160/32180  linux/x86_64  Up       /opt/tidb-c3/data/tikv-32160          /opt/tidb-c3/tikv-32160
Total nodes: 12

挂掉 pd 的 leader 以后会发生选举 pd 的选举,冲新选择一个 leader。
在我的虚拟机环境中大概是两三秒的时间。
在这个选举时间内,pd 没有办法对外提供服务,所以是 down 的状态。
pd 里面存储了集群的元数据,所以有状态的 kv 节点也是没有办法对外提供服务的。

重新做一个新的实验,

192.168.12.22:32379  pd            192.168.12.22  32379/32380  linux/x86_64  Up|L|UI  /opt/tidb-c3/data/pd-32379            /opt/tidb-c3/pd-32379
192.168.12.23:32379  pd            192.168.12.23  32379/32380  linux/x86_64  Up       /opt/tidb-c3/data/pd-32379            /opt/tidb-c3/pd-32379
192.168.12.24:32379  pd            192.168.12.24  32379/32380  linux/x86_64  Up       /opt/tidb-c3/data/pd-32379            /opt/tidb-c3/pd-32379

当停掉 r22 节点上的 pd 服务,kill 以后马上使用 systemd 停止 fork 进程
[root@r22 tikv-32160]# kill -9 pgrep pd-server
[root@r22 tikv-32160]# systemctl stop pd-32379

192.168.12.22:32379  pd            192.168.12.22  32379/32380  linux/x86_64  Down|UI  /opt/tidb-c3/data/pd-32379            /opt/tidb-c3/pd-32379
192.168.12.23:32379  pd            192.168.12.23  32379/32380  linux/x86_64  Up|L     /opt/tidb-c3/data/pd-32379            /opt/tidb-c3/pd-32379
192.168.12.24:32379  pd            192.168.12.24  32379/32380  linux/x86_64  Up       /opt/tidb-c3/data/pd-32379            /opt/tidb-c3/pd-32379

嗯,是的,我的虚拟机也是差多不这个时间,这个都down是因为内部leader选取造成的是吧!由于pd选取时,tikv连接不了pd,tikv也就无法对外服务了,是吧!
那么systemctl stop pd-32379和tiup cluster stop pd -N 192.168.12.24:32379的具体区别是什么呢?

tiup cluster stop pd -N 192.168.12.24:32379 本质上就是在 systemctl 的基础上套了个壳。

哦,ok,好的,其实效果是一样的,是吧。
这个:当停掉 r22 节点上的 pd 服务,kill 以后马上使用 systemd 停止 fork 进程
我的理解是:直接将这个节点的组件停掉,这个pd步参与选举,所以不会出现3个都down掉的情况?还是说,另外两个pd组件也会down,只不过时间很短,没有2-3s。

我拖过 tiup 停止 tidb 的服务
[root@r20 topology]# tiup cluster stop tidb-c3-v409 -N192.168.12.23:34000
Found cluster newer version:

The latest version:         v1.3.4
Local installed version:    v1.3.2
Update current component:   tiup update cluster
Update all components:      tiup update --all

Starting component cluster: /root/.tiup/components/cluster/v1.3.2/tiup-cluster stop tidb-c3-v409 -N192.168.12.23:34000

  • [ Serial ] - SSHKeySet: privateKey=/root/.tiup/storage/cluster/clusters/tidb-c3-v409/ssh/id_rsa, publicKey=/root/.tiup/storage/cluster/clusters/tidb-c3-v409/ssh/id_rsa.pub
  • [Parallel] - UserSSH: user=tidb, host=192.168.12.24
  • [Parallel] - UserSSH: user=tidb, host=192.168.12.23
  • [Parallel] - UserSSH: user=tidb, host=192.168.12.24
  • [Parallel] - UserSSH: user=tidb, host=192.168.12.24
  • [Parallel] - UserSSH: user=tidb, host=192.168.12.22
  • [Parallel] - UserSSH: user=tidb, host=192.168.12.22
  • [Parallel] - UserSSH: user=tidb, host=192.168.12.23
  • [Parallel] - UserSSH: user=tidb, host=192.168.12.23
  • [Parallel] - UserSSH: user=tidb, host=192.168.12.24
  • [Parallel] - UserSSH: user=tidb, host=192.168.12.24
  • [Parallel] - UserSSH: user=tidb, host=192.168.12.24
  • [Parallel] - UserSSH: user=tidb, host=192.168.12.22
  • [ Serial ] - StopCluster
    Stopping component tidb
    Stopping instance 192.168.12.23
    Stop tidb 192.168.12.23:34000 success
    Stopped cluster tidb-c3-v409 successfully

可以从 syslog 里面捕捉到 systemd 的消息
Mar 11 01:03:43 r23 systemd[1]: Started User Manager for UID 4001.
Mar 11 01:03:43 r23 systemd[1]: Reloading.
Mar 11 01:03:43 r23 systemd[1]: Stopping tidb service…
Mar 11 01:03:44 r23 systemd[1]: tidb-34000.service: Succeeded.
Mar 11 01:03:44 r23 systemd[1]: Stopped tidb service.
Mar 11 01:03:44 r23 systemd[1]: session-1000.scope: Succeeded.
Mar 11 01:03:44 r23 systemd-logind[986]: Session 1000 logged out. Waiting for processes to exit.
Mar 11 01:03:44 r23 systemd-logind[986]: Removed session 1000.
Mar 11 01:03:44 r23 systemd[1]: Stopping User Manager for UID 4001…

哦,好的,其实这也就说tiup cluster stop pd -N 192.168.12.24:32379实际上内部还是调用的systemctl stop pd-32379来停止程序,上面的这个,是我这么理解的嘛?

·是这样的。

好的,先谢谢了

关于这个问题,你可以做一个这样的实验

中控机上 [root@r20 topology]# watch -n1 tiup cluster display tidb-c3-v409
一直观察集群的状态(这个窗口要一直打开)

主节点上 kill 掉进程然后马上停止 systemd 的服务。

你会发现,其实还是三个节点都是 down 的状态,大概两秒钟。
然后两个节点重新起来。

嗯,好的,主节点上 kill 掉进程然后马上停止 systemd 的服务,在这里面涉及到了pd的leader的重新选取,因此会出现2-3s集群的pd组件down状态,是吧

是这样的

嗯,好的,三克油啦