TiUP:TiDBAer 必備利器

PingCAP發表於2022-04-21

對於企業級和雲資料庫,除了效能、可用性和功能等常規維度外,一個重要維度就是可管理性,可管理性維度會很深地影響使用者實際使用資料庫的隱性成本。在最新版本中,TiDB 引入了資料放置框架(Placement Rules In SQL),增加了企業級叢集管理元件 TiDB Enterprise Manager ,開放了智慧診斷服務 PingCAP Clinic 的預覽,大幅度加強了作為企業級產品的可管理性,與此同時也加入了諸多雲原生資料庫所需的基礎設施。

溫故而知新,本文主要介紹構成 TiDB 可管理性的重要元件之一:TiUP,一款從 TiDB 4.0 版本開始投入使用的 TiDB 部署工具。

TiUP 對於 TiDBer 來說是日常必備工具,所以這篇文章歸類為“溫故知新”系列,如果您剛接觸 TiDB,請先參閱這篇文章:《從馬車到電動車,TiDB 部署工具變形記》

環境說明

本文所涉及到的環境、元件版本資訊如下:

TiDB v5.4.0

TiUP v1.9.3 (2022-03-24 Release)

CentOS 7.9

TiUP 簡介

在各種系統軟體和應用軟體的安裝管理中,包管理器均有著廣泛的應用,包管理工具的出現大大簡化了軟體的安裝和升級維護工作。例如,幾乎所有使用 RPM 的 Linux 都會使用 Yum 來進行包管理,而 Anaconda 則可以非常方便地管理 python 的環境和相關軟體包。

從 TiDB 4.0 版本開始,TiUP 作為新的工具,承擔著包管理器的角色,管理著 TiDB 生態下眾多的元件,如 TiDB、PD、TiKV 等。使用者想要執行 TiDB 生態中任何元件時,只需要執行 TiUP 一行命令即可,相比以前,極大地降低了管理難度。

1.jpg

圖 1-TiUP GitHub Commits 趨勢

2.jpg

圖 2-tiup 原始碼行數統計(2022-03-24)

TiUP 已釋出兩年有餘,版本迭代若干次,程式碼總量翻倍,由上圖可以看出程式碼更新已放緩,TiDBer 可放心地在生產環境使用。

再論 TiUP 元件

作為 Ti 利器,TiUP 可是日常工作必備。下面再來討論下 TiUP 的經典元件和常用命令。先將 tiup 重要命令列舉如下,然後再著重討論。

  • tiup

    • main/cmd/root

      • tiup env
      • tiup status
      • tiup mirror
      • tiup list --all --verbose
      • tiup install hello
      • tiup update
      • tiup playground
      • tiup client
      • tiup cluster
      • tiup bench ch(CH-benCHmark)/TPCC(TPC-C)/TPCH(TPC-H)/YCSB(Yahoo! Cloud Serving Benchmark)
      • tiup dm
      • tiup clean

tiup mirror

不是每個公司都會把資料庫部在公有云上的,即便是在公有云,為了便於版本統一管理,大都會選擇自建一個倉庫,是為生產庫基準版本管理。而對於金融業務更不用多說,那麼,如何在內網快速、簡潔、有效地搭建和維護倉庫,下面做個簡單的示例。

首先需要在能連線外網的機器安裝 TiUP,並克隆官方 TiUP 倉庫:

  • 下載 tiup 檔案,並新增環境變數
mkdir -pv ~/.tiup/bin
wget https://tiup-mirrors.pingcap.com/tiup-linux-amd64.tar.gz
tar zxf tiup-linux-amd64.tar.gz -C ~/.tiup/bin/
echo 'export PATH=~/.tiup/bin:$PATH' >> ~/.bash_profile
source ~/.bash_profile
tiup -v

輸出的 TiUP 版本資訊:

1.9.3 tiup
Go Version: go1.17.7
Git Ref: v1.9.3
GitHash: f523cd5e051d0001e25d5a8b2c0d5d3ff058a5d5
  • 克隆官方庫

先將倉庫映象指向官方庫:

