天天看點

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台中控機

二.伺服器規劃

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.關閉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機器挂載資料盤

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磁盤腳本如下:

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(

'*******'

);