TiDB運(yùn)維文檔(上)
點(diǎn)擊上方“IT那活兒”公眾號(hào),關(guān)注后了解更多內(nèi)容,不管IT什么活兒,干就完了!!!
TiDB 是 PingCAP 公司自主設(shè)計(jì)、研發(fā)的開源分布式關(guān)系型數(shù)據(jù)庫,是一款同時(shí)支持在線事務(wù)處理與在線分析處理 (Hybrid Transactional and Analytical Processing, HTAP) 的融合型分布式數(shù)據(jù)庫產(chǎn)品,具備水平擴(kuò)容或者縮容、金融級(jí)高可用、實(shí)時(shí) HTAP、云原生的分布式數(shù)據(jù)庫、兼容 MySQL 5.7 協(xié)議和 MySQL 生態(tài)等重要特性。目標(biāo)是為用戶提供一站式 OLTP (Online Transactional Processing)、OLAP (Online Analytical Processing)、HTAP 解決方案。TiDB 適合高可用、強(qiáng)一致要求較高、數(shù)據(jù)規(guī)模較大等各種應(yīng)用場景。1.1 架構(gòu)簡介
1.1.1 TiDB Server
SQL 層,對(duì)外暴露 MySQL 協(xié)議的連接 endpoint,負(fù)責(zé)接受客戶端的連接,執(zhí)行 SQL 解析和優(yōu)化,最終生成分布式執(zhí)行計(jì)劃。TiDB 層本身是無狀態(tài)的,實(shí)踐中可以啟動(dòng)多個(gè) TiDB 實(shí)例,通過負(fù)載均衡組件(如 LVS、HAProxy 或 F5)對(duì)外提供統(tǒng)一的接入地址,客戶端的連接可以均勻地分?jǐn)傇诙鄠€(gè) TiDB 實(shí)例上以達(dá)到負(fù)載均衡的效果。TiDB Server 本身并不存儲(chǔ)數(shù)據(jù),只是解析 SQL,將實(shí)際的數(shù)據(jù)讀取請求轉(zhuǎn)發(fā)給底層的存儲(chǔ)節(jié)點(diǎn) TiKV(或 TiFlash)。1.1.2 PD (Placement Driver) Server
整個(gè) TiDB 集群的元信息管理模塊,負(fù)責(zé)存儲(chǔ)每個(gè) TiKV 節(jié)點(diǎn)實(shí)時(shí)的數(shù)據(jù)分布情況和集群的整體拓?fù)浣Y(jié)構(gòu),提供 TiDB Dashboard 管控界面,并為分布式事務(wù)分配事務(wù) ID。PD 不僅存儲(chǔ)元信息,同時(shí)還會(huì)根據(jù) TiKV 節(jié)點(diǎn)實(shí)時(shí)上報(bào)的數(shù)據(jù)分布狀態(tài),下發(fā)數(shù)據(jù)調(diào)度命令給具體的 TiKV 節(jié)點(diǎn),可以說是整個(gè)集群的“大腦”。此外,PD 本身也是由至少 3 個(gè)節(jié)點(diǎn)構(gòu)成,擁有高可用的能力。建議部署奇數(shù)個(gè) PD 節(jié)點(diǎn)。1.1.3 存儲(chǔ)節(jié)點(diǎn)
1.2 五大核心特性
1.2.1 一鍵水平擴(kuò)容或者縮容
得益于 TiDB 存儲(chǔ)計(jì)算分離的架構(gòu)的設(shè)計(jì),可按需對(duì)計(jì)算、存儲(chǔ)分別進(jìn)行在線擴(kuò)容或者縮容,擴(kuò)容或者縮容過程中對(duì)應(yīng)用運(yùn)維人員透明。1.2.2 金融級(jí)高可用
數(shù)據(jù)采用多副本存儲(chǔ),數(shù)據(jù)副本通過 Multi-Raft 協(xié)議同步事務(wù)日志,多數(shù)派寫入成功事務(wù)才能提交,確保數(shù)據(jù)強(qiáng)一致性且少數(shù)副本發(fā)生故障時(shí)不影響數(shù)據(jù)的可用性。可按需配置副本地理位置、副本數(shù)量等策略滿足不同容災(zāi)級(jí)別的要求。1.2.3 實(shí)時(shí) HTAP
提供行存儲(chǔ)引擎 TiKV、列存儲(chǔ)引擎 TiFlash 兩款存儲(chǔ)引擎,TiFlash 通過 Multi-Raft Learner 協(xié)議實(shí)時(shí)從 TiKV 復(fù)制數(shù)據(jù),確保行存儲(chǔ)引擎 TiKV 和列存儲(chǔ)引擎 TiFlash 之間的數(shù)據(jù)強(qiáng)一致。TiKV、TiFlash 可按需部署在不同的機(jī)器,解決 HTAP 資源隔離的問題。1.2.4 云原生的分布式數(shù)據(jù)庫
專為云而設(shè)計(jì)的分布式數(shù)據(jù)庫,通過 TiDB Operator 可在公有云、私有云、混合云中實(shí)現(xiàn)部署工具化、自動(dòng)化。1.2.5 兼容 MySQL 5.7 協(xié)議和 MySQL 生態(tài)
兼容 MySQL 5.7 協(xié)議、MySQL 常用的功能、MySQL 生態(tài),應(yīng)用無需或者修改少量代碼即可從 MySQL 遷移到 TiDB。提供豐富的數(shù)據(jù)遷移工具幫助應(yīng)用便捷完成數(shù)據(jù)遷移。
2.1 環(huán)境準(zhǔn)備
2.1.1 Linux 操作系統(tǒng)版本要求
- a) 目前尚不支持 Red Hat Enterprise Linux 8.0、CentOS 8 Stream 和 Oracle Enterprise Linux 8.0,因?yàn)槟壳皩?duì)這些平臺(tái)的測試還在進(jìn)行中。
- b) 不計(jì)劃支持 CentOS 8 Linux,因?yàn)?CentOS 的上游支持將于 2021 年 12 月 31 日終止。
- c) TiDB 將不再支持 Ubuntu 16.04。強(qiáng)烈建議升級(jí)到 Ubuntu 18.04 或更高版本。
2.1.2 軟件配置
2.1.3 硬件配置
- a) 單Tikv節(jié)點(diǎn)建議存儲(chǔ)2T內(nèi)數(shù)據(jù),可視服務(wù)器cpu、內(nèi)存情況增加。
- b) Tiflash節(jié)點(diǎn)磁盤性能同于或高于tikv節(jié)點(diǎn)磁盤性能。
2.1.4 系統(tǒng)環(huán)境準(zhǔn)備
1)在 TiKV 部署目標(biāo)機(jī)器上添加數(shù)據(jù)盤EXT4文件系統(tǒng)掛載參數(shù)
生產(chǎn)環(huán)境部署,建議使用 EXT4 類型文件系統(tǒng)的 NVME 類型的 SSD 磁盤存儲(chǔ) TiKV 數(shù)據(jù)文件。這個(gè)配置方案為最佳實(shí)施方案,其可靠性、安全性、穩(wěn)定性已經(jīng)在大量線上場景中得到證實(shí)。使用 root 用戶登錄目標(biāo)機(jī)器,將部署目標(biāo)機(jī)器數(shù)據(jù)盤格式化成 ext4 文件系統(tǒng),掛載時(shí)添加 nodelalloc 和 noatime 掛載參數(shù)。nodelalloc 是必選參數(shù),否則 TiUP 安裝時(shí)檢測無法通過;noatime 是可選建議參數(shù)。以 /dev/nvme0n1 數(shù)據(jù)盤為例,具體操作步驟如下:--查看數(shù)據(jù)盤。
fdisk -l
Disk /dev/nvme0n1: 1000 GB
--創(chuàng)建分區(qū)。
parted -s -a optimal /dev/nvme0n1 mklabel gpt -- mkpart primary ext4 1 -1
--格式化文件系統(tǒng)。
--查看數(shù)據(jù)盤分區(qū) UUID。
本例中 nvme0n1p1 的 UUID 為 c51eb23b-195c-4061-92a9-3fad812cc12f。lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 ext4 237b634b-a565-477b-8371-6dff0c41f5ab /boot
├─sda2 swap f414c5c0-f823-4bb1-8fdf-e531173a72ed
└─sda3 ext4 547909c1-398d-4696-94c6-03e43e317b60 /
sr0
nvme0n1
└─nvme0n1p1 ext4 c51eb23b-195c-4061-92a9-3fad812cc12f
--編輯 /etc/fstab 文件,添加 nodelalloc 掛載參數(shù)。
vi /etc/fstab
UUID=c51eb23b-195c-4061-92a9-3fad812cc12f /data1 ext4 defaults,nodelalloc,noatime 0 2
--掛載數(shù)據(jù)盤。
--執(zhí)行以下命令,如果文件系統(tǒng)為 ext4,并且掛載參數(shù)中包含 nodelalloc,則表示已生效。mount -t ext4
/dev/nvme0n1p1 on /data1 type ext4 (rw,noatime,nodelalloc,data=ordered)
2)檢測及關(guān)閉系統(tǒng)swap
TiDB 運(yùn)行需要有足夠的內(nèi)存,并且不建議使用 swap 作為內(nèi)存不足的緩沖,這會(huì)降低性能。因此建議永久關(guān)閉系統(tǒng) swap,并且不要使用 swapoff -a 方式關(guān)閉,否則重啟機(jī)器后該操作會(huì)失效。建議執(zhí)行以下命令關(guān)閉系統(tǒng) swap:echo "vm.swappiness = 0">> /etc/sysctl.conf
swapoff -a && swapon -a
sysctl -p
3)檢測及關(guān)閉目標(biāo)部署機(jī)器的防火墻
本段介紹如何關(guān)閉目標(biāo)主機(jī)防火墻配置。因?yàn)樵?TiDB 集群中,需要將節(jié)點(diǎn)間的訪問端口打通才可以保證讀寫請求、數(shù)據(jù)心跳等信息的正常的傳輸。在普遍線上場景中,數(shù)據(jù)庫到業(yè)務(wù)服務(wù)和數(shù)據(jù)庫節(jié)點(diǎn)的網(wǎng)絡(luò)聯(lián)通都是在安全域內(nèi)完成數(shù)據(jù)交互。如果沒有特殊安全的要求,建議將目標(biāo)節(jié)點(diǎn)的防火墻進(jìn)行關(guān)閉。否則建議按照端口使用規(guī)則,將端口信息配置到防火墻服務(wù)的白名單中。檢查防火墻狀態(tài)(以 CentOS Linux release 7.7.1908 (Core) 為例)sudo firewall-cmd --state
sudo systemctl status firewalld.service
--關(guān)閉防火墻服務(wù)。
sudo systemctl stop firewalld.service
--關(guān)閉防火墻自動(dòng)啟動(dòng)服務(wù)。
sudo systemctl disable firewalld.service
sudo systemctl status firewalld.service
4)檢測及安裝NTP服務(wù)
TiDB 是一套分布式數(shù)據(jù)庫系統(tǒng),需要節(jié)點(diǎn)間保證時(shí)間的同步,從而確保 ACID 模型的事務(wù)線性一致性。目前解決授時(shí)的普遍方案是采用 NTP 服務(wù),可以通過互聯(lián)網(wǎng)中的 pool.ntp.org 授時(shí)服務(wù)來保證節(jié)點(diǎn)的時(shí)間同步,也可以使用離線環(huán)境自己搭建的 NTP 服務(wù)來解決授時(shí)。采用如下步驟檢查是否安裝 NTP 服務(wù)以及與 NTP 服務(wù)器正常同步:步驟一:執(zhí)行以下命令,如果輸出 running 表示 NTP 服務(wù)正在運(yùn)行:
sudo systemctl status ntpd.service
ntpd.service - Network Time Service
Loaded: loaded (/usr/lib/systemd/system/ntpd.service; disabled; vendor preset: disabled)
Active: active (running) since 一 2017-12-18 13:13:19 CST; 3s ago
若返回報(bào)錯(cuò)信息 Unit ntpd.service could not be found.,請嘗試執(zhí)行以下命令,以查看與 NTP 進(jìn)行時(shí)鐘同步所使用的系統(tǒng)配置是 chronyd 還是 ntpd:sudo systemctl status cronyd.service
chronyd.service - NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2021-04-05 09:55:29 EDT; 3 days ago
如果你使用的系統(tǒng)配置是 chronyd,請直接執(zhí)行以下的步驟 3。步驟二:執(zhí)行 ntpstat 命令檢測是否與 NTP 服務(wù)器同步:
如果輸出 synchronised to NTP server,表示正在與 NTP 服務(wù)器正常同步:synchronised to NTP server (85.199.214.101) at stratum 2
time correct to within 91 ms
polling server every 1024 s
以下情況表示 NTP 服務(wù)未正常運(yùn)行:Unable to talk to NTP daemon. Is it running?
步驟三:如果要使 NTP 服務(wù)盡快開始同步,執(zhí)行以下命令。可以將 pool.ntp.org 替換為你的 NTP 服務(wù)器:
sudo systemctl stop ntpd.service &&
sudo ntpdate pool.ntp.org &&
sudo systemctl start ntpd.service
步驟四:如果要在 CentOS 7 系統(tǒng)上手動(dòng)安裝 NTP 服務(wù),可執(zhí)行以下命令:sudo yum install ntp ntpdate &&
sudo systemctl start ntpd.service &&
sudo systemctl enable ntpd.service
5)配置SSH互信及sudo免密碼
對(duì)于有需求,通過手動(dòng)配置中控機(jī)至目標(biāo)節(jié)點(diǎn)互信的場景,可參考本段。通常推薦使用 TiUP 部署工具會(huì)自動(dòng)配置 SSH 互信及免密登錄,可忽略本段內(nèi)容。以 root 用戶依次登錄到部署目標(biāo)機(jī)器創(chuàng)建 tidb 用戶并設(shè)置登錄密碼。
useradd tidb &&
passwd tidb
執(zhí)行以下命令,將 tidb ALL=(ALL) NOPASSWD: ALL 添加到文件末尾,即配置好 sudo 免密碼。
visudo
tidb ALL=(ALL) NOPASSWD: ALL
以 tidb 用戶登錄到中控機(jī),執(zhí)行以下命令。將 10.0.1.1 替換成你的部署目標(biāo)機(jī)器 IP,按提示輸入部署目標(biāo)機(jī)器 tidb 用戶密碼,執(zhí)行成功后即創(chuàng)建好 SSH 互信,其他機(jī)器同理。
新建的 tidb 用戶下沒有 .ssh 目錄,需要執(zhí)行生成 rsa 密鑰的命令來生成 .ssh 目錄。如果要在中控機(jī)上部署 TiDB 組件,需要為中控機(jī)和中控機(jī)自身配置互信。ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub 10.0.1.1
以 tidb 用戶登錄中控機(jī),通過 ssh 的方式登錄目標(biāo)機(jī)器 IP。如果不需要輸入密碼并登錄成功,即表示 SSH 互信配置成功。
ssh 10.0.1.1
[tidb@10.0.1.1 ~]$
以 tidb 用戶登錄到部署目標(biāo)機(jī)器后,執(zhí)行以下命令,不需要輸入密碼并切換到 root 用戶,表示 tidb 用戶 sudo 免密碼配置成功。
sudo -su root
[root@10.0.1.1 tidb]#
6)安裝numactl工具
在生產(chǎn)環(huán)境中,因?yàn)橛布C(jī)器配置往往高于需求,為了更合理規(guī)劃資源,會(huì)考慮單機(jī)多實(shí)例部署 TiDB 或者 TiKV。NUMA 綁核工具的使用,主要為了防止 CPU 資源的爭搶,引發(fā)性能衰退。NUMA 綁核是用來隔離 CPU 資源的一種方法,適合高配置物理機(jī)環(huán)境部署多實(shí)例使用。通過 tiup cluster deploy 完成部署操作,就可以通過 exec 命令來進(jìn)行集群級(jí)別管理工作。登錄到目標(biāo)節(jié)點(diǎn)進(jìn)行安裝(以 CentOS Linux release 7.7.1908 (Core) 為例)
sudo yum -y install numactl
通過 TiUP 的 cluster 執(zhí)行完 exec 命令來完成批量安裝。
tiup cluster exec tidb-test --sudo --command "yum -y install numactl"
由nginx或haproxy負(fù)載tidb接口,提供對(duì)外服務(wù)。建議方案有兩種:
- 方案一:代理機(jī)負(fù)載全部tidb-server節(jié)點(diǎn),代理機(jī)利用keepalive工具,部署主備式架構(gòu),采用VIP對(duì)外提供統(tǒng)一服務(wù)接口。
- 方案二:代理機(jī)負(fù)載全部或分配部分tidb-server節(jié)點(diǎn),根據(jù)業(yè)務(wù)情況,劃分使用哪個(gè)代理機(jī)入口。
方案一:對(duì)外統(tǒng)一接口
方案二:對(duì)外規(guī)劃接口
2.3 集群部署
2.3.1 準(zhǔn)備 TiUP 離線組件包
使用tiupmirrorclone命令手動(dòng)打包離線組件包。1)在線環(huán)境中安裝 TiUP 包管理器工具
curl --proto =https --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
2)使用 TiUP 制作離線鏡像
在一臺(tái)和外網(wǎng)相通的機(jī)器上拉取需要的組件:
tiup mirror clone tidb-community-server-${version}-linux-amd64 ${version} --os=linux --arch=amd64
該命令會(huì)在當(dāng)前目錄下創(chuàng)建一個(gè)名叫 tidb-community-server-${version}-linux-amd64 的目錄,里面包含 TiUP 管理的組件包。通過 tar 命令將該組件包打包然后發(fā)送到隔離環(huán)境的中控機(jī):
tar czvf tidb-community-server-${version}-linux-amd64.tar.gz tidb-community-server-${version}-linux-amd64
此時(shí),tidb-community-server-${version}-linux-amd64.tar.gz 就是一個(gè)獨(dú)立的離線環(huán)境包。2.3.2 部署離線環(huán)境 TiUP 組件
將離線包發(fā)送到目標(biāo)集群的中控機(jī)后,執(zhí)行以下命令安裝 TiUP 組件:tar xzvf tidb-community-server-${version}-linux-amd64.tar.gz
sh tidb-community-server-${version}-linux-amd64/local_install.sh
source /home/tidb/.bash_profile
local_install.sh 腳本會(huì)自動(dòng)執(zhí)行 tiup mirror set tidb-community-server-${version}-linux-amd64 命令將當(dāng)前鏡像地址設(shè)置為 tidb-community-server-${version}-linux-amd64。若需將鏡像切換到其他目錄,可以通過手動(dòng)執(zhí)行 tiup mirror set 進(jìn)行切換。如果需要切換到在線環(huán)境,可執(zhí)行 tiup mirror set https://tiup-mirrors.pingcap.com。2.3.3 配置初始化參數(shù)文件 topology.yaml
集群初始化配置文件需要手動(dòng)編寫,完整的全配置參數(shù)模版可以參考 Github TiUP 項(xiàng)目配置參數(shù)模版。需要在中控機(jī)上面創(chuàng)建 YAML 格式配置文件,例如 topology.yaml:cat topology.yaml
# # 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"
server_configs:
pd:
replication.enable-placement-rules: true
pd_servers:
- host: 10.0.1.4
- host: 10.0.1.5
- host: 10.0.1.6
tidb_servers:
- host: 10.0.1.7
- host: 10.0.1.8
- host: 10.0.1.9
tikv_servers:
- host: 10.0.1.1
- host: 10.0.1.2
- host: 10.0.1.3
tiflash_servers:
- host: 10.0.1.10
data_dir: /data1/tiflash/data,/data2/tiflash/data
cdc_servers:
- host: 10.0.1.6
- host: 10.0.1.7
- host: 10.0.1.8
monitoring_servers:
- host: 10.0.1.4
grafana_servers:
- host: 10.0.1.4
alertmanager_servers:
- host: 10.0.1.4
2.3.4 部署 TiDB 集群
1)執(zhí)行以下命令來部署TiDB集群
tiup cluster deploy tidb-test v4.0.0 topology.yaml --user tidb [-p] [-i /home/root/.ssh/gcp_rsa]
tiup cluster start tidb-test
2)參數(shù)說明
- 通過 TiUP cluster 部署的集群名稱為 tidb-test;
- 部署版本為 v4.0.0,其他版本可以執(zhí)行 tiup list tidb 獲取;
- --user tidb:通過 tidb 用戶登錄到目標(biāo)主機(jī)完成集群部署,該用戶需要有 ssh 到目標(biāo)機(jī)器的權(quán)限,并且在目標(biāo)機(jī)器有 sudo 權(quán)限。也可以用其他有 ssh 和 sudo 權(quán)限的用戶完成部署;
- [-i] 及 [-p]:非必選項(xiàng),如果已經(jīng)配置免密登陸目標(biāo)機(jī),則不需填寫。否則選擇其一即可,[-i] 為可登錄到部署機(jī) root 用戶(或 --user 指定的其他用戶)的私鑰,也可使用 [-p] 交互式輸入該用戶的密碼;
- 預(yù)期日志結(jié)尾輸出會(huì)有 Deployed cluster `tidb-test` successfully 關(guān)鍵詞,表示部署成功;
- 部署完成后,集群相關(guān)操作可參考 cluster 命令。
2.4 集群狀態(tài)驗(yàn)證
2.4.1 中控機(jī)
檢查集群狀態(tài)的命令是 tiup cluster display ,例如:tiup cluster display tidb-test預(yù)期結(jié)果輸出:各節(jié)點(diǎn) Status 狀態(tài)信息為 Up 說明集群狀態(tài)正常。2.4.2 監(jiān)控頁面
1)通過 {pd-ip}:{pd-port}/dashboard 登錄 TiDB Dashboard,登錄用戶和口令為 TiDB 數(shù)據(jù)庫 root 用戶和口令。如果你修改過數(shù)據(jù)庫的 root 密碼,則以修改后的密碼為準(zhǔn),默認(rèn)密碼為空。主頁面顯示 TiDB 集群中節(jié)點(diǎn)信息2)通過 {Grafana-ip}:3000 登錄 Grafana 監(jiān)控,默認(rèn)用戶名及密碼為 admin/admin。點(diǎn)擊 Overview 監(jiān)控頁面檢查 TiDB 端口和負(fù)載監(jiān)控信息。下篇文章我們講一下TIDB的日常運(yùn)維,本文到此結(jié)束,謝謝!本文作者:李仕豪(上海新炬中北團(tuán)隊(duì))
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/129140.html