新手指南:TiDB跨版本升级的首次尝试探索

网友投稿 639 2024-03-09



升级背景

原集群版本过低,运维难度大,决定进行版本升级

新手指南:TiDB跨版本升级的首次尝试探索

经过测试发现,v5.4.0版本相对于v3.0.10版本性能有很大提升

决定将TiDB v3.0.10升级到TiDB v5.4.0

升级方式

本次升级采用Dumpling+Lighting+TiDB binlog进行

【升级方式划分】 大体分为停机升级不停机升级根据字面意思理解,我们可以根据业务的要求来进行选择,如果业务允许进行停机升级,那相对来说我们选择停机升级 会更加的安全,快速,如果业务不允许停机的话我们主要选择就是不停机升级

不停机升级根据官方文档来看,需要通过特定方式来进行滚动升级 滚动升级对于我们来说或许是一个很好的选择,但问题就是: 1、业务需求回滚,我们的回滚方案通常需要针对于全备+增量的方式来进行回滚,回滚进度较慢 2、因版本差距过大的话,连续进行滚动升级,不可控因素增多 3、老版本通常采用Ansible安装,又想让新版本适用tiup进行管理,操作起来较为复杂 #因为种种因素原因,最终决定采用Dumpling+Lightning+TiDB Binlog的方式,可以有效的规避一系列繁琐问题。

获取相关信息

创建TiDB v5.3.0的目标集群

Dumpling对原集群进行数据导出

Lightning对目标集群进行数据导入

启动Drainer进行增量同步

sync-diff-inspector进行数据校验

搭建回滚链路

切换业务

升级步骤

Ansible安装3.0.8版本TiDB

一、在中控机上安装系统依赖包yum -y install epel-release git curl sshpass && \ yum -y install python2-pip二、在中控机上创建用户,并生成SSH Keyygen -t rsa三、在中控机器上下载TiDB Ansible1、以创建的用户登录中控机器并进入到/home/tidb目录,使用命令从TiDB Ansible项目上下载相应版本 git clone -b 版本 https://github.com/pingcap/tidb-ansible.git #部署和升级 TiDB 集群需使用对应的 tidb-ansible 版本,通过改 inventory.ini 文件中的版本来混用可能会产生一些错误。 #请务必按文档操作,将 tidb-ansible 下载到 /home/tidb 目录下,权限为 tidb 用户,不要下载到 /root 下,否则会遇到权限问题。四、在中控机器上安装TiDB Ansible及其依赖 2、查看Ansible的版本 ansible --version五、在中控机器上配置部署机器SSH互信及sudo规则k六、在部署目标机器上安装NTP服务七、在部署的目标机器上配置CPUfreq调节器模式#为了让 CPU 发挥最大性能,请将 CPUfreq 调节器模式设置批量设置 ansible -i hosts.ini all -m shell -a "cpupower frequency-set --governor performance" -u tidb -b八、在部署的目标机器上添加数据盘ext4文件系统挂在参数#使用 root 用户登录目标机器,将部署目标机器数据盘格式化成 ext4 文件系统,挂载时添加 nodelalloc 和 noatime 挂载参数。nodelalloc 是必选参数,否则 Ansible 安装时检测无法通过;noatime 是可选建议参数 ,nodelalloc,data=ordered)九、编辑inventory.ini文件,分配机器资源#请使用内网 IP 来部署集群,如果部署目标机器 SSH 端口非默认的 22 端口,需添加 ansible_port 变量,如 TiDB1 ansible_host=172.16.10.1 ansible_port=5555。 1、单机单TiKV实例集群拓扑 Name Host IP             Services node1 172.16.10.1         PD1, TiDB1 node2 172.16.10.2         PD2, Ti*** node3 172.16.10.3         PD3 node4 172.16.10.4         TiKV1 node5 172.16.10.5         TiKV2 拓扑 Name Host IP Services node1 172.16.10.1 PD1, TiDB1 node2 172.16.10.2 PD2, Ti*** node3 172.16.10.3 PD3 node4 172.16.10.4 TiKV1-1, TiKV1-2 [tikv_servers] TiKV1-1 ansible_host=172.16.10.4 deploy_dir=/data1/deploy tikv_port=20171 labels="host=tikv1" TiKV1-2 ansible_host=172.16.10.4 deploy_dir=/data2/deploy tikv_port=20172 labels="host=tikv1" TiKV2-1 ansible_host=172.16.10.5 deploy_dir=/data1/deploy tikv_port=20171 labels="host=tikv2" TiKV2-2 ansible_host=172.16.10.5 deploy_dir=/data2/deploy tikv_port=20172 labels="host=tikv2" TiKV3-1 ansible_host=172.16.10.6 deploy_dir=/data1/deploy tikvansible_host=172.16.10.4 deploy_dir=/data1/deploy tikv_port=20171 tikv_status_port=20181 labels="host=tikv1" # TiKV1-2 ansible_host=172.16.10.4 deploy_dir=/data2/deploy tikv_port=20172 tikv_status_port=20182 labels="host=tikv1" # TiKV2-1 ansible_host=172.16.10.5 deploy_dir=/data1/deploy tikv_port=20171 tikv_status_port=20181 labels="host=tikv2" # TiKV2-2 ansible_host=172.16.10.5 deploy_dir=/data2/deploy tikv_port=20172 tikv_status_port=20182 labels="host=tikv2" # TiKV3-1 ansible_host #多实例情况下,需要修改 tidb-ansible/conf/tikv.yml 中 high-concurrency、normal-concurrency 和 low-concurrency 三个参数: readpool: coprocessor:    # Notice: if CPU_NUM > 8, default thread pool size for coprocessors    # will be set to CPU_NUM * 0.8.    # high-concurrency: 8    # normal-concurrency: 8    # low-concurrency: 8 #推荐配置:TiKV 实例数量 * 参数值 = CPU 核心数量 * 0.8 十、调整inventory.ini文件中的变量1、调整部署目录 #部署目录通过 deploy_dir 变量控制,默认全局变量已设置为 /home/tidb/deploy,对所有服务生效。如数据盘挂载目录为 /data1,可设置为 /data1/deploy,样例如下 ## Global variables [all:vars] deploy_dir = /data1/deploy #如为某一服务单独设置部署目录,可在配置服务主机列表时配置主机变量,以 TiKV 节点为例,其他服务类推,请务必添加第一列别名,以免服务混布时混淆 TiKV1-1 ansible_host=172.16.10.4 deploy_dir=/data1/deploy

