tidb集群部署
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( '*******' ); |