TiDB 基礎(chǔ)操作集

一、硬件選型

1、測試環(huán)境推薦配置

2、生產(chǎn)環(huán)境推薦配置

3、 如果 tikv 服務(wù)器的 CPU及磁盤配置較高,可以考慮多實例部署,按照每個 tikv 實例16~20core + 64G 內(nèi)存 + 800G 磁盤的比例分配硬件資源。

同時需要注意 inventory.ini 及 ansible/conf/tikv.yml 的相關(guān)配置。


4、tidb 服務(wù)器視業(yè)務(wù)類型,如果業(yè)務(wù)邏輯有偏 AP 類的 SQL,需要考慮配置大內(nèi)存,防止出現(xiàn) OOM。

如果是純 TP 類業(yè)務(wù),tidb 服務(wù)器 CPU 配置較高的話,也可以考慮多實例部署,每個 tidb-server 分配20~32core,可以避免無謂的CPU上下文切換, 減少 system cpu 消耗。


5、pd 服務(wù)器的磁盤可以配置200~500G 的SSD 盤,主要用來保存源數(shù)據(jù)信息。在集群規(guī)模較大,源數(shù)據(jù)信息較多的時候,SSD 磁盤能夠避免源數(shù)據(jù)信息存取成為集群的瓶頸點。


二、部署安裝

1、操作系統(tǒng)版本要求

建議 centos 7.3及以上,支持 redhat 7.3版本及以上,不推薦其他版本的系統(tǒng)。


2、ansible、jinja 等軟件依賴包版本,只需要驗證中控機(jī)(運行ansible 機(jī)器)上軟件版本滿足條件即可

中控機(jī):

ansible --version

ansible 2.5.0

pip -V

pip 8.1.2

pip show jinja2

Metadata-Version: 2.0

Name: Jinja2

Version: 2.10

pip show jmespath

Metadata-Version: 2.0

Name: jmespath

Version: 0.9.3

監(jiān)控機(jī)(grafana):

rpm -qa | grep fontconfig

fontconfig-2.10.95-11.el7.x86_64

rpm -qa | grep open-sans-fonts

open-sans-fonts-1.10-1.el7.noarch


3、測試環(huán)境磁盤 IO 不滿足需求

ansible-playbook bootstrap.yml --extra-vars "dev_mode=True"

加上 dev_mode=True 可以在部署時,繞過系統(tǒng)磁盤相關(guān)的 benchmark


4、關(guān)閉防火墻、開啟時鐘同步

systemctl status firewalld

systemctl status chronyd/ntpd


5、集群下所有服務(wù)器要配置不同的 hostname

如果否,可以編輯 inventory.ini 的配置項 set_hostname=True 來自動修改 hostname


6、調(diào)整參數(shù)

參數(shù)在 ansible/conf/目錄下,tidb.yml,tikv.yml,常見的可能需要調(diào)整的參數(shù)

tidb.yml:

grpc-connection-count: 如果服務(wù)器 CPU 配置較高,tikv 實例個數(shù)較多,該參數(shù)可以調(diào)整至20~32之間

slow-threshold:slow-query 記錄的閾值,默認(rèn)300ms

level:日志級別,默認(rèn) info,可以視情況調(diào)整為 debug 或 error


tikv.yml:

sync-log:raft-log sync配置,默認(rèn)值true,對于磁盤 io 消耗較高,測試/非金融生產(chǎn)環(huán)境建議設(shè)置為 false

region-split-check-diff:檢測 region 分裂的閾值,非 SSD 磁盤建議調(diào)大至32MB

rocksdb defaultcf block-cache-size(GB)?= MEM * 80% / TiKV 實例數(shù)量 * 30%(多實例部署下配置,單實例部署不需要修改)

rocksdb writecf block-cache-size(GB)?= MEM * 80% / TiKV 實例數(shù)量 * 45%(多實例部署下配置,單實例部署不需要修改)

rocksdb lockcf block-cache-size(GB)?= MEM * 80% / TiKV 實例數(shù)量 * 2.5% (最小 128 MB)(多實例部署下配置,單實例部署不需要修改)

raftdb defaultcf block-cache-size(GB)?= MEM * 80% / TiKV 實例數(shù)量 * 2.5% (最小 128 MB)(多實例部署下配置,單實例部署不需要修改)

多實例情況下,需要修改?