tiup mirror set https://tiup-mirrors.pingcap.com
# 螢幕輸出日誌> Successfully set mirror to https://tiup-mirrors.pingcap.com

只克隆適合當前作業系統的最新版本,這裡只需指定TiDB v5.4.0版本,其他元件會自動識別最新版本,並下載。

tiup mirror clone ~/.tiup/package -a amd64 -o linux v5.4.0
  • 將 package 資料夾打包複製到內網機器:
# current server
tar zcf package.tgz package/
# new server
cd ~/.tiup
tar zxvf package.tgz
./package/local_install.sh
source ~/.bash_profile
tiup list

此時,新的本地倉已建好,建立一個hello元件進行測試:

# test mirror
CMP_TMP_DIR=`mktemp -d -p ~/.tiup`
cat > $CMP_TMP_DIR/hello.sh << EOF
#! /bin/sh
echo -e "\033[0;36m<<< Hello, TiDB! >>>\033[0m"
EOF
chmod 755 $CMP_TMP_DIR/hello.sh
tar -C $CMP_TMP_DIR -czf $CMP_TMP_DIR/hello.tar.gz hello.sh
  • hello 元件釋出到本地倉:
tiup mirror genkey
tiup mirror grant admin
tiup mirror publish hello v0.0.1 $CMP_TMP_DIR/hello.tar.gz hello.sh --desc 'Hello, TiDB'

檢視已釋出的元件,並執行元件:

tiup list hello
tiup hello

3.jpg

圖 3-hello 元件執行輸出

此時的本地倉以可以管理自發布元件,但仍無法對外提供服務,下面用tiup server一鍵搭建私有庫:

# 執行tiup server
tiup server ~/.tiup/package --addr 0.0.0.0:8000 --upstream=""
# 修改映象指向
tiup mirror set 'http://127.0.0.1:8000'

注:由於版本差異,當前版本已不建議使用環境變數TIUP_MIRRORS,而是建議使用命令tiup mirror set <mirror-addr>

tiup playground

對於分散式資料庫來說,如何在本地快速搭建原型,以進行基本功能驗證、測試,這是作為 DBA 的基本能力。於是,tiup playground應運而生,一鍵搭建最小可用叢集,並可以指定初始 TiDB 每個元件啟動的個數,以及擴縮容。

例如,啟動一個標籤為mydb1的叢集,包含一個 TiDB 例項,一個 TiKV 例項,一個 PD 例項,一個 TiFlash 例項,不啟動監控元件:

$ tiup playground v5.4.0 --host 127.0.0.1 --tag mydb1 --db 1 --kv 1 --pd 1 --tiflash 1 --without-monitor
127.0.0.1:4000 ... Done
127.0.0.1:3930 ... Done
CLUSTER START SUCCESSFULLY, Enjoy it ^-^
To connect TiDB: mysql --comments --host 127.0.0.1 --port 4000 -u root -p (no password)
To view the dashboard: http://127.0.0.1:2379/dashboard
PD client endpoints: [127.0.0.1:2379]

檢視各元件程式 id:

$ tiup playground display
Pid   Role     Uptime
---   ----     ------
4321  pd       10m39.092616075s
4322  tikv     10m39.087748551s
4353  tidb     10m37.765844216s
4527  tiflash  9m50.16054123s

連線 tidb server,並查詢版本:

$ mysql -uroot -h127.1 -P4000 -e 'select version()\G'
*************************** 1. row ***************************
version(): 5.7.25-TiDB-v5.4.0

再例如,啟動一個標籤為mydb2的叢集,只啟動 TiKV 例項,和 3 個 PD 例項:

$ tiup playground v5.4.0 --host 127.0.0.1 --tag mydb2 --mode tikv-slim --pd 3 --without-monitor
Playground Bootstrapping...
Start pd instance:v5.4.0
Start pd instance:v5.4.0
Start pd instance:v5.4.0
Start tikv instance:v5.4.0
PD client endpoints: [127.0.0.1:2379 127.0.0.1:2382 127.0.0.1:2384]

通過 PD API 檢視當前 PD 有幾個成員,以及 TiKV 例項資訊:

