TiDB 6.1、6.5在Rocky Linux 8中的部署升级与PITR体验

网友投稿 666 2024-02-25



本文档的主要内容为:

TiDB 6.1、6.5在Rocky Linux 8中的部署升级与PITR体验

TiDB v6.1.0 在 Rocky Linux 8.7 中的离线部署

TiDB v6.1.0 -> TiDB v6.5.1 升级

TiFlash 扩缩容

Haproxy 部署

br 物理备份与恢复

基于时间点的恢复(PITR)初体验

1. 服务器准备

1.1. 拓扑规划

实例实例数量推荐配置OSIP说明Monitoring&Grafana&TiUniManager132C/64G/SAS/千兆网卡Rocky Linux 8.7192.168.3.200中控机,用于部署 TiUP、br 等生态工具。TiDB/PD3/364C/256G/***/万兆网卡*2Rocky Linux 8.7192.168.3.201/202/203TiDB Server 与 PD 混合部署,启用 NUMA 绑核,以避免资源争用。TiKV364C/256G/***/万兆网卡*2Rocky Linux 8.7192.168.3.204/205/206

1.2. 目录规划

针对 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组件数据目录建议 ***

1.3. 系统安装

以下选项使用所有主机

为提高内存性能,禁用 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

1.4. 主机配置

1.4.1. 网卡绑定

绑定模式简介

模式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: 0

1.4.2. 配置本地源

Rocky 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

1.4.3. ssh 互信及免密登录

中控机(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 2023

1.4.4. 关闭 Swap、内核优化、SELinux、防火墙

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} "echo \"vm.swappiness = 0\">> /etc/sysctl.conf" ssh root@${NODE_IP} "sed -i /swap/ s/^/#/ /etc/fstab" ssh root@${NODE_IP} "swapoff -a" ssh root@${NODE_IP} "echo\"fs.file-max = 1000000\" >> /etc/sysctl.conf" ssh root@${NODE_IP} "echo \"net.core.somaxconn = 32768\" >> /etc/sysctl.conf" ssh root@${NODE_IP} "echo \"net.ipv4.tcp_syncookies = 0\" >> /etc/sysctl.conf" ssh root@${NODE_IP} "echo \"vm.overcommit_memory = 1\" >> /etc/sysctl.conf" ssh root@${NODE_IP} "sysctl -p" sshroot@${NODE_IP} "setenforce 0" ssh root@${NODE_IP} "sed -i s#SELINUX=enforcing#SELINUX=disabled#g /etc/selinux/config" ssh root@${NODE_IP} "sed -i s/^SELINUX=.*/SELINUX=disabled/ /etc/selinux/config" ssh root@${NODE_IP} "systemctl disable --now firewalld.service" done

1.4.5. 软件包安装

for NODE_IP in 192.168.3.200 192.168.3.201192.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} "dnf -y install numactl tar chrony" done

1.4.6. 时间同步

Rocky 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" done

TiDB 是一套分布式数据库系统,需要节点间保证时间的同步,从而确保 ACID 模型的事务线性一致性。可以通过互联网中的 pool.ntp.org 授时服务来保证节点的时间同步,离线环境将其替换为自建的 NTP 服务来解决授时。

1.4.7. 系统优化

通过 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-deadlinecfqbfqnoopnonekyber

1.4.8. 用户创建及资源限制

1.4.8.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 root@${NODE_IP} "useradd -u 1001 tidb -G wheel && echo tidb123 |passwd --stdin tidb" ssh root@${NODE_IP} "echo \"tidb ALL=(ALL) NOPASSWD: ALL\" >> /etc/sudoers" ssh root@${NODE_IP} "echo \"tidb soft nofile 1000000\" >> /etc/security/limits.conf" ssh root@${NODE_IP} "echo \"tidb hard nofile 1000000\" >> /etc/security/limits.conf" ssh root@${NODE_IP} "echo \"tidb soft stack 32768\" >> /etc/security/limits.conf" ssh root@${NODE_IP} "echo \"tidb hard stack 32768\" >> /etc/security/limits.conf" done

tidb 用户密码 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小时内删除侵权内容。

上一篇:Linux 6如何使tmpfs生效
下一篇:Oracle如何实现冷备份及其恢复
相关文章