TiDB在X86和ARM混合平台下的离线部署和升级
【是否原创】是
【首发渠道】TiDB 社区
背景
在之前我们团队发布了TiDB基于X86和ARM混合部署架构的文章:TiDB 5.0 异步事务特性体验——基于X86和ARM混合部署架构,最近有朋友问到离线模式下如何对混合部署的TiDB集群进行升级,因此用本文来做一个梳理总结。
部署的本质
TiDB从4.0版本开始推出了自己的集群运维和包管理工具TiUP,这个工具的诞生极大地降低了上手TiDB的门槛,简简单单几行命令就能拉起一个复杂的TiDB集群,而且TiDB生态下的众多组件也可以通过TiUP来管理,相比TiDB-Ansible时代,可以说是从火车进化到了高铁。
那么熟悉使用TiUP部署TiBD的朋友一定会对以下两条命令印象深刻。
第一个就是tiup cluster deploy,如果稍微仔细观察一下这个命令输出的日志,就能发现它主要做了这几件事。首先就是根据部署拓扑文件的内容做节点ssh互信,接着开始下载需要用的TiDB组件的资源包(在线模式下),然后在各节点上初始化环境(比如创建部署用户以及授权等),再把资源包按节点角色依次分发下去。到这里部署工作基本准备就绪了,只待点火发射。
这里对部署TiDB涉及到的几个用户推荐大家认真读一下社区里@buptzhoutian的文章《TiUP cluster 用到的三个账户》,受益匪浅。
第二个就是tiup cluster start,这个命令会让各节点运行组件的二进制文件,通过一些参数把组件关联到一起,各组件的启动顺序是PD->TiKV->TiDB->监控。以PD组件和TiDB组件的启动命令为例(仅做参考):
## 启动PD
./pd-server --name=pd1 --data-dir=pd1 --client-urls="http://pdhost:2379" --peer-urls="http://host:2380" -L "info" --log-file=pd.log
## 启动TiDB
./tidb-server --store=tikv --path="pdhost:2379" --log-file=tidb.log
如果尝试过使用编译源码方式启动TiDB的朋友应该会比较熟悉。
到这里,各组件的进程已经成功在操作系统中运行起来了。

TiUP的镜像
前面提到了deploy命令会去下载资源包,那这些资源包是从哪里下载的呢?
TiUP提供了镜像管理机制,TiDB的所有组件都从镜像仓库下载,它默认的镜像源是https://tiup-mirrors.pingcap.com。官方镜像源提供了TiDB生态下所有组件、所有版本、所有支持平台的资源文件,比如我们可以使用tiup list tidb查看镜像源支持的所有TiDB组件详细情况。
[root@localhost ~]# tiup list tidb
Available versions for tidb:
Version Installed Release Platforms
------- --------- ------- ---------
nightly -> v5.0.0-nightly-20210829 2021-08-29T21:28:54+08:00 darwin/amd64,darwin/arm64,linux/amd64,linux/arm64
........
v4.0.14 2021-07-27T18:08:31+08:00 darwin/amd64,linux/amd64,linux/arm64
v5.0.0-20210329 2021-03-29T19:45:19+08:00 darwin/amd64,linux/amd64,linux/arm64
v5.0.0-20210403 2021-04-03T09:13:36+08:00 darwin/amd64,linux/amd64,linux/arm64
v5.0.0-20210408 2021-04-08T17:02:41+08:00 darwin/amd64,linux/amd64,linux/arm64
v5.0.0-nightly-20210829 2021-08-29T21:28:54+08:00 darwin/amd64,darwin/arm64,linux/amd64,linux/arm64
v5.0.0-rc 2021-01-12T23:40:27+08:00 darwin/amd64,linux/amd64,linux/arm64
v5.0.0 2021-04-07T17:30:00+08:00 darwin/amd64,linux/amd64,linux/arm64
v5.0.1 2021-04-24T21:31:28+08:00 darwin/amd64,linux/amd64,linux/arm64
v5.0.2 2021-06-09T22:49:33+08:00 darwin/amd64,linux/amd64,linux/arm64
v5.0.3 2021-07-02T16:13:22+08:00 darwin/amd64,linux/amd64,linux/arm64
v5.1.0 2021-06-24T16:23:50+08:00 darwin/amd64,linux/amd64,linux/arm64
v5.1.1 2021-07-30T15:59:38+08:00 darwin/amd64,darwin/arm64,linux/amd64,linux/arm64
v5.2.0 2021-08-27T18:40:58+08:00 darwin/amd64,darwin/arm64,linux/amd64,linux/arm64
但是一般来说,生产环境的服务器是网络隔离环境,不允许直接从外网下载任何东西,针对这种场景TiUP也支持本地镜像模式,这部分的介绍可以参考官方文档:
- TiUP 镜像参考指南 https://docs.pingcap.com/zh/tidb/stable/tiup-mirror-reference
- TiUP mirror命令 https://docs.pingcap.com/zh/tidb/stable/tiup-command-mirror
那么很明显,如果要基于TiUP实现离线部署TiDB,那么最重要的就是搭建一个私有镜像源。
搭建私有镜像源
官方文档的每个版本都介绍了离线部署的步骤,这里不再重复。
但是文档描述的都是默认在X86平台下的部署过程,官网下载页面的离线包也是X86的,那么用这种方式去做混合平台部署显然行不通,ARM的资源包上哪去找?。
我们稍加观察会发现,按照官网的离线部署方式安装完TiUP后,它的镜像源实际上是指向了这个资源包的目录:
[root@localhost ~]# tiup mirror show
/root/tidb-community-server-v5.1.0-linux-amd64
这意味着如果我在这个目录里放了两个平台的资源文件,执行deploy的时候就不会找不到文件了。
那么是不是简单地下载一份ARM平台的资源包放进去就完事呢?肯定是不行的,因为TiUP有一套自己的校验机制确保镜像安全可靠,对镜像管理有严格的流程。
从官网文档可以得知,TiUP提供了镜像克隆功能,可以把外网的镜像打包到本地形成一个镜像源。在一台联网并且安装了TiUP的机器上,我们只需要如下一个命令就可以把两个平台的资源包放到一个本地镜像中:
# 可以使用--arch参数指定平台,默认是"amd64,arm64",所以这省略了
[root@localhost ~]# tiup mirror clone ./mirror v5.1.0 --os=linux
下载好的文件如下图所示:

