基于OMS构建OceanBase容灾双活架构的实践

news2024/9/20 0:21:34

在实际生产环境中,对于关键业务,往往会有容灾双活的需求。除了OceanBase提供的主备库能力,通过官方工具OMS也可以实现容灾双活架构。目前,通过OMS实现的双活架构仅支持OceanBase数据库之间的数据同步。

要通过OMS实现双活架构,用户需要在各地域都部署OMS系统。若仅在单地域进行部署,则无法通过OMS实施双活架构。需要注意的是,在创建数据源时,两端的OceanBase集群也需要位于不同的地域,以满足异地双活架构的配置要求。

具体的安装配置过程,这里做了一个测试案例,并记录整个双活搭建的过程,以供大家参考。

环境准备

安装准备

OMS的多地域部署详细步骤也可以参考官网文档:OMS多地域部署

首先,需要在官网下载OMS安装包:官网下载地址,选择OceanBase迁移服务的安装包;

通过docker load -i <下载下来的安装包>的方式,将OMS镜像加载到本地(需要安装docker,版本不低于V1.13);

如果需要部署influxdb,可以使用docker或者本地部署的方式,这里采用和官网一样,docker部署,目前支持的时序数据库为 InfluxDB 1.8 版本;

环境资源规划
IP地址角色地域
172.24.255.16OMS的元数据库其他
172.24.255.24OMS节点1 & influxdb北京
172.24.255.25OMS节点2杭州
172.24.255.17源端OBServer节点北京
172.24.255.18目标端OBServer节点杭州

安装部署

安装influxdb(可选)

安装inflxudb之后,可以监控数据同步链路情况。

influxdb安装配置如下

# 运行influxdb docker环境
[root@oms oms]# sudo docker run  -dit -p 8086:8086 -p 14444:14444 \
> -v /omsdata:/var/lib/influxdb \
> --env INFLUXDB_BIND_ADDRESS=127.0.0.1:14444 \
> --env INFLUXDB_HTTP_AUTH_ENABLED=true \
> --env INFLUXDB_HTTP_PING_AUTH_ENABLED=true \
> --name=oms-influxdb \
> influxdb:1.8
95dedec9ea51147898d56b74dfaf021fba3543e8e1d903364f4a907af812c424

# 查看influxdb docker
[root@oms oms]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                              NAMES
95dedec9ea51        influxdb:1.8        "/entrypoint.sh in..."   5 seconds ago       Up 5 seconds        0.0.0.0:8086->8086/tcp, 0.0.0.0:14444->14444/tcp   oms-influxdb

# 进入容器中进行配置
[root@oms oms]# docker exec -it 95dedec9ea51 /bin/bash
root@95dedec9ea51:/# cd /usr/bin

# 创建用户,提供OMS连接
root@95dedec9ea51:/usr/bin# ./influx
Connected to http://localhost:8086 version 1.8.3
InfluxDB shell version: 1.8.3
> create user admin with password 'xxxxxx' with all privileges;
> exit
root@95dedec9ea51:/usr/bin# exit
exit
[root@oms oms]#

创建OMS配置文件

这里使用有配置文件的方式进行部署,配置文件内容如下:

# OMS 元数据库信息
oms_meta_host: 172.24.255.16
oms_meta_port: 2881
oms_meta_user: root@租户名  # 已为OMS创建好对应的租户,并设置了登陆密码
oms_meta_password: xxxxxx

# 用户可以自定义以下三个数据库的名称,OMS 部署时会在元信息库中创建出这三个数据库
drc_rm_db: drc_rm_db
drc_cm_db: drc_cm_db
drc_cm_heartbeat_db: drc_cm_heartbeat_db

# OMS 集群配置
# 单节点部署时,通常配置为当前 OMS 机器 IP(建议使用内网 IP)
cm_url: http://172.24.255.24:8088
cm_location: 100
# 单节点部署时,无需设置 cm_region
cm_region: cn-beijing
# 单节点部署时,无需设置 cm_region_cn
cm_region_cn: 北京
cm_is_default: true
cm_nodes:
 - 172.24.255.24

