###敏感数据已删除###
一.安装规划
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| 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 swapswapdefaults00--删除 |
2.安装numactl工具
1 2 3 4 | 在生产环境中,因为硬件机器配置往往高于需求,为了更合理规划资源,会考虑单机多实例部署TiDB或者TiKV。 NUMA绑核工具的使用,主要为了防止CPU资源的争抢,引发性能衰退。 登录到目标节点进行安装(以CentOSLinuxrelease7.7.1908(Core)为例) sudo yum-y install numact |
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-- select vg_uuid=<uuid> in placeoftheVGname. 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)为例) sudo firewall-cmd--state sudo systemctlstatusfirewalld.service 关闭防火墙服务 sudo systemctlstopfirewalld.service 关闭防火墙自动启动服务 sudo systemctldisablefirewalld.service 检查防火墙状态 sudo systemctlstatusfirewalld.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]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 echo noop> /sys/block/sda/queue/scheduler |
执行以下命令查看cpufreq模块选用的节能策略。
1 2 3 4 | cpupowerfrequency-info--policy #####确保是performance analyzingCPU0: currentpolicy:frequencyshouldbewithin1.20GHzand3.10GHz. Thegovernor "performance" maydecide which speedtousewithinthisrange. |
7.创建tidb用户
1 2 3 4 | useradd tidb echo "*****" | passwd --stdintidb passwd tidb 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 免密码配置成功。(所有机器) 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|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' ; set password for root@ '%' =password( '*******' ); |