【必須收藏】別再亂找TiDB 叢集部署教程了,這篇保姆級教程來幫你!!| 博學谷狂野架構師
TiDB 基礎使用
TiDB dashboard使用
TiDB Dashboard 是 TiDB 自 4.0 版本起提供的圖形化介面,可用於監控及診斷 TiDB 叢集。TiDB Dashboard 內置於 TiDB 的 PD 元件中,無需獨立部署。
叢集概況
檢視叢集整體 QPS 數值、執行耗時、消耗資源最多的幾類 SQL 語句等概況資訊。
該頁面顯示了整個叢集的概況,包含以下資訊:
- 整個叢集的 QPS
- 整個叢集的查詢延遲
- 最近一段時間內累計耗時最多的若干 SQL 語句
- 最近一段時間內執行時間超過一定閾值的慢查詢
- 各個例項的節點數和狀態
- 監控及告警資訊
QPS
該區域顯示最近一小時整個叢集的每秒成功和失敗查詢數量
注意:該功能僅在部署了 Prometheus 監控元件的叢集上可用,未部署監控元件的情況下會顯示為失敗。
延遲
該區域顯示最近一小時整個叢集中 99.9%、99% 和 90% 查詢的延遲:
注意:該功能僅在部署了 Prometheus 監控元件的叢集上可用,未部署監控元件的情況下會顯示為失敗。
Top SQL 語句
該區域顯示最近一段時間內整個群集中累計耗時最長的 10 類 SQL 語句。查詢引數不一樣但結構一樣的 SQL 會歸為同一類 SQL 語句,在同一行中顯示
注意:該功能僅在開啟了 SQL 語句分析功能的叢集上可用。
最近的慢查詢
該區域預設顯示最近 30 分鐘內整個叢集中最新的 10 條慢查詢
預設情況下執行時間超過 300ms 的SQL 查詢即會被計為慢查詢並顯示在該表格中。
叢集資訊
該頁面上允許使用者檢視整個叢集中 TiDB、TiKV、PD、TiFlash 元件的執行狀態及其所在主機的執行狀態。
例項列表
例項列表列出了該叢集中 TiDB、TiKV、PD 和 TiFlash 元件所有例項的概況資訊。
表格列解釋
表格包含以下列:
- 地址:例項地址
- 狀態:例項的執行狀態
- 啟動時間:例項的啟動時間
- 版本:例項版本號
- 部署路徑:例項二進位制檔案所在目錄路徑
- Git 雜湊值:例項二進位制對應的 Git 雜湊值
例項狀態解釋
例項的執行狀態有:
- 線上 (Up):例項正常執行。
- 離線 (Down) 或無法訪問 (Unreachable):例項未啟動或對應主機存在網路問題。
- 已縮容下線 (Tombstone):例項上的資料已被完整遷出並縮容完畢。僅 TiKV 或 TiFlash 例項存在該狀態。
- 下線中 (Offline):例項上的資料正在被遷出並縮容。僅 TiKV 或 TiFlash 例項存在該狀態。
- 未知 (Unknown):未知的例項執行狀態。
主機列表
主機列表列出了該叢集中 TiDB、TiKV、PD 和 TiFlash 元件所有例項對應主機的執行情況。
表格列解釋
表格包含以下列:
- 地址:主機 IP 地址
- CPU:主機 CPU 邏輯核心數
- CPU 使用率:主機當前 1 秒的使用者態和核心態 CPU 使用率
- 實體記憶體:主機總計的實體記憶體大小
- 記憶體使用率:主機當前記憶體使用率
- 部署磁碟:主機上執行例項所在磁碟的檔案系統和磁碟掛載路徑
- 磁碟使用率:主機上執行例項所在磁碟的空間使用率
SQL語句分析
該頁面可以檢視所有 SQL 語句在叢集上執行情況,常用於分析總耗時或單次耗時執行耗時較長的 SQL 語句。
執行列表頁
在該頁面中,結構一致的 SQL 查詢(即使查詢引數不一致)都會被歸為同一個 SQL 語句,例如 SELECT * FROM employee WHERE id IN (1, 2, 3)
和 select * from EMPLOYEE where ID in (4, 5)
都屬於同一 SQL 語句 select * from employee where id in (...)
。
執行詳情頁面
在列表中點選任意一行可以進入該 SQL 語句的詳情頁檢視更詳細的資訊,這此資訊包括三大部分:
- SQL 語句概況:包括 SQL 模板,SQL 模板 ID,當前檢視的時間範圍,執行計劃個數以及執行所在的資料庫(下圖區域 1)
- 執行計劃列表:如果該 SQL 語句有多個執行計劃,則顯示該列表,可以選擇不同的執行計劃,在列表下方會顯示選中的執行計劃詳情;如果只有一個執行計劃,則該列表不顯示(下圖區域 2)
- 執行計劃詳情:顯示選中的執行計劃的詳細資訊,具體見下一小節(下圖區域 3)
慢查詢
該頁面上能檢索和檢視叢集中所有慢查詢。
預設情況下,執行時間超過 300ms 的 SQL 查詢就會被視為慢查詢,被記錄到慢查詢日誌中,並可通過本功能對記錄到的慢查詢進行查詢。可調整 tidb_slow_log_threshold
SESSION 變數或 TiDB slow-threshold
引數調整慢查詢閾值。
若關閉了慢查詢日誌,則本功能不可用。慢查詢日誌預設開啟,可通過修改 TiDB 配置 enable-slow-log
開啟或禁用。
慢查詢列表頁
可按時間範圍、慢查詢語句關聯的資料庫、SQL 關鍵字、SQL 型別、顯示的慢查詢語句數量等條件過濾,篩選慢查詢句。如下所示,預設顯示 30 分鐘內最近 100 條慢查詢。
檢視執行詳情
在列表中點選任意一行可以顯示該慢查詢的詳細執行資訊,包含:
- SQL:慢查詢 SQL 文字(
- 執行計劃:慢查詢的執行計劃
- 其他分類好的 SQL 執行資訊
點選展開 (Expand) 連結可以展開相應項的完整內容,點選複製 (Copy) 連結可以複製完整內容到剪貼簿。
叢集診斷頁面
叢集診斷是在指定的時間範圍內,對叢集可能存在的問題進行診斷,並將診斷結果和一些叢集相關的負載監控資訊彙總成一個診斷報告。診斷報告是網頁形式,通過瀏覽器儲存後可離線瀏覽和傳閱。
生成診斷報告
如果想對一個時間範圍內的叢集進行診斷,檢視叢集的負載等情況,可以使用以下步驟來生成一段時間範圍的診斷報告:
- 設定區間的開始時間
- 設定區間長度,例如 10 min 。
- 點選開始。
建議生成報告的時間範圍在 1 min ~ 60 min 內,目前不建議生成超過 1 小時範圍的報告。
點選開始 (start) 後,會看到以下介面,生成進度 (progress) 是生成報告的進度條,生成報告完成後,點選檢視報告 (View Full Report) 即可。
TIDB叢集部署
環境要求
作業系統建議配置
TiDB 作為一款開源分散式 NewSQL 資料庫,可以很好的部署和執行在 Intel 架構伺服器環境、ARM 架構的伺服器環境及主流虛擬化環境,並支援絕大多數的主流硬體網路。作為一款高效能資料庫系統,TiDB 支援主流的 Linux 作業系統環境。
Linux 作業系統平臺 | 版本 |
---|---|
Red Hat Enterprise Linux | 7.3 及以上 |
CentOS | 7.3 及以上 |
Oracle Enterprise Linux | 7.3 及以上 |
Ubuntu LTS | 16.04 及以上 |
伺服器建議配置
TiDB 支援部署和執行在 Intel x86-64 架構的 64 位通用硬體伺服器平臺或者 ARM 架構的硬體伺服器平臺。對於開發,測試,及生產環境的伺服器硬體配置(不包含作業系統 OS 本身的佔用)有以下要求和建議:
開發及測試環境
元件 | CPU | 記憶體 | 本地儲存 | 網路 | 例項數量(最低要求) |
---|---|---|---|---|---|
TiDB | 8 核+ | 16 GB+ | 無特殊要求 | 千兆網絡卡 | 1(可與 PD 同機器) |
PD | 4 核+ | 8 GB+ | SAS, 200 GB+ | 千兆網絡卡 | 1(可與 TiDB 同機器) |
TiKV | 8 核+ | 32 GB+ | SSD, 200 GB+ | 千兆網絡卡 | 3 |
TiFlash | 32 核+ | 64 GB+ | SSD, 200 GB+ | 千兆網絡卡 | 1 |
TiCDC | 8 核+ | 16 GB+ | SAS, 200 GB+ | 千兆網絡卡 | 1 |
生產環境
元件 | CPU | 記憶體 | 硬碟型別 | 網路 | 例項數量(最低要求) |
---|---|---|---|---|---|
TiDB | 16 核+ | 32 GB+ | SAS | 萬兆網絡卡(2 塊最佳) | 2 |
PD | 4核+ | 8 GB+ | SSD | 萬兆網絡卡(2 塊最佳) | 3 |
TiKV | 16 核+ | 32 GB+ | SSD | 萬兆網絡卡(2 塊最佳) | 3 |
TiFlash | 48 核+ | 128 GB+ | 1 or more SSDs | 萬兆網絡卡(2 塊最佳) | 2 |
TiCDC | 16 核+ | 64 GB+ | SSD | 萬兆網絡卡(2 塊最佳) | 2 |
監控 | 8 核+ | 16 GB+ | SAS | 千兆網絡卡 | 1 |
環境準備
準備一臺部署主機,確保其軟體滿足需求:
- 推薦安裝 CentOS 7.3 及以上版本
- Linux 作業系統開放外網訪問,用於下載 TiDB 及相關軟體安裝包
最小規模的 TiDB 叢集拓撲
例項 | 個數 | IP | 配置 |
---|---|---|---|
TiKV | 3 | 192.168.64.146 | 避免埠和目錄衝突 |
TiDB | 1 | 192.168.64.146 | 預設埠 全域性目錄配置 |
PD | 1 | 192.168.64.146 | 預設埠 全域性目錄配置 |
TiFlash | 1 | 192.168.64.146 | 預設埠 全域性目錄配置 |
Monitoring & Grafana | 1 | 192.168.64.146 | 預設埠 全域性目錄配置 |
安裝TiUP
什麼是TiUP
從 TiDB 4.0 版本開始,TiUP 作為新的工具,承擔著包管理器的角色,管理著 TiDB 生態下眾多的元件,如 TiDB、PD、TiKV 等。使用者想要執行 TiDB 生態中任何元件時,只需要執行 TiUP 一行命令即可,相比以前,極大地降低了管理難度。
安裝TiUP元件
使用普通使用者登入中控機,以 tidb
使用者為例,後續安裝 TiUP 及叢集管理操作均通過該使用者完成
TiUP 安裝過程十分簡潔,無論是 Darwin 還是 Linux 作業系統,執行一行命令即可安裝成功:
COPYcurl --proto '=https' --tlsv1.2 -sSf http://tiup-mirrors.pingcap.com/install.sh | sh
該命令將 TiUP 安裝在 $HOME/.tiup
資料夾下,之後安裝的元件以及元件執行產生的資料也會放在該資料夾下。同時,它還會自動將 $HOME/.tiup/bin
加入到 Shell Profile 檔案的 PATH 環境變數中,這樣你就可以直接使用 TiUP 了。
配置TiUP環境
重新宣告全域性環境變數
COPYsource .bash_profile
檢查TiUP 工具是否安裝
COPYwhich tiup
安裝 cluster 元件
COPYtiup cluster
升級cluster元件
如果機器已經安裝 TiUP cluster,需要更新軟體版本
COPYtiup update --self && tiup update cluster
預期輸出
“Update successfully!”
字樣。
編輯部署檔案
請根據不同的叢集拓撲,編輯 TiUP 所需的叢集初始化配置檔案。
常見的部署場景
最小拓撲架構
最基本的叢集拓撲,包括 tidb-server、tikv-server、pd-server,適合 OLTP 業務。
增加 TiFlash 拓撲架構
包含最小拓撲的基礎上,同時部署 TiFlash。TiFlash 是列式的儲存引擎,已經逐步成為叢集拓撲的標配。適合 Real-Time HTAP 業務。
增加 TiCDC 拓撲架構
包含最小拓撲的基礎上,同時部署 TiCDC。TiCDC 是 4.0 版本開始支援的 TiDB 增量資料同步工具,支援多種下游 (TiDB/MySQL/MQ)。相比於 TiDB Binlog,TiCDC 有延遲更低、天然高可用等優點。在部署完成後,需要啟動 TiCDC,通過 cdc cli
建立同步任務。
增加 TiDB Binlog 拓撲架構
包含最小拓撲的基礎上,同時部署 TiDB Binlog。TiDB Binlog 是目前廣泛使用的增量同步元件,可提供準實時備份和同步功能。
增加 TiSpark 拓撲架構
包含最小拓撲的基礎上,同時部署 TiSpark 元件。TiSpark 是 PingCAP 為解決使用者複雜 OLAP 需求而推出的產品。TiUP cluster 元件對 TiSpark 的支援目前為實驗性特性。
混合部署拓撲架構
適用於單臺機器,混合部署多個例項的情況,也包括單機多例項,需要額外增加目錄、埠、資源配比、label 等配置。
單機極簡部署
部署主機軟體和環境要求:
- 部署需要使用部署主機的 root 使用者及密碼
- 部署主機關閉防火牆或者開放 TiDB 叢集的節點間所需埠
單機極簡拓撲
例項 | IP | 開放埠 |
---|---|---|
grafana | 192.168.64.152 | 3000 |
pd | 192.168.64.152 | 2379/2380 |
prometheus | 192.168.64.152 | 9090 |
tidb | 192.168.64.152 | 4000/10080 |
tiflash | 192.168.64.152 | 9000/8123/3930/20170/20292/8234 |
tikv | 192.168.64.152 | 20160/20180 |
tikv | 192.168.64.152 | 20161/20181 |
tikv | 192.168.64.152 | 20162/20182 |
編輯配置檔案
按下面的配置模板,編輯配置檔案,命名為
topo.yaml
user: "tidb"
:表示通過tidb
系統使用者(部署會自動建立)來做叢集的內部管理,預設使用 22 埠通過 ssh 登入目標機器replication.enable-placement-rules
:設定這個 PD 引數來確保 TiFlash 正常執行host
:設定為本部署主機的 IP
COPY# # Global variables are applied to all deployments and used as the default value of
# # the deployments if a specific deployment value is missing.
global:
user: "tidb"
ssh_port: 22
deploy_dir: "/tidb-deploy"
data_dir: "/tidb-data"
# # Monitored variables are applied to all the machines.
monitored:
node_exporter_port: 9100
blackbox_exporter_port: 9115
server_configs:
tidb:
log.slow-threshold: 300
tikv:
readpool.storage.use-unified-pool: false
readpool.coprocessor.use-unified-pool: true
pd:
replication.enable-placement-rules: true
replication.location-labels: ["host"]
tiflash:
logger.level: "info"
pd_servers:
- host: 192.168.64.146
tidb_servers:
- host: 192.168.64.146
tikv_servers:
- host: 192.168.64.146
port: 20160
status_port: 20180
config:
server.labels: { host: "logic-host-1" }
- host: 192.168.64.146
port: 20161
status_port: 20181
config:
server.labels: { host: "logic-host-2" }
- host: 192.168.64.146
port: 20162
status_port: 20182
config:
server.labels: { host: "logic-host-3" }
tiflash_servers:
- host: 192.168.64.146
monitoring_servers:
- host: 192.168.64.146
grafana_servers:
- host: 192.168.64.146
執行叢集部署命令
命令格式
COPYtiup cluster deploy <cluster-name> <tidb-version> ./topo.yaml --user root -p
引數解釋
- 引數
<cluster-name>
表示設定叢集名稱 - 引數
<tidb-version>
表示設定叢集版本,可以通過tiup list tidb
命令來檢視當前支援部署的 TiDB 版本 - 引數:
--user root
通過 root 使用者登入到目標主機完成叢集部署,該使用者需要有 ssh 到目標機器的許可權,並且在目標機器有 sudo 許可權。也可以用其他有 ssh 和 sudo 許可權的使用者完成部署。
檢查TiDB最新版本
可以通過執行
tiup list tidb
來檢視 TiUP 支援的版本
COPYtiup list tidb
經過執行發現 最新可用的TiDB版本是 v4.0.11
執行部署命令
COPYtiup cluster deploy tidb-cluster 4.0.11 ./topo.yaml --user root -p
下面輸入
y
繼續後輸入密碼進行安裝介面
進入安裝介面,等待安裝即可
如果出現
deployed successfully
表示部署成功,叢集名稱是tidb-cluster
啟動叢集
COPYtiup cluster start tidb-cluster
檢視節點狀態
COPYtiup cluster display tidb-cluster
所有節點都是Up狀態說明都已經啟動就緒了
測試TiDB叢集
Mysql連線叢集
TiDB的連線埠預設是4000, 密碼是空,可用使用Mysql客戶端以及第三方工具進行連線
安裝MySql客戶端
COPYyum -y install mysql
MySql客戶端連線
訪問 TiDB 資料庫,密碼為空
COPYmysql -h 192.168.64.146 -P 4000 -u root
第三方客戶端訪問Mysql
使用SQLyog訪問TiDB
建立TiDB連線
連線後就可以操作資料庫了
訪問Grafana監控
通過 http://{grafana-ip}:3000 訪問叢集 Grafana 監控頁面,預設使用者名稱和密碼均為 admin。
訪問Dashboard
通過 http://{pd-ip}:2379/dashboard 訪問叢集 TiDB Dashboard監控頁面,預設使用者名稱為 root,密碼為空。
檢視叢集列表
COPYtiup cluster list
檢視叢集拓撲
COPYtiup cluster display tidb-cluster
TiDB擴縮容
當前叢集部署拓撲
例項 | IP | 埠 | 儲存路徑 | 部署路徑 |
---|---|---|---|---|
grafana | 192.168.64.152 | 3000 | – | /tidb-deploy/grafana-3000 |
pd | 192.168.64.152 | 2379/2380 | /tidb-data/pd-2379 | /tidb-deploy/pd-2379 |
prometheus | 192.168.64.152 | 9090 | /tidb-data/prometheus-9090 | /tidb-deploy/prometheus-9090 |
tidb | 192.168.64.152 | 4000/10080 | – | /tidb-deploy/tidb-4000 |
tiflash | 192.168.64.152 | 9000/8123/3930/20170/20292/8234 | /tidb-data/tiflash-9000 | /tidb-deploy/tiflash-9000 |
tikv | 192.168.64.152 | 20160/20180 | /tidb-data/tikv-20160 | /tidb-deploy/tikv-20160 |
tikv | 192.168.64.152 | 20161/20181 | /tidb-data/tikv-20161 | /tidb-deploy/tikv-20161 |
tikv | 192.168.64.152 | 20162/20182 | /tidb-data/tikv-20162 | /tidb-deploy/tikv-20162 |
擴容TiKV節點
需要擴容一個TiKV節點
例項 | IP | 埠 | 儲存路徑 | 部署路徑 |
---|---|---|---|---|
tikv | 192.168.64.152 | 20163/20183 | /tidb-data/tikv-20163 | /tidb-deploy/tikv-20163 |
編寫擴容指令碼
在 scale-out.yaml 檔案新增擴容拓撲配置
COPYvi scale-out.yaml
COPYtikv_servers:
- host: 192.168.64.152
ssh_port: 22
port: 20163
status_port: 20183
deploy_dir: /tidb-deploy/tikv-20163
data_dir: /tidb-data/tikv-20163
config:
server.labels:
host: logic-host-4
執行擴容命令
命令格式
COPYtiup cluster scale-out <cluster-name> scale-out.yaml -p
- cluster-name:TiDB叢集名稱
- p:使用密碼方式登入當前機器
執行命令
COPYtiup cluster scale-out tidb-cluster scale-out.yaml -p
輸入命令後,確認輸入機器密碼
出現
successfully
表示節點擴容成功
驗證擴容資訊
檢視節點資訊
COPYtiup cluster display tidb-cluster
我們看到Tikv已經增加了一個節點
通過dashboard檢視
也可以看到擴容的節點資訊
縮容TiKV節點
檢視節點資訊
COPYtiup cluster display tidb-cluster
當前TiKV是4個節點
執行縮容操作
縮容命令
COPYtiup cluster scale-in <cluster-name> --node 192.168.64.152:20163
引數解釋
- cluster-name:叢集名稱
- node:需要刪除的節點地址
執行命令
COPYtiup cluster scale-in tidb-cluster --node 192.168.64.152:20163
出現確認操作後,輸入y確認執行就可以執行縮容操作了
驗證縮容資訊
檢視節點資訊
COPYtiup cluster display tidb-cluster
我們看到需要縮容的節點狀態是
Tombstone
說明已經下線,下線需要一定時間,下線節點的狀態變為Tombstone
就說明下線成功
通過dashboard檢視
也可以看到縮容的節點已經不存在了,說明縮容成功
部落格內容遵循 署名-非商業性使用-相同方式共享 4.0 國際 (CC BY-NC-SA 4.0) 協議
本文永久連結是:http://www.baiyp.ren/TIDB%E9%9B%86%E7%BE%A4%E9%83%A8%E7%BD%B2.html
更新於:2021年5月27日
本文由
傳智教育博學谷狂野架構師
教研團隊釋出。如果本文對您有幫助,歡迎
關注
和點贊
;如果您有任何建議也可留言評論
或私信
,您的支援是我堅持創作的動力。轉載請註明出處!
- ElasticSearch還能效能調優,漲見識、漲見識了!!!
- 【必須收藏】別再亂找TiDB 叢集部署教程了,這篇保姆級教程來幫你!!| 博學谷狂野架構師
- 【建議收藏】7000 字的TIDB保姆級簡介,你見過嗎
- Tomcat架構設計剖析 | 博學谷狂野架構師
- 你可能不那麼知道的Tomcat生命週期管理 | 博學谷狂野架構師
- 大哥,這是併發不是並行,Are You Ok?
- 為啥要重學Tomcat?| 博學谷狂野架構師
- 這是一篇純講SQL語句優化的文章!!!| 博學谷狂野架構師
- 捲起來!!!看了這篇文章我才知道MySQL事務&MVCC到底是啥?
- 為什麼99%的程式設計師都做不好SQL優化?
- 如何搞定MySQL鎖(全域性鎖、表級鎖、行級鎖)?這篇文章告訴你答案!太TMD詳細了!!!
- 【建議收藏】超詳細的Canal入門,看這篇就夠了!!!
- 從菜鳥程式設計師到高階架構師,竟然是因為這個字final
- 為什麼95%的Java程式設計師,都是用不好Synchronized?
- 99%的Java程式設計師者,都敗給這一個字!
- 8000 字,就說一個字Volatile
- 98%的程式設計師,都沒有研究過JVM重排序和順序一致性
- 來一波騷操作,Java記憶體模型
- 時隔多年,這次我終於把動態代理的原始碼翻了個地兒朝天
- 再有人問你分散式事務,把這篇文章砸過去給他