二、TiDB部署

一、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 中,建议对操作系统进行如下的配置优化:

  1. 关闭透明大页(即 Transparent Huge Pages,缩写为 THP)。数据库的内存访问模式往往是稀疏的而非连续的。当高阶内存碎片化比较严重时,分配 THP 页面会出现较高的延迟。
  2. 将存储介质的 I/O 调度器设置为 noop。对于高速 SSD 存储介质,内核的 I/O 调度操作会导致性能损失。将调度器设置为 noop 后,内核不做任何操作,直接将 I/O 请求下发给硬件,以获取更好的性能。同时,noop 调度器也有较好的普适性。
  3. 为调整 CPU 频率的 cpufreq 模块选用 performance 模式。将 CPU 频率固定在其支持的最高运行频率上,不进行动态调节,可获取最佳的性能。

采用如下步骤检查操作系统的当前配置,并配置系统优化参数:

 

四、配置系统优化参数

方法一:使用 tuned(推荐)

  1. 执行 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 命令前,先使用 checkcheck --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)

  

  

 

上一篇:windows下Arduino IDE搭建最新版ESP8266系列模组开发环境3.0.2


下一篇:个人笔记:使用TIUP进行TIDB安装