使用 Ansible 安裝部署 TiDB
背景知識
TiDB 作為一個分散式資料庫,在多個節點分別配置安裝服務會相當繁瑣,為了簡化操作以及方便管理,使用自動化工具來批量部署成為了一個很好的選擇。
Ansible 是基於 Python 研發的自動化運維工具,糅合了眾多老牌運維工具的優點實現了批量作業系統配置、批量程式的部署、批量執行命令等功能,而且使用簡單,僅需在管理工作站上安裝 Ansible 程式配置被管控主機的 IP 資訊,被管控的主機無客戶端。基於以上原因,我們選用自動化工具 Ansible 來批量的安裝配置以及部署 TiDB。
下面我們來介紹如何使用 Ansible 來部署 TiDB。
TiDB 安裝環境配置如下
作業系統使用 CentOS7.2 或者更高版本,檔案系統使用 EXT4。
說明:低版本的作業系統(例如 CentOS6.6 )和 XFS 檔案系統會有一些核心 Bug,會影響效能,我們不推薦使用。
| 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,這裡簡單說一下為什麼這樣部署。
- 對於 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 無需密碼,則不需要此引數
相關文章
- Ansible的安裝及部署
- TIDB DM資料同步工具安裝部署TiDB
- 滴滴雲安裝並使用 Ansible
- yum安裝ansible
- Ansible安裝mysqlMySql
- Centos8 安裝並使用Ansible(二)CentOS
- Centos8 安裝並使用Ansible(一)CentOS
- 離線安裝ansible
- Ansible原理和安裝
- 安裝ansible-2.4.2
- Ansible與Ansible部署
- ansible-galaxy 使用 prometheus-community/ansible 社群 Collection 安裝 node-exporterPrometheusUnityExport
- 如何使用 Ansible 配置 Vim並安裝外掛
- 使用 Ansible 快速部署 HBase 叢集
- kafka 安裝部署,使用教程Kafka
- 單機CentOS 安裝 TiDBCentOSTiDB
- Ansible自動化部署工具-role模式安裝filebeat實際案例分析模式
- rpm方式離線安裝ansible
- ansible部署配置
- 從0到1使用Kubernetes系列(三)——使用Ansible安裝Kubernetes叢集
- ansible2.4安裝和體驗
- LNMP部署laravel與xhprof安裝使用LNMPLaravel
- ansible批次部署apacheApache
- tidb叢集部署TiDB
- Linux 原始碼安裝Ansible 參考篇Linux原始碼
- 使用 Jenkins + Ansible 實現自動化部署 NginxJenkinsNginx
- Springboot專案引入druid安裝部署使用Spring BootUI
- 如何在 CentOS 8 和 RHEL 8 系統上安裝和使用 AnsibleCentOS
- Kolla-ansible部署openStack
- Ansible自動部署工具
- Linux安裝部署Linux
- ELK安裝部署
- chromedriver安裝部署Chrome
- canal安裝部署
- SQOOP安裝部署OOP
- keepalived 安裝部署
- Hadoop安裝部署Hadoop
- Zabbix安裝部署
- Doris安裝部署