黄东旭解析 TiDB 的核心优势
663
2024-04-01
本文档的主要内容为:
openEuler 服务器主机设置
离线部署 TiDB v6.1.0(1监控/3TiDB/3PD/3TiKV)以及部署过程中踩到的坑。其中,TiDB 与 PD 为单机混合部署,设置 numa 绑核。
TiUniManager 离线部署与升级,以及部署升级过程中踩到的坑。
TiUniManager 接管存量 TiDB v6.1.0 集群。
【注意事项】
文档中为减少文字篇幅,所有软件包都是通过 wget 工具在线下载。在离线生产环境中,需通过其他方式准备软件包。
openEuler 22.03 LTS 不在 TiDB 及 TiUniManager 支持列表中,因此,在部署时需要做些细微调整,以避坑。本文档总结了部分踩到的坑,仅供参考。
针对 PD 及 TiKV 实例,建议为数据目录分配高性能的磁盘。
IP目录用途建议磁盘类型192.168.3.220/tidb-deploy监控组件程序目录无限制/tidb-data监控组件数据目录无限制/em-deployTiUniManager 组件程序目录无限制/em-dataTiUniManager 组件数据目录无限制192.168.3.221/222/223/tidb-deployTiDB Server、PD组件程序目录无限制/tidb-dataTiDB Server、PD组件数据目录TiDB Server 无限制、PD 组件建议 ***192.168.3.224/225/226/tidb-deployTiKV 组件程序目录无限制/tidb-dataTiKV组件数据目录建议 NVME 或 ***以下选项使用所有主机
为提高内存性能,禁用 SWAP 分区
软件选择:Minimal Install->Standard
数据盘格式化为 ext4,且为挂载选项增加 nodelalloc,noatime
## 1. 查看数据盘 UUID ~]# lsblk -f /dev/sdb NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS sdb └─sdb1 ext4 1.0 5d4f7d41-0673-45c7-a118-97f2d614a35f 29.7G 0% /tidb-data ## 2. 挂载数据盘,增加 nodelalloc,noatime 选项 ~]# echo "UUID=5d4f7d41-0673-45c7-a118-97f2d614a35f /tidb-data ext4 defaults,nodelalloc,noatime 0 2" >> /etc/fstab中控机设置 ront 用户互信,免密登录各节点。
## 生成 root 密钥 ~]# ssh-keygen -t rsa## 批量设置 root 互信 ~]# for NODE_IP in 192.168.3.220 192.168.3.221 192.168.3.222 192.168.3.223 192.168.3.224 192.168.3.225 192.168.3.226 do echo ">>> ${NODE_IP}" ssh-copy-id root@${NODE_IP} done一起执行 swapoff -a 和 swapon -a 命令是为了刷新 swap,将 swap 里的数据转储回内存,并清空 swap 里的数据。
TiDB 是一套分布式数据库系统,需要节点间保证时间的同步,从而确保 ACID 模型的事务线性一致性。可以通过互联网中的 pool.ntp.org授时服务来保证节点的时间同步,离线环境将其替换为自建的 NTP 服务来解决授时。
通过 tuned 优化系统
## 1. 获取磁盘 ID_SERIAL ~]# udevadm info --name=/dev/sdb | grep ID_SERIAL E: ID_SERIAL=0QEMU_QEMU_HARDDISK_drive-scsi1 ## 2. 创建 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=0QEMU_QEMU_HARDDISK_drive-scsi1) elevator=mq-deadline ## 3. 应用 tuned 策略 ~]# tuned-adm profile balanced-tidb-optimal ## 4. 验证优化结果 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled && cat /sys/kernel/mm/transparent_hugepage/defrag ~]# cat /sys/block/sdb/queue/scheduler ~]# cpupower frequency-info --policy多个磁盘的 ID_SERIAL 用竖线分割,如:
[disk] devices_udev_regex=(ID_SERIAL=0QEMU_QEMU_HARDDISK_drive-scsi1)|(ID_SERIAL=36d0946606d79f90025f3e09a0c1f9e81) elevator=none若 THP 禁用失败,可通过如下方式禁用。
## 1. 立即禁用 THP ~]# echo never > /sys/kernel/mm/transparent_hugepage/enabled && echo never > /sys/kernel/mm/transparent_hugepage/defrag ## 2. 开机禁用 THP ~]# cat >> /etc/rc.d/rc.local << EOF # Disable Transparent HugePages 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 EOF ~]# chmod +x /etc/rc.d/rc.local【注意事项】
openEuler 中 /etc/rc.d/rc.local文件默认权限为-rw-r--r--,需要为其增加执行权限 x,否则无法开机自动禁用 THP。
openEuler 中的磁盘调度策略
openEuler 内核在 blk 层加入了多队列功能,可尽情发挥 *** 的性能。开启多对列之后单队列就无法使用了,相应的单队列算法都看不见了。
~]# cat /sys/block/sdb/queue/scheduler [none] mq-deadline kyber bfq单队列与多队列调度算法的对应关系如下表所示:
单队列多队列deadlinemy-deadlinecfqbfqnoopnonekybertidb 用户密码 tidb123;
【非必须】将用户 tidb 添加到 wheel 组,以使 tidb 用户可执行 su 命令切换用户。
tidb用户登录各目标节点,确认执行sudo - root无需输入密码,即表示添加成功。
1.4.7.2. 免密登录tidb 用户登录中控机(192.168.3.220)执行:
~]$ id uid=1001(tidb) gid=1001(tidb) groups=1001(tidb),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 ## 为 tidb 生成密钥 ~]$ ssh-keygen -t rsa## 1. 分发密钥 for NODE_IP in 192.168.3.220 192.168.3.221 192.168.3.222 192.168.3.223 192.168.3.224 192.168.3.225 192.168.3.226 do echo ">>> ${NODE_IP}" ssh-copy-id tidb@${NODE_IP} done ## 2. 验证免密登录 for NODE_IP in 192.168.3.220 192.168.3.221 192.168.3.222 192.168.3.223 192.168.3.224 192.168.3.225 192.168.3.226 do echo ">>> ${NODE_IP}" ssh tidb@${NODE_IP} "date" done针对混合部署的服务器,为避免组件之间的资源争用,建议对组件进行 NUMA 绑核。
1.4.8.1. 安装 numactl~]# for NODE_IP in 192.168.3.220 192.168.3.221 192.168.3.222 192.168.3.223 192.168.3.224 192.168.3.225 192.168.3.226 do echo ">>> ${NODE_IP}" ssh root@${NODE_IP} "mount -o loop /dev/cdrom /mnt/yum" ssh root@${NODE_IP} "yum -y install numactl" done可直接在 tidb 官网下载 TiDB 软件包,该软件包中包含 TiUP 组件。将 TiDB 软件包上传至中控机(192.168.3.220)。
https://pingcap.com/zh/product#SelectProduct
## 1. 下载 TiDB 离线镜像包 ~]$ export version=v6.1.0 ~]$ wget https://download.pingcap.org/tidb-community-server-${version}-linux-amd64.tar.gz ~]$ chown tidb:tidb tidb-community-server-${version}-linux-amd64.tar.gz ## 2. 部署 TiUP 组件 ~]$ tar -xzvf tidb-community-server-${version}-linux-amd64.tar.gz ~]$ sh tidb-community-server-${version}-linux-amd64/local_install.sh ~]$ source /home/tidb/.bash_profile ## 3. 查看离线镜像中的组件 ~]$ tiup listlocal_install.sh 脚本会自动执行 tiup mirror set tidb-community-server-${version}-linux-amd64 命令将当前镜像源设置为本地文件夹 tidb-community-server-${version}-linux-amd64。若需切换到在线环境,可执行 tiup mirror set https://tiup-mirrors.pingcap.com。
生成的默认拓扑配置,根据实际环境修改如下:
global: user: "tidb" ssh_port: 22 deploy_dir: "/tidb-deploy" data_dir: "/tidb-data" arch: "amd64" server_configs: tidb: new_collations_enabled_on_first_bootstrap: true # 配置项将写入 /tidb-deploy/tidb-4000/conf/tidb.toml 文件中 monitored: node_exporter_port: 9100 blackbox_exporter_port: 9115 pd_servers: - host: 192.168.3.221 numa_node: "1" # 配置项将写入 /tidb-deploy/pd-2379/scripts/run_pd.sh 脚本中 - host: 192.168.3.222 numa_node: "1" - host: 192.168.3.223 numa_node: "1" tidb_servers: - host: 192.168.3.221 numa_node: "0" - host: 192.168.3.222 numa_node: "0" - host: 192.168.3.223 numa_node: "0" tikv_servers: - host: 192.168.3.224 - host: 192.168.3.225 - host: 192.168.3.226 monitoring_servers: - host: 192.168.3.220 grafana_servers: - host: 192.168.3.220 alertmanager_servers: - host: 192.168.3.220new_collations_enabled_on_first_bootstrap
从 TiDB v4.0 开始,引入了 TiDB 配置项 new_collations_enabled_on_first_bootstrap,用于启用新的排序框架。该配置项只能在TiDB集群初始化时设置,后期修改无效。
在 v4.x-v5.x 中,该配置项默认为 false,即不启用新排序框架,仅支持 utf8mb4_bin(大小写敏感)排序规则,无法更改。
从 TiDB v6.0.0 版本开始,该配置项的默认值变更为 true ,即在新的排序规则框架下,TiDB 能够支持 utf8_general_ci、utf8mb4_general_ci、utf8_unicode_ci、utf8mb4_unicode_ci、gbk_chinese_ci 和 gbk_bin 这几种排序规则,与 MySQL 兼容。
混合部署的 numa 绑核
当前环境 TiDB 与 PD 组件为混合部署,因此为避免资源争用,对其启用 NUMA 绑核。
## 查看 numa 信息 ~]# numactl --hardware available: 2 nodes (0-1) node 0 cpus: 0 1 2 3 node 0 size: 1978 MB node 0 free: 1773 MB node 1 cpus: 4 5 6 7 node 1 size: 1438 MB node 1 free: 1082 MB node distances: node 0 1 0: 10 20 1: 20 10numa 绑核配置,不能设置在全局配置 server_configs 中,否则无法识别。
生产环境,需确保所有检查项都为 pass
## 1. 环境检查 ~]$ tiup cluster check ./topology.yaml --user tidb ... Node Check Result Message ---- ----- ------ ------- 192.168.3.223 os-version Pass OS is CentOS Linux 7 (Core) 7.9.2009 192.168.3.223 cpu-cores Pass number of CPU cores / threads: 4 192.168.3.223 memory Pass memory size is 4096MB ... 省略部分内容 ... 192.168.3.222 command Pass numactl: policy: default ## 2. 自动修复 ~]$ tiup cluster check ./topology.yaml --apply --user root【注意事项】
因 openEuler 不在官方支持的 OS 列表中,因此会有os-version Fail os vendor openEuler not supported 的报错提示,可忽略
可通过 tiup cluster start kruidb-cluster --init 在初始化集群时,为 root 用户生成随机密码(只显示一次)。省略 --init 参数,则为root用户指定空密码。
可通过 tiup cluster show-config <集群名> 查看集群配置;通过 tiup cluster edit-config <集群名> 修改集群运行的配置信息,该命令会自动汇总各节点的配置项。
~]$ tiup cluster show-config kruidb global: user: tidb ssh_port: 22 ssh_type: builtin deploy_dir: /tidb-deploy data_dir: /tidb-data os: linux arch: amd64 monitored: node_exporter_port: 9100 blackbox_exporter_port: 9115 deploy_dir: /tidb-deploy/monitor-9100 data_dir: /tidb-data/monitor-9100 log_dir: /tidb-deploy/monitor-9100/log server_configs: tidb: new_collations_enabled_on_first_bootstrap: true # ... 省略部分配置内容 ... tidb_servers: - host: 192.168.3.221 ssh_port: 22 port: 4000 status_port: 10080 deploy_dir: /tidb-deploy/tidb-4000 log_dir: /tidb-deploy/tidb-4000/log numa_node: "0" arch: amd64 os: linux - host: 192.168.3.222 # ... 省略部分配置内容 ... - host: 192.168.3.223 # ... 省略部分配置内容 ... tikv_servers: - host: 192.168.3.224 ssh_port: 22 port: 20160 status_port: 20180 deploy_dir: /tidb-deploy/tikv-20160 data_dir: /tidb-data/tikv-20160 log_dir: /tidb-deploy/tikv-20160/log arch: amd64 os: linux - host: 192.168.3.225 # ... 省略部分配置内容 ... - host: 192.168.3.226 # ... 省略部分配置内容 ... pd_servers: - host: 192.168.3.221 ssh_port: 22 name: pd-192.168.3.221-2379 client_port: 2379 peer_port: 2380 deploy_dir: /tidb-deploy/pd-237版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。