從零部署TiDB叢集

程式猿DD發表於2022-12-06

作者 | yangyidba

來源 | 公眾號「yangyidba」

一 前言

朋友圈,關注的公眾號經常出現各個公司開始用TiDB的案例和各種技術分享。對TiDB蠻有興趣,這幾天終於可以嘗試接觸 TiDB,第一步當然是安裝和部署。過程還是蠻曲折的,耗費差不多三個工作日。本文先記錄安裝過程和遇到的問題,避免其他朋友踩坑。

二 TiDB 簡介

TiDB 叢集主要包括三個核心元件:TiDB Server,PD Server 和 TiKV Server。此外,還有用於解決使用者複雜 OLAP 需求的 TiSpark 元件和簡化雲上部署管理的 TiDB Operator 元件。一圖勝千言從零部署TiDB叢集


TiDB Server 負責接收 SQL 請求,處理 SQL 相關的邏輯,並透過 PD 找到儲存計算所需資料的 TiKV 地址,與 TiKV 互動獲取資料,最終返回結果。TiDB Server 是無狀態的,其本身並不儲存資料,只負責計算,可以無限水平擴充套件,可以透過負載均衡元件(如LVS、HAProxy 或 F5)對外提供統一的接入地址。

Placement Driver (簡稱 PD) 是整個叢集的管理模組,其主要工作有三個:一是儲存叢集的元資訊(某個 Key 儲存在哪個 TiKV 節點);二是對 TiKV 叢集進行排程和負載均衡(如資料的遷移、Raft group leader 的遷移等);三是分配全域性唯一且遞增的事務 ID。

PD 透過 Raft 協議保證資料的安全性。Raft 的 leader server 負責處理所有操作,其餘的 PD server 僅用於保證高可用。建議部署奇數個 PD 節點。

TiKV Server 負責儲存資料,從外部看 TiKV 是一個分散式的提供事務的 Key-Value 儲存引擎。儲存資料的基本單位是 Region,每個 Region 負責儲存一個 Key Range(從 StartKey 到 EndKey 的左閉右開區間)的資料,每個 TiKV 節點會負責多個 Region。TiKV 使用 Raft 協議做複製,保持資料的一致性和容災。副本以 Region 為單位進行管理,不同節點上的多個 Region 構成一個 Raft Group,互為副本。資料在多個 TiKV 之間的負載均衡由 PD 排程,這裡也是以 Region 為單位進行排程。

TiSparkTiSpark 作為 TiDB 中解決使用者複雜 OLAP 需求的主要元件,將 Spark SQL 直接執行在 TiDB 儲存層上,同時融合 TiKV 分散式叢集的優勢,並融入大資料社群生態。至此,TiDB 可以透過一套系統,同時支援 OLTP 與 OLAP,免除使用者資料同步的煩惱。

TiDB Operator 提供在主流雲基礎設施(Kubernetes)上部署管理 TiDB 叢集的能力。它結合雲原生社群的容器編排最佳實踐與 TiDB 的專業運維知識,整合一鍵部署、多叢集混部、自動運維、故障自愈等能力,極大地降低了使用者使用和管理 TiDB 的門檻與成本。

源自

二 準備

初始部署需要準備好一個叢集拓撲,TiKV和TiDB,PD分開部署,TiDB可以和PD混合部署,TiKV 作為儲存單元獨立部署。監控節點可以和某一臺TiDB混合部署。

qabb-qa-tibd0/10.215.20.24

部署管控機器/TiDB/PD/ 監控

qabb-qa-tibd1/10.215.20.19

TiKV

qabb-qa-tibd2/10.215.20.7

TiKV

qabb-qa-tibd3/10.215.20.13

TiKV

部署的時候整個叢集還需要一箇中控機,透過ansible 在其他節點上執行各種命令和叢集的運維動作。

官方文件中需要一個tidb賬號具有各個節點免密登陸許可權和sudo許可權,這個和我們公司的運維體系有點衝突,故本次部署的時候使用我個人賬號代替。

三 部署步驟

我在測試環境可以選擇聯機部署的方式,如果不能訪問外網,則需要採用離線部署。

3.1 獲取最新的版本

git clone

安裝ansible以及依賴

cd /data/users/yangqilong/tidb-ansible && \sudo pip install -r ./requirements.txt && \ansible --version

編輯檔案 hosts.ini

  1. [servers]

  2. 10.215.20.24

  3. 10.215.20.19

  4. 10.215.20.7

  5. 10.215.20.13


  6. [all:vars]

  7. username =  yangqilong

  8. ntp_server = pool.ntp.org

3.2 驗證使用者許可權

命令如下:

ansible -i inventory.ini all -m shell -a 'whoami'

需要都返回"yangqilong"

ansible -i inventory.ini all -m shell -a 'whoami' -n

返回 "root"

3.3 聯網下載TiDB binary

ansible-playboot blocal_prepare.yml

3.4 初始化系統環境

ansible-playbook bootstrap.yaml

我在安裝TiDB 叢集過程中,這一步遇到的問題比較多,解決這些問題的辦法是:在tidb-ansible下面的roles目錄,對應找到出錯的tasks,如果確定一些限制或者檢查可以忽略,則可以註釋掉對應的程式碼。

  1. ulimit -n 小於1000000的限制,ansible會自動在 /etc/security/limits.conf 新增或者自己手動新增。


  2. fio壓測效能不過關,則刪掉 benchmark相關的task。


  3. 還有ext4掛載引數要求是加上 nodelalloc, 我的測試環境是把這個ext4 註釋掉了,生產環境用的xfs系統。

進展順利會有如下提示:

從零部署TiDB叢集

3.5 部署TiDB叢集

前面的都是基本準備安裝包和檢查系統引數和系統硬體的動作,接下來終於到了安裝的步驟,不過這一步依然可能有問題。

ansible-playbook deploy.yml

安裝順利的結果

從零部署TiDB叢集

可能遇到的問題是 用於監控的blackbox_exporter二進位制檔案有異常,命名存在但是指令碼執行命令報不存在。

從零部署TiDB叢集

解決方法

在tidb-ansible/roles/blackboxexporter/tasks/binarydeployment.yml檔案裡,刪除setcap 這個task

#- name: blackbox_exporter binary add CAP_NET_RAW capability#  command: setcap cap_net_raw+ep "{{ deploy_dir }}/bin/blackbox_exporter"#  become: true

3.6 啟動叢集

ansible-playbook start.yml

啟動需要一些列的檢查,沒任何問題之後 提示:

從零部署TiDB叢集

然後就可以使用mysql 客戶端連線tidb了

從零部署TiDB叢集

四 小結

第一次整體安裝叢集的過程比較複雜和曲折,和安裝Oracle 的RAC 有點像,經過一系列的賬號許可權,系統引數,rpm包的檢查才能確定是否符合安裝條件。有自己獨立運維體系的團隊,可以嘗試自己打包部署。

接下來就可以開始深入的學習TiDB各種功能和運維實踐,期待TiDB能在有贊有合適的用處。

感謝TiDB團隊技術的遠端支援,幫忙解決各種問題。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69908602/viewspace-2670574/,如需轉載,請註明出處,否則將追究法律責任。

相關文章