tidb集群部署
###敏感數據已刪除###
一.安裝規划
1
2
3
4
5
6
|
使用15台服務器
5台tidb服務器:每台3個tidb實例+1個pd+1個pump
10台tikv服務器:每台4個tikv實例
drainer_servers 安裝在第一台tidb機器上
grafana_servers 安裝在3台中控機
alertmanager_servers 安裝在3台中控機
|
二.服務器規划
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
業務IP 心跳IP services 主機名
10.10.10.101 10.100.100.101tidb&pd&pump xx-xxtidb-db01
10.10.10.10210.100.100.102tidb&pd&pump xx-xxtidb-db02
10.10.10.103 10.100.100.103tidb&pd&pump xx-xxtidb-db03
10.10.10.104 10.100.100.104tidb&pd&pump xx-xxtidb-db04
10.10.10.105 10.100.100.105tidb&pd&pump xx-xxtidb-db05
10.10.10.10610.100.100.106tikv xx-xxtikv-db01
10.10.10.10710.100.100.107tikv xx-xxtikv-db02
10.10.10.10810.100.100.108tikv xx-xxtikv-db03
10.10.10.10910.100.100.109tikv xx-xxtikv-db04
10.10.10.11010.100.100.110tikv xx-xxtikv-db05
10.10.10.111 10.100.100.111 tikv xx-xxtikv-db06
10.10.10.112 10.100.100.112 tikv xx-xxtikv-db07
10.10.10.113 10.100.100.113 tikv xx-xxtikv-db08
10.10.10.114 10.100.100.114 tikv xx-xxtikv-db09
10.10.10.115 10.100.100.115 tikv xx-xxtikv-db10
|
三.安裝前配置
1
2
3
4
5
6
7
8
9
10
11
|
1.關閉SWAP
2.安裝numactl工具
3.創建data目錄
4.檢查及關閉防火牆
5.檢查並關閉透明大頁
6.I
/O
調度器
7.創建tidb用戶
8.設置
sudo
9.配置互信
10.TiDB
/PD
機器掛載數據盤
11.安裝前再次檢查
|
1.關閉SWAP
1
2
3
|
檢測及關閉系統swap(所有機器)
cat
/etc/sysctl
.conf |
grep
vm.swappiness
檢測及關閉系統 swap(所有機器)
|
1
2
3
4
5
6
7
8
|
echo
"vm.min_free_kbytes = 6291456"
>>
/etc/sysctl
.conf
echo
"vm.swappiness = 0"
>>
/etc/sysctl
.conf
swapoff -a && swapon -a
sysctl -p
vi
/etc/fstab
刪除swap行
vi
/etc/fstab
/dev/mapper/vg_srv-lv_swap
swap swap defaults 0 0 --刪除
|
2.安裝numactl工具
1
2
3
4
|
在生產環境中,因為硬件機器配置往往高於需求,為了更合理規划資源,會考慮單機多實例部署TiDB或者TiKV。
NUMA 綁核工具的使用,主要為了防止 CPU 資源的爭搶,引發性能衰退。
登錄到目標節點進行安裝(以 CentOS Linux release 7.7.1908 (Core) 為例)
sudo
yum -y
install
numact
|
l 3.創建data目錄
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
vgs
lvcreate -L 2000G -n lv_data vg_srv
lvs
mkfs.ext4
/dev/vg_srv/lv_data
mkdir
/data
echo
'/dev/mapper/vg_srv-lv_data /data ext4 defaults 0 0'
>>
/etc/fstab
mount
-a
df
-h
lvcreate -L 2000G -n lv_data vg_srv
Multiple VGs found with the same name: skipping vg_srv
Use --
select
vg_uuid=<uuid>
in
place of the VG name.
vgs
VG
#PV #LV #SN Attr VSize VFree
vg_srv 1 7 0 wz--n- 3.81t <3.46t
vg_srv 1 7 0 wz--n- <893.86g 527.66g
|
4.檢查及關閉防火牆
1
2
3
4
5
6
7
8
9
|
檢查防火牆狀態(以 CentOS Linux release 7.7.1908 (Core) 為例)
sudo
firewall-cmd --state
sudo
systemctl status firewalld.service
關閉防火牆服務
sudo
systemctl stop firewalld.service
關閉防火牆自動啟動服務
sudo
systemctl disable firewalld.service
檢查防火牆狀態
sudo
systemctl status firewalld.service
|
5.檢查並關閉透明大頁
檢查結果:
15台機器都沒關閉透明大頁
1
2
3
4
5
6
7
8
9
10
|
vim
/etc/rc
.
local
touch
/var/lock/subsys/local
if
test
-f
/sys/kernel/mm/transparent_hugepage/enabled
;
then
echo
never >
/sys/kernel/mm/transparent_hugepage/enabled
fi
if
test
-f
/sys/kernel/mm/transparent_hugepage/defrag
;
then
echo
never >
/sys/kernel/mm/transparent_hugepage/defrag
fi
[root@sy-xxtikv-db09 ~]
# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
|
1
2
3
|
重啟主機,檢查透明大頁
# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
|
6.I/O 調度器
1
2
3
4
5
6
7
8
9
|
lsblk
將存儲介質的I
/O
調度器設置為noop。
對於高速SSD存儲介質,內核的I
/O
調度操作會導致性能損失。
將調度器設置為noop后,內核不做任何操作,直接將I
/O
請求下發給硬件,以獲取更好的性能。
同時,noop調度器也有較好的普適性。
為調整CPU頻率的cpufreq模塊選用performance模式。
將CPU頻率固定在其支持的最高運行頻率上,不進行動態調節,可獲取最佳的性能。
執行以下命令查看數據目錄所在磁盤的I
/O
調度器。
假設在sdb、sdc兩個磁盤上創建了數據目錄。
|
1
2
3
4
|
cat
/sys/block/sda/queue/scheduler
[noop] deadline cfq
vi
/etc/rc
.
local
echo
noop >
/sys/block/sda/queue/scheduler
|
執行以下命令查看cpufreq模塊選用的節能策略。
1
2
3
4
|
cpupower frequency-info --policy
#####確保是performance
analyzing CPU 0:
current policy: frequency should be within 1.20 GHz and 3.10 GHz.
The governor
"performance"
may decide
which
speed to use within this range.
|
7.創建tidb用戶
1
2
3
4
|
useradd
tidb
echo
"*****"
|
passwd
--stdin tidb
passwd
tidb
chown
-R tidb.tidb
/data
|
8.設置sudo
執行以下命令,將 tidb ALL=(ALL) NOPASSWD:ALL添加到文件末尾,即配置好sudo免密碼。
visudo
tidb ALL=(ALL) NOPASSWD:ALL
9.配置互信
手動配置SSH互信及sudo免密碼
中控機和其他機器配置互信
tidb+tikv
以 root 用戶依次登錄到部署目標機器創建 tidb 用戶並設置登錄密碼。(所有機器)
以 tidb 用戶登錄到中控機,執行以下命令, 創建 ssh key, 提示 Enter passphrase 時直接回車即可
cd .ssh/
ls
###ssh-keygen -t rsa 不需要在執行,已經有了
以 tidb 用戶登錄到中控機,執行以下命令。
將IP替換成你的部署目標機器 IP,按提示輸入部署目標機器 tidb 用戶密碼,執行成功后即創建好SSH互信,其他機器同理。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
su
- tidb
ssh
-copy-
id
-i .
ssh
/id_rsa
.pub 10.100.100.101
ssh
-copy-
id
-i .
ssh
/id_rsa
.pub 10.100.100.102
ssh
-copy-
id
-i .
ssh
/id_rsa
.pub 10.100.100.103
ssh
-copy-
id
-i .
ssh
/id_rsa
.pub 10.100.100.104
ssh
-copy-
id
-i .
ssh
/id_rsa
.pub 10.100.100.105
ssh
-copy-
id
-i .
ssh
/id_rsa
.pub 10.100.100.106
ssh
-copy-
id
-i .
ssh
/id_rsa
.pub 10.100.100.107
ssh
-copy-
id
-i .
ssh
/id_rsa
.pub 10.100.100.108
ssh
-copy-
id
-i .
ssh
/id_rsa
.pub 10.100.100.109
ssh
-copy-
id
-i .
ssh
/id_rsa
.pub 10.100.100.110
ssh
-copy-
id
-i .
ssh
/id_rsa
.pub 10.100.100.111
ssh
-copy-
id
-i .
ssh
/id_rsa
.pub 10.100.100.112
ssh
-copy-
id
-i .
ssh
/id_rsa
.pub 10.100.100.113
ssh
-copy-
id
-i .
ssh
/id_rsa
.pub 10.100.100.114
ssh
-copy-
id
-i .
ssh
/id_rsa
.pub 10.100.100.115
|
互信測試:
以 tidb 用戶登錄中控機,通過 ssh 的方式登錄目標機器 IP。
如果不需要輸入密碼並登錄成功,即表示 SSH 互信配置成功。
sudo測試:
1
2
|
以 tidb 用戶登錄到部署目標機器后,執行以下命令,不需要輸入密碼並切換到 root 用戶,表示 tidb 用戶
sudo
免密碼配置成功。(所有機器)
sudo
su
-
|
10.TiDB/PD機器掛載數據盤
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
tidb:
df
-h
lsblk
mkfs.ext4
/dev/sda
mkfs.ext4
/dev/nvme1n1
mkdir
-p
/data/tidb-xx/pump/
mkdir
-p
/data/tidb-xx/pd
tidb:
fs.sh
mount
-a
TiKV機器掛載數據盤
tikv:
df
-h
lsblk
mkfs.ext4
/dev/nvme1n1
mkfs.ext4
/dev/nvme2n1
mkfs.ext4
/dev/nvme3n1
mkfs.ext4
/dev/nvme4n1
mkdir
-p
/data/tidb-xx/tikv1
mkdir
-p
/data/tidb-xx/tikv2
mkdir
-p
/data/tidb-xx/tikv3
mkdir
-p
/data/tidb-xx/tikv4
tikv:
fs.sh
mount
-a
|
掛載tidb磁盤腳本如下:
1
2
3
4
5
6
|
cat
fs.sh
#!/bin/bash
A=
"`lsblk -f | grep nvme1 | awk -F ' ' '{print $3}' `"
echo
"UUID=$A /data/tidb-xx/pump/ ext4 defaults,nodelalloc,noatime 0 0"
>>
/etc/fstab
i=
"`lsblk -f | grep sda | awk -F ' ' '{print $3}' `"
echo
"UUID=$i /data/tidb-xx/pd/ ext4 defaults,nodelalloc,noatime 0 0"
>>
/etc/fstab
|
掛載tikv磁盤
1
2
3
4
5
6
7
8
9
10
11
|
[root@sy-xxtikv-db01 ~]
# cat fs.sh
#!/bin/bash
A=
"`lsblk -f | grep nvme1 | awk -F ' ' '{print $3}' `"
echo
"UUID=$A /data/tidb-xx/tikv1 ext4 defaults,nodelalloc,noatime 0 0"
>>
/etc/fstab
j=
"`lsblk -f | grep nvme2 | awk -F ' ' '{print $3}'`"
echo
"UUID=$j /data/tidb-xx/tikv2 ext4 defaults,nodelalloc,noatime 0 0"
>>
/etc/fstab
k=
"`lsblk -f | grep nvme3 | awk -F ' ' '{print $3}'`"
echo
"UUID=$k /data/tidb-xx/tikv3 ext4 defaults,nodelalloc,noatime 0 0"
>>
/etc/fstab
l=
"`lsblk -f | grep nvme4 | awk -F ' ' '{print $3}'`"
echo
"UUID=$l /data/tidb-xx/tikv4 ext4 defaults,nodelalloc,noatime 0 0"
>>
/etc/fstab
|
執行以下命令查看磁盤的唯一標識 ID_SERIAL
#udevadm info --name=/dev/sdb | grep ID_SERIAL
# 如果多個磁盤都分配了數據目錄,需要多次執行以上命令,記錄所有磁盤各自的唯一標識。
11.檢查並調整limits.conf
1
2
3
4
5
6
|
vi
/etc/security/limits
.conf
#####ADD FOR TIDB##########
tidb soft nofile 1000000
tidb hard nofile 1000000
tidb soft core unlimited
tidb soft stack 10240
|
12.安裝前再次檢查
tidb檢查
1
2
3
4
|
systemctl status fierwalld.service
systemctl status ntpd.service
cpupower frequency-info --policy
cat
/etc/selinux/config
|
tikv需檢查
1
2
3
4
5
6
7
8
9
10
11
12
|
cat
/sys/block/nvme1n1/queue/scheduler
cat
/sys/block/nvme2n1/queue/scheduler
cat
/sys/block/nvme3n1/queue/scheduler
cat
/sys/block/nvme4n1/queue/scheduler
cat
/sys/block/nvme1n1/queue/scheduler
[none] mq-deadline kyber
cat
/sys/block/nvme2n1/queue/scheduler
[none] mq-deadline kyber
cat
/sys/block/nvme3n1/queue/scheduler
[none] mq-deadline kyber
cat
/sys/block/nvme4n1/queue/scheduler
[none] mq-deadline kyber
|
tidb:
1
2
|
cat
/sys/block/sda/queue/scheduler
cat
/sys/block/nvme1n1/queue/scheduler
|
四.部署集群
部署集群(中控機)
1.准備topology_xx_v4.0.12.yaml配置文件
2.開始部署
1
2
|
# tiup cluster deploy xxpool v4.0.12-20210427./topology.yaml
tiup cluster deploy xxpool v4.0.12-20210427 topology_xx_v4.0.12.yaml --user tidb
|
注:
v4.0.12-20210427安裝包是那個版本就是寫那個版本的
如果沒有指定 -i 參數,會提示輸入遠程機器的登錄密碼,如果 key 包含 passphrase,則會提示輸入。
五.參數優化
1.啟動集群
tiup cluster start xxpool
2.參數優化
1
2
3
4
5
6
7
8
9
10
11
12
|
mysql -u root -h 10.100.100.101 -P 4000 -p *****
set
@@global.tidb_opt_insubq_to_join_and_agg=1;
set
@@global.tidb_mem_quota_query=34359738368;
set
@@global.tidb_enable_table_partition=
'off'
;
set
@@global.tidb_enable_telemetry=
'0'
;
set
@@global.tidb_disable_txn_auto_retry=
'0'
;
set
@@global.tidb_allow_batch_cop=
'0'
;
set
@@global.tidb_multi_statement_mode=
'1'
;
set
@@global.sql_mode=
'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'
;
set
@@global.tidb_skip_isolation_level_check=
'1'
;
set
@@global.tidb_retry_limit=
'100'
;
set
password
for
root@
'%'
=password(
'*******'
);
|