升级背景
原集群版本过低,运维难度大,决定进行版本升级
经过测试发现,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小时内删除侵权内容。