一、TiDB环境与系统配置检查
注:
在 TiKV 部署目标机器上添加数据盘 EXT4 文件系统挂载参数
生产环境部署,建议使用 EXT4 类型文件系统的 NVME 类型的 SSD 磁盘存储 TiKV 数据文件。这个配置方案为最佳实施方案,其可靠性、安全性、稳定性已经在大量线上场景中得到证实。
注意: 如果你的数据盘已经格式化成 ext4 并挂载了磁盘,可先执行 umount /dev/nvme0n1p1 命令卸载,从编辑 /etc/fstab 文件步骤开始执行,添加挂载参数重新挂载即可。
TIDB初始化:
1. 查看数据盘。
fdisk -l
2. 创建分区。
parted -s -a optimal /dev/sdb mklabel gpt -- mkpart primary ext4 1 -1
3. 格式化文件系统。
mkfs.ext4 /dev/sdb1
4. 查看数据盘分区 UUID。
[root@localhost ~]# lsblk -f NAME FSTYPE LABEL UUID MOUNTPOINT sdb └─sdb1 ext4 e40b45e1-0199-4363-a6cd-a825c5b62fa4 sr0 iso9660 CentOS 7 x86_64 2020-11-04-11-36-43-00 sda ├─sda2 LVM2_member WrMP0Z-sQ6c-QWiI-auwo-9OxO-UTWK-TZUMW2 │ ├─centos-swap swap f62de652-6b88-4c06-8515-68359aaf574c [SWAP] │ └─centos-root xfs 57abdd87-df42-4dd0-84c2-49b183b59d45 / └─sda1 xfs 8bc11052-0911-4794-879d-3c8ea8076ce3 /boo
5. 编辑 /etc/fstab
文件,添加 nodelalloc
挂载参数。
vi /etc/fstab UUID=e40b45e1-0199-4363-a6cd-a825c5b62fa4 /data1 ext4 defaults,nodelalloc,noatime 0 2 # 这里的UUID填写数据盘sdb1
6. 挂载数据盘。
mkdir /data1 && \ mount -a
7. 执行以下命令,如果文件系统为 ext4,并且挂载参数中包含 nodelalloc
,则表示已生效。
[root@localhost ~]# mount -t ext4 /dev/sdb1 on /data1 type ext4 (rw,noatime,nodelalloc)
二、检测及关闭系统 swap
本段介绍 swap 关闭方法。TiDB 运行需要有足够的内存,并且不建议使用 swap 作为内存不足的缓冲,这会降低性能。因此建议永久关闭系统 swap,并且不要使用 swapoff -a
方式关闭,否则重启机器后该操作会失效。
建议执行以下命令关闭系统 swap:
echo "vm.swappiness = 0">> /etc/sysctl.conf swapoff -a && swapon -a sysctl -p
三、检查和配置操作系统优化参数
在生产系统的 TiDB 中,建议对操作系统进行如下的配置优化:
- 关闭透明大页(即 Transparent Huge Pages,缩写为 THP)。数据库的内存访问模式往往是稀疏的而非连续的。当高阶内存碎片化比较严重时,分配 THP 页面会出现较高的延迟。
- 将存储介质的 I/O 调度器设置为 noop。对于高速 SSD 存储介质,内核的 I/O 调度操作会导致性能损失。将调度器设置为 noop 后,内核不做任何操作,直接将 I/O 请求下发给硬件,以获取更好的性能。同时,noop 调度器也有较好的普适性。
- 为调整 CPU 频率的 cpufreq 模块选用 performance 模式。将 CPU 频率固定在其支持的最高运行频率上,不进行动态调节,可获取最佳的性能。
采用如下步骤检查操作系统的当前配置,并配置系统优化参数:
四、配置系统优化参数
方法一:使用 tuned(推荐)
-
执行
tuned-adm list
命令查看当前操作系统的 tuned 策略。
tuned-adm list
Available profiles: - balanced - General non-specialized tuned profile - desktop - Optimize for the desktop use-case - hpc-compute - Optimize for HPC compute workloads - latency-performance - Optimize for deterministic performance at the cost of increased power consumption - network-latency - Optimize for deterministic performance at the cost of increased power consumption, focused on low latency network performance - network-throughput - Optimize for streaming network throughput, generally only necessary on older CPUs or 40G+ networks - powersave - Optimize for low power consumption - throughput-performance - Broadly applicable tuning that provides excellent performance across a variety of common server workloads - virtual-guest - Optimize for running inside a virtual guest - virtual-host - Optimize for running KVM guests Current active profile: balanced
Current active profile: balanced
表示当前操作系统的 tuned 策略使用 balanced,建议在当前策略的基础上添加操作系统优化配置。
创建新的 tuned 策略。
mkdir /etc/tuned/balanced-tidb-optimal/ vi /etc/tuned/balanced-tidb-optimal/tuned.conf
[main] include=balanced [cpu] governor=performance [vm] transparent_hugepages=never [disk] devices_udev_regex=(ID_SERIAL=36d0946606d79f90025f3e09a0c1fc035)|(ID_SERIAL=36d0946606d79f90025f3e09a0c1f9e81) elevator=noop
include=balanced
表示在现有的 balanced 策略基础上添加操作系统优化配置。
应用新的 tuned 策略。
tuned-adm profile balanced-tidb-optimal
执行以下命令验证透明大页的状态。
cat /sys/kernel/mm/transparent_hugepage/enabled always madvise [never]
执行以下命令修改 sysctl 参数。
echo "fs.file-max = 1000000">> /etc/sysctl.conf echo "net.core.somaxconn = 32768">> /etc/sysctl.conf echo "net.ipv4.tcp_tw_recycle = 0">> /etc/sysctl.conf echo "net.ipv4.tcp_syncookies = 0">> /etc/sysctl.conf echo "vm.overcommit_memory = 1">> /etc/sysctl.conf sysctl -p
执行以下命令配置用户的 limits.conf 文件。
cat << EOF >>/etc/security/limits.conf tidb soft nofile 1000000 tidb hard nofile 1000000 tidb soft stack 32768 tidb hard stack 32768 EOF
五、在中控机上安装 TiUP 组件
1. 执行如下命令安装 TiUP 工具:
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
2. 重新声明全局环境变量:
source .bash_profile
3. 确认 TiUP 工具是否安装:
which tiup
4. 安装 TiUP cluster 组件
tiup cluster
5. 初始化集群拓扑文件
tiup cluster template > topology.yaml
示例:
[root@localhost ~]# cat topology.yaml global: user: "tidb" ssh_port: 22 deploy_dir: "/data1/tidb-deploy" data_dir: "/data1/tidb-data" server_configs: {} pd_servers: - host: 192.168.8.23 - host: 192.168.8.24 - host: 192.168.8.25 tidb_servers: - host: 192.168.8.23 - host: 192.168.8.24 - host: 192.168.8.25 tikv_servers: - host: 192.168.8.23 - host: 192.168.8.24 - host: 192.168.8.25 monitoring_servers: - host: 192.168.8.25 grafana_servers: - host: 192.168.8.25 alertmanager_servers: - host: 192.168.8.25
6. 执行 deploy 命令前,先使用 check
及 check --apply
命令,检查和自动修复集群存在的潜在风险:
tiup cluster check ./topology.yaml --user root [-p] [-i /home/root/.ssh/gcp_rsa] tiup cluster check ./topology.yaml --apply --user root [-p] [-i /home/root/.ssh/gcp_rsa] tiup cluster check ./topology.yaml --user root -p 密码
执行 deploy
命令部署 TiDB 集群:
tiup cluster deploy tidb-test v5.0.0 ./topology.yaml --user root -p 密码
[root@localhost ~]# tiup cluster list Starting component `cluster`: /root/.tiup/components/cluster/v1.5.6/tiup-cluster list Name User Version Path PrivateKey ---- ---- ------- ---- ---------- tidb-test tidb v5.1.0 /root/.tiup/storage/cluster/clusters/tidb-test /root/.tiup/storage/cluster/clusters/tidb-test/ssh/id_rsa
7. 检查部署的 TiDB 集群情况
tiup cluster display tidb-test
8. 启动集群
tiup cluster start tidb-test
9. 使用MySQL登陆(并修改密码)
[root@localhost ~]# mysql -h 192.168.8.23 -P 4000 -u root MySQL [(none)]> SET PASSWORD FOR 'root'@'%' = '123456'; Query OK, 0 rows affected (0.14 sec)