readpool:

? coprocessor:

? high-concurrency

? normal-concurrency

? low-concurrency

三個參數(shù),推薦為實例數(shù)*參數(shù)值 = CPU 核數(shù) * 0.8。

?raftstore:

? ?capacity

?磁盤總?cè)萘?/ TiKV 實例數(shù)量,例如 “100GB”

修改完后,可以使用下面命令驗證

cat tidb-ansible/conf/tikv.yml |grep -Ev "^$|#"

無誤后執(zhí)行?

ansible-playbook rolling_update.yml --tags=tidb/tikv

滾動升級,tags 可選


7、官網(wǎng)有比較完善的在線+離線部署方案、在線升級指導(dǎo)、在線擴(kuò)容縮容文檔,具體參考:

https://pingcap.com/docs-cn/op-guide/ansible-deployment/

https://pingcap.com/docs-cn/op-guide/offline-ansible-deployment/

https://pingcap.com/docs-cn/op-guide/ansible-deployment-scale/


三、數(shù)據(jù)遷移

1、從 MySQL 遷移

TiDB 兼容 MySQL 語法,小數(shù)據(jù)量建議直接使用 mysqldump、mydumper 來全量導(dǎo)出數(shù)據(jù),再通過 source、myloader 的方式導(dǎo)入 TiDB。

./bin/mydumper -h?127.0.0.1 -P?3306?-u root -t?16?-F?64?-B test -T t1,t2 --skip-tz-utc -o ./var/test

./bin/loader -h?127.0.0.1 -u root -P?4000?-t?32?-d ./var/test

詳情請參考:https://pingcap.com/docs-cn/op-guide/migration/#使用-mydumper-loader-全量導(dǎo)入數(shù)據(jù)

如果數(shù)據(jù)量較大,超過幾百 G,可以聯(lián)系原廠申請試用 lightning 工具,loader 導(dǎo)入數(shù)據(jù)平均速度是20G/小時,lightning 約為100~150G/小時


2、從 Oracle 遷移

目前有幾種方式可以參考

使用 OGG 做全量+增量同步

使用 Navicat Premium 版的 data transfer 功能,支持從 Oracle/SqlServer 遷移全量數(shù)據(jù)至 TiDB

通過 kafka 等消息隊列工具,解析 OGG 的日志,開發(fā)寫入 TiDB/MySQL 的工具

目前我們也在積極跟專業(yè)的數(shù)據(jù)異構(gòu)平臺合作,爭取能夠盡快在更多的數(shù)據(jù)遷移工具中兼容 TiDB 數(shù)據(jù)源。


四、常用操作

1、啟動集群

ansible-playbook start.yml --tags=tidb/tikv/pd

在正確的 ansible 目錄下,確保 inventory.ini 里的配置正確,tags 可選


2、停止集群

ansible-playbook stop.yml --tags=tidb/tikv/pd

在正確的 ansible 目錄下,確保 inventory.ini 里的配置正確,tags 可選


3、停止單個 tidb-server / tikv-server

ansible-playbook stop.yml --tags=tidb/tikv/pd -l IP

-l 后面接 inventory.ini 配置的IP 或別名


4、訪問 tidb

TiDB 兼容 MySQL 協(xié)議,所有連接 MySQL 的方式都適用于TiDB

mysql -uroot -h127.0.0.1 -P4000 -p

常見的圖形化界面工具,navicat 等都可以直接訪問 tidb

同時也支持jdbc、odbc 等,需要注意的是 mysql 8.0版本的客戶端,及 mariadb 客戶端可能存在兼容性問題,不建議使用

SQL 語法基本兼容 MySQL,某些不兼容的場景見:https://pingcap.com/docs-cn/sql/mysql-compatibility/#與-mysql-兼容性對比


5、修改參數(shù)

可以通過修改 tidb-ansible/conf/tidb.yml 配置文件,然后執(zhí)行

ansible-playbook rolling_update.yml --tags=tidb/tikv

也可以直接登錄服務(wù)器,找到deploy_dir/conf/tidb.toml,直接編輯文件,然后 pkill tidb-server 來重啟服務(wù)


6、查看 tidb 版本信息

select tidb_version();

Release Version: v2.1.0-rc.3-24-g23f90a6

Git Commit Hash: 23f90a68be321e724280da6033a2b63ebf6cc7dd

