1. 程式人生 > 實用技巧 >TiDB Ansible方式部署叢集

TiDB Ansible方式部署叢集

一.在控制機上安裝系統依賴包 1. 以root 使用者進行登入 CentS 7 系統 執行
yum -y install epel-release git curl sshpass && \
yum -y install python2-pip
Ubuntu 執行
apt-get -y install git curl sshpass python-pip
二.在控制機上建立tidb使用者並 生成ssh key 1. 以 root 使用者 登入控制機 並建立使用者
useradd  -m -d /home/tidb tidb
2. 設定tidb 使用者密碼
passwd tidb
3. 配置 tidb 使用者 sudo 免密碼
visudo
# 然後在最後一行加上
tidb ALL=(ALL) NOPASSWD: ALL
4. 生產 SSH key
#  執行 su 命令,從 root 使用者切換到 tidb 使用者下。
su - tidb
ssh-keygen -t rsa
# 提示 Enter passphrase 時直接回車即可。執行成功後,
# SSH 私鑰檔案為 /home/tidb/.ssh/id_rsa,SSH 公鑰檔案為 /home/tidb/.ssh/id_rsa.pub。
三. 在控制機上下載TIDB ansible 1. 以 tidb 使用者登入中控機並進入 /home/tidb 目錄, 必須要在該目錄 不然可能會出現無許可權的問題。使用以下命令從
TiDB Ansible 專案
上下載 TiDB Ansible 4.0 相應 TAG 版本,預設的資料夾名稱為 tidb-ansible。
git clone -b $tag https://github.com/pingcap/tidb-ansible.git
#  $tag 就是對應的版本號
四.在控制機上安裝TIDB ansible及依賴 1. 以tidb 使用者登入 控制機 在控制機上安裝 TIDB ansible及依賴
cd /home/tidb/tidb-ansible && \
sudo pip install -r ./requirements.txt
2. 檢視 ansible 版本
ansible --version
ansible 2.7.11
五.在控制機上配置 部署機器SSH互信 1.以 tidb 使用者登入控制器機 然後將需要部署的機器IP新增到 hosts.ini 檔案的 [servers] 區塊下
cd /home/tidb/tidb-ansible && \
vi hosts.ini
[servers]
172.16.5.52
172.16.4.29
172.16.4.56
172.16.4.30
172.16.4.224
172.16.5.208
[all:vars]
username = tidb
ntp_server = pool.ntp.org
2. 執行下面命令 將 需要部署的目標機器上 建立tidb 使用者 並配置互信和sudo規則
ansible-playbook -i hosts.ini create_users.yml -u root -k
3. 手工互信方法
1. 以root 使用者登入依次登入到目標機器中 建立 tidb 使用者
    useradd tidb && \
    passwd tidb
2.配置sudo 免密碼
    執行 visudo 在最後一行輸入 tidb ALL=(ALL) NOPASSWD: ALL
3. 在以 root 使用者登入 控制機 部署互信
    ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.5.52
    # IP 需要修改為你的目標機器IP地址
4. 通過ssh 連結進行測試
六.在目標機器上安裝ntp服務 1. 以 tidb 使用者 登入控制機 執行一下命令 將目標機器上部署 ntp服務
cd /home/tidb/tidb-ansible && \
ansible-playbook -i hosts.ini deploy_ntp.yml -u tidb -b
2. 執行下面命令, 檢測 ntp 服務是否正常執行
1. sudo systemctl status ntpd.service
# 如果輸出runing 表示正常執行
2. ntpstat
# 如果輸出 synchronised to NTP server  表示正常同步
七.在目標機器上配置CPUfrep 調解模式 1. 執行 cpupower 命令 檢視系統支援模式
1. cpupower frequency-info --governors
    analyzing CPU 0:
      available cpufreq governors: performance powersave
    # 如果返回 Not Available 則直接跳過 第七步
2. 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.
3. 修改 模式
cpupower frequency-set --governor performance
2. 也可以在控制機器上批量修改, 前提是 目標前期滿足 七.1.1 的條件
ansible -i hosts.ini all -m shell -a "cpupower frequency-set --governor performance" -u tidb -b
八.在目標機器上新增磁碟
使用 root 使用者登入目標機器,將部署目標機器資料盤格式化成 ext4 檔案系統,掛載時新增 nodelalloc 和 noatime 掛載引數。nodelalloc 是必選引數,否則 Ansible 安裝時檢測無法通過;noatime 是可選建議引數。
注意:
如果你的資料盤已經格式化成 ext4 並掛載了磁碟,可先執行 umount /dev/nvme0n1p1 命令解除安裝,從編輯 /etc/fstab 檔案步驟開始執行,添加掛載引數重新掛載即可。 以 /dev/nvme0n1 資料盤為例,具體操作步驟如下:
1. 檢視資料盤
fdisk -l
Disk /dev/nvme0n1: 1000 GB # 如果沒有這個直接跳過第八步
2. 建立分割槽表
parted -s -a optimal /dev/nvme0n1 mklabel gpt -- mkpart primary ext4 1 -1
3.格式化檔案系統
mkfs.ext4 /dev/nvme0n1p1
4.檢視資料盤分割槽uuid
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
└─nvme0n1p1 ext4         c51eb23b-195c-4061-92a9-3fad812cc12f
5.編輯/etc/fstab, 新增nodelalloc 掛載引數
vi /etc/fstab
UUID=c51eb23b-195c-4061-92a9-3fad812cc12f /data1 ext4 defaults,nodelalloc,noatime 0 2
6.掛載資料盤
mkdir /data1 && \
mount -a
7. 執行mount -t ext4 返回引數中包含 mount -t ext4 表示 已經生效
mount -t ext4
/dev/nvme0n1p1 on /data1 type ext4 (rw,noatime,nodelalloc,data=ordered)
九.編輯 inventory.ini 檔案,分配機器資源
  • 至少需部署 3 個 TiKV 例項。
  • 不要將 TiKV 例項與 TiDB 或 PD 例項混合部署在同一臺機器上。
  • 將第一臺 TiDB 機器同時用作監控機。
