tidb叢集部署

chenoracle發表於2021-09-01

###敏感資料已刪除###

一.安裝規劃

使用15臺伺服器
5臺tidb伺服器:每臺3個tidb例項+1個pd+1個pump   
10臺tikv伺服器:每臺4個tikv例項
drainer_servers      安裝在第一臺tidb機器上
grafana_servers      安裝在3臺中控機
alertmanager_servers 安裝在3臺中控機

二.伺服器規劃

業務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.關閉SWAP
2.安裝numactl工具
3.建立data目錄
4.檢查及關閉防火牆
5.檢查並關閉透明大頁
6.I/O 排程器
7.建立tidb使用者
8.設定sudo
9.配置互信
10.TiDB/PD機器掛載資料盤
11.安裝前再次檢查

1.關閉SWAP

檢測及關閉系統swap(所有機器)
cat /etc/sysctl.conf |grep vm.swappiness
檢測及關閉系統 swap(所有機器)

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工具

在生產環境中,因為硬體機器配置往往高於需求,為了更合理規劃資源,會考慮單機多例項部署TiDB或者TiKV。
NUMA 綁核工具的使用,主要為了防止 CPU 資源的爭搶,引發效能衰退。
登入到目標節點進行安裝(以 CentOS Linux release 7.7.1908 (Core) 為例)
sudo yum -y install numact

l 3.建立data目錄

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.檢查及關閉防火牆

檢查防火牆狀態(以 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臺機器都沒關閉透明大頁

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

重啟主機,檢查透明大頁
# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]

6.I/O 排程器

lsblk
將儲存介質的I/O排程器設定為noop。
對於高速SSD儲存介質,核心的I/O排程操作會導致效能損失。
將排程器設定為noop後,核心不做任何操作,直接將I/O請求下發給硬體,以獲取更好的效能。
同時,noop排程器也有較好的普適性。
為調整CPU頻率的cpufreq模組選用performance模式。
將CPU頻率固定在其支援的最高執行頻率上,不進行動態調節,可獲取最佳的效能。
執行以下命令檢視資料目錄所在磁碟的I/O排程器。
假設在sdb、sdc兩個磁碟上建立了資料目錄。

cat /sys/block/sda/queue/scheduler
[noop] deadline cfq
vi /etc/rc.local 
echo noop > /sys/block/sda/queue/scheduler

執行以下命令檢視cpufreq模組選用的節能策略。

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使用者

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互信,其他機器同理。

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測試:

以 tidb 使用者登入到部署目標機器後,執行以下命令,不需要輸入密碼並切換到 root 使用者,表示 tidb 使用者 sudo 免密碼配置成功。(所有機器)
sudo su -

10.TiDB/PD機器掛載資料盤

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磁碟指令碼如下:

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磁碟

[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

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檢查

systemctl status fierwalld.service
systemctl status ntpd.service
cpupower frequency-info --policy
cat /etc/selinux/config

tikv需檢查

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:

cat /sys/block/sda/queue/scheduler
cat /sys/block/nvme1n1/queue/scheduler

四.部署叢集

部署叢集(中控機)

1.準備topology_xx_v4.0.12.yaml配置檔案

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.引數最佳化

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

#####chenjuchao 20210901 14:30#####

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29785807/viewspace-2789852/,如需轉載,請註明出處,否則將追究法律責任。

相關文章