openGauss
开源数据库
openGauss社区官网
开源社区
openGauss升级指导书
前 言
概述
本文档详细的描述了版本升级、回滚流程、以及具体的操作指导,同时提供了常见的问题解答及故障处理方法。
读者对象
本文档主要适用于升级的操作人员。操作人员必须具备以下经验和技能:
- 熟悉当前网络的组网和相关网元的版本信息。
- 有该设备维护经验,熟悉设备的操作维护方式。
升级前必读
升级方案
本节为指导用户选择升级方式。
用户根据 openGauss 提供的新特性和数据库现状,确定是否对现有系统进行升级。
当前支持的升级模式为就地升级和灰度升级。升级方式的策略又分为大版本升级和小版本升级。
用户挑选升级方式后,系统会自动判断并选择合适的升级策略。
就地升级:升级期间需停止业务进行,一次性升级所有节点。
灰度升级:灰度升级支持全业务操作,也是一次性升级所有节点。(openGauss1.1.0 版本之后的版本支持该功能)
升级前的版本要求(升级路径)
openGauss 升级版本要求如表 1所示。
表 1 升级前的版本要求(升级路径)
说明:
升级前版本,可以通过执行如下工具查看。
gsql -V | --version
升级影响和升级约束
升级过程需要注意以下事项。
- 升级操作不能和扩容、缩容同时执行。
- 不支持虚拟 IP。
- 升级过程中,不允许对 wal_level,max_connections,max_prepared_transactions,max_locks_per_transaction 这四个 GUC 参数的值进行修改。如果修改,会导致回滚后实例启动异常。
- 建议在数据库系统空闲情况下进行升级,尽量避开业务繁忙的时间段(可按照经验判断,如节假日等)。
- 升级前尽可能保证数据库正常。可以通过 gs_om -t status 查询,查询结果的 cluster_state 为 Normal 代表数据库正常。
- 升级前保证数据库互信正常,可以在任意节点上,通过 ssh hostname 命令,连接另外一个节点进行验证。如果各机器间互连不用输入密码,说明互信正常(通常数据库状态正常时,互信一般都是正常的)。
- 升级前后,数据库的部署方式(配置文件)不能发生变化。升级前会对部署方式进行校验,如果改变,会报错。
- 升级前要保证操作系统处于健康状态,通过 gs_checkos 工具可以完成操作系统状态检查。
- 就地升级需要停止业务,灰度升级支持全业务操作。
- 数据库运行正常且主 DN 的数据完全同步到备 DN。
- 升级过程中不允许打开 kerberos 开关。
- 请不要修改安装包中解压出来的 version.cfg 文件。
- 如果升级过程中出现异常导致升级失败,需用户手动回滚,并且必须回滚成功后才能进行下一次升级。
- 如果升级回滚成功后,再次升级成功,未提交阶段设置的 GUC 参数将失效。
- 执行升级的过程中请不要手动设置 GUC 参数。
- 灰度升级中,升级的时候都会产生不超过 10s 的业务中断
- 升级过程中,必须保持内核版本与 om 版本一致才可执行 om 操作。这里的一致是指,内核代码和 om 代码都来自同一个软件包。如果执行了升级包的前置脚本却没有升级,或者升级回滚后没有执行基线包的前置脚本,就会造成内核代码和 om 代码的不一致。
- 升级过程中如果系统表新增了字段,升级后通过**\d命令将查看不到这些新增的字段。此时通过select**命令可以查到这些新增的字段。
- 升级需要 guc 参数 enable_stream_replication=on,该参数为 off 时不允许升级。
- 灰度升级中,业务并发要小于 200 并发读加 200 并发写的情况。
- 若在 openGauss2.1.0 之前的版本中使用了 MOT 表,则不支持升级到 openGauss2.1.0 版本。
- 执行 gs_upgradectl -t auto-upgrade 之后,没有提交之前,不能执行快照生成,即升级过程中不能执行快照生成。
# 升级
升级流程
本章介绍升级到该版本的主要升级过程。
说明:
本文档中描述的时间仅供参考,实际操作时间以现场情况为准。
表 1 升级流程执行效率估计
升级前准备与检查
升级前准备与检查清单
表 1 升级前准备清单
说明:
“耗时”依不同环境(包括现场数据量、服务器性能等原因)会存在一定差异。
收集节点信息
联系数据库系统管理员,获取数据库涉及节点的节点名称、节点 IP 地址。节点的 root、omm 用户密码等环境信息。如表 1。
表 1 节点信息
备份数据
升级一旦失败,有可能会影响到业务的正常开展。提前备份数据,就可以在风险发生后,尽快的恢复业务。
请参考《管理员指南》中的“备份与恢复”章节,完成数据的备份。
获取升级包
https://opengauss.org/zh/download/在该网站获取想要升级的升级包。
健康检查
通过 gs_checkos 工具可以完成操作系统状态检查。
前提条件
- 当前的硬件和网络环境正常。
- 各主机间 root 互信状态正常。
- 只能使用 root 用户执行 gs_checkos 命令。
操作步骤
以 root 用户身份登录服务器。
执行如下命令对服务器的 OS 参数进行检查。
gs_checkos -i A
检查服务器的 OS 参数的目的是为了保证数据库正常通过预安装,并且在安装成功后可以安全高效的运行。详细的检查项目请参见《工具参考》中的“服务端工具 > gs_checkos”工具的“表 1 操作系统检查项”。
检查数据库节点磁盘使用率
建议数据库节点磁盘使用率低于 80%时再执行升级操作。
检查数据库状态
本节介绍数据库状态查询的具体操作。
验证步骤
以数据库用户(如 omm)登录节点,source 环境变量。
执行如下命令查看数据库状态。
gs_om -t status
保证数据库状态正常。
升级操作
介绍就地升级和灰度升级的详细操作。
操作步骤
以 root 身份登录节点。
创建新包目录。
mkdir -p /opt/software/gaussdb_upgrade
将需要更新的新包上传至目录“/opt/software/gaussdb_upgrade”并解压。
进入安装包解压出的 script 目录下:
cd /opt/software/gaussdb_upgrade/script
在就地升级或灰度升级前执行前置脚本 gs_preinstall。
./gs_preinstall -U omm -G dbgrp -X /opt/software/GaussDB_Kernel/clusterconfig.xml
切换至 omm 用户。
su - omm
数据库状态正常时,使用如下命令进行就地升级或者灰度升级。
示例一:使用 gs_upgradectl 脚本执行就地升级。
gs_upgradectl -t auto-upgrade -X /opt/software/GaussDB_Kernel/clusterconfig.xml
示例二:使用 gs_upgradectl 脚本执行灰度升级。
gs_upgradectl -t auto-upgrade -X /opt/software/GaussDB_Kernel/clusterconfig.xml --grey
升级验证
本章介绍升级完成后的验证操作。给出验证的用例和详细操作步骤。
验证项目的检查表
表 1 验证项目的检查表
升级版本查询
本节介绍版本查询的具体操作。
验证步骤
以数据库用户(如 omm)登录节点,source 环境变量。
执行如下命令查看所有节点的版本信息。
gs_ssh -c "gsql -V"
检查升级数据库状态
本节介绍数据库状态查询的具体操作。
验证步骤
以数据库用户(如 omm)登录节点。
执行如下命令查看数据库状态。
gs_om -t status
查询结果的 cluster_state 为 Normal 代表数据库正常。
提交升级
升级完成后,如果验证也没问题。接下来就可以提交升级。
说明:
一旦提交操作完成,则不能再执行回滚操作。
操作步骤
以数据库用户(如 omm)登录节点。
执行如下命令完成升级提交。
gs_upgradectl -t commit-upgrade -X /opt/software/GaussDB_Kernel/clusterconfig.xml
升级版本回滚
本章介绍版本回滚方法。
操作步骤
以数据库用户(如 omm)登录节点。
执行如下命令完成版本回滚(回滚内核代码)。回滚完成,如果需要保持内核和 om 代码的版本一致,可以执行一下旧包的前置命令(参见执行前置脚本 gs_preinstall。)。
gs_upgradectl -t auto-rollback -X /opt/software/GaussDB_Kernel/clusterconfig.xml
说明:
- 如果数据库异常,需要强制回滚,可以使用如下命令。
gs_upgradectl -t auto-rollback -X /opt/software/GaussDB_Kernel/clusterconfig.xml --force
查看回滚之后的版本号。
gs_om -V | --version
异常处理
如果升级失败,请按照如下方式进行处理:
排查是否有环境问题。
如磁盘满、网络故障等,或者升级包、升级版本号是否正确。排除问题后,可以尝试重入升级。
如果没有发现环境问题,或者重入升级失败,需要收集相关日志,找技术支持工程师定位。
收集日志命令:
gscollector --begin-time='_20200724 00:00' --end-time='20200725 00:00'
如果条件允许,建议保留环境。