1. 程式人生 > >TiDB Ansible 部署方案(生產資料庫部署方案)

TiDB Ansible 部署方案(生產資料庫部署方案)

經過一段時間的搜尋,瞭解到pingcap建議Tidb的叢集生產環境使用Ansible去部署,所以這篇文章純摘抄,不是原創,具體如下:

概述

Ansible 是一款自動化運維工具,TiDB-Ansible 是 PingCAP 基於 Ansible playbook 功能編寫的叢集部署工具。本文件介紹如何使用 TiDB-Ansible 部署一個完整的 TiDB 叢集。

本部署工具可以通過配置檔案設定叢集拓撲,完成以下各項運維工作:

:對於生產環境,須使用 TiDB-Ansible 部署 TiDB 叢集。如果只是用於測試 TiDB 或體驗 TiDB 的特性,建議

使用 Docker Compose 在單機上快速部署 TiDB 叢集

準備機器

  1. 部署目標機器若干

    • 建議 4 臺及以上,TiKV 至少 3 例項,且與 TiDB、PD 模組不位於同一主機,詳見部署建議
    • 推薦安裝 CentOS 7.3 及以上版本 Linux 作業系統,x86_64 架構 (amd64)。
    • 機器之間內網互通。

    注:使用 Ansible 方式部署時,TiKV 及 PD 節點資料目錄所在磁碟請使用 SSD 磁碟,否則無法通過檢測。 如果僅驗證功能,建議使用 Docker Compose 部署方案單機進行測試。

  2. 部署中控機一臺:

    • 中控機可以是部署目標機器中的某一臺。
    • 推薦安裝 CentOS 7.3 及以上版本 Linux 作業系統(預設包含 Python 2.7)。
    • 該機器需開放外網訪問,用於下載 TiDB 及相關軟體安裝包。

在中控機上安裝系統依賴包

以 root 使用者登入中控機

如果中控機是 CentOS 7 系統,執行以下命令:

# yum -y install epel-release git curl sshpass
# yum -y install python-pip

如果是中控機是 Ubuntu 系統,執行以下命令:

# apt-get -y install git curl sshpass python-pip

在中控機上建立 tidb 使用者,並生成 ssh key

以 root 使用者登入中控機,執行以下命令

建立 tidb 使用者

# useradd -m -d /home/tidb tidb

設定 tidb 使用者密碼

# passwd tidb

配置 tidb 使用者 sudo 免密碼,將 tidb ALL=(ALL) NOPASSWD: ALL 新增到檔案末尾即可。

# visudo
tidb ALL=(ALL) NOPASSWD: ALL

生成 ssh key: 執行 su 命令從 root 使用者切換到 tidb 使用者下。

# su - tidb