这里面有个local_install.sh是不是非常熟悉,这个就是用来安装TiUP的脚本文件。接下来我们把这个mirror目录复制到没有外网的服务器上,然后执行安装文件就可以了:
[root@localhost ~]# scp ./mirror/* root@10.3.65.136:/root/mirror
[root@localhost mirror]# sh local_install.sh
[root@localhost mirror]# source /root/.bash_profile
[root@localhost mirror]# tiup mirror show
/root/mirror
到这里,一个TiDB v5.1.0版本的私有镜像源就创建好了,这时候你再用tiup list tidb就只能看到这个版本的tidb组件信息。
离线混合部署
镜像源准备好以后,部署过程其实和在线部署没有太大区别,这里只需要注意一点,部署拓扑文件里面指定好各自节点对应的架构平台即可:
global:
user: 'tidb'
ssh_port: 22
deploy_dir: '/tidb-deploy'
data_dir: '/tidb-data'
arch: "arm64"
server_configs: {}
pd_servers:
- host: 10.3.65.139
- host: 10.3.65.140
- host: 10.3.65.145
tidb_servers:
- host: 10.3.65.139
- host: 10.3.65.140
- host: 10.3.72.125
arch: "amd64"
tikv_servers:
- host: 10.3.65.141
- host: 10.3.65.142
- host: 10.3.65.143
monitoring_servers:
- host: 10.3.65.149
grafana_servers:
- host: 10.3.65.149
alertmanager_servers:
- host: 10.3.65.149
接着就是一路的tiup cluster deploy和tiup cluster start即可,部署成功后查看TiBD集群信息:

离线混合升级
那么混合部署的集群如何升级呢,其实还是前面提到的TiUP镜像问题。比如我要从v5.1.0离线升级到v5.2.0,如果现在的镜像源中有v5.2.0的资源文件那么问题就非常容易了。
前面我们提到过,并不能直接把v5.2.0的资源文件直接扔到镜像源目录中,目前我知道的有两种实现方案。
第一种是采用官方介绍的镜像合并功能,不过这种方式实施起来稍微有点复杂,加上文档介绍的不够详细我一直卡在管理员认证这里。
第二种是投机取巧方案但是非常好用。就是再克隆一份v5.2.0的离线包到本地,然后上传到服务器后修改TiUP镜像源地址:
[root@localhost ~]# tiup mirror clone ./mirror2 v5.2.0 --os=linux
[root@localhost ~]# scp ./mirror2/* root@10.3.65.136:/root/mirror2
[root@localhost ~]# tiup mirror set /root/mirror2 # 在这里偷梁换柱
[root@localhost ~]# tiup mirror show
/root/mirror2
[root@localhost ~]# tiup list tidb
Available versions for tidb:
Version Installed Release Platforms
------- --------- ------- ---------
v5.2.0 2021-08-27T18:40:58+08:00 linux/amd64,linux/arm64
接着就是常规的tiup cluster upgrade操作了,升级完成后集群信息如下:

