TIDB整體架構(gòu):
TiDB 集群主要包括三個(gè)核心組件:TiDB Server,PD Server 和 TiKV Server。
PD Server:Placement Driver (簡(jiǎn)稱(chēng) PD) 是整個(gè)集群的管理模塊,其主要工作有三個(gè):一是存儲(chǔ)集群的元信息(某個(gè) Key 存儲(chǔ)在哪個(gè) TiKV 節(jié)點(diǎn));二是對(duì) TiKV 集群進(jìn)行調(diào)度和負(fù)載均衡(如數(shù)據(jù)的遷移、Raft group leader 的遷移等);三是分配全局唯一且遞增的事務(wù) ID。
PD 通過(guò) Raft 協(xié)議保證數(shù)據(jù)的安全性。Raft 的 leader server 負(fù)責(zé)處理所有操作,其余的 PD server 僅用于保證高可用。建議部署奇數(shù)個(gè) PD 節(jié)點(diǎn)。
TiKV Server:負(fù)責(zé)存儲(chǔ)數(shù)據(jù),從外部看 TiKV 是一個(gè)分布式的提供事務(wù)的 Key-Value 存儲(chǔ)引擎。存儲(chǔ)數(shù)據(jù)的基本單位是 Region,每個(gè) Region 負(fù)責(zé)存儲(chǔ)一個(gè) Key Range(從 StartKey 到 EndKey 的左閉右開(kāi)區(qū)間)的數(shù)據(jù),每個(gè) TiKV 節(jié)點(diǎn)會(huì)負(fù)責(zé)多個(gè) Region。TiKV 使用 Raft 協(xié)議做復(fù)制,保持?jǐn)?shù)據(jù)的一致性和容災(zāi)。副本以 Region 為單位進(jìn)行管理,不同節(jié)點(diǎn)上的多個(gè) Region 構(gòu)成一個(gè) Raft Group,互為副本。數(shù)據(jù)在多個(gè) TiKV 之間的負(fù)載均衡由 PD 調(diào)度,這里也是以 Region 為單位進(jìn)行調(diào)度。
TiDB Server:?負(fù)責(zé)接收 SQL 請(qǐng)求,處理 SQL 相關(guān)的邏輯,并通過(guò) PD 找到存儲(chǔ)計(jì)算所需數(shù)據(jù)的 TiKV 地址,與 TiKV 交互獲取數(shù)據(jù),最終返回結(jié)果。TiDB Server 是無(wú)狀態(tài)的,其本身并不存儲(chǔ)數(shù)據(jù),只負(fù)責(zé)計(jì)算,可以無(wú)限水平擴(kuò)展,可以通過(guò)負(fù)載均衡組件(如LVS、HAProxy 或 F5)對(duì)外提供統(tǒng)一的接入地址。
Linux版本要求:
TIDB官方指出:TiDB 在?CentOS?7.3?的環(huán)境下進(jìn)行過(guò)大量的測(cè)試,同時(shí)社區(qū)也有很多該操作系統(tǒng)部署的最佳實(shí)踐,因此,建議使用?CentOS?7.3?以上的 Linux 操作系統(tǒng)來(lái)部署 TiDB。
環(huán)境依賴(lài):
安裝MySQL
TIDB安裝步驟:
1、[root@localhost /]$ cd /usr/local/soft/
? ? ? ?[root@localhost soft]$ wget http://download.pingcap.org/tidb-latest-linux-amd64.sha256
? ? ? ?[root@localhost soft]$?wget http://download.pingcap.org/tidb-latest-linux-amd64.sha256

2、檢查文件完整性
[root@localhost soft]$ sha256sum -c tidb-latest-linux-amd64.sha256

3、解壓文件
[root@localhost soft]# tar -xvf tidb-latest-linux-amd64.tar.gz
4、data、logfile路徑
[root@localhost soft]# mkdir -p /data/pd/{data,logs}
[root@localhost soft]# mkdir -p /data/tikv/{data,logs}
[root@localhost logs]# mkdir -p /data/tidb/logs
5、啟動(dòng)pd-server
[root@localhost logs]# /usr/local/tidb/bin/pd-server --data-dir=/data/pd/data --log-file=/data/pd/logs/pd.log &