# 时序数据库配置
# 默认值为 false。如果您需要开启指标汇报功能,请设置为 true
tsdb_enabled: true
# 当 tsdb_enabled 为 true 时,请取消下述参数的注释并根据实际情况填写
tsdb_service: 'INFLUXDB'
tsdb_url: '172.24.255.24:8086'
tsdb_username: admin
tsdb_password: xxxxxx

注意,如果这里每个地域要部署多个OMS服务的话,cm_url 需要配置为当前地域所有 CM 隶属的一个 VIP 或域名下。这里因为北京和杭州两个地域,每个地域只部署一个节点,所以直接在每个地域选择使用本地节点IP。

安装OMS多地域
# 查看oms镜像
[root@oms oms]# docker images
REPOSITORY                                 TAG                 IMAGE ID            CREATED             SIZE
reg.docker.alibaba-inc.com/oceanbase/oms   feature_4.1.1_ce    258282c19081        5 weeks ago         3.82 GB
influxdb                                   1.8                 c15aefdd926b        2 years ago         307 MB

# 获取部署脚本
[root@oms oms]# sudo docker run -d --name oms-config-tool 258282c19081 bash && sudo docker cp oms-config-tool:/root/docker_remote_deploy.sh . && sudo docker rm -f oms-config-tool

# 执行安装部署,安装提示,一步一步进行选择
[root@oms oms]# sh docker_remote_deploy.sh -o /omsdata -c /opt/oms/oms_config.yaml -i 172.24.255.24 -d 258282c19081

提示:输入 <Control-C> 可退出部署

请选择部署模式:
 单地域单节点
 单地域多节点
●多地域
您选择的部署模式是:多地域部署模式
请选择您所需要进行的任务:
 无配置文件,全新部署 OMS,从生成配置文件开始
●已通过脚本[-c]选项传入参考配置文件,基于参考配置文件开始配置
已加载您的所有配置项,并校验通过。
您的配置如下:
{
    "apsara_audit_enable": "false",
    "apsara_audit_sls_access_key": "",
    "apsara_audit_sls_access_secret": "",
    "apsara_audit_sls_endpoint": "",
    "apsara_audit_sls_ops_site_topic": "",
    "apsara_audit_sls_user_site_topic": "",
    "cm_is_default": true,
    "cm_location": "100",
    "cm_nodes": [
        "172.24.255.24"
    ],
    "cm_region": "cn-beijing",
    "cm_region_cn": "北京",
    "cm_url": "http://172.24.255.24:8088",
    "drc_cm_db": "drc_cm_db",
    "drc_cm_heartbeat_db": "drc_cm_heartbeat_db",
    "drc_rm_db": "drc_rm_db",
    "oms_meta_host": "172.24.255.16",
    "oms_meta_password": "xxxxxx",
    "oms_meta_port": "2881",
    "oms_meta_user": "root@租户名",
    "tsdb_enabled": true,
    "tsdb_password": "xxxxxx",
    "tsdb_service": "INFLUXDB",
    "tsdb_url": "172.24.255.24:8086",
    "tsdb_username": "admin"
}

[y/n] 您是否需要重新配置?[n]n
您是需要在当前执行的机器上
接下来 OMS 需要在节点 ['172.24.255.24'] 上依次执行部署脚本。
请输入节点 172.24.255.24 上预备部署 OMS 的挂载目录:[/omsdata/]/omsdata/
请您确认以下内容:
[y/n] 部署 OMS 的 [镜像名/IMAGE-ID] 是:258282c19081 ,请确认是否正确。[y]y
[y/n] 是否需要在 OMS 容器中挂载 HTTPS 证书?[n]n
[y/n] 172.24.255.24 节点下的配置文件 config.yaml 将写在这个路径:/omsdata/ 下可以吗?[y]y


