tidb集群部署


tidb集群部署

原創 國內數據庫 作者:chenoracle 時間:2021-09-01 14:50:44  136  0

###敏感數據已刪除###

一.安裝規划

 

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

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( '*******' );


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM