TiDB數據庫
傳統的單機數據庫在移動互聯網、雲計算、大數據和人工智能等場景下表現的力不從心,為了解決數據平台的擴展性的問題,TiDB 分布式數據庫應運而生。TiDB 是當今開源 NewSQL 數據庫領域的代表產品之一。
TiDB采用分布式數據庫架構,因此服務器數量比較多。在部署TiDB集群時,我們使用TiUP工具來安裝整個TiDB集群環境。 從 TiDB 4.0 版本開始,TiUP 作為新的工具,承擔着包管理器的角色,管理着 TiDB 生態下眾多的組件,如 TiDB、PD、TiKV 等。用戶想要運行 TiDB 生態中任何組件時,只需要執行 TiUP 一行命令即可,相比以前,極大地降低了管理難度。
默認情況下TiUP工具會聯網進行工具包的下載和安裝,但生產環境往往都是內網環境,無法連接外網進行下載。這種情況下,我們可以選擇離線的部署方法。本文以 TiDB 5.0 的版本為基礎,詳細介紹使用TiUP工具離線部署 TiDB 集群的過程。
第一步、聯網下載TiUP包管理器
使用可以聯網的主機,下載並安裝 TiUP 包管理器工具。命令如下:
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh

第二步、聲明全局環境變量
聲明全局環境變量,命令如下:
source /root/.bash_profile
執行過程如下:

第三步、通過TiUP工具下載所有工具的離線安裝包
使用 tiup list tidb 命令可以看到所有tidb的版本,我們可以在其中選擇需要下載的版本。命令如下:
tiup list tidb

然后通過tiup mirror clone tidb-community-server-${version}-linux-amd64 ${version} --os=linux --arch=amd64
命令進行安裝。其中${version}需要替換成對應的TiDB版本,命令如下:
tiup mirror clone tidb-community-server-v5.2.1-linux-amd64 v5.2.1 --os=linux --arch=amd64
我們將前兩個命令組合在一起,就得到了下載最新版本安裝包的命令,命令如下:
version=`tiup list tidb|sort -r |head -n 2|tail -n 1|awk '{print $1};'` && \
tiup mirror clone tidb-community-server-${version}-linux-amd64 ${version} --os=linux --arch=amd64
執行過程如下:

需要注意的是,在下載過程中,可能會由於網絡問題導致某個工具包下載失敗,此時TiUP工具會再次嘗試下載,如果最終無法下載完成,TiUP工具會結束並退出。我們依舊可以重復TiUP命令來反復嘗試下載。開始下載過程時,會生成tidb-community-server-v5.2.1-linux-amd64的目錄。
另一種方法,通過wget或者curl工具獨立手工下載工具包,然后放入tidb-community-server-v5.2.1-linux-amd64目錄中。TiUP工具在下載過程中,在目錄中會出現_tmp開頭的臨時目錄,需要手動將這些臨時目錄刪除掉。截圖如下:

第四步、使用tar命令打包並傳輸
通過 tar 命令將該組件包打包然后發送到隔離環境的中控機(傳輸tar包過程可以自行選擇方法),命令如下:
tar czvf tidb-community-server-v5.2.1-linux-amd64.tar.gz tidb-community-server-v5.2.1-linux-amd64
執行過程如下:

第五步、離線安裝TiUP組件
將離線包發送到目標集群的中控機后,執行以下命令離線安裝 TiUP 組件:
tar xzvf tidb-community-server-v5.2.1-linux-amd64.tar.gz && \
sh tidb-community-server-v5.2.1-linux-amd64/local_install.sh && \
source /root/.bash_profile
執行過程如下:

第六步、編輯集群初始化配置文件
請根據不同的集群拓撲,編輯 TiUP 所需的集群初始化配置文件。首先生成集群初始化配置模版,命令如下:
tiup cluster template > topology.yaml
執行過程如下:

編輯 TiUP 所需的集群初始化配置文件,命令如下:
vi topology.yaml
執行過程如下:

第七步、檢查和修復集群風險
先使用 check 命令來檢查集群存在的潛在風險,命令如下:
tiup cluster check ./topology.yaml --user root -p
執行過程如下


檢查結果為Fail的內容,表面存在的風險。進一步運行check --apply 命令,自動修復集群存在的潛在風險,如果自動無法修復,還需要手工來修復風險。命令如下:
tiup cluster check ./topology.yaml --apply --user root -p
執行過程如下:


修復完成后,再次執行check命令進行二次檢查,最終結果狀態均應該為Pass(本步驟命令參考上文)。在本文的附錄部分,列舉了一些可能的風險和解決方法。
第八步、部署TiDB集群
執行 deploy 命令部署 TiDB 集群,集群名稱使用sandata,命令如下:
tiup cluster deploy sandata v5.2.1 ./topology.yaml --user root -p
執行過程如下:

第九步、查看集群狀態
TiDB集群部署完成后,默認是關閉狀態,通過查看集群狀態可以進行確認,命令如下:
tiup cluster display sandata
執行過程如下:

第十步、啟動TiDB集群
最終的目標就是啟動TiDB集群,命令如下:
tiup cluster start sandata
執行過程如下:

第十一步、確認集群已經啟動
再次檢查部署的 TiDB 集群情況,確認最終的啟動狀態為Up,命令如下:
tiup cluster display sandata
執行過程如下:

附錄1:解決numactl not usable, bash: numactl: command not found
使用yum來安裝numactl工具,命令如下:
yum -y install numactl
附錄2:解決mount point / does not have 'nodelalloc' option set和
mount point / does not have 'noatime' option set
編輯/etc/fstab文件,增加nodelalloc和noatime的配置,配置如下:

附錄3:解決THP is enabled, please disable it for best performance
編輯 /etc/rc.d/rc.local 文件,增加下面的內容,命令如下:
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
執行過程如下:

增加文件執行權限,命令如下:
chmod +x /etc/rc.d/rc.local
最后重啟主機,讓所有配置生效。
總結
相對於TiUP在線部署,本文介紹的這種離線部署方法更適合在內網生產環境中部署TiDB集群。通過TiUP工具,我們可以很輕松的部署,管理TiDB集群。