$ curl -s http://127.0.0.1:2379/pd/api/v1/members | jq .members[].name
"pd-1"
"pd-0"
"pd-2"

$ curl -s http://127.0.0.1:2379/pd/api/v1/stores | jq .stores[].store
{
  "id": 1,
  "address": "127.0.0.1:20160",
  "version": "5.4.0",
  "status_address": "127.0.0.1:20180",
  "git_hash": "b5262299604df88711d9ed4b84d43e9c507749a2",
  "start_timestamp": 1648110516,
  "deploy_path": "/data/tiup/components/tikv/v5.4.0",
  "last_heartbeat": 1648112496884914000,
  "state_name": "Up"
}

Misc

效能測試也是必要環節,所以看到 TiUP 已經整合了 tpcc,tpch,ycsh,ch 四種測試工具集。可通過下面命令進行一鍵測試。

tiup bench ch/tpcc/tpch/ycsb

一鍵清理資料的命令如下:

tiup clean --all

這裡需要強調的是,在生產環境需要慎重執行下面的指令,除非你知道你在做什麼:

tiup cluster clean mydb3 --all
tiup cluster destroy mydb3
tiup cluster prune mydb3

4.jpg

圖 4-檢視所有可用元件

其他元件另行討論,或請先參閱官方文件。

TiUP v1.9.3 Release

2022-03-24,TiUP 釋出了 v1.9.3 版本,從變更日誌中我們可以清晰地瞭解到,本次更新修復了 5 個 bug,做了 2 點改進。

修復:
  • 修復了主機名存在-時,tiup-clusterexec子命令無法使用的錯誤。 (#1794, @nexustar)
  • 修復了使用tiup-cluster命令時,TiFlash 例項的埠(服務埠、代理埠、代理狀態埠)衝突檢測問題。 (#1805, @AstroProfundis)
  • 修復了下一代監控(ng-monitor)在 Prometheus 不可用的問題。 (#1806, @nexustar)
  • 修復了在主機只部署 Prometheus 的情況下,node_exporter 度量指標無法收集的問題。(與上個問題一同修復。) (#1806, @nexustar)
  • 修復了tiup-playground在指定--host 0.0.0.0時,無法工作的問題。 (#1811, @nexustar)
改進:
  • 支援tiup-clustertiup-dm命令清理審計日誌。(#1780, @srstack)
tiup cluster audit cleanup
tiup dm audit cleanup
  • 在 Grafana 配置模板中增加匿名登陸示例。(這裡需要確保 DM 元件版本在 v1.9.0 之上 => tiup dm -v) (#1785@sunzhaoyang)

引申思考

雲資料庫時代,或者說分散式資料庫時代下,DBA 角色該如何進行自我調整?我們是否還需要一個只會某種資料庫運維的 DBA,比如只會 DB2、Oracle、MySQL、PostgreSQL 等傳統關係型資料庫,或者進階的將,是否需要懂業務,有開發功底的業務型 DBA。其實,現在這些都沒有過時,且不應該被拋棄,而應該作為基礎功,變成 DBA 知識結構的底層模組,DBA 需要以此為基,向更高階段進化,猶如諸位前輩經歷那般,寫得了資料庫原始碼,懂得前端客戶真正所需,才能開發、調校出適合業務場景的高效能資料庫,以及一套好上手、易管理的資料庫生態工具。

毋庸置疑,TiUP 就是符合這種特質的工具。一鍵搭建私有庫、一鍵執行最小叢集、一鍵管理整個 TiDB 叢集,並可對 TiDB 叢集進行一鍵擴、縮容。不過,看似簡單的背後也是有功能取捨的,比如,tiup mirror只能是在命令列進行操作,而沒有類似 Nexus 這種可在瀏覽器進行釋出、刪除包的介面工具。又如,TiUP 最常用的場景還是執行在普通機器上,對於 k8s 環境有TiDB Operator工具,但是對於批量操作 ECS 的功能或案例,還是很少的。總之,希望 TiUP 在保持實用的前提下,功能更強勁。

延展閱讀:瞭解更多 TiUP 內容,請查閱 TiUP 文件地圖

相關文章