2、调节其他变量(可选)

#以下控制变量开启请使用首字母大写 True,关闭请使用首字母大写 False

变量含义cluster_name集群名称,可调整tidb_versionTiDB 版本,TiDB Ansible 各分支默认已配置process_supervision进程监管方式,默认为 systemd,可选supervisetimezone新安装 TiDB 集群第一次启动 bootstrap(初始化)时,将 TiDB 全局默认时区设置为该值。TiDB 使用的时区后续可通过 time_zone 全局变量和 session 变量来修改,参考时区支持。默认为 Asia/Shanghai,可选值参考 timzone 列表enable_firewalld开启防火墙,默认不开启,如需开启,请将部署建议-网络要求 中的端口加入白名单enable_ntpd检测部署目标机器 NTP 服务,默认为 True,请勿关闭set_hostname根据 IP 修改部署目标机器主机名,默认为 Falseenable_binlog是否部署 Pump 并开启 binlog,默认为False,依赖 Kafka 集群,参见 zookeeper_addrs 变量zookeeper_addrsbinlog Kafka 集群的 zookeeper 地址deploy_without_tidbKV 模式,不部署 TiDB 服务,仅部署 PD、TiKV 及监控服务,请将 inventory.ini 文件中 tidb_servers 主机组的 IP 设置为空。alertmanager_target可选:如果你已单独部署 alertmanager,可配置该变量,格式:alertmanager_host:alertmanager_portgrafana_admin_userGrafana 管理员帐号用户名,默认为 admingrafana_admin_passwordGrafana 管理员帐号密码,默认为 admin,用于 Ansible 导入 Dashboard 和创建 API Key,如后期通过 grafana web 修改了密码,请更新此变量collect_log_recent_hours采集日志时,采集最近几个小时的日志,默认为 2 小时enable_bandwidth_limit在中控机上从部署目标机器拉取诊断数据时,是否限速,默认为 True,与 collect_bandwidth_limit 变量结合使用collect_bandwidth_limit在中控机上从部署目标机器拉取诊断数据时限速多少,单位: Kbit/s,默认 10000,即 10Mb/s,如果是单机多 TiKV 实例部署方式,需除以单机实例个数prometheus_storage_retentionPrometheus 监控数据的保留时间(默认为 30 天);2.1.7、3.0 以及之后的 tidb-ansible 版本中,group_vars/monitoring_servers.yml 文件里新增的配置十一、部署TiDB集群#ansible-playbook 执行 Playbook 时,默认并发为 5。部署目标机器较多时,可添加 -f 参数指定并发数,例如 ansible-playbook deploy.yml -f 10。以下示例使用 tidb 用户作为服务运行用户: 1、在 tidb-ansible/inventory.ini 文件中,确认 ansible_user = tidb ## Connection # ssh via normal user ansible_user = tidb #不要将 ansible_user 设置为 root 用户,因为 tidb-ansible 限制了服务以普通用户运行。 执行以下命令,如果所有server返回tidb,表示SSH互信配置成功: ansible -i inventory.ini all -m shell -a whoami 执行以下命令,如果所有server返回root,表示tidb用户sudo免密码配置成功 十二、测试集群#TiDB 兼容 MySQL,因此可使用 MySQL 客户端直 默认帐号与密码:admin;admin

