【必須收藏】別再亂找TiDB 集羣部署教程了,這篇保姆級教程來幫你!!| 博學谷狂野架構師

語言: CN / TW / HK

TiDB 基礎使用

Database of Databases - TiDB

TiDB dashboard使用

TiDB Dashboard 是 TiDB 自 4.0 版本起提供的圖形化界面,可用於監控及診斷 TiDB 集羣。TiDB Dashboard 內置於 TiDB 的 PD 組件中,無需獨立部署。

image-20210309181206197

集羣概況

查看集羣整體 QPS 數值、執行耗時、消耗資源最多的幾類 SQL 語句等概況信息。

該頁面顯示了整個集羣的概況,包含以下信息:

  • 整個集羣的 QPS
  • 整個集羣的查詢延遲
  • 最近一段時間內累計耗時最多的若干 SQL 語句
  • 最近一段時間內運行時間超過一定閾值的慢查詢
  • 各個實例的節點數和狀態
  • 監控及告警信息
QPS

該區域顯示最近一小時整個集羣的每秒成功和失敗查詢數量

image-20210310134900484

注意:該功能僅在部署了 Prometheus 監控組件的集羣上可用,未部署監控組件的情況下會顯示為失敗。

延遲

該區域顯示最近一小時整個集羣中 99.9%、99% 和 90% 查詢的延遲:

image-20210310134921004

注意:該功能僅在部署了 Prometheus 監控組件的集羣上可用,未部署監控組件的情況下會顯示為失敗。

Top SQL 語句

該區域顯示最近一段時間內整個羣集中累計耗時最長的 10 類 SQL 語句。查詢參數不一樣但結構一樣的 SQL 會歸為同一類 SQL 語句,在同一行中顯示

image-20210310135140342

注意:該功能僅在開啟了 SQL 語句分析功能的集羣上可用。

最近的慢查詢

該區域默認顯示最近 30 分鐘內整個集羣中最新的 10 條慢查詢

image-20210310135240284

默認情況下運行時間超過 300ms 的SQL 查詢即會被計為慢查詢並顯示在該表格中。

集羣信息

該頁面上允許用户查看整個集羣中 TiDB、TiKV、PD、TiFlash 組件的運行狀態及其所在主機的運行狀態。

實例列表

實例列表列出了該集羣中 TiDB、TiKV、PD 和 TiFlash 組件所有實例的概況信息。

image-20210310135617023

表格列解釋

表格包含以下列:

  • 地址:實例地址
  • 狀態:實例的運行狀態
  • 啟動時間:實例的啟動時間
  • 版本:實例版本號
  • 部署路徑:實例二進制文件所在目錄路徑
  • Git 哈希值:實例二進制對應的 Git 哈希值
實例狀態解釋

實例的運行狀態有:

  • 在線 (Up):實例正常運行。
  • 離線 (Down) 或無法訪問 (Unreachable):實例未啟動或對應主機存在網絡問題。
  • 已縮容下線 (Tombstone):實例上的數據已被完整遷出並縮容完畢。僅 TiKV 或 TiFlash 實例存在該狀態。
  • 下線中 (Offline):實例上的數據正在被遷出並縮容。僅 TiKV 或 TiFlash 實例存在該狀態。
  • 未知 (Unknown):未知的實例運行狀態。
主機列表

主機列表列出了該集羣中 TiDB、TiKV、PD 和 TiFlash 組件所有實例對應主機的運行情況。

image-20210310135820510

表格列解釋

表格包含以下列:

  • 地址:主機 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 (...)

image-20210310140600074

執行詳情頁面

在列表中點擊任意一行可以進入該 SQL 語句的詳情頁查看更詳細的信息,這此信息包括三大部分:

  • SQL 語句概況:包括 SQL 模板,SQL 模板 ID,當前查看的時間範圍,執行計劃個數以及執行所在的數據庫(下圖區域 1)
  • 執行計劃列表:如果該 SQL 語句有多個執行計劃,則顯示該列表,可以選擇不同的執行計劃,在列表下方會顯示選中的執行計劃詳情;如果只有一個執行計劃,則該列表不顯示(下圖區域 2)
  • 執行計劃詳情:顯示選中的執行計劃的詳細信息,具體見下一小節(下圖區域 3)

image-20210310140919328

慢查詢

該頁面上能檢索和查看集羣中所有慢查詢。

默認情況下,執行時間超過 300ms 的 SQL 查詢就會被視為慢查詢,被記錄到慢查詢日誌中,並可通過本功能對記錄到的慢查詢進行查詢。可調整 tidb_slow_log_threshold SESSION 變量或 TiDB slow-threshold 參數調整慢查詢閾值。

若關閉了慢查詢日誌,則本功能不可用。慢查詢日誌默認開啟,可通過修改 TiDB 配置 enable-slow-log 開啟或禁用。

慢查詢列表頁

