添加 pd 节点,执行滚动升级整个集群 报错

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

  • 【TiDB 版本】:Release Version: v3.0.0-beta-27-g6398788
  • 【问题描述】:添加tipd 节点,执行滚动升级整个集群 报错

TiDB Cluster Part

[tidb_servers] 192.168.1.9 192.168.1.10

[tikv_servers] 192.168.1.21 192.168.1.23 192.168.1.26

[pd_servers] 192.168.1.11 192.168.1.12 [spark_master]

[spark_slaves]

[lightning_server]

[importer_server]

Monitoring Part

prometheus and pushgateway servers

[monitoring_servers] 192.168.1.10

[grafana_servers] 192.168.1.10

node_exporter and blackbox_exporter servers

[monitored_servers] 192.168.1.9 192.168.1.10 192.168.1.11 192.168.1.12 192.168.1.21 192.168.1.23 192.168.1.26

[alertmanager_servers] 192.168.1.10

[kafka_exporter_servers]

Binlog Part

[pump_servers]

[drainer_servers]

Group variables

[pd_servers:vars]

location_labels = [“zone”,“rack”,“host”]

Global variables

[all:vars] deploy_dir = /data/deploy

Connection

ssh via normal user

ansible_user = tidb

cluster_name = pro-cluster

tidb_version = latest

process supervision, [systemd, supervise]

process_supervision = systemd

timezone = Asia/Shanghai #timezone = UTC set_timezone = True enable_firewalld = False

check NTP service

enable_ntpd = True set_hostname = False

binlog trigger

enable_binlog = False

binlog version, “kafka” or “cluster”:

binlog_version = “cluster”

kafka cluster address for monitoring, example:

kafka_addrs = “”

zookeeper_addrs = “”

store slow query log into seperate file

enable_slow_query_log = True

enable TLS authentication in the TiDB cluster

enable_tls = False

KV mode

deploy_without_tidb = False

Optional: Set if you already have a alertmanager server.

Format: alertmanager_host:alertmanager_port

alertmanager_target = “”

Collect diagnosis

collect_log_recent_hours = 2

enable_bandwidth_limit = True

default: 10Mb/s, unit: Kbit/s

collect_bandwidth_limit = 10000 ~

2020-01-20 18:15:07,539 p=32576 u=tidb | ERROR! the role ‘pump’ was not found in /home/tidb/tidb-ansible/roles:/home/tidb/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles:/home/tidb/tidb-ansible

The error appears to have been in ‘/home/tidb/tidb-ansible/rolling_update.yml’: line 266, column 7, but may be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

roles: - { role: pump, when: enable_binlog|default(false) } ^ here

2020-01-20 18:16:14,240 p=328 u=tidb | ERROR! the role ‘pump’ was not found in /home/tidb/tidb-ansible/roles:/home/tidb/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles:/home/tidb/tidb-ansible

The error appears to have been in ‘/home/tidb/tidb-ansible/rolling_update.yml’: line 266, column 7, but may be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

roles: - { role: pump, when: enable_binlog|default(false) } ^ here

rolling_update.yml (10.3 KB)

image

在/home/tidb/tidb-ansible/roles这个目录下,确实没有发现错误中 pump 这个role

原因

  1. rolling_update.yml 脚本使用的 role 是 pump (新版本),你现在使用 tidb-ansible 使用的 pump_cluster 和 pump_kafka 版本的 pump (老版本)。建议下载 v3.0.0-beta 版本的 tidb-ansible ,将响应的配置参数填写正确后重新使用 rolling_update.ym 滚动集群。
  2. 扩容 PD 操作应该以及完成,但是 rolling_update.yml 没有操作,可能带来的风险:如果 PD leader transfer 到扩容的 PD 节点,TiKV 和 TiDB 无法识别新 PD leader 的 ip 和 端口,最终导致集群服务异常,影响业务。

注意

需要确认现在 TiDB 集群的版本,建议登录到目标节点通过一下操作完成验证。

${deploy_dir}/bin/tidb-server -V ## 验证 tidb-server 版本

${deploy_dir}/bin/tikv-server -V ## 验证 tikv-server 版本

${deploy_dir}/bin/pd-server -V ## 验证 pd-server 版本

解决方法

操作思路:

  1. 通过 git 下载老版本的 tidb-ansible
git clone -b v3.0.0-beta https://github.com/pingcap/tidb-ansible.git tidb-ansible-v3.0.0-beta
  1. 通过 ansible-playbook 下载 binary
cd tidb-ansible-v3.0.0-beta
ansible-playbook local_prepare.yml
  1. 将 inventory,ini 配置 填写 到 tidb-ansible-v3.1.0-beta/inventory.ini 中,同时确认所有服务端口是否都是默认或者自动端口的参数配置是否和先集群一直。

  2. 通过先的 tidb-ansible-v3.0.0-beta 执行 滚动升级集群操作

cd tidb-ansible-v3.0.0-beta
ansible-playbook rolling_update.yml

image
三个版本信息

  1. 确认一下 local_prepare.yml 执行后,tidb-ansible-v3.1.0-beta/resource/bin 下面的 binary 版本和刚才提供的 binary 版本是否一致;
  2. 如果一致可以直接滚动升级;
  3. 如果不一致,需要再次确认之前的 tidb-ansible 使用操作,评估替换为 v3.0.0-beta 版本一致



按照步骤提示,先git clone 3.0.0-beta,然后local-yml 但执行上述版本命令出来的版本号
貌似版本不对

在生产环境,我在这个cd tidb-ansible-v3.0.0-beta/目录下执行local_prepare.yml, 它是否只是会影响tidb-ansible-v3.0.0-beta/这个版本下,不会影响生产环境tidb-ansible的环境不? ansible-playbook local_prepare.yml

cd tidb-ansible-v3.0.0-beta/ 目录下执行 local_prepare.yml 这个操作只是联网下载 TiDB binary 到中控机,不会影响到现有的环境。参考上面的步骤来操作即可。

好的,谢谢

有问题欢迎提问

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。