6、啟動(dòng)tikv
[root@localhost logs]# /usr/local/tidb/bin/tikv-server --pd="127.0.0.1:2379" --data-dir=/data/tikv/data --log-file=/data/tikv/logs/tikv.log &

7、啟動(dòng)tidb
[root@localhost logs]# /usr/local/tidb/bin/tidb-server --store=tikv --path="127.0.0.1:2379" --log-file=/data/tidb/logs/tidb.log &

8、驗(yàn)證:TCP 4000 端口是 TiDB 服務(wù)默認(rèn)端口,驗(yàn)證4000端口是否已被tidb-server 占用

使用MySQL客戶(hù)端連接測(cè)試:
[root@localhost logs]# mysql -uroot -p -h127.0.0.1 -P4000

從Server version中看出已經(jīng)連接上TIDB,TIDB語(yǔ)法與MySql語(yǔ)法基本一致,簡(jiǎn)單的驗(yàn)證一下

MySql數(shù)據(jù)遷移:
mydumper安裝:
官方推薦采用mydumper,具體可以參考?https://github.com/maxbube/mydumper??梢允褂?mydumper?從 MySQL 導(dǎo)出數(shù)據(jù),然后用?loader?將其導(dǎo)入到 TiDB。
mydumper安裝:
[root@localhost soft]# yum install glib2-devel mysql-devel zlib-devel pcre-devel openssl-devel cmake make
[root@localhost soft]# wget https://launchpadlibrarian.net/225370879/mydumper-0.9.1.tar.gz
[root@localhost soft]# tar zxvf mydumper-0.9.1.tar.gz

[root@localhost soft]# tar zxvf mydumper-0.9.1.tar.gz
[root@localhost soft]# cd mydumper-0.9.1/
[root@localhost mydumper-0.9.1]# cmake .

[root@localhost mydumper-0.9.1]# make && make install
在安裝過(guò)程中,在cmake .時(shí)候,報(bào)了make: *** No targets specified and no makefile,因?yàn)槿鄙傧嚓P(guān)的依賴(lài),
[root@localhost mydumper-0.9.1]# yum -y install gcc gcc-c++ autoconf automake
[root@localhost mydumper-0.9.1]# yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel (安裝依賴(lài)zlib、openssl和pcre)
安裝完成后生成兩個(gè)二進(jìn)制文件mydumper和myloader位于/usr/local/bin目錄下:

從 MySQL 導(dǎo)出數(shù)據(jù):
[root@localhost bin]# ./mydumper -h 127.0.0.1 -P 3306 -u root -p root -t 16 -F 64 -B tidb -T t_order --skip-tz-utc -o /usr/local/data
我們使用?-B tidb 表明是對(duì)?tidb 這個(gè) database 操作,然后用?-T t_order 只導(dǎo)出t_order表。如果有多張表,中間用逗號(hào)隔開(kāi),例如: t1,t2?表明只導(dǎo)出?t1,t2?兩張表。
-t 16?表明使用 16 個(gè)線(xiàn)程去導(dǎo)出數(shù)據(jù)。-F 64?是將實(shí)際的 table 切分成多大的 chunk,這里就是 64MB 一個(gè) chunk。
--skip-tz-utc?添加這個(gè)參數(shù)忽略掉 MySQL 與導(dǎo)數(shù)據(jù)的機(jī)器之間時(shí)區(qū)設(shè)置不一致的情況,禁止自動(dòng)轉(zhuǎn)換。
查看導(dǎo)出的數(shù)據(jù):

向 TiDB 導(dǎo)入數(shù)據(jù):
使用?myloader?將之前導(dǎo)出的數(shù)據(jù)導(dǎo)入到 TiDB:
[root@localhost bin]# ./myloader -h 127.0.0.1 -u root -P 4000 -t 32 -d /usr/local/data/
導(dǎo)入成功之后,我們可以用 MySQL 官方客戶(hù)端進(jìn)入 TiDB,查看:

數(shù)據(jù)導(dǎo)入成功。