使用 Ansible 安裝部署 TiDB

背景知識

TiDB 做爲一個分佈式數據庫,在多個節點分別配置安裝服務會至關繁瑣,爲了簡化操做以及方便管理,使用自動化工具來批量部署成爲了一個很好的選擇。git

Ansible 是基於 Python 研發的自動化運維工具,糅合了衆多老牌運維工具的優勢實現了批量操做系統配置、批量程序的部署、批量運行命令等功能,並且使用簡單,僅需在管理工做站上安裝 Ansible 程序配置被管控主機的 IP 信息,被管控的主機無客戶端。基於以上緣由,咱們選用自動化工具 Ansible 來批量的安裝配置以及部署 TiDB。github

下面咱們來介紹如何使用 Ansible 來部署 TiDB。算法

TiDB 安裝環境配置以下

操做系統使用 CentOS7.2 或者更高版本,文件系統使用 EXT4。數據庫

說明:低版本的操做系統(例如 CentOS6.6 )和 XFS 文件系統會有一些內核 Bug,會影響性能,咱們不推薦使用。json

IP Services
192.168.1.101 PD Prometheus Grafana Pushgateway Node_exporter
192.168.1.102 PD TiDB Node_exporter
192.168.1.103 PD TiDB Node_exporter
192.168.1.104 TiKV Node_exporter
192.168.1.105 Tikv Node_exporter
192.168.1.106 TiKV Node_exporter

咱們選擇使用 3 個 PD、2 個 TiDB、1 個 TiKV,這裏簡單說一下爲何這樣部署。bootstrap

  • 對於 PD 。PD 自己是一個分佈式系統,由多個節點構成一個總體,而且同時有且只有一個主節點對外提供服務。各個節點之間經過選舉算法來肯定主節點,選舉算法要求節點個數是奇數個 (2n+1) ,1 個節點的風險比較高,因此咱們選擇使用 3 個節點。服務器

  • 對於 TiKV 。TiDB 底層使用分佈式存儲,咱們推薦使用奇數 (2n+1) 個備份,掛掉 n 個備份以後數據仍然可用。使用 1 備份或者 2 備份的話,有一個節點掛掉就會形成一部分數據不可用,因此咱們選擇使用 3 個節點、設置 3 個備份 (默認值)。網絡

  • 對於 TiDB 。咱們的 TiDB 是無狀態的,現有集羣的 TiDB 服務壓力大的話,能夠在其餘節點直接增長 TiDB 服務,無需多餘的配置。咱們選擇使用兩個 TiDB,能夠作 HA 和負載均衡。負載均衡

  • 固然若是隻是測試集羣的話,徹底可使用一個 PD 、一個 TiDB 、三個 TiKV (少於三個的話須要修改備份數量)運維

下載 TiDB 安裝包並解壓

#建立目錄用來存放 ansible 安裝包
mkdir /root/workspace                 

#切換目錄
cd /root/workspace                    

#下載安裝包
wget https://github.com/pingcap/tidb-ansible/archive/master.zip     

#解壓壓縮包到當前目錄下
unzip master.zip                      

#查看安裝包結構,主要內容說明以下
cd tidb-ansible-master && ls

部份內容含義

ansible.cfg: ansible 配置文件
inventoty.ini: 組和主機的相關配置
conf: TiDB 相關配置模版
group_vars: 相關變量配置
scripts: grafana 監控 json 模版
local_prepare.yml: 用來下載相關安裝包
bootstrap.yml: 初始化集羣各個節點
deploy.yml: 在各個節點安裝 TiDB 相應服務
roles: ansible tasks 的集合
start.yml: 啓動全部服務
stop.yml: 中止全部服務
unsafe_cleanup_data.yml: 清除數據
unsafe_cleanup.yml: 銷燬集羣

修改配置文件

主要配置集羣節點的分佈狀況,以及安裝路徑。

會在 tidb_servers 組中的機器上安裝 TiDB 服務(其餘相似),默認會將全部服務安裝到變量 deploy_dir 路徑下。

#將要安裝 TiDB 服務的節點
[tidb_servers]
192.168.1.102
192.168.1.103

#將要安裝 TiKV 服務的節點
[tikv_servers]
192.168.1.104
192.168.1.105
192.168.1.106

