關(guān)注微信公眾號(hào)
創(chuàng)頭條企服版APP
TiDB 作為一個(gè)分布式數(shù)據(jù)庫(kù),在多個(gè)節(jié)點(diǎn)分別配置安裝服務(wù)會(huì)相當(dāng)繁瑣,為了簡(jiǎn)化操作以及方便管理,使用自動(dòng)化工具來(lái)批量部署成為了一個(gè)很好的選擇。
Ansible 是基于 Python 研發(fā)的自動(dòng)化運(yùn)維工具,糅合了眾多老牌運(yùn)維工具的優(yōu)點(diǎn)實(shí)現(xiàn)了批量操作系統(tǒng)配置、批量程序的部署、批量運(yùn)行命令等功能,而且使用簡(jiǎn)單,僅需在管理工作站上安裝 Ansible 程序配置被管控主機(jī)的 IP 信息,被管控的主機(jī)無(wú)客戶端。基于以上原因,我們選用自動(dòng)化工具 Ansible 來(lái)批量的安裝配置以及部署 TiDB。
下面我們來(lái)介紹如何使用 Ansible 來(lái)部署 TiDB。
操作系統(tǒng)使用 CentOS7.2 或者更高版本,文件系統(tǒng)使用 EXT4。
說(shuō)明:低版本的操作系統(tǒng)(例如 CentOS6.6 )和 XFS 文件系統(tǒng)會(huì)有一些內(nèi)核 Bug,會(huì)影響性能,我們不推薦使用。

