基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
单节点升级
更新时间:2023-12-11 16:55:35
OceanBase 迁移服务(OceanBase Migration Service,OMS)支持 3.2.1 及以上版本直接升级至 4.1.0 版本。本文为您介绍在不同场景下,如何进行单节点升级。
背景信息
OMS 4.1.0 的版本升级包含以下两种场景:
当前版本为 3.2.1 及以上,4.0.1 以下版本。
注意
如果是 OMS 3.2.1 以下的版本,您需要先升级至 3.2.1 版本。
当前版本为 4.0.1 及以上版本。
从 OMS 3.2.1 及以上,4.0.1 以下版本升级至 4.1.0 版本时,需要比 4.0.1 及以上版本升级至 4.1.0 版本多执行以下两个操作:
需要进行下文《前提条件》模块内容的确认。
在升级过程中,需要执行升级 JAR。
说明
OMS 在 4.0.1 版本完成迁移同步架构融合操作,涉及相关表结构重构。所以如果原 OMS 版本低于 4.0.1 并且需要升级至 4.0.1 及以上的版本,需要执行此操作。非该场景,请勿执行此操作。
从 4.0.1 及以上版本升级至 4.1.0 版本
如果开启了 HA 功能,请先关闭 HA。
登录 OMS 控制台。
在左侧导航栏,单击 系统管理 > 系统参数。
在 系统参数 页面,找到
ha.config。单击该参数名称 取值 后的编辑图标。
在 修改取值 对话框中,设置
enable为false,关闭 HA 功能。
备份数据库。
暂停 OMS V4.0.2 旧容器,记录时间 T1。
sudo docker stop ${CONTAINER_NAME}说明
CONTAINER_NAME为创建容器的名称。登录配置文件中的 CM 心跳库,备份数据。
# 登录配置文件中的 CM 心跳库 mysql -hxxx.xxx.xxx.xxx -P<port> -u<username> -p<password> -Dcm_hb_402 # 创建中间表 CREATE TABLE IF NOT EXISTS `heatbeat_sequence_bak` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'PK', `gmt_created` datetime NOT NULL, `gmt_modified` datetime NOT NULL, PRIMARY KEY (`id`) ) DEFAULT CHARSET=utf8 COMMENT='心跳 sequence 表'; # 将需要的数据备份至中间表 INSERT INTO heatbeat_sequence_bak SELECT `id`,`gmt_created`,`gmt_modified` FROM heatbeat_sequence ORDER BY `id` DESC LIMIT 1; # 重命名 heatbeat_sequence 表和中间表 # heatbeat_sequence 用于汇报心跳,获取自增 ID ALTER TABLE `heatbeat_sequence` RENAME TO `heatbeat_sequence_bak2`; ALTER TABLE `heatbeat_sequence_bak` RENAME TO `heatbeat_sequence`; # 删除原来的表 DROP TABLE heatbeat_sequence_bak2;执行下述命令,手工备份 rm、cm 和 cm_hb 库为 SQL 文件,并确认三个文件的大小不为 0。
mysqldump -hxxx.xxx.xxx.xxx -P<port> -u<username> -p<password> --triggers=false rm_402 > /home/admin/rm_402.sql mysqldump -hxxx.xxx.xxx.xxx -P<port> -u<username> -p<password> --triggers=false cm_402 > /home/admin/cm_402.sql mysqldump -hxxx.xxx.xxx.xxx -P<port> -u<username> -p<password> --triggers=false cm_hb_402 > /home/admin/cm_hb_402.sql参数 描述 -h 需要导出的主机信息。 -P 连接数据库的端口号。 -u 指定连接的用户名。 -p 连接数据库的密码。 --triggers 导出触发器,默认为 false(不导出)。 rm_402、cm_402、cm_hb_402 此处为备份 rm、cm 和 cm_hb 库为 SQL 文件,格式为 库名 > 存储 SQL 文件的路径.sql,请替换为实际环境中的值。
加载下载的 OMS 安装包至 Docker 容器的本地镜像仓库。
docker load -i <OMS 安装包>启动 OMS V4.1.0 新容器。
OMS 支持通过 HTTP 协议和 HTTPS 协议访问 OMS 控制台。如果您想要安全访问 OMS,可以提供 HTTPS 证书,并将其挂载至容器内的指定目录。如果使用 HTTP 协议访问 OMS,则无需配置。
注意
启动 OMS V4.1.0 新容器时,OMS 三个挂载盘的路径需要与升级前保持完全一致。
您可以执行sudo docker inspect ${CONTAINER_NAME} | grep -A5 'Binds'命令,查看之前旧 OMS 容器的挂载盘路径。OMS 3.3.1 及以上版本新增参数
-e IS_UPGRADE=true。该参数仅适用于升级场景,且升级场景下必须添加该参数。
OMS_HOST_IP=xxx CONTAINER_NAME=oms_xxx IMAGE_TAG=feature_x.x.x docker run -dit --net host \ -v /data/config.yaml:/home/admin/conf/config.yaml \ -v /data/oms/oms_logs:/home/admin/logs \ -v /data/oms/oms_store:/home/ds/store \ -v /data/oms/oms_run:/home/ds/run \ # 仅在 OMS 容器中挂载 HTTPS 证书时,需要设置如下两个参数 -v /data/oms/https_crt:/etc/pki/nginx/oms_server.crt -v /data/oms/https_key:/etc/pki/nginx/oms_server.key -e OMS_HOST_IP=${OMS_HOST_IP} \ -e IS_UPGRADE=true \ --privileged=true \ --pids-limit -1 \ --ulimit nproc=65535:65535 \ --name ${CONTAINER_NAME} \ work.oceanbase-dev.com/obartifact-store/oms:${IMAGE_TAG}参数 描述 OMS_HOST_IP 宿主机的 IP 地址。 CONTAINER_NAME 创建容器的名称。格式为 oms_xxx,请根据具体版本填写 xxx。例如,使用 OMS V4.1.0,则填写 oms_410。 IMAGE_TAG 使用 Docker 加载 OMS 安装包后,通过 docker images命令获取到加载的相应镜像的 [IMAGE ID] 或 [REPOSITORY:TAG],即为相应加载后镜像的唯一标识符<OMS_IMAGE>。/data/oms/oms_logs
/data/oms/oms_store
/data/oms/oms_run/data/oms/oms_logs、/data/oms/oms_store和/data/oms/oms_run可以替换为在您的 OMS 部署服务器上创建的挂载目录,分别存放 OMS 运行过程中产生的日志文件、日志拉取组件和同步组件生成的文件,在本机进行持久化。
注意:
在后续的版本重新部署、升级中,挂载目录的位置必须保持不变。/home/admin/logs
/home/ds/store
/home/ds/run/home/admin/logs、/home/ds/store和/home/ds/run为容器内的固定目录,路径不可以修改。/data/oms/https_crt(可选)
/data/oms/https_key(可选)HTTPS 证书在 OMS 容器内的挂载位置。 如果挂载了 HTTPS 证书,OMS 容器内的 Nginx 服务将会运行在 HTTPS 模式下。您必须以 HTTPS 模式访问,才可以使用 OMS 的控制台服务。 IS_UPGRADE 升级场景下,必须设置 IS_UPGRADE=true。请注意IS_UPGRADE需要为大写。privileged 为容器授予扩展权限。 pids-limit 配置容器的进程数限制,-1 表示不限制。 ulimit nproc 配置用户进程数的上限。 进入新容器。
docker exec -it ${CONTAINER_NAME} bash在
root目录下,执行元数据初始化操作。bash /root/docker_init.sh执行上述命令后,脚本会自动将 OMS 三个数据库的 Schema 变更执行到数据库中。
docker_init.sh脚本执行完成后,请确认机器列表是否正常,且机器均处于 在线 状态。登录 OMS 控制台。
在左侧导航栏,单击 运维监控 > 机器。
在 机器列表 页面,查看机器列表是否正常。同时,请确认机器的状态均为 在线。
在 系统参数 页面,开启 HA 功能,并设置相关参数。
登录 OMS 控制台。
在左侧导航栏,单击 系统管理 > 系统参数。
在 系统参数 页面,找到
ha.config。单击该参数名称 取值 后的编辑图标。
在 修改取值 对话框中,设置
enable为true,开启 HA 功能,并记录时间 T2。建议您设置
perceiveStoreClientCheckpoint为true,设置后则无需记录 T1 和 T2 时间。设置
perceiveStoreClientCheckpoint为true后,refetchStoreIntervalMin保持默认值 30min 即可。HA 会根据下游组件的最早位点时间减去参数refetchStoreIntervalMin设置的时间启动 Store。例如,下游 connector/jdbc-connector 最早请求位点为 12:00:00,参数refetchStoreIntervalMin的设置时间为 30 分钟,则 HA 启动的 Store 位点为 11:30:00。如果您设置
perceiveStoreClientCheckpoint为false,请根据业务需求修改refetchStoreIntervalMin(回拉时间,单位为分钟)的取值,该取值需要大于 T2-T1 的值。
(可选)如果您需要进行回滚操作,请执行以下步骤。
根据第 1 步的操作,关闭 HA 功能。
暂停升级后的新容器,记录时间 T3。
sudo docker stop ${CONTAINER_NAME}连接元数据库,执行下述命令。
drop database rm_402; drop database cm_402; drop database cm_hb_402; create database rm_402; create database cm_402; create database cm_hb_402;将第 2 步中备份的数据库 SQL 文件,还原为原数据库。
mysql -hxxx.xxx.xxx.xxx -P<port> -u<username> -p<password> -e "source /home/admin/rm_402.sql" -Drm_402 mysql -hxxx.xxx.xxx.xxx -P<port> -u<username> -p<password> -e "source /home/admin/cm_402.sql" -Dcm_402 mysql -hxxx.xxx.xxx.xxx -P<port> -u<username> -p<password> -e "source /home/admin/cm_hb_402.sql" -Dcm_hb_402重启 OMS V4.0.2 旧容器。
sudo docker restart ${CONTAINER_NAME}在 系统参数 页面,开启 HA 功能。
说明
建议您设置
perceiveStoreClientCheckpoint为true。HA 功能开启后会自动容灾 Store,并自动拉起 Incr-Sync 组件,您还需要手动恢复 Full-Import 组件。
升级完成后,请先删除浏览器缓存,再进行登录。
从 3.2.1 及以上,4.0.1 以下版本升级至 4.1.0 版本
前提条件
升级前,您需要检查是否存在重名的数据迁移和数据同步项目。如果存在,请对重名的项目名称进行修改,确保不要出现两个或多个项目的名称相同。
检查是否存在重名项目的命令如下:
数据迁移项目
SELECT project_name,count(*) AS count,group_concat(id) AS ids FROM oms_project WHERE project_status != "DELETED" GROUP BY project_name HAVING count(*) > 1;数据同步项目
SELECT project_name,count(*) AS count,group_concat(id) AS ids FROM oms_sync_project WHERE project_status != "DELETED" GROUP BY project_name HAVING count(*) > 1;
如果存在重名项目,请根据实际情况依次修改项目名称。命令如下:
数据迁移项目
UPDATE oms_project SET project_name=<数据迁移项目的新名称> WHERE id=<数据迁移项目 ID>;数据同步项目
UPDATE oms_sync_project SET project_name=<数据同步项目的新名称> WHERE id=<数据同步项目 ID>;
如果您的使用场景中存在级联场景(即某个 OceanBase 数据源,作为 A 项目的目标端的同时,也是 B 项目的源端),并且您曾更新过 Writer 的
blackRegionNo参数,则您需要进行以下检查:在 OMS 容器内部,执行下述命令,获取
cm_location对应的数字 xxx。cat /home/admin/conf/config.yaml | grep 'cm_location'登录 OMS 的
drc_cm数据库,执行下述命令。SELECT * FROM config_job WHERE `key`='sourceFile.blackRegionNo' AND VALUE!=xxx;如果查询结果非空,且该级联项目仍在使用,请联系 OMS 值班同学处理。否则请继续升级操作。
操作步骤
此处以升级 OMS 3.4.0 版本至 4.1.0 版本为例,操作如下:
如果开启了 HA 功能,请先关闭 HA。
备份数据库。
暂停 OMS V3.4.0 旧容器,记录时间 T1。
sudo docker stop ${CONTAINER_NAME}说明
CONTAINER_NAME为创建容器的名称。登录配置文件中的 CM 心跳库,备份数据。
# 登录配置文件中的 CM 心跳库 mysql -hxxx.xxx.xxx.xxx -P<port> -u<username> -p<password> -Dcm_hb_340 # 创建中间表 CREATE TABLE IF NOT EXISTS `heatbeat_sequence_bak` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'PK', `gmt_created` datetime NOT NULL, `gmt_modified` datetime NOT NULL, PRIMARY KEY (`id`) ) DEFAULT CHARSET=utf8 COMMENT='心跳 sequence 表'; # 将需要的数据备份至中间表 INSERT INTO heatbeat_sequence_bak SELECT `id`,`gmt_created`,`gmt_modified` FROM heatbeat_sequence ORDER BY `id` DESC LIMIT 1; # 重命名 heatbeat_sequence 表和中间表 # heatbeat_sequence 用于汇报心跳,获取自增 ID ALTER TABLE `heatbeat_sequence` RENAME TO `heatbeat_sequence_bak2`; ALTER TABLE `heatbeat_sequence_bak` RENAME TO `heatbeat_sequence`; # 删除原来的表 DROP TABLE heatbeat_sequence_bak2;执行下述命令,手工备份 rm、cm 和 cm_hb 库为 SQL 文件,并确认三个文件的大小不为 0。
mysqldump -hxxx.xxx.xxx.xxx -P<port> -u<username> -p<password> --triggers=false rm_340 > /home/admin/rm_340.sql mysqldump -hxxx.xxx.xxx.xxx -P<port> -u<username> -p<password> --triggers=false cm_340 > /home/admin/cm_340.sql mysqldump -hxxx.xxx.xxx.xxx -P<port> -u<username> -p<password> --triggers=false cm_hb_340 > /home/admin/cm_hb_340.sql
加载下载的 OMS 安装包至 Docker 容器的本地镜像仓库。
docker load -i <OMS 安装包>启动 OMS V4.1.0 新容器。
OMS 支持通过 HTTP 协议和 HTTPS 协议访问 OMS 控制台。如果您想要安全访问 OMS,可以提供 HTTPS 证书,并将其挂载至容器内的指定目录。如果使用 HTTP 协议访问 OMS,则无需配置。
注意
启动 OMS V4.1.0 新容器时,OMS 三个挂载盘的路径需要与升级前保持完全一致。
您可以执行sudo docker inspect ${CONTAINER_NAME} | grep -A5 'Binds'命令,查看之前旧 OMS 容器的挂载盘路径。OMS 3.3.1 及以上版本新增参数
-e IS_UPGRADE=true。该参数仅适用于升级场景,且升级场景下必须添加该参数。
OMS_HOST_IP=xxx CONTAINER_NAME=oms_xxx IMAGE_TAG=feature_x.x.x docker run -dit --net host \ -v /data/config.yaml:/home/admin/conf/config.yaml \ -v /data/oms/oms_logs:/home/admin/logs \ -v /data/oms/oms_store:/home/ds/store \ -v /data/oms/oms_run:/home/ds/run \ # 仅在 OMS 容器中挂载 HTTPS 证书时,需要设置如下两个参数 -v /data/oms/https_crt:/etc/pki/nginx/oms_server.crt -v /data/oms/https_key:/etc/pki/nginx/oms_server.key -e OMS_HOST_IP=${OMS_HOST_IP} \ -e IS_UPGRADE=true \ --privileged=true \ --pids-limit -1 \ --ulimit nproc=65535:65535 \ --name ${CONTAINER_NAME} \ work.oceanbase-dev.com/obartifact-store/oms:${IMAGE_TAG}进入新容器。
docker exec -it ${CONTAINER_NAME} bash执行下述命令,暂停 oms_console,使其保持为 STOPPED 状态。
supervisorctl stop oms_console确认 CM/Supervisor 组件处于 RUNNING 状态后,请参考如下命令执行升级 JAR。
注意
实际执行时,请根据实际情况替换参数值。
/opt/alibaba/java/bin/java -jar correction-1.0-SNAPSHOT-jar-with-dependencies.jar -mupgrade -y/home/admin/conf/config.yaml -ltrue参数 描述 -m 运行模式,支持 UPGRADE(执行升级操作)。 -y OMS 配置文件的绝对路径。 -l 表示是否是最后一个升级节点。单地域场景下,本参数需要设置为 true。多地域场景下,前面几个地域升级时,需要设置为false,且执行直到最后一个地域升级时,才可以设置为true。
说明:多地域多节点场景下,每个地域只需要选取第一个节点执行升级 JAR 即可。最后一个地域执行升级时,需要将-l参数设置为true。执行完成升级 JAR 后,在
root目录下,执行元数据初始化操作。bash /root/docker_init.sh执行上述命令后,脚本会自动将 OMS 三个数据库的 Schema 变更执行到数据库中。
docker_init.sh脚本执行完成后,请确认机器列表是否正常,且机器均处于 在线 状态。在 系统参数 页面,开启 HA 功能,并设置相关参数。
登录 OMS 控制台。
在左侧导航栏,单击 系统管理 > 系统参数。
在 系统参数 页面,找到
ha.config。单击该参数名称 取值 后的编辑图标。
在 修改取值 对话框中,设置
enable为true,开启 HA 功能,并记录时间 T2。建议您设置
perceiveStoreClientCheckpoint为true,设置后则无需记录 T1 和 T2 时间。设置
perceiveStoreClientCheckpoint为true后,refetchStoreIntervalMin保持默认值 30min 即可。HA 会根据下游组件的最早位点时间减去参数refetchStoreIntervalMin设置的时间启动 Store。例如,下游 connector/jdbc-connector 最早请求位点为 12:00:00,参数refetchStoreIntervalMin的设置时间为 30 分钟,则 HA 启动的 Store 位点为 11:30:00。如果您设置
perceiveStoreClientCheckpoint为false,请根据业务需求修改refetchStoreIntervalMin(回拉时间,单位为分钟)的取值,该取值需要大于 T2-T1 的值。
(可选)如果您需要进行回滚操作,请执行以下步骤。
根据第 1 步的操作,关闭 HA 功能。
暂停升级后的新容器,记录时间 T3。
sudo docker stop ${CONTAINER_NAME}连接元数据库,执行下述命令。
drop database rm_340; drop database cm_340; drop database cm_hb_340; create database rm_340; create database cm_340; create database cm_hb_340;将第 2 步中备份的数据库 SQL 文件,还原为原数据库。
mysql -hxxx.xxx.xxx.xxx -P<port> -u<username> -p<password> -e "source /home/admin/rm_340.sql" -Drm_340 mysql -hxxx.xxx.xxx.xxx -P<port> -u<username> -p<password> -e "source /home/admin/cm_340.sql" -Dcm_340 mysql -hxxx.xxx.xxx.xxx -P<port> -u<username> -p<password> -e "source /home/admin/cm_hb_340.sql" -Dcm_hb_340重启 OMS V3.4.0 旧容器。
sudo docker restart ${CONTAINER_NAME}在 系统参数 页面,开启 HA 功能。
说明
建议您设置
perceiveStoreClientCheckpoint为true。HA 功能开启后会自动容灾 Store,并自动拉起 Incr-Sync 组件,您还需要手动恢复 Full-Import 组件。
升级完成后,请先删除浏览器缓存,再进行登录。