tidb集群部署

摘要:
NUMA绑核工具的使用,主要为了防止CPU资源的争抢,引发性能衰退。将CPU频率固定在其支持的最高运行频率上,不进行动态调节,可获取最佳的性能。执行以下命令查看数据目录所在磁盘的I/O调度器。假设在sdb、sdc两个磁盘上
tidb集群部署
原创国内数据库作者:chenoracle时间:2021-09-01 14:50:441360

###敏感数据已删除###

一.安装规划

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心跳IPservices主机名
10.10.10.10110.100.100.101tidb&pd&pumpxx-xxtidb-db01
10.10.10.10210.100.100.102tidb&pd&pumpxx-xxtidb-db02
10.10.10.10310.100.100.103tidb&pd&pumpxx-xxtidb-db03
10.10.10.10410.100.100.104tidb&pd&pumpxx-xxtidb-db04
10.10.10.10510.100.100.105tidb&pd&pumpxx-xxtidb-db05
10.10.10.10610.100.100.106tikvxx-xxtikv-db01
10.10.10.10710.100.100.107tikvxx-xxtikv-db02
10.10.10.10810.100.100.108tikvxx-xxtikv-db03
10.10.10.10910.100.100.109tikvxx-xxtikv-db04
10.10.10.11010.100.100.110tikvxx-xxtikv-db05
10.10.10.11110.100.100.111tikvxx-xxtikv-db06
10.10.10.11210.100.100.112tikvxx-xxtikv-db07
10.10.10.11310.100.100.113tikvxx-xxtikv-db08
10.10.10.11410.100.100.114tikvxx-xxtikv-db09
10.10.10.11510.100.100.115tikvxx-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|grepvm.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_swapswapswapdefaults00--删除

2.安装numactl工具

1
2
3
4
在生产环境中,因为硬件机器配置往往高于需求,为了更合理规划资源,会考虑单机多实例部署TiDB或者TiKV。
NUMA绑核工具的使用,主要为了防止CPU资源的争抢,引发性能衰退。
登录到目标节点进行安装(以CentOSLinuxrelease7.7.1908(Core)为例)
sudoyum-yinstallnumact

l3.创建data目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
vgs
lvcreate-L2000G-nlv_datavg_srv
lvs
mkfs.ext4/dev/vg_srv/lv_data
mkdir/data
echo'/dev/mapper/vg_srv-lv_data/dataext4defaults00'>>/etc/fstab
mount-a
df-h
lvcreate-L2000G-nlv_datavg_srv
MultipleVGsfoundwiththesamename:skippingvg_srv
Use--selectvg_uuid=<uuid>inplaceoftheVGname.
vgs
VG#PV#LV#SNAttrVSizeVFree
vg_srv170wz--n-3.81t<3.46t
vg_srv170wz--n-<893.86g527.66g

4.检查及关闭防火墙

1
2
3
4
5
6
7
8
9
检查防火墙状态(以CentOSLinuxrelease7.7.1908(Core)为例)
sudofirewall-cmd--state
sudosystemctlstatusfirewalld.service
关闭防火墙服务
sudosystemctlstopfirewalld.service
关闭防火墙自动启动服务
sudosystemctldisablefirewalld.service
检查防火墙状态
sudosystemctlstatusfirewalld.service

5.检查并关闭透明大页

检查结果:

15台机器都没关闭透明大页

1
2
3
4
5
6
7
8
9
10
vim/etc/rc.local
touch/var/lock/subsys/local
iftest-f/sys/kernel/mm/transparent_hugepage/enabled;then
echonever>/sys/kernel/mm/transparent_hugepage/enabled
fi
iftest-f/sys/kernel/mm/transparent_hugepage/defrag;then
echonever>/sys/kernel/mm/transparent_hugepage/defrag
fi
[root@sy-xxtikv-db09~]#cat/sys/kernel/mm/transparent_hugepage/enabled
[always]madvisenever
1
2
3
重启主机,检查透明大页
#cat/sys/kernel/mm/transparent_hugepage/enabled
alwaysmadvise[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]deadlinecfq
vi/etc/rc.local
echonoop>/sys/block/sda/queue/scheduler

执行以下命令查看cpufreq模块选用的节能策略。

1
2
3
4
cpupowerfrequency-info--policy#####确保是performance
analyzingCPU0:
currentpolicy:frequencyshouldbewithin1.20GHzand3.10GHz.
Thegovernor"performance"maydecidewhichspeedtousewithinthisrange.

7.创建tidb用户

1
2
3
4
useraddtidb
echo"*****"|passwd--stdintidb
passwdtidb
chown-Rtidb.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.pub10.100.100.101
ssh-copy-id-i.ssh/id_rsa.pub10.100.100.102
ssh-copy-id-i.ssh/id_rsa.pub10.100.100.103
ssh-copy-id-i.ssh/id_rsa.pub10.100.100.104
ssh-copy-id-i.ssh/id_rsa.pub10.100.100.105
ssh-copy-id-i.ssh/id_rsa.pub10.100.100.106
ssh-copy-id-i.ssh/id_rsa.pub10.100.100.107
ssh-copy-id-i.ssh/id_rsa.pub10.100.100.108
ssh-copy-id-i.ssh/id_rsa.pub10.100.100.109
ssh-copy-id-i.ssh/id_rsa.pub10.100.100.110
ssh-copy-id-i.ssh/id_rsa.pub10.100.100.111
ssh-copy-id-i.ssh/id_rsa.pub10.100.100.112
ssh-copy-id-i.ssh/id_rsa.pub10.100.100.113
ssh-copy-id-i.ssh/id_rsa.pub10.100.100.114
ssh-copy-id-i.ssh/id_rsa.pub10.100.100.115

