TiDB Ansible 部署方案(生產資料庫部署方案)
經過一段時間的搜尋,瞭解到pingcap建議Tidb的叢集生產環境使用Ansible去部署,所以這篇文章純摘抄,不是原創,具體如下:
概述
Ansible 是一款自動化運維工具,TiDB-Ansible 是 PingCAP 基於 Ansible playbook 功能編寫的叢集部署工具。本文件介紹如何使用 TiDB-Ansible 部署一個完整的 TiDB 叢集。
本部署工具可以通過配置檔案設定叢集拓撲,完成以下各項運維工作:
注:對於生產環境,須使用 TiDB-Ansible 部署 TiDB 叢集。如果只是用於測試 TiDB 或體驗 TiDB 的特性,建議
使用 Docker Compose 在單機上快速部署 TiDB 叢集。
準備機器
-
部署目標機器若干
- 建議 4 臺及以上,TiKV 至少 3 例項,且與 TiDB、PD 模組不位於同一主機,詳見部署建議。
- 推薦安裝 CentOS 7.3 及以上版本 Linux 作業系統,x86_64 架構 (amd64)。
- 機器之間內網互通。
注:使用 Ansible 方式部署時,TiKV 及 PD 節點資料目錄所在磁碟請使用 SSD 磁碟,否則無法通過檢測。 如果僅驗證功能,建議使用 Docker Compose 部署方案單機進行測試。
-
部署中控機一臺:
- 中控機可以是部署目標機器中的某一臺。
- 推薦安裝 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 服務前,系統會 ntpdatehosts.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"]
-
服務配置檔案引數調整
-
多例項情況下,需要修改
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)
-
多例項情況下,需要修改
tidb-ansible/conf/tikv.yml
中high-concurrency
、normal-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。
-
如果多個 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
-
確認
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
-
執行
local_prepare.yml
playbook,聯網下載 TiDB binary 到中控機:ansible-playbook local_prepare.yml
-
初始化系統環境,修改核心引數
ansible-playbook bootstrap.yml
-
部署 TiDB 叢集軟體
ansible-playbook deploy.yml
注:Grafana Dashboard 上的 Report 按鈕可用來生成 PDF 檔案,此功能依賴
fontconfig
包和英文字型。如需使用該功能,登入 grafana_servers 機器,用以下命令安裝:$ sudo yum install fontconfig open-sans-fonts
-
啟動 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"