請使用內網 IP 來部署叢集,如果部署目標機器 SSH 埠非預設的 22 埠,
需新增 ansible_port 變數,如 TiDB1 ansible_host=172.16.10.1 ansible_port=5555
如果是 ARM 架構的機器,需要將 cpu_architecture 改為 arm64。
1. 編輯 /tidb-tidb-ansible/inventory.ini檔案, 我的是按照單機多例項進行配置的
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@CentOS76_VM tidb-ansible]$ vim inventory.ini 
## TiDB Cluster Part
[tidb_servers]
172.16.5.52
172.16.4.29
 
[tikv_servers]
TiKV1-1 ansible_host=172.16.4.30 deploy_dir=/data1/deploy tikv_port=20171 tikv_status_port=20181 labels="host=tikv1"
TiKV1-2 ansible_host=172.16.4.30 deploy_dir=/data2/deploy tikv_port=20172 tikv_status_port=20182 labels="host=tikv1"
TiKV2-1 ansible_host=172.16.4.224 deploy_dir=/data1/deploy tikv_port=20171 tikv_status_port=20181 labels="host=tikv2"
TiKV2-2 ansible_host=172.16.4.224 deploy_dir=/data2/deploy tikv_port=20172 tikv_status_port=20182 labels="host=tikv2"
TiKV3-1 ansible_host=172.16.5.208 deploy_dir=/data1/deploy tikv_port=20171 tikv_status_port=20181 labels="host=tikv3"
TiKV3-2 ansible_host=172.16.5.208 deploy_dir=/data2/deploy tikv_port=20172 tikv_status_port=20182 labels="host=tikv3"
 
[pd_servers]
172.16.5.52
172.16.4.29
172.16.4.56
 
[spark_master]
[spark_slaves]
 
[lightning_server]
 
[importer_server]
 
## Monitoring Part
# prometheus and pushgateway servers
[monitoring_servers]
172.16.5.52
 
[grafana_servers]
172.16.5.52
 
# node_exporter and blackbox_exporter servers
[monitored_servers]
172.16.5.52
172.16.4.29
172.16.4.56
172.16.4.30
172.16.4.224
172.16.5.208
 
[alertmanager_servers]
 
[kafka_exporter_servers]
 
## Binlog Part
[pump_servers]
 
[drainer_servers]
 
## For TiFlash Part, please contact us for beta-testing and user manual
[tiflash_servers]
 
## Group variables
# 注意:為使 TiKV 的 labels 設定生效,部署叢集時必須設定 PD 的 location_labels 引數。
[pd_servers:vars]
location_labels = ["host"]

2. 引數調整注意事項
1.多例項情況下,需要修改 tidb-ansible/conf/tikv.yml 中 block-cache-size 下面的 capacity 引數:
    storage:
      block-cache:
        capacity: "1GB"
        TiKV 例項數量指每個伺服器上 TiKV 的程序數量。
        推薦設定:capacity = MEM_TOTAL * 0.5 / TiKV 例項數量
2.多例項情況下,需要修改 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
        推薦設定:TiKV 例項數量 * 引數值 = CPU 核心數量 * 0.8
3.如果多個 TiKV 例項部署在同一塊物理磁碟上,需要修改 conf/tikv.yml 中的 capacity 引數:
    raftstore:
      capacity: 0
    推薦配置:capacity = 磁碟總容量 / TiKV 例項數量
    例如:capacity: "100GB"
十.inventory.ini 的相關變數
變數 含義
cluster_name 叢集名稱,可調整
cpu_architecture CPU 體系架構,預設為amd64,可選arm64
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 地址
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 例項部署方式,需除以單機例項個數
prometheus_storage_retention Prometheus 監控資料的保留時間(預設為 30 天);2.1.7、3.0 以及之後的 tidb-ansible 版本中,group_vars/monitoring_servers.yml檔案裡新增的配置
十一.部署TIDB 叢集 ansible-playbook 執行 Playbook 時,預設併發為 5。部署目標機器較多時, 可新增 -f 引數指定併發數,例如 ansible-playbook deploy.yml -f 10 1. 以 tidb 使用者登入控制機 在 tidb-ansible/inventory.ini 檔案中,確認 ansible_user = tidb
## Connection
# ssh via normal user
ansible_user = tidb
# 因為 TIDB 限制了服務以普通使用者執行
1. ansible -i inventory.ini all -m shell -a 'whoami'
# 返回tidb 表示互信配置成功
2.ansible -i inventory.ini all -m shell -a 'whoami' -b
# 返回tidb 表示sudo免密配置成功
2.執行 local_prepare.yml playbook,聯網下載 TiDB binary 至中控機
ansible-playbook local_prepare.yml
3.初始化環境, 修改核心引數
ansible-playbook bootstrap.yml
4.部署 TIDB 叢集
ansible-playbook deploy.yml
5.啟動TIDB叢集
ansible-playbook start.yml
測試叢集 TiDB 相容 MySQL,因此可使用 MySQL 客戶端直接連線 TiDB。推薦配置負載均衡以提供統一的 SQL 介面。 1. 使用 MySQL 客戶端連線 TiDB 叢集。TiDB 服務的預設埠為 4000。
mysql -u root -h 172.16.10.1 -P 4000
2. 通過瀏覽器訪問監控平臺。

有道雲地址>>