使用TiUP部署TiDB5.4.0集群

一、在TiKV部署目标机器上添加数据盘EXT4文件系统挂载参数#使用 root 用户登录目标机器,将部署目标机器数据盘格式化成 ext4 文件系统,挂载时添加 nodelalloc 和 noatime 挂载参数。nodelalloc 是必选参数,否则 TiUP 安装时检测无法通过;noatime 是可选建议参数。 1、查看数据盘 fdisk -l 二、检测及关闭系统swapecho "vm.swappiness = 0">> /etc/sysctl.conf swapoff -a && swapon -a sysctl -p #一起执行 swapoff -a 和 swapon -a 命令是为了刷新 swap,将 swap 里的数据转储回内存,并清空 swap 里的数据。不可省略 swappiness 设置而只执行 swapoff -a;否则,重启后 swap 会再次自动打开,使得操作失效。 #执行 sysctl -p 命令是为了在不重启的情况下使配置生效三、检测即关闭目标部署机器的防火墙1、检查防火墙状态 sudo firewall-cmd --state 四、检测及安装NTP服务 ntpd.service - Network Time Service Loaded: loaded (/usr/lib/systemd/system/ntpd.service; disabled; vendor preset: disabled) Active: active (running) since 一 2017-12-18 13:13:19 CST; 3s ago #若返回报错信息 Unit ntpd.service could not be found.,请尝试执行以下命令,以查看与 NTP 进行时钟同步所使用的系统配置是 chronyd 还是 ntpd sudo systemctl status chronyd.service #若发现系统既没有配置 chronyd 也没有配置 ntpd ,则表示系统尚未安装任一服务。此时,应先安装其中一个服务,并保证它可以自动启动,默认使用 ntpd #如果你使用的系统t stratum 2 time correct to within 91 ms polling server every 1024 s #以下情况表示 NTP 服务未正常同步: unsynchronised #以下情况表示 NTP 服务未正常运行: Unableeap status : Normal,则代表同步过程正常 Reference ID   : 5EC69F0A (ntp1.time.nl) Stratum         : 2 Ref time (UTC) : Thu May 20 15:19:08 2021 System time     : 0.000022151 seconds slow of NTP time Last offset     : -0.000041040 seconds RMS offset     : 0.000053422 seconds Frequency       : 2.286 ppm slow Residual freq   : -0.000 ppm Skew           : 0.012 ppm Root delay     : 0.012706812 seconds Root dispersion : 0.000430042 seconds Update interval : 1029.8 seconds Leap status     : Normal #如果该命令返回结果如下,则表示同步过程出错: Leap status   : Not synchronised #如果该命令返回结果如下,则表示 Chrony 服务未正常运行: 506 Cannot talk to daemon #如果要使 NTP 服务尽快开始同步,执行以下命令。可以将 pool.ntp.org 替换为你的 NTP 服务器: sudo systemctl stop ntpd.service && \ sudo ntpdate pool.ntp.org && \ sudo systemctl start ntpd.service #如果要在 CentOS 7 系统上手动安装 NTP 服务,可执行以下命令: sudo yum install ntp ntpdate && \ sudo systemctl start ntpd.service && \ sudo systemctl enable ntpd.service五、检查和配置操作系统优化参数#在生产系统的 TiDB 中,建议对操作系统进行如下的配置优化: (1)关闭透明大页(即 Transparent Huge Pages,缩写为 THP)。数据库的内存访问模式往往是稀疏的而非连续的。当高阶内存碎片化比较严重时,分配 THP 页面会出现较高的延迟。 ent policy: frequency should be within 1.20 GHz and 3.10 GHz.             The governor "powersave" may decide which speed to use within this range. #The governor "powersave" 表示 cpufreq 的节能策略使用 powersave,需要调整为 performance 策略。如果是虚拟机或者云主机,则不需要调整,命 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 [cpu] governor=performance [vm] transparent_hugepages=never [disk] devices_udev_regex=(ID_SERIAL=36d0946606d79f90025f3e09a0c1fc035)|(ID_SERIAL=36d0946606d79置 grubby --info /boot/vmlinuz-3.10.0-957.el7.x86_64 #--info 后需要使用实际的默认内核版本 index=0 kernel=/boot/vmlinuz-3.10.0-957.el7.x86_64 args="ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF-8 transparent_hugepage=never" root=/dev/mapper/centos-root initrd=/boot/initramfs-3.10.0-957.el7.x86_64.img title=CentOS Linux (3.10.0-957.el7.x86_64) 7 ( [Service] Type=oneshot ExecStart=/usr/bin/cpupower frequency-set --governor performance [Install] WantedBy=multi-user.target EOF 68">> /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 sysctl0000 tidb           soft   stack          32768 tidb           hard   stack          32768 EOF六、安装numactl工具#NUMA 绑核是用来隔离 CPU 资源的一种方法,适合高配置物理机环境部署多实例使用。 #通过 tiup cluster deploy 完成部署操作,就可以通过 1、执行 tiup cluster exec 命令,以 sudo 权限在 tidb-test 集群所有目标主机上安装 NUMA tiup cluster exec tidb-test --sudo --command "yum -y install numactl" #你可以执行 tiup cluster exec --help 查看的 tiup cluster exec 命令的说明信息七、在中控机上部署TiUP组件1、执行如下命令八、初始化集群拓扑文件1、执行命令,生成集群初始化配置文件 tiup cluster template > topology.yaml #针对两种常用的部署场景,也可以通过以下命令生成建议的拓扑模板 (1)混合部署场景:单台机器部署多个实例 tiup cluster template --full > topology.yaml (2)跨机房部署场景:跨机房部署 TiDB 集群 tiup cluster template --multi-dc > topology.yaml #对于需要全局生效的参数,请在配置文件中 server_configs 的对应组件下配置。 #对于需要某个节点生效的参数,请在具体节点的 config 中配置。九、执行部署命令#如果是密钥方式,可以通过 -i 或者 --identity_file 来指定密钥的路径 #如果是密码方式,可以通过 -p 进入密码交互窗口 #如果已经配置免密登十、查看tiup管理的集群情况tiup cluster list十一、检查部署的TiDB集群情况tiup cluster display tidb-test十二、启动集群 方式二、普通启动 tiup cluster start tidb-test十三、验证集群运行状态tiup cluster display tidb-test