nice。
总结
别的就不多说了,一句话:TiUP真香啊~
它还有好多隐藏的好玩的功能等待大家去探索。
TiDB在X86和ARM混合平台下的离线部署和升级的更多相关文章
- AutoCAD云产品平台ForgeViewer格式离线部署思路分析
背景 在上一篇博文中CAD图DWG解析WebGIS可视化技术分析总结提到,利用AutoCAD的自有云产品 Autodesk Forge,能在浏览器中渲染 3D 和 2D 模型数据,实现DWG图形的We ...
- 关于Linux系统下基于Tomcat部署和升级war包的详细过程
1.首先Linux先安装java,Tomcat 中间件规范要求: 1) 软件必须下载到/services/download_soft_v --------(用xftp上传 ...
- centos下docker离线部署
安装准备 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化. 环境要求 Centos 安装包下载地址 安装包下载以下 ...
- QtCreator动态编译jsoncpp完美支持x86和arm平台
如果是做嵌入式开发. 在Qt下支持JSon最好的办法,可能不是采用qjson这个库.QJson这个库的实例只提供了x86环境下的编译方法. Installing QJson-------------- ...
- C/C++在Java项目、Android和Objective-C三大平台下实现混合编程
Android和iOS开发都支持C++开发,可以一套代码多平台使用.同时C++难以反编译的特性也可以为Android开发带来代码的保密,另一native特性也可以提高代码的运行效率. 一.为什么使用C ...
- Linux系统下x86和ARM的区别有哪些?
问题: 最近在用三星的一款i5处理器的Windows平板,和iPad,以及其他使用ARM处理器的手机相比,发热量大很多,甚至需要借助风扇来散热,耗电量也大了不少. 那么就很奇怪,在主频相差不大,并且实 ...
- [转帖]Linux系统下x86和ARM的区别有哪些?
Linux系统下x86和ARM的区别有哪些? https://www.cnblogs.com/alantu2018/p/9209143.html 其实界限 越来越小了.. 问题: 最近在用三星的一款i ...
- X86平台下嵌入式linux触摸屏解决方案(usb触摸屏控制器+完美校准方案+触摸屏QTE开发环境搭建)
一直在用X86平台,真心不想用WINCE和XPE,一些大的硬件供应商都不提供linux平台下的技术支持,比如研华的3343PC104系列的板子... 开发的问题如下: 1 USB控制器目前只有台湾和竹 ...
- 4G通信模块在ARM平台下的应用
4G模块是连接物与物的重要载体,是终端设备接入物联网的核心部件之一.随着4G的普及,许多新兴市场对4G通信模块的需求都在日益扩大,那么在ARM平台的嵌入式设备上如何快速的应用4G模块呢? 4G通信模块 ...
- 4G 通信模块在ARM 平台下的应用
收藏 评论(0) 分享到 微博 QQ 微信 LinkedIn 4G模块是连接物与物的重要载体,是终端设备接入物联网的核心部件之一,随着4G的普及,许多新兴市场对4G通信模块的需求都在日益扩大,那么在A ...
随机推荐
- linux行去重的一种方法
awk '{x[$0]++}END{for(i in x)print i}' newsub > newsub2// orcat oldword| awk -F "\t" ' ...
- web api appsettings.json 数据库连接
编辑AppSettings.Json "ConnectionStrings": { "DefaultConnection": "Data Source ...
- spacy
官方文档: https://spacy.io/api Spacy功能简介 可以用于进行分词,命名实体识别,词性识别等等,但是首先需要下载预训练模型 pip install --user spacy p ...
- Jmeter读取Csv文件,字段中有逗号分隔,读取不成功
Jmeter读取Csv文件,字段中有逗号分隔,读取不成功
- selenium---xpath定位方法详解
Xpath定位 验证xpath写的是否正确: 1.打开浏览器检查页面,Ctrl+F,把路径输入进去,如果可以定位到的位置只有一个,说明是对的 2.在需要定位的页面,按F12后,切换至console ...
- pyecharts 学习使用网址
pyecharts新版官方手册地址:https://pyecharts.org/#/zh-cn/intro 或http://pyecharts.org/#/?id=pyecharts或http://p ...
- Docker-界面化
docker-ui docker-ui只能便于我们查看系统的相关信息,镜像或者容器.在界面上做简单的处理,可处理单机版Docker. docker pull uifd/ui-for-docker do ...
- 深入理解 Python 虚拟机:整型(int)的实现原理及源码剖析
深入理解 Python 虚拟机:整型(int)的实现原理及源码剖析 在本篇文章当中主要给大家介绍在 cpython 内部是如何实现整型数据 int 的,主要是分析 int 类型的表示方式,分析 int ...
- 如何基于Security框架兼容多套用户密码加密方式
一.说明 当已上线的系统存在使用其他的加密方式加密的密码数据,并且密码 不可逆 时,而新的数据采用了其他的加密方式,则需要同时兼容多种加密方式的密码校验. 例如下列几种情况: 旧系统用户的密码采用了 ...
- 1 - Windows 10 - Python 类的常用高级系统函数(方法)通识
@ 目录 一.系统函数__init__() 初始化类函数 二.系统函数__call__() 调用对象函数 三.系统函数__dict__类属性查询函数 四.系统函数__str__()描述类信息函数 五. ...