建立 tidb 使用者 ssh key, 提示 Enter passphrase 時直接回車即可。執行成功後,ssh 私鑰檔案為 /home/tidb/.ssh/id_rsa, ssh 公鑰檔案為 /home/tidb/.ssh/id_rsa.pub

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/tidb/.ssh/id_rsa):
Created directory '/home/tidb/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/tidb/.ssh/id_rsa.
Your public key has been saved in /home/tidb/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:eIBykszR1KyECA/h0d7PRKz4fhAeli7IrVphhte7/So [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|=+o+.o.          |
|o=o+o.oo         |
| .O.=.=          |
| . B.B +         |
|o B * B S        |
| * + * +         |
|  o + .          |
| o  E+ .         |
|o   ..+o.        |
+----[SHA256]-----+

在中控機器上下載 TiDB-Ansible

以 tidb 使用者登入中控機並進入 /home/tidb 目錄。以下為 tidb-ansible 分支與 TiDB 版本對應關係,版本選擇可以諮詢官方。

tidb-ansible 分支 TiDB 版本 備註
release-2.0 2.0 版本 最新穩定版本,可用於生產環境。
master master 版本 包含最新特性,每日更新。

使用以下命令從 Github TiDB-Ansible 專案上下載 TiDB-Ansible 相應分支,預設的資料夾名稱為 tidb-ansible

下載 2.0 版本:

$ git clone -b release-2.0 https://github.com/pingcap/tidb-ansible.git

下載 master 版本:

$ git clone https://github.com/pingcap/tidb-ansible.git

:請務必按文件操作,將 tidb-ansible 下載到 /home/tidb 目錄下,許可權為 tidb 使用者,不要下載到 /root 下,否則會遇到許可權問題。

在中控機器上安裝 Ansible 及其依賴

以 tidb 使用者登入中控機,請務必按以下方式通過 pip 安裝 Ansible 及其相關依賴的指定版本,否則會有相容問題。安裝完成後,可通過 ansible --version 檢視 Ansible 版本。目前 release-2.0 及 master 版本相容 Ansible 2.4 及 Ansible 2.5 版本,Ansible 及相關依賴版本記錄在 tidb-ansible/requirements.txt 檔案中。

$ cd /home/tidb/tidb-ansible
$ sudo pip install -r ./requirements.txt
$ ansible --version
  ansible 2.5.0

在中控機上配置部署機器 ssh 互信及 sudo 規則

以 tidb 使用者登入中控機,將你的部署目標機器 IP 新增到 hosts.ini 檔案 [servers] 區塊下。

$ cd /home/tidb/tidb-ansible
$ vi hosts.ini
[servers]
172.16.10.1
172.16.10.2
172.16.10.3
172.16.10.4
172.16.10.5
172.16.10.6

[all:vars]
username = tidb
ntp_server = pool.ntp.org

執行以下命令,按提示輸入部署目標機器 root 使用者密碼。該步驟將在部署目標機器上建立 tidb 使用者,並配置 sudo 規則,配置中控機與部署目標機器之間的 ssh 互信。

$ ansible-playbook -i hosts.ini create_users.yml -u root -k

在部署目標機器上安裝 NTP 服務

如果你的部署目標機器時間、時區設定一致,已開啟 NTP 服務且在正常同步時間,此步驟可忽略。可參考如何檢測 NTP 服務是否正常

該步驟將在部署目標機器上使用系統自帶軟體源聯網安裝並啟動 NTP 服務,服務使用安裝包預設的 NTP server 列表,見配置檔案 /etc/ntp.conf 中 server 引數,如果使用預設的 NTP server,你的機器需要連線外網。 為了讓 NTP 儘快開始同步,啟動 NTP 服務前,系統會 ntpdate hosts.ini 檔案中的 ntp_server 一次,預設為 pool.ntp.org,也可替換為你的 NTP server。

以 tidb 使用者登入中控機,執行以下命令:

$ cd /home/tidb/tidb-ansible
$ ansible-playbook -i hosts.ini deploy_ntp.yml -u tidb -b

在部署目標機器上配置 CPUfreq 調節器模式

為了讓 CPU 發揮最大效能,請將 CPUfreq 調節器模式設定為 performance 模式。

你可以檢視使用 CPUFREQ 調控器文件, 瞭解更多 CPUFREQ 相關資訊。

你可以通過 cpupower 命令檢視系統支援的調節器模式:

# cpupower frequency-info --governors
analyzing CPU 0:
  available cpufreq governors: performance powersave

本例中系統支援設定 performance 和 powersave 模式。如果返回 “Not Available”,表示當前系統不支援配置 CPUfreq,跳過該步驟即可。

# cpupower frequency-info --governors
analyzing CPU 0:
  available cpufreq governors: Not Available

你可以通過 cpupower 命令檢視系統當前的 CPUfreq 調節器模式:

# cpupower frequency-info --policy
analyzing CPU 0:
  current policy: frequency should be within 1.20 GHz and 3.20 GHz.
                  The governor "powersave" may decide which speed to use
                  within this range.

本例中當前配置是 powersave 模式,你可以通過以下命令設定為 performance 模式。

# cpupower frequency-set --governor performance

你也可以通過以下命令在部署目標機器上批量設定:

$ ansible -i hosts.ini all -m shell -a "cpupower frequency-set --governor performance" -u tidb -b

在部署目標機器上新增資料盤 ext4 檔案系統掛載引數

部署目標機器資料盤請格式化成 ext4 檔案系統,掛載時請新增 nodelalloc 和 noatime 掛載引數。nodelalloc 是必選引數,否則 Ansible 安裝時檢測無法通過,noatime 是可選建議引數。

如果你的資料盤已經格式化成 ext4 並掛載,可先執行 umount 命令解除安裝,從編輯 /etc/fstab 檔案步驟開始執行,添加掛載引數重新掛載即可。

# umount /dev/nvme0n1

下面以 /dev/nvme0n1 資料盤為例:

檢視資料盤

# fdisk -l
Disk /dev/nvme0n1: 1000 GB

建立分割槽表

# parted -s -a optimal /dev/nvme0n1 mklabel gpt -- mkpart primary ext4 1 -1

格式化檔案系統

# mkfs.ext4 /dev/nvme0n1

檢視資料盤分割槽 UUID,本例中 nvme0n1 的 UUID 為 c51eb23b-195c-4061-92a9-3fad812cc12f。

# lsblk -f
NAME    FSTYPE LABEL UUID                                 MOUNTPOINT
sda
├─sda1  ext4         237b634b-a565-477b-8371-6dff0c41f5ab /boot
├─sda2  swap         f414c5c0-f823-4bb1-8fdf-e531173a72ed
└─sda3  ext4         547909c1-398d-4696-94c6-03e43e317b60 /
sr0
nvme0n1 ext4         c51eb23b-195c-4061-92a9-3fad812cc12f

編輯 /etc/fstab 檔案,新增 nodelalloc 掛載引數

# vi /etc/fstab
UUID=c51eb23b-195c-4061-92a9-3fad812cc12f /data1 ext4 defaults,nodelalloc,noatime 0 2

掛載資料盤

# mkdir /data1
# mount -a

執行以下命令,如果檔案系統為 ext4,並且掛載引數中包含 nodelalloc 表示生效:

# mount -t ext4
/dev/nvme0n1 on /data1 type ext4 (rw,noatime,nodelalloc,data=ordered)

分配機器資源,編輯 inventory.ini 檔案

以 tidb 使用者登入中控機,inventory.ini 檔案路徑為 /home/tidb/tidb-ansible/inventory.ini

注: 請使用內網 IP 來部署叢集,如果部署目標機器 SSH 埠非預設 22 埠,需新增 ansible_port 變數,如: TiDB1 ansible_host=172.16.10.1 ansible_port=5555

標準 TiDB 叢集需要 6 臺機器:

  • 2 個 TiDB 節點
  • 3 個 PD 節點
  • 3 個 TiKV 節點,第一臺 TiDB 機器同時用作監控機

預設情況下,單臺機器上只需部署一個 TiKV 例項。如果你的 TiKV 部署機器 CPU 及記憶體配置是部署建議的兩倍或以上,並且擁有兩塊 SSD 硬碟或單塊容量超 2T 的 SSD 硬碟,可以考慮部署兩例項,但不建議部署兩個以上例項。

單機單 TiKV 例項叢集拓撲

Name Host IP Services
node1 172.16.10.1 PD1, TiDB1
node2 172.16.10.2 PD2, TiDB2
node3 172.16.10.3 PD3
node4 172.16.10.4 TiKV1
node5 172.16.10.5 TiKV2
node6 172.16.10.6 TiKV3
[tidb_servers]
172.16.10.1
172.16.10.2

[pd_servers]
172.16.10.1
172.16.10.2
172.16.10.3

[tikv_servers]
172.16.10.4
172.16.10.5
172.16.10.6

[monitoring_servers]
172.16.10.1

[grafana_servers]
172.16.10.1

[monitored_servers]
172.16.10.1
172.16.10.2
172.16.10.3
172.16.10.4
172.16.10.5
172.16.10.6

單機多 TiKV 例項叢集拓撲

以兩例項為例:

Name Host IP Services
node1 172.16.10.1 PD1, TiDB1
node2 172.16.10.2 PD2, TiDB2
node3 172.16.10.3 PD3
node4 172.16.10.4 TiKV1-1, TiKV1-2
node5 172.16.10.5 TiKV2-1, TiKV2-2
node6 172.16.10.6 TiKV3-1, TiKV3-2
[tidb_servers]
172.16.10.1
172.16.10.2

[pd_servers]
172.16.10.1
172.16.10.2
172.16.10.3

[tikv_servers]
TiKV1-1 ansible_host=172.16.10.4 deploy_dir=/data1/deploy tikv_port=20171 labels="host=tikv1"
TiKV1-2 ansible_host=172.16.10.4 deploy_dir=/data2/deploy tikv_port=20172 labels="host=tikv1"
TiKV2-1 ansible_host=172.16.10.5 deploy_dir=/data1/deploy tikv_port=20171 labels="host=tikv2"
TiKV2-2 ansible_host=172.16.10.5 deploy_dir=/data2/deploy tikv_port=20172 labels="host=tikv2"
TiKV3-1 ansible_host=172.16.10.6 deploy_dir=/data1/deploy tikv_port=20171 labels="host=tikv3"
TiKV3-2 ansible_host=172.16.10.6 deploy_dir=/data2/deploy tikv_port=20172 labels="host=tikv3"

[monitoring_servers]
172.16.10.1

[grafana_servers]
172.16.10.1

[monitored_servers]
172.16.10.1
172.16.10.2
172.16.10.3
172.16.10.4
172.16.10.5
172.16.10.6

[pd_servers:vars]
location_labels = ["host"]
  • 服務配置檔案引數調整

    1. 多例項情況下,需要修改 tidb-ansible/conf/tikv.yml 中的 block-cache-size 引數:

      • rocksdb defaultcf block-cache-size(GB) = MEM * 80% / TiKV 例項數量 * 30%
      • rocksdb writecf block-cache-size(GB) = MEM * 80% / TiKV 例項數量 * 45%
      • rocksdb lockcf block-cache-size(GB) = MEM * 80% / TiKV 例項數量 * 2.5% (最小 128 MB)
      • raftdb defaultcf block-cache-size(GB) = MEM * 80% / TiKV 例項數量 * 2.5% (最小 128 MB)
    2. 多例項情況下,需要修改 tidb-ansible/conf/tikv.yml 中 high-concurrencynormal-concurrency 和 low-concurrency 三個引數:

      readpool:
        coprocessor:
          # Notice: if CPU_NUM > 8, default thread pool size for coprocessors
          # will be set to CPU_NUM * 0.8.
          # high-concurrency: 8
          # normal-concurrency: 8
          # low-concurrency: 8
      
      • 推薦設定:例項數*引數值 = CPU 核數 * 0.8。
    3. 如果多個 TiKV 例項部署在同一塊物理磁碟上,需要修改 conf/tikv.yml 中的 capacity 引數:

      • capacity = 磁碟總容量 / TiKV 例項數量,例如 "100GB"

inventory.ini 變數調整

部署目錄調整

部署目錄通過 deploy_dir 變數控制,預設全域性變數已設定為 /home/tidb/deploy,對所有服務生效。如資料盤掛載目錄為 /data1,可設定為 /data1/deploy,樣例如下:

## Global variables
[all:vars]
deploy_dir = /data1/deploy

如為某一服務單獨設定部署目錄,可在配置服務主機列表時配置主機變數,以 TiKV 節點為例,其他服務類推,請務必新增第一列別名,以免服務混布時混淆。

TiKV1-1 ansible_host=172.16.10.4 deploy_dir=/data1/deploy

其他變數調整

注: 以下控制變數開啟請使用首字母大寫 True,關閉請使用首字母大寫 False

變數 含義
cluster_name 叢集名稱,可調整
tidb_version TiDB 版本,TiDB-Ansible 各分支預設已配置
process_supervision 程序監管方式,預設為 systemd,可選 supervise
timezone 新安裝 TiDB 叢集第一次啟動 bootstrap(初始化)時,將 TiDB 全域性預設時區設定為該值。TiDB 使用的時區後續可通過 time_zone 全域性變數和 session 變數來修改,參考時區支援。 預設為 Asia/Shanghai,可選值參考 timzone 列表
enable_firewalld 開啟防火牆,預設不開啟,如需開啟,請將部署建議-網路要求 中的埠加入白名單
enable_ntpd 檢測部署目標機器 NTP 服務,預設為 True,請勿關閉
set_hostname 根據 IP 修改部署目標機器主機名,預設為 False
enable_binlog 是否部署 pump 並開啟 binlog,預設為 False,依賴 Kafka 叢集,參見 zookeeper_addrs 變數
zookeeper_addrs binlog Kafka 叢集的 zookeeper 地址
enable_slow_query_log TiDB 慢查詢日誌記錄到單獨檔案({{ deploy_dir }}/log/tidb_slow_query.log),預設為 False,記錄到 tidb 日誌
deploy_without_tidb KV 模式,不部署 TiDB 服務,僅部署 PD、TiKV 及監控服務,請將 inventory.ini 檔案中 tidb_servers 主機組 IP 設定為空。
alertmanager_target 可選:如果你已單獨部署 alertmanager,可配置該變數,格式:alertmanager_host:alertmanager_port
grafana_admin_user Grafana 管理員帳號使用者名稱,預設為 admin
grafana_admin_password Grafana 管理員帳號密碼,預設為 admin,用於 Ansible 匯入 Dashboard 和建立 API Key,如後期通過 grafana web 修改了密碼,請更新此變數
collect_log_recent_hours 採集日誌時,採集最近幾個小時的日誌,預設為 2 小時
enable_bandwidth_limit 在中控機上從部署目標機器拉取診斷資料時,是否限速,預設為 True,與 collect_bandwidth_limit 變數結合使用
collect_bandwidth_limit 在中控機上從部署目標機器拉取診斷資料時限速多少,單位: Kbit/s,預設 10000,即 10Mb/s,如果是單機多 TiKV 例項部署方式,需除以單機例項個數

部署任務

ansible-playbook 執行 Playbook 時預設併發為 5,部署目標機器較多時可新增 -f 引數指定併發,如 ansible-playbook deploy.yml -f 10

  1. 確認 tidb-ansible/inventory.ini 檔案中 ansible_user = tidb,本例使用 tidb 使用者作為服務執行使用者,配置如下:

    ansible_user 不要設定成 root 使用者,tidb-ansible 限制了服務以普通使用者執行。

    ## Connection
    # ssh via normal user
    ansible_user = tidb

    執行以下命令如果所有 server 返回 tidb 表示 ssh 互信配置成功。

    ansible -i inventory.ini all -m shell -a 'whoami'
    

    執行以下命令如果所有 server 返回 root 表示 tidb 使用者 sudo 免密碼配置成功。

    ansible -i inventory.ini all -m shell -a 'whoami' -b
    
  2. 執行 local_prepare.yml playbook,聯網下載 TiDB binary 到中控機:

    ansible-playbook local_prepare.yml
    
  3. 初始化系統環境,修改核心引數

    ansible-playbook bootstrap.yml
    
  4. 部署 TiDB 叢集軟體

    ansible-playbook deploy.yml
    

    :Grafana Dashboard 上的 Report 按鈕可用來生成 PDF 檔案,此功能依賴 fontconfig 包和英文字型。如需使用該功能,登入 grafana_servers 機器,用以下命令安裝:

    $ sudo yum install fontconfig open-sans-fonts
    
  5. 啟動 TiDB 叢集

    ansible-playbook start.yml
    

測試叢集

測試連線 TiDB 叢集,推薦在 TiDB 前配置負載均衡來對外統一提供 SQL 介面。

  • 使用 MySQL 客戶端連線測試,TCP 4000 埠是 TiDB 服務預設埠。

    mysql -u root -h 172.16.10.1 -P 4000
  • 通過瀏覽器訪問監控平臺。

    地址:http://172.16.10.1:3000 預設帳號密碼是:admin/admin

常見部署問題

如何自定義埠

修改 inventory.ini 檔案,在相應服務 IP 後新增以下主機變數即可:

元件 埠變數 預設埠 說明
TiDB tidb_port 4000 應用及 DBA 工具訪問通訊埠
TiDB tidb_status_port 10080 TiDB 狀態資訊上報通訊埠
TiKV tikv_port 20160 TiKV 通訊埠
PD pd_client_port 2379 提供 TiDB 和 PD 通訊埠
PD pd_peer_port 2380 PD 叢集節點間通訊埠
Pump pump_port 8250 Pump 通訊埠
Prometheus prometheus_port 9090 Prometheus 服務通訊埠
Pushgateway pushgateway_port 9091 TiDB, TiKV, PD 監控聚合和上報埠
Node_exporter node_exporter_port 9100 TiDB 叢集每個節點的系統資訊上報通訊埠
Blackbox_exporter blackbox_exporter_port 9115 Blackbox_exporter 通訊埠,用於 TiDB 叢集埠監控
Grafana grafana_port 3000 Web 監控服務對外服務和客戶端(瀏覽器)訪問埠
Grafana grafana_collector_port 8686 grafana_collector 通訊埠,用於將 Dashboard 匯出為 PDF 格式
Kafka_exporter kafka_exporter_port 9308 Kafka_exporter 通訊埠,用於監控 binlog Kafka 叢集

如何自定義部署目錄

修改 inventory.ini 檔案,在相應服務 IP 後新增以下主機變數即可:

元件 目錄變數 預設目錄 說明
全域性 deploy_dir /home/tidb/deploy 部署目錄
TiDB tidb_log_dir {{ deploy_dir }}/log 日誌目錄
TiKV tikv_log_dir {{ deploy_dir }}/log 日誌目錄
TiKV tikv_data_dir {{ deploy_dir }}/data 資料目錄
TiKV wal_dir "" rocksdb write-ahead 日誌目錄,為空時與 TiKV 資料目錄一致
TiKV raftdb_path "" raftdb 目錄,為空時為 tikv_data_dir/raft
PD pd_log_dir {{ deploy_dir }}/log 日誌目錄
PD pd_data_dir {{ deploy_dir }}/data.pd 資料目錄
pump pump_log_dir {{ deploy_dir }}/log 日誌目錄
pump pump_data_dir {{ deploy_dir }}/data.pump 資料目錄
prometheus prometheus_log_dir {{ deploy_dir }}/log 日誌目錄
prometheus prometheus_data_dir {{ deploy_dir }}/data.metrics 資料目錄
pushgateway pushgateway_log_dir {{ deploy_dir }}/log 日誌目錄
node_exporter node_exporter_log_dir {{ deploy_dir }}/log 日誌目錄
grafana grafana_log_dir {{ deploy_dir }}/log 日誌目錄
grafana grafana_data_dir {{ deploy_dir }}/data.grafana 資料目錄

如何檢測 NTP 服務是否正常

執行以下命令輸出 running 表示 NTP 服務正在執行:

$ sudo systemctl status ntpd.service
● ntpd.service - Network Time Service
   Loaded: loaded (/usr/lib/systemd/system/ntpd.service; disabled; vendor preset: disabled)
   Active: active (running) since 一 2017-12-18 13:13:19 CST; 3s ago

執行 ntpstat 命令,輸出 synchronised to NTP server(正在與 NTP server 同步)表示在正常同步:

$ ntpstat
synchronised to NTP server (85.199.214.101) at stratum 2
   time correct to within 91 ms
   polling server every 1024 s

注: Ubuntu 系統需安裝 ntpstat 軟體包。

以下情況表示 NTP 服務未正常同步:

$ ntpstat
unsynchronised

以下情況表示 NTP 服務未正常執行:

$ ntpstat
Unable to talk to NTP daemon. Is it running?

使用以下命令可使 NTP 服務儘快開始同步,pool.ntp.org 可替換為你的 NTP server:

$ sudo systemctl stop ntpd.service
$ sudo ntpdate pool.ntp.org
$ sudo systemctl start ntpd.service

在 CentOS 7 系統上執行以下命令,可手工安裝 NTP 服務:

$ sudo yum install ntp ntpdate
$ sudo systemctl start ntpd.service
$ sudo systemctl enable ntpd.service

如何調整程序監管方式從 supervise 到 systemd

# process supervision, [systemd, supervise]
process_supervision = systemd

TiDB-Anisble 在 TiDB v1.0.4 版本之前程序監管方式預設為 supervise, 之前安裝的叢集可保持不變,如需更新為 systemd,需關閉叢集按以下方式變更:

ansible-playbook stop.yml
ansible-playbook deploy.yml -D
ansible-playbook start.yml

如何手工配置 ssh 互信及 sudo 免密碼

以 root 使用者依次登入到部署目標機器建立 tidb 使用者並設定登入密碼。

# useradd tidb
# passwd tidb

執行以下命令,將 tidb ALL=(ALL) NOPASSWD: ALL 新增到檔案末尾,即配置好 sudo 免密碼。

# visudo
tidb ALL=(ALL) NOPASSWD: ALL

以 tidb 使用者登入到中控機,執行以下命令,將 172.16.10.61 替換成你的部署目標機器 IP,按提示輸入部署目標機器 tidb 使用者密碼,執行成功後即建立好 ssh 互信,其他機器同理。

[[email protected] ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.10.61

以 tidb 使用者登入到中控機,ssh 登入目標機器 IP,不需要輸入密碼並登入成功,表示 ssh 互信配置成功。

[[email protected] ~]$ ssh 172.16.10.61
[[email protected] ~]$

以 tidb 使用者登入到部署目標機器後,執行以下命令,不需要輸入密碼並切換到 root 使用者,表示 tidb 使用者 sudo 免密碼配置成功。

[[email protected] ~]$ sudo -su root
[[email protected] tidb]#

You need to install jmespath prior to running json_query filter 報錯

請參照 在中控機器上安裝 Ansible 及其依賴 在中控機上通過 pip 安裝 Ansible 及相關依賴的指定版本,預設會安裝 jmespath

可通過以下命令驗證 jmespath 是否安裝成功:

$ pip show jmespath
Name: jmespath
Version: 0.9.0

在中控機上 python 互動窗口裡 import jmespath,如果沒有報錯,表示依賴安裝成功,如果有 ImportError: No module named jmespath 報錯,表示未安裝 python jmespath 模組。

$ python
Python 2.7.5 (default, Nov  6 2016, 00:28:07)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import jmespath

啟動 Pump/Drainer 報 zk: node does not exist 錯誤

請檢查 inventory.ini 裡的 zookeeper_addrs 引數配置與 Kafka 叢集內的配置是否相同、是否填寫了名稱空間。關於名稱空間的配置說明如下:

# ZooKeeper connection string (see ZooKeeper docs for details).
# ZooKeeper address of Kafka cluster, example:
# zookeeper_addrs = "192.168.0.11:2181,192.168.0.12:2181,192.168.0.13:2181"
# You can also append an optional chroot string to the URLs to specify the root directory for all Kafka znodes. Example:
# zookeeper_addrs = "192.168.0.11:2181,192.168.0.12:2181,192.168.0.13:2181/kafka/123"