部署数据导出工具Dumpling

1、下载包含Dumpling的tidb-toolkit安装包wget https://download.pingcap.org/tidb-toolkit-v5.4.2-linux-amd64.tar.gz2、从TiDB导出数据1、需要的权限 SELECT -h、-P、-u 分别代表地址、端口、用户。如果需要密码验证,可以使用 -p $YOUR_SECRET_PASSWORD 将密码传给 Dumpling。 -o 用于选择存储导出文件的目录,支持本地文件路径或外部存储 URL 格式。 -t 用于指定导出的线程数。增加线程数会增加 Dumpling 并发度提高导出速度,但也会加大数据库内存消耗,因此不宜设置过大。一般不超过 64。 -r 用于指定单个文件的最大行数,指定该参数后 Dumpling 会开启表内并发加速导出,同时减少内存使用。当上游为 TiDB 且版本为 v3.0 或更新版本时,该参数大于 0 表示使用 TiDB region 信息划分表内并发,具体取值将不再生效。 -F 选项用于指定单个文件的最大大小,单位为 MiB,可接受类似 5GiB 或 8KB 的输入。如果你想使用 TiDB Lightning 将该文件加载到 TiDB 实例中,建议将 -F 选项的值保持在 256 MiB 或以下。 #如果导出的单表大

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:新手升级指南 从TiDB v6.5到v7.5的步骤
下一篇:新版 TiDB 社区技术月刊 一站获取全部社区动态
相关文章