黄东旭解析 TiDB 的核心优势
431
2024-03-18
本文档的主要内容为:
TiDB v6.1.0 在 Rocky Linux 8.7 中的离线部署
TiDB v6.1.0 -> TiDB v6.5.1 升级
TiFlash 扩缩容
Haproxy 部署
br 物理备份与恢复
基于时间点的恢复(PITR)初体验
针对 PD 及 TiKV 实例,建议为数据目录分配高性能的磁盘。
IP目录用途建议磁盘类型192.168.3.200/tidb-deploy监控组件程序目录无限制/tidb-data监控组件数据目录无限制192.168.3.201/202/203/tidb-deployTiDB Server、PD组件程序目录无限制/tidb-dataTiDB Server、PD组件数据目录TiDB Server 无限制、PD 组件建议 ***192.168.3.204/205/206/tidb-deployTiKV 组件程序目录无限制/tidb-dataTiKV组件数据目录建议 ***以下选项使用所有主机
为提高内存性能,禁用 SWAP 分区
软件选择:Minimal Install->Standard
根据官方建议,生产环境部署使用 EXT4 类型文件系统的 NVME 类型的 *** 磁盘存储 TiKV 数据文件,且为挂载选项增加 nodelalloc,noatime。
[root@h200 ~]# mkfs.ext4 /dev/sdb [root@h200 ~]# lsblk -f /dev/sdb NAME FSTYPE LABEL UUID MOUNTPOINT sdb ext4 5170c3f9-fe17-47a6-9b3a-28dbd08b24a7 [root@h200 ~]# mkdir -p /{tidb-deploy,tidb-data} [root@h200 ~]# echo "UUID=5170c3f9-fe17-47a6-9b3a-28dbd08b24a7 /tidb-data ext4 defaults,nodelalloc,noatime 0 2" >> /etc/fstab [root@h200 ~]# mount /dev/sdb绑定模式简介
模式bond 支持team 支持负载均衡容错是否需要交换机额外配置描述mode=0(balance-rr)√√√√需要(聚合强制不协商)采用 Round Robin 方式,每块 slave 网卡轮流进行工作。若其中一个 slave 网卡失效,整机网络可正常运转。mode=1(active-backup)√√×√不需要即“主备模式”,同一时刻只有一个网卡在工作,其他的网卡不工作。当主网卡失效,备用网卡开始工作。mode=2(balance-xor)√×√√需要(聚合强制不协商)mode=3(broadcast)√√×√需要(聚合强制不协商)所有 slave 网卡都会收、发相同数据包,任一张 slave 网卡故障失效,整机的网络通信仍可正常运转。mode=4(802.3ad,即 LACP)√√√√需支持 802.3ad(LACP)802.3ad 是正式的交换机连接聚合技术。 需要交换机支持802.3ad,而服务器网卡也需要支持 ethtool。mode=5(balance-tlb)√√√(发送)√不需要根据网卡负载情况,选择网卡发送数据,接收时使用当前轮询到的网卡。 该模式要求 slave 接口的网络设备驱动有某种 ethtool 支持;而且 ARP 监控不可用。 如果正在接收数据的 slave 出故障了,另一个 slave 网卡会接管 MAC 地址。mode=6(balance-alb)√×√√不需要在 mode=5 的 tlb 基础上增加了 rlb(接收负载均衡 receiveload balance)。接收负载均衡是通过 ARP 协商实现的。聚合强制不协商,即静态聚合。
team 绑定(mode=4)及 IP 设置
[root@h200 ~]# systemctl status NetworkManager1.5. ## 查看网络设备状态 [root@h200 ~]# nmcli device statusDEVICE TYPE STATE CONNECTION ens18 ethernet disconnected -- ens19 ethernet disconnected -- lo loopback unmanaged --## 添加 team0 连接 [root@h200 ~]# nmcli con add type team con-name team0 ifname team0 config "{\"runner\": {\"name\": \"loadbalance\", \"tx_hash\": [\"ip\"]}, \"link_watch\": {\"name\": \"ethtool\"}}" Connection team0 (e6d6f7d7-64ff-48f2-8285-e48e84649a14) successfully added. ## 设置 team0 连接的网络参数 [root@h200 ~]# nmcli con mod team0 ipv4.addr 192.168.3.200/24 ipv4.dns 223.5.5.5 ipv4.gateway 192.168.3.1 ipv4.method manual connection.autoconnect yesnmcli con mod team0 ipv4.addresses192.168.3.200/24 nmcli con mod team0 ipv4.gateway 192.168.3.1 nmcli con mod team0 ipv4.dns 223.5.5.5 nmcli con mod team0 ipv4.method manual nmcli con mod team0 connection.autoconnect yes ## 为 team0 连接分配网卡 ens18、ens19 [root@h200 ~]# nmcli con add type team-slave con-name team0-slave01 ifname ens18 master team0 Connection team0-slave01 (ae59e7b7-1554-4311-baca-202ace400f51) successfully added. [root@h200 ~]# nmcli con add type team-slave con-name team0-slave02 ifname ens19 master team0 Connection team0-slave02 (175dc3cc-7426-4ac8-9b15-8b49d962c92f) successfully added. ## 重载连接配置 [root@h200 ~]# nmcli con reload ## 激活 team0 网卡 [root@h200 ~]# nmcli con up team0 Connection successfully activated (master waiting for slaves) (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6) ## 查看设备状态 [root@h200 ~]# nmcli device statusDEVICE TYPE STATE CONNECTION team0 team connected team0 ens18 ethernet connected team0-slave01 ens19 ethernet connected team0-slave02 lo loopback unmanaged --## 查看 IP 地址 [root@h200 ~]# ip -4 a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536qdisc noqueue state UNKNOWN group default qlen1000 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 4: team0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 inet 192.168.3.200/24 brd 192.168.3.255 scope global noprefixroute team0 valid_lft forever preferred_lft forever[root@h200 ~]# ip addr show dev team0 [root@h200 ~]# teamdctl team0 state setup: runner: loadbalance ports: ens18 link watches: link summary: up instance[link_watch_0]: name: ethtoollink: up down count:0 ens19 link watches: link summary: up instance[link_watch_0]: name: ethtool link: up down count: 0Rocky 8.7 镜像***:https://mirrors.ustc.edu.cn/rocky/8.7/isos/x86_64/Rocky-8.7-x86_64-dvd1.iso
## 挂载光盘 ~]# mkdir -p /mnt/yum ~]# mount /dev/sr0 /mnt/yum ~]# vi /etc/yum.repos.d/Rocky-Local.repo ## 配置 repo 文件 ~]# cat > /etc/yum.repos.d/local.repo << EOF [rocky-local-base] name=Rocky Linux 8.7 - Local Base baseurl=file:///mnt/yum/BaseOS enabled=1 gpgcheck=0 [rocky-local-appstream] name=Rocky Linux 8.7 - Local AppStream baseurl=file:///mnt/yum/AppStreamenabled=1 gpgcheck=0 EOF ## 更新缓存 ~]# yum clean all ~]# yum makecache中控机(192.168.3.200)设置 ront 用户互信,免密登录各节点。
中控机生成私钥
~]# ssh-keygen -t rsa分发私钥
for NODE_IP in 192.168.3.200 192.168.3.201 192.168.3.202 192.168.3.203 192.168.3.204 192.168.3.205 192.168.3.206 do echo ">>> ${NODE_IP}"ssh-copy-id root@${NODE_IP} done免密验证
for NODE_IP in 192.168.3.200 192.168.3.201 192.168.3.202 192.168.3.203 192.168.3.204 192.168.3.205 192.168.3.206 do echo ">>> ${NODE_IP}" ssh root@${NODE_IP} "date" done >>> 192.168.3.200 Mon Apr 10 14:12:35 CST 2023 >>> 192.168.3.201 Mon Apr 10 14:12:36 CST 2023 >>> 192.168.3.202 Mon Apr10 14:12:36 CST 2023 >>> 192.168.3.203 Mon Apr 10 14:12:36 CST 2023 >>> 192.168.3.204 Mon Apr 10 14:12:36 CST 2023 >>> 192.168.3.205 Mon Apr 10 14:12:36 CST 2023 >>> 192.168.3.206 Mon Apr 10 14:12:36 CST 2023Rocky Linux 8 弃用了 ntpdate,而改用了自带的 Chrony 来同步时间。
for NODE_IP in 192.168.3.200 192.168.3.201 192.168.3.202 192.168.3.203 192.168.3.204 192.168.3.205 192.168.3.206 do echo ">>> ${NODE_IP}" ssh root@${NODE_IP} "cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime" ssh root@${NODE_IP} "dnf install chrony -y" ssh root@${NODE_IP} "echo \"server pool.ntp.org iburst\" >> /etc/chrony.conf" ssh root@${NODE_IP} "systemctl enable --now chronyd.service" ssh root@${NODE_IP} "chronyc tracking" doneTiDB 是一套分布式数据库系统,需要节点间保证时间的同步,从而确保 ACID 模型的事务线性一致性。可以通过互联网中的 pool.ntp.org 授时服务来保证节点的时间同步,离线环境将其替换为自建的 NTP 服务来解决授时。
通过 tuned 优化系统
需要在每个节点中执行如下优化动作。
## 1.获取磁盘 ID_SERIAL [root@h200 ~]# udevadm info --name=/dev/sdb | grep ID_SERIAL E: ID_SERIAL=0QEMU_QEMU_HARDDISK_drive-scsi1 E:ID_SERIAL_SHORT=drive-scsi1 ## 2.创建 tuned 策略,根据磁盘类型选择调度算法。 ~]# mkdir /etc/tuned/balanced-tidb-optimal/ ~]# cat > /etc/tuned/balanced-tidb-optimal/tuned.conf <<EOF [main] include=balanced [cpu] governor=performance [vm] transparent_hugepages=never [disk] devices_udev_regex=(ID_SERIAL=0QEMU_QEMU_HARDDISK_drive-scsi1) elevator=none EOF ## 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 禁用失败,可通过如下方式禁用。
# Define the commands to disable THP thp_cmd="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" for NODE_IP in 192.168.3.200 192.168.3.201 192.168.3.202 192.168.3.203 192.168.3.204 192.168.3.205 192.168.3.206 do echo ">>> ${NODE_IP}" echo "Disabling THP on $server..." ssh root@"${NODE_IP}" "echo \"$thp_cmd\" >> /etc/rc.local" ssh root@"${NODE_IP}" "chmod +x /etc/rc.local" ssh root@"${NODE_IP}" "source /etc/rc.local" done验证禁用 THP 结果
for NODE_IP in 192.168.3.200 192.168.3.201 192.168.3.202192.168.3.203 192.168.3.204 192.168.3.205 192.168.3.206 do echo ">>> ${NODE_IP}" ssh root@"${NODE_IP}" "cat /sys/kernel/mm/transparent_hugepage/enabled" ssh root@"${NODE_IP}" "cat /sys/kernel/mm/transparent_hugepage/defrag" done >>> 192.168.3.200 always madvise [never]always defer defer+madvise madvise[never] >>> 192.168.3.201 always madvise [never] always defer defer+madvise madvise [never] >>> 192.168.3.202 always madvise [never] always defer defer+madvise madvise [never] >>> 192.168.3.203 always madvise [never] always defer defer+madvise madvise [never] >>> 192.168.3.204 always madvise [never] always defer defer+madvise madvise [never] >>> 192.168.3.205 always madvise [never] always defer defer+madvise madvise [never] >>> 192.168.3.206 always madvise [never] always defer defer+madvise madvise [never] [root@h200 ~]#Rocky Linux 8.7 中的磁盘调度策略
Rocky Linux 内核在 blk 层加入了多队列功能,可尽情发挥 *** 的性能。开启多对列之后单队列就无法使用了,相应的单队列算法都看不见了。
[root@localhost ~]# cat /sys/block/sdb/queue/scheduler [none] mq-deadline kyber bfq单队列与多队列调度算法的对应关系如下表所示:
单队列多队列deadlinemq-deadlinecfqbfqnoopnonekybertidb 用户密码 tidb123;
【非必须】将用户 tidb 添加到 wheel 组,以使 tidb 用户可执行 su 命令切换用户。
tidb 用户登录各目标节点,确认执行 sudo - root 无需输入密码,即表示添加成功。
1.4.8.2. 免密登录tidb 用户登录中控机(192.168.3.200)执行:
~]# su - tidb ~]$ id uid=1001(tidb) gid=1001(tidb) groups=1001(tidb),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 ~]$ ssh-keygen -t rsa## 1.分发密钥 for NODE_IP in 192.168.3.200 192.168.3.201 192.168.3.202 192.168.3.203 192.168.3.204 192.168.3.205 192.168.3.206 do echo ">>> ${NODE_IP}" ssh-copy-id tidb@${NODE_IP} done版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。