可按時間範圍、慢查詢語句關聯的數據庫、SQL 關鍵字、SQL 類型、顯示的慢查詢語句數量等條件過濾,篩選慢查詢句。如下所示,默認顯示 30 分鐘內最近 100 條慢查詢。

image-20210310141242904

查看執行詳情

在列表中點擊任意一行可以顯示該慢查詢的詳細執行信息,包含:

  • SQL:慢查詢 SQL 文本(
  • 執行計劃:慢查詢的執行計劃
  • 其他分類好的 SQL 執行信息

image-20210310141345490

點擊展開 (Expand) 鏈接可以展開相應項的完整內容,點擊複製 (Copy) 鏈接可以複製完整內容到剪貼板。

集羣診斷頁面

集羣診斷是在指定的時間範圍內,對集羣可能存在的問題進行診斷,並將診斷結果和一些集羣相關的負載監控信息彙總成一個診斷報告。診斷報告是網頁形式,通過瀏覽器保存後可離線瀏覽和傳閲。

生成診斷報告

如果想對一個時間範圍內的集羣進行診斷,查看集羣的負載等情況,可以使用以下步驟來生成一段時間範圍的診斷報告:

  1. 設置區間的開始時間
  2. 設置區間長度,例如 10 min 。
  3. 點擊開始。

建議生成報告的時間範圍在 1 min ~ 60 min 內,目前不建議生成超過 1 小時範圍的報告。

image-20210310141645985

點擊開始 (start) 後,會看到以下界面,生成進度 (progress) 是生成報告的進度條,生成報告完成後,點擊查看報告 (View Full Report) 即可。

image-20210310141816552

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 了。

image-20210308095820951

配置TiUP環境

重新聲明全局環境變量

COPYsource .bash_profile
檢查TiUP 工具是否安裝
COPYwhich tiup

image-20210308100108540

安裝 cluster 組件
COPYtiup cluster

image-20210308100218193

升級cluster組件

如果機器已經安裝 TiUP cluster,需要更新軟件版本

COPYtiup update --self && tiup update cluster

預期輸出 “Update successfully!” 字樣。

image-20210308100305454

編輯部署文件

請根據不同的集羣拓撲,編輯 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繼續後輸入密碼進行安裝界面

image-20210308140623236

進入安裝界面,等待安裝即可

image-20210308102532412

如果出現deployed successfully表示部署成功,集羣名稱是tidb-cluster

image-20210308103047705

啟動集羣

COPYtiup cluster start tidb-cluster

image-20210308103329722

查看節點狀態

COPYtiup cluster display tidb-cluster

所有節點都是Up狀態説明都已經啟動就緒了

image-20210309113426102

測試TiDB集羣

Mysql連接集羣

TiDB的連接端口默認是4000, 密碼是空,可用使用Mysql客户端以及第三方工具進行連接

安裝MySql客户端
COPYyum -y install mysql
MySql客户端連接

訪問 TiDB 數據庫,密碼為空

COPYmysql -h 192.168.64.146 -P 4000 -u root

image-20210308104058321

第三方客户端訪問Mysql

使用SQLyog訪問TiDB

創建TiDB連接

image-20210308104229510

連接後就可以操作數據庫了

image-20210308104434635

訪問Grafana監控

通過 http://{grafana-ip}:3000 訪問集羣 Grafana 監控頁面,默認用户名和密碼均為 admin。

image-20210308104706041

訪問Dashboard

通過 http://{pd-ip}:2379/dashboard 訪問集羣 TiDB Dashboard監控頁面,默認用户名為 root,密碼為空。

image-20210308104829297

查看集羣列表

COPYtiup cluster list

image-20210308110936945

查看集羣拓撲

COPYtiup cluster display tidb-cluster

image-20210308111048597

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

輸入命令後,確認輸入機器密碼

image-20210308152355455

出現successfully表示節點擴容成功

image-20210308152524912

驗證擴容信息
查看節點信息
COPYtiup cluster display tidb-cluster

我們看到Tikv已經增加了一個節點

image-20210308152647801

通過dashboard查看

也可以看到擴容的節點信息

image-20210308152905774

縮容TiKV節點

查看節點信息
COPYtiup cluster display tidb-cluster

當前TiKV是4個節點

image-20210308152647801

執行縮容操作
縮容命令
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確認執行就可以執行縮容操作了

image-20210308153500262

驗證縮容信息
查看節點信息
COPYtiup cluster display tidb-cluster

我們看到需要縮容的節點狀態是Tombstone説明已經下線,下線需要一定時間,下線節點的狀態變為 Tombstone 就説明下線成功

image-20210308153639934

通過dashboard查看

也可以看到縮容的節點已經不存在了,説明縮容成功

image-20210308153901260

博客內容遵循 署名-非商業性使用-相同方式共享 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日

集羣部署

TIDB

本文由傳智教育博學谷狂野架構師教研團隊發佈。

如果本文對您有幫助,歡迎關注點贊;如果您有任何建議也可留言評論私信,您的支持是我堅持創作的動力。

轉載請註明出處!