我們選擇使用 3 個(gè) PD、2 個(gè) TiDB、1 個(gè) TiKV,這里簡(jiǎn)單說(shuō)一下為什么這樣部署。
對(duì)于 PD 。PD 本身是一個(gè)分布式系統(tǒng),由多個(gè)節(jié)點(diǎn)構(gòu)成一個(gè)整體,并且同時(shí)有且只有一個(gè)主節(jié)點(diǎn)對(duì)外提供服務(wù)。各個(gè)節(jié)點(diǎn)之間通過(guò)選舉算法來(lái)確定主節(jié)點(diǎn),選舉算法要求節(jié)點(diǎn)個(gè)數(shù)是奇數(shù)個(gè) (2n+1) ,1 個(gè)節(jié)點(diǎn)的風(fēng)險(xiǎn)比較高,所以我們選擇使用 3 個(gè)節(jié)點(diǎn)。
對(duì)于 TiKV 。TiDB 底層使用分布式存儲(chǔ),我們推薦使用奇數(shù) (2n+1) 個(gè)備份,掛掉 n 個(gè)備份之后數(shù)據(jù)仍然可用。使用 1 備份或者 2 備份的話,有一個(gè)節(jié)點(diǎn)掛掉就會(huì)造成一部分?jǐn)?shù)據(jù)不可用,所以我們選擇使用 3 個(gè)節(jié)點(diǎn)、設(shè)置 3 個(gè)備份 (默認(rèn)值)。
對(duì)于 TiDB 。我們的 TiDB 是無(wú)狀態(tài)的,現(xiàn)有集群的 TiDB 服務(wù)壓力大的話,可以在其他節(jié)點(diǎn)直接增加 TiDB 服務(wù),無(wú)需多余的配置。我們選擇使用兩個(gè) TiDB,可以做 HA 和負(fù)載均衡。
當(dāng)然如果只是測(cè)試集群的話,完全可以使用一個(gè) PD 、一個(gè) TiDB 、三個(gè) TiKV (少于三個(gè)的話需要修改備份數(shù)量) ? ? ?
#創(chuàng)建目錄用來(lái)存放?ansible?安裝包 mkdir?/root/workspace????????????????? #切換目錄 cd?/root/workspace???????????????????? #下載安裝包 wget?https://github.com/pingcap/tidb-ansible/archive/master.zip????? #解壓壓縮包到當(dāng)前目錄下 unzip?master.zip?????????????????????? #查看安裝包結(jié)構(gòu),主要內(nèi)容說(shuō)明如下 cd?tidb-ansible-master?&&?ls
部分內(nèi)容含義
ansible.cfg:?ansible?配置文件 inventoty.ini:?組和主機(jī)的相關(guān)配置 conf:?TiDB?相關(guān)配置模版 group_vars:?相關(guān)變量配置 scripts:?grafana?監(jiān)控?json?模版 local_prepare.yml:?用來(lái)下載相關(guān)安裝包 bootstrap.yml:?初始化集群各個(gè)節(jié)點(diǎn) deploy.yml:?在各個(gè)節(jié)點(diǎn)安裝?TiDB?相應(yīng)服務(wù) roles:?ansible?tasks?的集合 start.yml:?啟動(dòng)所有服務(wù) stop.yml:?停止所有服務(wù) unsafe_cleanup_data.yml:?清除數(shù)據(jù) unsafe_cleanup.yml:?銷毀集群
主要配置集群節(jié)點(diǎn)的分布情況,以及安裝路徑。
會(huì)在 tidb_servers 組中的機(jī)器上安裝 TiDB 服務(wù)(其他類似),默認(rèn)會(huì)將所有服務(wù)安裝到變量 deploy_dir 路徑下。
#將要安裝?TiDB?服務(wù)的節(jié)點(diǎn) [tidb_servers] 192.168.1.102 192.168.1.103 #將要安裝?TiKV?服務(wù)的節(jié)點(diǎn) [tikv_servers] 192.168.1.104 192.168.1.105 192.168.1.106 #將要安裝?PD?服務(wù)的節(jié)點(diǎn) [pd_servers] 192.168.1.101 192.168.1.102 192.168.1.103 #將要安裝?Promethues?服務(wù)的節(jié)點(diǎn) #?Monitoring?Part [monitoring_servers] 192.168.1.101 #將要安裝?Grafana?服務(wù)的節(jié)點(diǎn) [grafana_servers] 192.168.1.101 #將要安裝?Node_exporter?服務(wù)的節(jié)點(diǎn) [monitored_servers:children] tidb_servers tikv_servers pd_servers [all:vars] #服務(wù)安裝路徑,每個(gè)節(jié)點(diǎn)均相同,根據(jù)實(shí)際情況配置 deploy_dir?=?/home/tidb/deploy ##?Connection #方式一:使用?root?用戶安裝 #?ssh?via?root: #?ansible_user?=?root #?ansible_become?=?true #?ansible_become_user?=?tidb #方式二:使用普通用戶安裝(需要有?sudo?權(quán)限) #?ssh?via?normal?user ansible_user?=?tidb #集群的名稱,自定義即可 cluster_name?=?test-cluster #?misc enable_elk?=?False enable_firewalld?=?False enable_ntpd?=?False #?binlog?trigger #是否開(kāi)啟?pump,pump?生成?TiDB?的?binlog? #如果有從此?TiDB?集群同步數(shù)據(jù)的需求,可以改為?True?開(kāi)啟 enable_binlog?=?False
安裝過(guò)程可以分為 root 用戶安裝和普通用戶安裝兩種方式。有 root 用戶當(dāng)然是最好的,修改系統(tǒng)參數(shù)、創(chuàng)建目錄等不會(huì)涉及到權(quán)限不夠的問(wèn)題,能夠直接安裝完成。 但是有些環(huán)境不會(huì)直接給 root 權(quán)限,這種場(chǎng)景就需要通過(guò)普通用戶來(lái)安裝。為了配置簡(jiǎn)便,我們建議所有節(jié)點(diǎn)都使用相同的普通用戶;為了滿足權(quán)限要求,我們還需要給這個(gè)普通用戶 sudo 權(quán)限。 下面介紹兩種安裝方式的詳細(xì)過(guò)程,安裝完成之后需要手動(dòng)啟動(dòng)服務(wù)。
下載 Binary 包到 downloads 目錄下,并解壓拷貝到 resources/bin 下,之后的安裝過(guò)程就是使用的 resources/bin 下的二進(jìn)制程序
ansible-playbook?-i?inventory.ini?local_prepare.yml
初始化集群各個(gè)節(jié)點(diǎn)。會(huì)檢查 inventory.ini 配置文件、Python 版本、網(wǎng)絡(luò)狀態(tài)、操作系統(tǒng)版本等,并修改一些內(nèi)核參數(shù),創(chuàng)建相應(yīng)的目錄。
##?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命令說(shuō)明請(qǐng)見(jiàn)附錄
執(zhí)行初始化命令
修改配置文件如下
安裝服務(wù)。該步驟會(huì)在服務(wù)器上安裝相應(yīng)的服務(wù),并自動(dòng)設(shè)置好配置文件和所需腳本。
##?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
執(zhí)行安裝命令
修改配置文件如下
下載 Binary 包到中控機(jī)
ansible-playbook?-i?inventory.ini?local_prepare.yml
初始化集群各個(gè)節(jié)點(diǎn)。
##?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
執(zhí)行初始化命令
修改配置文件如下
安裝服務(wù)
ansible-playbook?-i?inventory.ini?deploy.yml?-k?-K
啟動(dòng)所有服務(wù)
ansible-playbook?-i?inventory.ini?start.yml?-k
停止所有服務(wù)
ansible-playbook?-i?inventory.ini?stop.yml
附錄
ansible-playbook?-i?inventory.ini?xxx.yml?-k?-K -k?執(zhí)行之后需要輸入?ssh?連接用戶的密碼,如果做了中控機(jī)到所有節(jié)點(diǎn)的互信,則不需要此參數(shù) -K?執(zhí)行之后需要輸入?sudo?所需的密碼,如果使用?root?用戶或者?sudo?無(wú)需密碼,則 不需要此參數(shù)
您也可以關(guān)注我們的官方微信公眾號(hào)(ID:ctoutiao),給您更多好看的內(nèi)容。
2023-07-18 PingCAP發(fā)布了 《時(shí)刻領(lǐng)先丨PingCAP 用戶峰會(huì) 2023 圓滿收官》的文章
2023-02-13 PingCAP發(fā)布了 《促進(jìn)關(guān)鍵軟件高層次人才培養(yǎng):平凱星辰與華東師范大學(xué)簽訂聯(lián)合博士培養(yǎng)合作協(xié)議》的文章
2023-01-10 PingCAP發(fā)布了 《同盾科技 x TiDB丨實(shí)時(shí)數(shù)據(jù)架構(gòu)為風(fēng)控智能決策保駕護(hù)航》的文章
2022-12-09 PingCAP發(fā)布了 《PingCAP 成為中國(guó)唯一入選 Forrester Wave 數(shù)據(jù)庫(kù)廠商,被評(píng)為卓越表現(xiàn)者》的文章
2022-12-09 PingCAP發(fā)布了 《案例故事丨老虎國(guó)際 x TiDB ,降低架構(gòu)復(fù)雜性,保障全球用戶安全可靠投資》的文章