Ansible-playbook rolling_update.yml --tags=tidb 异常

对/home/tidb/tidb-ansible/conf/tidb.yml 做如下修改:

然后执行ansible-playbook rolling_update.yml --tags=tidb 报错:

binlog是关闭的(inventory.ini):

请问该怎么解决。

看报错信息像是语法错误,检查下 rolling_update 是否有修改过?

---

Copyright 2016 PingCAP, Inc.

Licensed under the Apache License, Version 2.0 (the “License”);

you may not use this file except in compliance with the License.

You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software

distributed under the License is distributed on an “AS IS” BASIS,

See the License for the specific language governing permissions and

limitations under the License.

The rolling update playbook of TiDB

  • name: check config locally hosts: localhost any_errors_fatal: true tags:

    • always roles:
    • check_config_static
  • name: check system environment hosts: monitored_servers any_errors_fatal: true tags:

    • always roles:
    • check_system_dynamic
  • name: gather all facts, and check dest hosts: all any_errors_fatal: true tags:

    • always roles:
    • check_config_dynamic
  • name: rolling update PD cluster hosts: pd_servers any_errors_fatal: true serial: 1 tags:

    • pd

    pre_tasks:

    • set_fact: pd_addr: “{{ ansible_host }}:{{ pd_client_port }}” pd_name: “pd{{ groups.pd_servers.index(inventory_hostname) + 1 }}”

    • name: display PD name debug: var: pd_name

    • name: display PD address debug: var: pd_addr

    • include_tasks: “common_tasks/get_pd_leader.yml” when: not enable_tls|default(false)

    • include_tasks: “common_tasks/get_pd_leader_tls.yml” when: enable_tls|default(false)

    • include_tasks: “common_tasks/transfer_pd_leader.yml”

    • name: stop PD by supervise shell: cd {{ deploy_dir }}/scripts && ./stop_pd.sh when: process_supervision == ‘supervise’

    • name: stop PD by systemd systemd: name=pd.service state=stopped become: true when: process_supervision == ‘systemd’

    • name: wait until the PD port is down wait_for: host: “{{ ansible_host }}” port: “{{ pd_client_port }}” state: stopped msg: “the PD port {{ pd_client_port }} is not down”

    roles:

    • pd

    post_tasks:

    • name: start PD by supervise shell: cd {{ deploy_dir }}/scripts && ./start_pd.sh when: process_supervision == ‘supervise’

    • name: start PD by systemd systemd: name=pd.service state=started become: true when: process_supervision == ‘systemd’

    • name: wait until the PD port is up wait_for: host: “{{ ansible_host }}” port: “{{ pd_client_port }}” state: started msg: “the PD port {{ pd_client_port }} is not up”

    • name: wait until the PD health page is available uri: url: “http://{{ ansible_host }}:{{ pd_client_port }}/health” return_content: yes register: pd_http_result until: pd_http_result.status == 200 and ‘true’ in pd_http_result.content retries: 12 delay: 5 when: not enable_tls|default(false)

    • name: wait until the PD health page is available when enable_tls uri: url: “https://{{ ansible_host }}:{{ pd_client_port }}/health” validate_certs: no client_cert: “{{ pd_cert_dir }}/pd-server-{{ ansible_host }}.pem” client_key: “{{ pd_cert_dir }}/pd-server-{{ ansible_host }}-key.pem” return_content: yes register: pd_https_result until: pd_https_result.status == 200 and ‘true’ in pd_https_result.content retries: 12 delay: 5 when: enable_tls|default(false)

  • name: rolling update TiKV cluster hosts: tikv_servers any_errors_fatal: true serial: 1 tags:

    • tikv

    pre_tasks:

    • include_tasks: “common_tasks/get_pd_tikv_addr.yml”

    • include_tasks: “common_tasks/get_store_id.yml” when: not enable_tls|default(false)

    • include_tasks: “common_tasks/get_store_id_tls.yml” when: enable_tls|default(false)

    • include_tasks: “common_tasks/add_evict_leader_scheduler.yml”

    • name: stop TiKV by supervise shell: cd {{ deploy_dir }}/scripts && ./stop_tikv.sh when: process_supervision == ‘supervise’

    • name: stop TiKV by systemd systemd: name=tikv-{{ tikv_port }}.service state=stopped become: true when: process_supervision == ‘systemd’

    • name: wait until the TiKV port is down wait_for: host: “{{ ansible_host }}” port: “{{ tikv_port }}” state: stopped msg: “the TiKV port {{ tikv_port }} is not down”

    • command: cat {{ deploy_dir }}/status/tikv.pid register: old_tikv_pid ignore_errors: yes changed_when: false

    • name: display old tikv pid debug: msg: “tikv binary or docker pid: {{ old_tikv_pid.stdout }}”

    roles:

    • tikv

    post_tasks:

    • name: start TiKV by supervise shell: cd {{ deploy_dir }}/scripts && ./start_tikv.sh when: process_supervision == ‘supervise’

    • name: start TiKV by systemd systemd: name=tikv-{{ tikv_port }}.service state=started become: true when: process_supervision == ‘systemd’

    • name: wait until the TiKV port is up wait_for: host: “{{ ansible_host }}” port: “{{ tikv_port }}” state: started msg: “the TiKV port {{ tikv_port }} is not up”

    • name: wait until the TiKV status page is available uri: url: “http://{{ ansible_host }}:{{ tikv_status_port }}/status” return_content: yes register: tikv_http_result until: tikv_http_result.status == 200 retries: 12 delay: 5 when: not enable_tls|default(false) and (tikv_metric_method is defined and tikv_metric_method != “push”)

    • name: wait until the TiKV status page is available when enable_tls uri: url: “https://{{ ansible_host }}:{{ tikv_status_port }}/status” validate_certs: no client_cert: “{{ tikv_cert_dir }}/tikv-server-{{ ansible_host }}.pem” client_key: “{{ tikv_cert_dir }}/tikv-server-{{ ansible_host }}-key.pem” return_content: yes register: tikv_https_result until: tikv_https_result.status == 200 retries: 10 delay: 5 when: enable_tls|default(false) and (tikv_metric_method is defined and tikv_metric_method != “push”)

    • name: wait until TiKV process is up wait_for_pid: | pid_file={{ deploy_dir }}/status/tikv.pid timeout=300 thread_name_regex=‘tikv-server’ state=present when: deployment_method == ‘binary’ and (tikv_metric_method is defined and tikv_metric_method == “push”)

    • command: cat {{ deploy_dir }}/status/tikv.pid register: new_tikv_pid ignore_errors: yes changed_when: false

    • name: display new tikv pid debug: msg: “tikv binary or docker pid: {{ new_tikv_pid.stdout }}”

    • include_tasks: “common_tasks/remove_evict_leader_scheduler.yml”

  • name: rolling update pump cluster hosts: pump_servers any_errors_fatal: true serial: 1 tags:

    • pump

    pre_tasks:

    • name: stop pump by supervise shell: cd {{ deploy_dir }}/scripts && ./stop_{{ item }}.sh with_items:

      • pump when:
      • enable_binlog|default(false)
      • process_supervision == ‘supervise’
    • name: stop pump by systemd systemd: name=pump-{{ pump_port }}.service state=stopped become: true when:

      • enable_binlog|default(false)
      • process_supervision == ‘systemd’
    • name: wait until the pump port is down wait_for: host: “{{ ansible_host }}” port: “{{ pump_port }}” state: stopped msg: “the pump port {{ pump_port }} is not down” when: enable_binlog|default(false)

    roles:

    • { role: pump, when: enable_binlog|default(false) }

    post_tasks:

    • name: start pump by supervise shell: cd {{ deploy_dir }}/scripts && ./start_{{ item }}.sh when:

      • enable_binlog|default(false)
      • process_supervision == ‘supervise’ with_items:
      • pump
    • name: start pump by systemd systemd: name=pump-{{ pump_port }}.service state=started become: true when:

      • enable_binlog|default(false)
      • process_supervision == ‘systemd’
    • name: wait until the pump port is up wait_for: host: “{{ ansible_host }}” port: “{{ pump_port }}” state: started msg: “the pump port {{ pump_port }} is not up” when: enable_binlog|default(false)

  • name: rolling update TiDB cluster hosts: tidb_servers any_errors_fatal: true serial: 1 tags:

    • tidb

    pre_tasks:

    • name: stop TiDB by supervise shell: cd {{ deploy_dir }}/scripts && ./stop_tidb.sh when: process_supervision == ‘supervise’

    • name: stop TiDB by systemd systemd: name=tidb-{{ tidb_port }}.service state=stopped become: true when: process_supervision == ‘systemd’

    • name: wait until the TiDB port is down wait_for: host: “{{ ansible_host }}” port: “{{ tidb_port }}” state: stopped msg: “the TiDB port {{ tidb_port }} is not down”

    roles:

    • tidb

    post_tasks:

    • name: start TiDB by supervise shell: cd {{ deploy_dir }}/scripts && ./start_tidb.sh when: process_supervision == ‘supervise’

    • name: start TiDB by systemd systemd: name=tidb-{{ tidb_port }}.service state=started become: true when: process_supervision == ‘systemd’

    • name: wait until the TiDB port is up wait_for: host: “{{ ansible_host }}” port: “{{ tidb_port }}” state: started msg: “the TiDB port {{ tidb_port }} is not up”

    • name: wait until the TiDB status page is available uri: url: “http://{{ ansible_host }}:{{ tidb_status_port }}/status” return_content: yes register: tidb_http_result until: tidb_http_result.status == 200 and ‘TiDB’ in tidb_http_result.content retries: 12 delay: 5 when: not enable_tls|default(false)

    • name: wait until the TiDB status page is available when enable_tls uri: url: “https://{{ ansible_host }}:{{ tidb_status_port }}/status” validate_certs: no client_cert: “{{ tidb_cert_dir }}/tidb-server-{{ ansible_host }}.pem” client_key: “{{ tidb_cert_dir }}/tidb-server-{{ ansible_host }}-key.pem” return_content: yes register: tidb_https_result until: tidb_https_result.status == 200 and ‘TiDB’ in tidb_http_result.content retries: 10 delay: 5 when: enable_tls|default(false)

以上是tidb-ansible/rolling_update.yml的内容,这些文件都是同时从 git clone下来的没有做过改动,其实之前也约到监控组件yml配置文件格式错乱问题,上面的rolling_update.yml文件有啥语法问题吗,没有做过改动啊

首先确认一下你的 tidb-ansible 是否是下载 3.0.0 的版本,2.x 的版本和 3.0 的版本有些区别,3.0 版本中已经修改为 pump_cluster;

详细可见链接:https://github.com/pingcap/tidb-ansible/blob/2d73d46641fce0e055a2720f50c00d490dfe2307/rolling_update.yml#L280

如果是做升级操作,从 2.x 升级到 3.0 版本,强烈推荐使用官方文档步骤升级。详细链接:https://pingcap.com/docs-cn/v3.0/how-to/upgrade/from-previous-version/#tidb-3-0-升级操作指南

2赞