Git Branch: HEAD

UTC Build Time: 2018-10-10 09:18:39

GoVersion: go version go1.11 linux/amd64

Race Enabled: false

TiKV Min Version: 2.1.0-alpha.1-ff3dd160846b7d1aed9079c389fc188f7f5ea13e

Check Table Before Drop: false


7、備份 tidb 數(shù)據(jù)

全量備份可以采用 mydumper,增量備份需要開啟 binlog,實時恢復(fù)采用商業(yè)版工具 reparo。


8、查看監(jiān)控數(shù)據(jù)

在 ansible 的配置文件 inventory.ini 里,有一個監(jiān)控服務(wù)器的配置

[monitoring_servers]

10.1.163.87

deploy 的時候會默認(rèn)在這個配置服務(wù)器上部署 grafana 組件,通過

http://10.1.163.87:3000admin/admin? 訪問

具體一些常見的監(jiān)控指標(biāo),請參考:https://pingcap.com/docs-cn/op-guide/dashboard-overview-info/


9、收集統(tǒng)計信息

set @@tidb_build_stats_concurrency=20;

set @@tidb_distsql_scan_concurrency=100;

set @@tidb_index_serial_scan_concurrency=20;

analyze table xxx index xxx;

修改上面三個參數(shù)可以提升 scan 效率。

具體統(tǒng)計信息相關(guān),請參考:https://pingcap.com/docs-cn/sql/statistics/#統(tǒng)計信息簡介


五、常見問題

1、Transaction too large

TiDB 對于事務(wù)有限制,簡單來說以下幾點:

單個事務(wù)的SQL 語句數(shù)量不能超過5000,( 在 tidb.yml 可配 stmt-count-limit )

單條 KV entry 不超過 6MB

KV entry 的總條數(shù)不超過 30w

KV entry 的總大小不超過 100MB

備注:假設(shè)某張表有4個索引,那么一條數(shù)據(jù)對應(yīng)的 kv entry 為數(shù)據(jù)+索引,一共5個kv 記錄。

如果是批量 insert 或delete,建議先修改

set tidb_batch_insert = 1;?

set?tidb_batch_delete = 1;

update mysql.tidb set variable_value='24h' where variable_name='tikv_gc_life_time';

再執(zhí)行 SQL。

如果是批量 update,建議采用 limit 循環(huán)的方式執(zhí)行。


2、GC life time is shorter than transaction duration

GC Life Time?間隔時間過短,長事務(wù)本應(yīng)讀到的數(shù)據(jù)可能被清理了,可使用如下命令增加?GC Life Time?:

update mysql.tidb set variable_value='30m' where variable_name='tikv_gc_life_time';


3、Lost connection to MySQL server during query

log 中是否有 panic

dmesg 中是否有 oom,命令:?dmesg -T | grep -i oom

長時間沒有訪問,也會收到這個報錯,一般是 tcp 超時導(dǎo)致的,tcp 長時間不用, 會被操作系統(tǒng) kill。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、分布式數(shù)據(jù)庫誕生背景 隨著互聯(lián)網(wǎng)的飛速發(fā)展,業(yè)務(wù)量可能在短短的時間內(nèi)爆發(fā)式地增長,對應(yīng)的數(shù)據(jù)量可能快速地從幾百...
    nightwish夜愿閱讀 3,606評論 0 12
  • 概述 對于生產(chǎn)環(huán)境,須使用 TiDB-Ansible 部署 TiDB 集群。如果只是用于測試 TiDB ...
    張偉科閱讀 2,210評論 0 9
  • 一、了解TiDB 1.1 TiDB整體架構(gòu) 要深入了解 TiDB 的水平擴(kuò)展和高可用特點,首先需要了解 TiDB ...
    什錦小沐閱讀 1,537評論 0 6
  • 摘要: 本文為今年年初 PingCAP 商業(yè)產(chǎn)品團(tuán)隊負(fù)責(zé)人劉寅在 TiDB DevCon2018 上分享的 《 T...
    nightwish夜愿閱讀 6,882評論 0 11
  • 我是早產(chǎn)兒,生下來只有七個月,四斤多。看過外婆給我做的小棉背心一個,用巴掌一量,只有巴掌大,直接笑不能抑,...
    湖心月另一專欄閱讀 400評論 1 3

友情鏈接更多精彩內(nèi)容