互信测试:

以 tidb 用户登录中控机,通过 ssh 的方式登录目标机器 IP。

如果不需要输入密码并登录成功,即表示 SSH 互信配置成功。

sudo测试:

1
2
以tidb用户登录到部署目标机器后,执行以下命令,不需要输入密码并切换到root用户,表示tidb用户sudo免密码配置成功。(所有机器)
sudosu-

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
catfs.sh
#!/bin/bash
A="`lsblk-f|grepnvme1|awk-F'''{print$3}'`"
echo"UUID=$A/data/tidb-xx/pump/ext4defaults,nodelalloc,noatime00">>/etc/fstab
i="`lsblk-f|grepsda|awk-F'''{print$3}'`"
echo"UUID=$i/data/tidb-xx/pd/ext4defaults,nodelalloc,noatime00">>/etc/fstab

挂载tikv磁盘

1
2
3
4
5
6
7
8
9
10
11
[root@sy-xxtikv-db01~]#catfs.sh
#!/bin/bash
A="`lsblk-f|grepnvme1|awk-F'''{print$3}'`"
echo"UUID=$A/data/tidb-xx/tikv1ext4defaults,nodelalloc,noatime00">>/etc/fstab
j="`lsblk-f|grepnvme2|awk-F'''{print$3}'`"
echo"UUID=$j/data/tidb-xx/tikv2ext4defaults,nodelalloc,noatime00">>/etc/fstab
k="`lsblk-f|grepnvme3|awk-F'''{print$3}'`"
echo"UUID=$k/data/tidb-xx/tikv3ext4defaults,nodelalloc,noatime00">>/etc/fstab
l="`lsblk-f|grepnvme4|awk-F'''{print$3}'`"
echo"UUID=$l/data/tidb-xx/tikv4ext4defaults,nodelalloc,noatime00">>/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
#####ADDFORTIDB##########
tidbsoftnofile1000000
tidbhardnofile1000000
tidbsoftcoreunlimited
tidbsoftstack10240

12.安装前再次检查

tidb检查

1
2
3
4
systemctlstatusfierwalld.service
systemctlstatusntpd.service
cpupowerfrequency-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-deadlinekyber
cat/sys/block/nvme2n1/queue/scheduler
[none]mq-deadlinekyber
cat/sys/block/nvme3n1/queue/scheduler
[none]mq-deadlinekyber
cat/sys/block/nvme4n1/queue/scheduler
[none]mq-deadlinekyber

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
#tiupclusterdeployxxpoolv4.0.12-20210427./topology.yaml
tiupclusterdeployxxpoolv4.0.12-20210427topology_xx_v4.0.12.yaml--usertidb

注:

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-uroot-h10.100.100.101-P4000-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';
setpasswordforroot@'%'=password('*******');

免责声明:文章转载自《tidb集群部署》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Laravel框架安装RabbitMQ消息中间件步骤assert用法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux的PCI驱动分析

1. 关键数据结构 PCI设备上有三种地址空间:PCI的I/O空间、PCI的存储空间和PCI的配置空间。CPU可以访问PCI设备上的所有地址空间,其中I/O空间和存储空间提供给设备驱动程序使用,而配置空间则由Linux内核中的PCI初始化代码使用。内核在启动时负责对所有PCI设备进行初始化,配置好所有的PCI设备,包括中断号以及I/O基址,并在文件/pro...

[转] SSH两种登录方式(公私钥)解析

转自:https://www.cnblogs.com/hukey/p/6248468.html SSH登录方式主要分为两种: 1. 用户名密码验证方式 说明:   (1) 当客户端发起ssh请求,服务器会把自己的公钥发送给用户;   (2) 用户会根据服务器发来的公钥对密码进行加密;   (3) 加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码...

树莓派3B+(一)

一:安装raspbian系统   介绍:Raspbian是为树莓派设计,基于Debian的操作系统,由一个小团队开发。其不隶属于树莓派基金会,但被列为官方支持的操作系统。   下载地址:https://www.raspberrypi.org/downloads/ (建议用IDM下会快一点)   IDM破解 永久有效链接: https://pan.baidu...

shell中的dd命令使用详解

一、dd命令的解释 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。 注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512;c=1;k=1024;w=2 参数注释: 1. if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file > 2. of=文件名:输出文件名,缺省为标准输出。即指...

openssh交叉编译

下载源码包: openssh http://www.openssh.com/portable.html openssl http://www.openssl.org/source zlib    http://www.zlib.net/ 推荐版本:zlib-1.2.11.tar.gz,openssl-1.0.2q.tar.gz,openssh-8.2p1....

MYSQL与TiDB的执行计划

前言 这里采用了tpc-h一个数据库的数据量来进行查询计划的对比。并借助tpc-h中的22条查询语句进行执行计划分析。 mysql采用的是标准安装,TiDB采用的是单机测试版,这里的性能结果不能说明其性能差异 本文章主要目的是对比Mysql与TiDB在执行sql查询时的差异。 mysql版本5.7 TiDB版本v2.0.0-rc.4 准备阶段 数据导入Ti...