1d7e4d1df16c456474a71636ae73e01acb3f7b156376b43a7b32821de00ba751
[CHECK] Check the validity of config.yaml format.
[PASSED]
[CHECK] Check the version of Docker on the host machine.
Docker version is: 1.13.1.
[PASSED]
[CHECK] Check the synchronization between the MetaDB clock and the machine clock.
[PASSED]
Waiting docker_cmd.sh to finished
......

当出现如下:“【结束】全部初始化步骤执行成功”,则表示第一个地域已经安装完成

2023-09-08 16:34:10,322-urllib3.connectionpool-DEBUG connectionpool._new_conn.249 :Starting new HTTP connection (1): 172.24.255.24:8088
2023-09-08 16:34:10,343-urllib3.connectionpool-DEBUG connectionpool._make_request.482 :http://172.24.255.24:8088 "POST /consumer/create HTTP/1.1" 200 35
{"consumer":"drc","isSuccess":true}


--------------------------------------------------------------------------------
# 【结束】全部初始化步骤执行成功
--------------------------------------------------------------------------------

安装完成之后,因为是多地域,所以安装程序不会直接退出,接着需要配置和安装其他地域的oms

[y/n] 已完成地域:[['cn-beijing']]的部署,需要在新的地域上部署吗?[y]y
您选择的部署模式为多地域部署模式
请输入英文地域标识,如:cn-hangzhou:[cn-beijing]cn-hangzhou
请输入中文地域标识,如:杭州:[北京]杭州
请输入 OMS 集群管理服务的地址(即当前地域所有 CM 机器挂载的同一个 VIP 或域名,原配置项名称为:cm_url):[http://172.24.255.24:8088]http://172.24.255.25:8088
请依次输入本地域中所有机器 IP 地址,用","分隔:[172.24.255.24]172.24.255.25
请为当前地域(杭州)设置一个地域编号,范围为[0,127]:[100]101
您的 OMS 集群配置如下:
{
    "cm_is_default": false,
    "cm_location": "101",
    "cm_nodes": [
        "172.24.255.25"
    ],
    "cm_region": "cn-hangzhou",
    "cm_region_cn": "杭州",
    "cm_url": "http://172.24.255.25:8088"
}

[y/n] 请确认配置信息[y]y
接下来 OMS 需要在节点 ['172.24.255.25'] 上依次执行部署脚本。
请输入节点 172.24.255.25 上预备部署 OMS 的挂载目录:[/omsdata/]/omsdata/
请您确认以下内容:
[y/n] 部署 OMS 的 [镜像名/IMAGE-ID] 是:258282c19081 ,请确认是否正确。[y]y
[y/n] 是否需要在 OMS 容器中挂载 HTTPS 证书?[n]n
[y/n] 检查到待部署节点 172.24.255.25 与当前执行部署工具所在机器 IP 不一致,是否远程执行脚本(需要远程节点 172.24.255.25 能够通过 SSH 连接,用户具有远程节点上 sudo 权限)[y]y
[y/n] 请确认节点 172.24.255.25 的端口 22 是否能够通过 SSH 连通?[y]y
请输入节点:172.24.255.25 的用户名:root
请输入节点:172.24.255.25 的密码:***********
[y/n] 172.24.255.25 节点下的配置文件 config.yaml 将写在这个路径:/omsdata/ 下可以吗?[y]y
1b10361403d14e4584a53ef930737b7579dfd2f6da8c9f524b6a8c418dde302e
oceanbaseV5
[CHECK] Check the validity of config.yaml format.
[PASSED]
[CHECK] Check the version of Docker on the host machine.
Docker version is: 1.13.1.
[PASSED]
[CHECK] Check the synchronization between the MetaDB clock and the machine clock.
[PASSED]
Waiting docker_cmd.sh to finished
......

等待部署成功,部署完成之后,会提示已经安装完成哪些地域。如果不需要再安装新的地域,输入n退出即可。

2023-09-08 16:39:27,700-urllib3.connectionpool-DEBUG connectionpool._new_conn.249 :Starting new HTTP connection (1): 172.24.255.25:8088
2023-09-08 16:39:27,716-urllib3.connectionpool-DEBUG connectionpool._make_request.482 :http://172.24.255.25:8088 "POST /consumer/create HTTP/1.1" 200 116
{"errMsg":"com.alibaba.drc.exception.CMBizException: Consumer [drc] already exists","errCode":302,"isSuccess":false}


--------------------------------------------------------------------------------
# 【结束】全部初始化步骤执行成功
--------------------------------------------------------------------------------
[y/n] 已完成地域:[['cn-beijing', 'cn-hangzhou']]的部署,需要在新的地域上部署吗?[y]n
[root@oms oms]#

登陆访问OMS

这个时候无论访问 http://172.24.255.24:8089 还是 http://172.24.255.25:8089 都是可以的,这块也可以使用负载均衡,可以实现当其中一个oms挂了,不影响oms的访问和登陆。

OceanBase集群双活搭建

可参照官网文档 OceanBase 社区版之间的容灾双活,介绍了搭建容灾双活的使用限制和注意事项等。搭建容灾双活,需要依赖于OCP或者ConfigServer,ConfigServer安装部署可参考官网博客文档:【SOP 系列 15】configserver 安装和使用。

容灾双活需要创建两条同步链路,分别为正向同步链路和反向同步链路。

创建数据源

OMS多地域部署之后,在创建数据源时,如下图可以选择数据源为多个地域

1702609289

当OceanBase作为源数据库做增量同步时,需要指定OCP或者ConfigServer组件,这里先关联下已部署的OCP

1702609306

在数据源管理页面,创建双活两端的数据源

1702609320

创建完成之后如下,两个数据源分别在不同的地域

1702609339

创建正向同步链路

在数据迁移页面,开始创建正向同步链路

1702609356

选择好数据源之后,在使用场景这里选择容灾双活

1702609374

第二步,这里选择迁移类型,根据实际情况进行选择

1702609393

因为OceanBase作为源端,并且需要做增量同步,因此这里需要关联下OCP,填写账号密码

1702609411

如果没有OCP,这里也可以用ConfigUrl,如果单独安装了ConfigServer

1702609428

选择要同步的表

1702609464

迁移选项配置

1702609480

预检查

1702609496

出现如下警告,可以进到OceanBase数据库中做下修改

目标端数据库 max_allowed_packet 参数小于预期值 8388608 B,可能会导致数据迁移性能不佳。对目标端 OceanBase 的情况,建议 MySQL 模式 >= 8MB,Oracle 模式 >= 64MB,命令设置:set global max_allowed_packet=8388608。

开始同步

1702609514

此时已完成正向的同步链路创建,要想实现双活,还需要反向进行同步

1702609530

创建反向同步链路

反向同步链路创建方式与正向基本一致,不过需要注意的是在迁移类型部分

1702609546

迁移类型这里,不能再选择结构迁移和全量迁移,因为结构和全量数据已经通过正向链路进行了同步,并且不能同步DDL,正向和反向链路,只能有一个开启同步DDL,因此在这里只选择增量同步。

1702609565

其他的步骤都基本一样

1702609584

保存之后点击下一步

1702609602

配置迁移选项

1702609628

预检查

1702609649

开始同步

1702609667

双活测试

以下是双活的测试过程:

1702609684

分别开启两个窗口,连接两端的OceanBase数据库:

1、在OB1插入两条数据,可以在OB2端看到数据同步过去;

2、在OB2插入两条数据,可以看到在OB1端也同步过来;

3、在OB1端创建一张表,在OB2端该表结构也做了同步;

4、在OB2端对新建表插入数据,在OB1端可以查到插入的数据;

5、在OB1端对表结构进行变更,在OB2端可以看到变更成功。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2115064.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Node-API进行线程安全开发

一、Node-API线程安全机制概述 Node-API线程安全开发主要用于异步多线程之间共享和调用场景中使用&#xff0c;以避免出现竞争条件或死锁。 1、适用场景 异步计算&#xff1a;如果需要进行耗时的计算或IO操作&#xff0c;可以创建一个线程安全函数&#xff0c;将计算或IO操作放…

C#程序 Debugger,Release都没问题,但是,打包安装后:System.FormatException: 输入字符串的格式不正确

前言&#xff1a; 这是个问题解决&#xff0c;我们先谈问题&#xff1a; 这个问题不会再本地的调试机器上出现&#xff0c;但是&#xff0c;出现在你部署&#xff0c;或者说安装到其他的机器&#xff08;通过VS构建安装项目来做&#xff09; C#程序 Debugger&#xff0c;Relea…

javascript的模块化

1. 无模块化 script标签引入js文件&#xff0c;相互罗列&#xff0c;但是被依赖的放在前面&#xff0c;否则使用就会报错。如下&#xff1a; <script src"jquery.js"></script><script src"jquery_scroller.js"></script><scr…

Linux block_device gendisk和hd_struct到底是个啥关系

本文的源码版本是Linux 5.15版本&#xff0c;有图有真相&#xff1a; 1.先从块设备驱动说起 安卓平台有一个非常典型和重要的块设备驱动&#xff1a;zram&#xff0c;我们来看一下zram这个块设备驱动加载初始化和swapon的逻辑&#xff0c;完整梳理完这个逻辑将对Linux块设备驱…

.NET 一款用于解密web.config配置的工具

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

位运算:带带孩子吧,孩子很强的!

快速进制 在聊到位运算之前&#xff0c;不妨先简单过一遍二进制的东西。熟悉二进制和十进制的快速转换确实是掌握位运算的基础&#xff0c;因为位运算直接在二进制位上进行操作。如果不熟悉二进制表示&#xff0c;很难直观理解位运算的效果。 这里主要涉及二进制和十进制之间…

蓝桥杯嵌入式国三备赛经验分享

1 学习STM32入门视频 向大家推荐一套宝藏级别的视频&#xff1a;【STM32入门教程-2023版 细致讲解 中文字幕】 如果已经比过蓝桥杯单片机或学习过单片机相关课程的同学&#xff0c;你们可以尝试不需要STM32套件进行学习。如果没有学过单片机相关课程的同学&#xff0c;可以买…

直击智博会,supOS加快发展新质生产力,赋能全球工厂数字化转型

9月6日&#xff0c;第十四届智慧城市与智能经济博览会&#xff08;以下简称智博会&#xff09;开幕主题活动在宁波举办。本届智博会着重围绕“数字赋能新型工业化”主题&#xff0c;设置开幕活动、展览展示和前瞻研讨、产数合作、赛事赋能、开放活动等4大板块活动&#xff0c;旨…

全球AI产品Top100排行榜

Web Top50的榜单里&#xff0c;AIGC类型的应用占比52%&#xff0c;遥遥领先。AIGC类型包括图像、视频、音乐、语音等的内容生成和编辑。音乐生成应用Suno在过去六个月中的排名跃升最为显著&#xff0c;从第36位上升至第5位。排名第二大类是通用对话/AI聊天/角色扮演类型的应用&…

银河麒麟系统开机自动进入指定账户(如:root)桌面

目录 1. 需求的提出 2. 机器环境说明 3. 解决方法 4. 附加说明 1. 需求的提出 编写好的软件在客户的装有银河麒麟操作系统的机器上运行&#xff0c;但有些操作必须用root权限才能操作&#xff0c;如&#xff1a;打开串口。Linux下的普通账户打开串口时提示权限不足。在普通…

【HarmonyOS NEXT】实现截图功能

【HarmonyOS NEXT】实现截图功能 【需求】 实现&#xff1a;实现点击截图按钮&#xff0c;实现对页面/组件的截图 【步骤】 编写页面UI Entry Component struct Screenshot {BuildergetSnapContent() {Column() {Image().width(100%).objectFit(ImageFit.Auto).borderRadi…

C++入门(06)安装QT并快速测试体验一个简单的C++GUI项目

文章目录 1. 清华镜像源下载2. 安装3. 开始菜单上的 QT 工具4. 打开 Qt Creator5. 简单的 GUI C 项目5.1 打开 Qt Creator 并创建新项目5.2 设计界面5.3 添加按钮的点击事件5.4 编译并运行项目 6. 信号和槽&#xff08;Signals and Slots&#xff09; 这里用到了C类与对象的很多…

网络协议详解

目录 1.认识网络协议 2网络协议的设计 2.1网络通信的问题 2.2网络协议的分层设计 软件分层与网络分层 3.OSI七层网络模型 各层次的介绍如下 4.TCP/IP 五层协议 各层次说明 各层次所解决的问题 5.网络和操作系统之间的关系 单主机下 多主机下 6.重新理解网络协议 …

【鸿蒙HarmonyOS NEXT】页面之间相互传递参数

【鸿蒙HarmonyOS NEXT】页面之间相互传递参数 一、环境说明二、页面之间相互传参 一、环境说明 DevEco Studio 版本&#xff1a; API版本&#xff1a;以12为主 二、页面之间相互传参 说明&#xff1a; 页面间的导航可以通过页面路由router模块来实现。页面路由模块根据页…

kubernetes微服务基础及类型

目录 1 什么是微服务 2 微服务的类型 3 ipvs模式 ipvs模式配置方式 4 微服务类型详解 4.1 ClusterIP 4.2 ClusterIP中的特殊模式headless 4.3 nodeport 4.4 metalLB配合loadbalance实现发布IP 1 什么是微服务 用控制器来完成集群的工作负载&#xff0c;那么应用如何暴漏出去&…

JavaWeb——JavaScript(3/4)-JS对象:BOM、DOM(Window、Location,概念、标准模型、获取元素对象)

目录 BOM 介绍 Window 案例(1) Location DOM 概念 标准模型 获取元素对象 案例(2) 原始代码 完整代码 JS对象 BOM 介绍 概念&#xff1a;Browser Object Model 浏览器对象模型&#xff0c;允许JavaScript与浏览器对话&#xff0c;JavaScript 将浏览器的各个组成部…

git 提交自动带上storyid

公司里的运维团队的产品经理&#xff0c;那老六提出说要在每个提交带上的jira storyid或者bugid&#xff0c;不用他自己弄不顾他人麻烦&#xff0c;真想问候他的xx。不过既然已经成为定局&#xff0c;还是想想有没有其他办法。经一番调研&#xff0c;网上有比较零碎的信息&…

攻防世界--->地穴

前言&#xff1a;学习笔记。 下载 解压 查壳。 64位ida打开。 进入主函数。 很容易得知&#xff0c;这是一个RC4加密。 【 &#xff08;题外话&#xff09; 在reverse中&#xff0c;RC4考点&#xff0c;不会很难。 reverse中RC4关键点就是&#xff0c;抓住异或。 一般解这种…

Open a folder or workspace... (File -> Open Folder)

问题&#xff1a;vscode Open with Live Server 时 显示Open a folder or workspace... (File -> Open Folder)报错 解决&#xff1a;不可以单独打开文件1.html ; 需要在文件夹里打开 像这样

【哈希表】深入理解哈希表

目录 1、哈希表简介2、哈希函数2.1、概念2.2、常用的哈希函数2.2.1、直接定址法2.2.2、除留余数法2.2.3、平方取中法2.2.4、基数转换法 3、哈希冲突3.1、概念3.2、开放地址法【闭散列&#xff1a;key存放到冲突位置的“下一个”空位置】3.3、链地址法【开散列&#xff1a;冲突位…