#將要安裝 PD 服務的節點
[pd_servers]
192.168.1.101
192.168.1.102
192.168.1.103

#將要安裝 Promethues 服務的節點
# Monitoring Part
[monitoring_servers]
192.168.1.101

#將要安裝 Grafana 服務的節點
[grafana_servers]
192.168.1.101

#將要安裝 Node_exporter 服務的節點
[monitored_servers:children]
tidb_servers
tikv_servers
pd_servers

[all:vars]
#服務安裝路徑,每一個節點均相同,根據實際狀況配置
deploy_dir = /home/tidb/deploy

## Connection
#方式一:使用 root 用戶安裝
# ssh via root:
# ansible_user = root
# ansible_become = true
# ansible_become_user = tidb

#方式二:使用普通用戶安裝(須要有 sudo 權限)
# ssh via normal user
ansible_user = tidb

#集羣的名稱,自定義便可
cluster_name = test-cluster

# misc
enable_elk = False
enable_firewalld = False
enable_ntpd = False

# binlog trigger
#是否開啓 pump,pump 生成 TiDB 的 binlog 
#若是有今後 TiDB 集羣同步數據的需求,能夠改成 True 開啓
enable_binlog = False

安裝過程能夠分爲 root 用戶安裝和普通用戶安裝兩種方式。有 root 用戶固然是最好的,修改系統參數、建立目錄等不會涉及到權限不夠的問題,可以直接安裝完成。
可是有些環境不會直接給 root 權限,這種場景就須要經過普通用戶來安裝。爲了配置簡便,咱們建議全部節點都使用相同的普通用戶;爲了知足權限要求,咱們還須要給這個普通用戶 sudo 權限。
下面介紹兩種安裝方式的詳細過程,安裝完成以後須要手動啓動服務。

1. 使用 root 用戶安裝

  • 下載 Binary 包到 downloads 目錄下,並解壓拷貝到 resources/bin 下,以後的安裝過程就是使用的 resources/bin 下的二進制程序

ansible-playbook -i inventory.ini local_prepare.yml
  • 初始化集羣各個節點。會檢查 inventory.ini 配置文件、Python 版本、網絡狀態、操做系統版本等,並修改一些內核參數,建立相應的目錄。

    • 修改配置文件以下

    ## Connection
    # ssh via root:
    ansible_user = root
    # ansible_become = true
    ansible_become_user = tidb
    
    # ssh via normal user
    # ansible_user = tidb
    • 執行初始化命令

    ansible-playbook -i inventory.ini bootstrap.yml -k   #ansible-playboo命令說明請見附錄
  • 安裝服務。該步驟會在服務器上安裝相應的服務,並自動設置好配置文件和所需腳本。

    • 修改配置文件以下

    ## Connection
    # ssh via root:
      ansible_user = root
      ansible_become = true
      ansible_become_user = tidb
    
    # ssh via normal user
    # ansible_user = tidb
    • 執行安裝命令

    ansible-playbook -i inventory.ini deploy.yml -k

2. 使用普通用戶安裝

  • 下載 Binary 包到中控機

ansible-playbook -i inventory.ini local_prepare.yml
  • 初始化集羣各個節點。

    • 修改配置文件以下

    ## Connection
    # ssh via root:
    # ansible_user = root
    # ansible_become = true
    # ansible_become_user = tidb
    
    # ssh via normal user
    ansible_user = tidb
- 執行初始化命令
ansible-playbook -i inventory.ini bootstrap.yml -k -K
  • 安裝服務

ansible-playbook -i inventory.ini deploy.yml -k -K

啓停服務

  • 啓動全部服務

ansible-playbook -i inventory.ini start.yml -k
  • 中止全部服務

ansible-playbook -i inventory.ini stop.yml

附錄

ansible-playbook -i inventory.ini xxx.yml -k -K

-k 執行以後須要輸入 ssh 鏈接用戶的密碼,若是作了中控機到全部節點的互信,則不須要此參數

-K 執行以後須要輸入 sudo 所需的密碼,若是使用 root 用戶或者 sudo 無需密碼,則不須要此參數

相關文章
相關標籤/搜索