当前位置: 首页 > news >正文

OceanBase主备库日志传输服务

OceanBase主备库日志传输服务

  • 两种备库模式对比
  • 配置日志恢复源
    • 基于日志归档的物理备库
    • 基于网络的物理备库
  • 配置日志恢复终点
  • 查看日志恢复源信息
  • 查看日志同步进度
  • 暂停或开启日志同步
    • 暂停日志同步
    • 开启日志同步
  • 开启日志同步压缩

两种备库模式对比

📖根据主备库之间的日志传输服务,可以分为基于日志归档的物理备库和基于网络的物理备库:

  • 基于日志归档的物理备库:物理备库的Redo日志来源于主租户或其他备租户的日志归档。因此主租户必须开启归档,并且备租户必须能够访问到主租户的归档日志(主租户使用NFS或OSS作为归档目的端)。
  • 基于网络的物理备库:备租户直接通过网络连接主租户或其他备租户读取日志。主库可以开启归档,也可以关闭归档。主库关闭归档时,备库读取的是主租户的在线日志。

⚠️ 注意事项:

  • OB主备租户可以位于同一集群或者不同集群
  • 同一套主备关系仅支持使用相同的同步方式。也就是说,如果是一主多备,要么所有备库都基于日志归档,要么所有备库都基于网络同步。
  • 基于日志归档的部署场景中,目前支持的存储介质有NFS(网络共享文件系统)和OSS对象存储。
  • 目前OB物理备库仅支持异步同步的模式。
功能项基于日志归档的物理备库基于网络的物理备库
是否支持Switchover支持支持
是否支持Failover支持支持
是否支持一个主库对接多个备库支持支持
是否支持级联备库支持支持
是否为异步同步
是否支持最大可用或最大保护模式不支持不支持
是否支持备库限速不支持支持,集群级限速
备库的数据源归档日志主库的在线日志或归档日志,支持自动切换
是否要求主库开启归档模式要求(否则无法创建备租户)不要求(但建议主库开启归档)
是否要求备库开启归档模式要求(否则无法执行Switchover)不要求(但建议备库开启归档)
实时性秒级 ~ 分钟级秒级
日志归档支持的存储介质OSS/NFS不涉及

配置日志恢复源

根据主备库之间的日志传输服务,可以分为基于日志归档的物理备库和基于网络的物理备库。前者要求主库必须开启归档。

无论是基于日志归档的物理备库,还是基于网络的物理备库,都需要为备租户设置日志恢复源。两种部署方式的日志恢复源支持随时按需动态修改,同时也支持从一种日志恢复源切换为另外一种日志恢复源。

⭐️ 根据主租户是否开启了归档、以及归档目的端来决定使用哪一种备库模式:

  • 主租户没有开启归档:备租户只能是基于网络的物理备库。
  • 主租户开启了归档,并且使用本地文件系统(仅限单机)作为归档目的端:备租户只能是基于网络的物理备库。
  • 主租户开启了归档,并且使用NFS或OSS等共享存储作为归档目的端:备租户既可以是基于网络的物理备库,也可以是基于归档的物理备库。

基于日志归档的物理备库

基于日志归档的物理备库中,物理备库的Redo日志来源于主租户或其他备租户的日志归档,类似于Oracle数据库的Far Sync

  • 备租户仅与日志归档交互,而不会和上游的主租户或备租户有任何其他形式的交互。
  • 在该部署模式下,备租户与上游租户不需要网络联通,但其同步性能和可用性会受到日志归档介质的影响。
  • 主租户必须开启归档,并且备租户必须能够访问到主租户的归档日志(主租户使用NFS或OSS作为归档目的端)。

使用管理员用户登录备租户或备租户所在集群的sys租户。

🐘 配置备租户的恢复源指向主租户的归档目的端(假设备租户为standby_tenant):

  • 主库使用NFS归档
ALTER SYSTEM SET LOG_RESTORE_SOURCE ='location=file:///data/1/sh_archive' TENANT = standby_tenant;
  • 主库使用OSS归档:`
ALTER SYSTEM SET LOG_RESTORE_SOURCE ='location=oss://oceanbase-test-bucket/backup/archive?host=****.aliyun-inc.com&access_id=****&access_key=****' TENANT = standby_tenant;

基于网络的物理备库

基于网络的物理备库中,备租户直接通过网络连接主租户或其他备租户读取日志,类似于MySQL数据库的Replication。

  • 在该部署模式下,备租户和主租户的网络需要联通。备租户会通过网络发送RPC请求读取主租户集群中的Redo日志。
  • 备租户从主租户读取的日志,既可以是主租户的在线日志,也可以是主租户的归档日志(主租户开启了日志归档模式的前提下),两种日志来源支持自动切换,对备租户以及业务的使用者透明。

🐘 配置备租户的恢复源指向主租户的归档目的端(假设备租户为standby_tenant):

  1. 创建访问系统视图的用户

由于备租户是只读的,需要在主租户上面创建并授权用户。

--主租户是MySQL模式
CREATE USER rep_user IDENTIFIED BY '******';
GRANT SELECT ON oceanbase.* TO rep_user;--主租户是Oracle模式
CREATE USER rep_user IDENTIFIED BY ******;
GRANT STANDBY_REPLICATION TO rep_user;
  1. 获取主租户或源端的备租户的访问入口信息

使用管理员用户登录主租户或级联的上游源端的备租户。

获取访问入口信息(OBServer节点的IP地址及其端口号):

--SYS租户
SELECT * FROM oceanbase.CDB_OB_ACCESS_POINT;--主租户是MySQL模式
SELECT * FROM oceanbase.DBA_OB_ACCESS_POINT;--主租户是Oracle模式
SELECT * FROM SYS.DBA_OB_ACCESS_POINT;
  1. 检查主租户设置

在当前主备架构下,当主租户进行缩容、Transfer等操作后,容易出现主租户的日志流被删除、日志被回收从而导致备租户日志同步卡住的问题。为了解决该问题,需要在主租户上开启归档模式、或者为主租户设置租户级配置项ls_gc_delay_time

  • 检查主租户是否开启归档模式:ARCHIVELOG表示主租户已开启归档模式,NOARCHIVELOG表示未开启归档模式。
SELECT LOG_MODE FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME='tenant_name';
  • 检查主租户上配置项ls_gc_delay_time的值是否大于0s
SHOW PARAMETERS LIKE '%ls_gc_delay_time%';

租户级配置项ls_gc_delay_time用于配置日志流的延迟删除时间,默认值为0s,表示未开启日志流延迟删除功能。当设置了配置项ls_gc_delay_time并且未开启归档时,一个日志流在满足被删除的条件后会等待一定的时间才会被回收。

  1. 设置日志恢复源

使用管理员用户登录备租户或备租户所在集群的sys租户。

执行以下命令,设置日志恢复源:

ALTER SYSTEM SET LOG_RESTORE_SOURCE ='SERVICE=$ip_list USER=$user_name@$tenant_name PASSWORD=$password' TENANT = standby_tenant_name;

其中:

  • $ip_list:主租户所在副本的OBServer节点的IP及SQL端口号(默认为2881)。此处填写步骤2中获取的访问入口信息。如果有多个OBServer节点信息,可以不用填写全部OBServer节点的信息。
  • $user_name:步骤1中创建的访问视图的专用用户。
  • $tenant_name:待连接的主租户名或级联的上游源端备租户名。
  • $password:步骤1中创建的访问视图的专用用户口令。

示例:

ALTER SYSTEM SET LOG_RESTORE_SOURCE = 'SERVICE=11.xx.xx.22:17855;11.xx.xx.23:17857;11.xx.xx.24:17859 USER=rep_user@mysql_tenant PASSWORD=******' TENANT = standby_tenant;

设置成功后,sys租户或用户租户可以分别通过CDB_OB_LOG_RESTORE_SOURCE视图和DBA_OB_LOG_RESTORE_SOURCE视图,确认日志恢复源是否修改成功。

select * from oceanbase.CDB_OB_LOG_RESTORE_SOURCE;

⭐️ sys租户下检查备租户的日志恢复源是基于归档还是基于网络

  • TYPE列为LOCATION,表示备租户是通过主租户或源端的备租户的日志归档来同步日志。
  • TYPE列为SERVICE,表示备租户是通过网络连接主租户或源端的备租户来同步日志。
SELECT * FROM oceanbase.CDB_OB_LOG_RESTORE_SOURCE;

配置日志恢复终点

使用管理员用户登录备租户或备租户所在集群的sys租户。

使用sys租户执行RECOVER命令,设置备租户的日志恢复终点。

ALTER SYSTEM RECOVER STANDBY TENANT = standby_tenant_name UNTIL UNLIMITED;

执行该语句后,备租户会进入持续同步模式。

查看日志恢复源信息

CDB_OB_LOG_RESTORE_SOURCE视图和DBA_OB_LOG_RESTORE_SOURCE视图中记录了日志恢复源信息。

登录备租户所在集群的SYS租户。

查看日志恢复源信息:

--SYS租户下
SELECT * FROM oceanbase.CDB_OB_LOG_RESTORE_SOURCE;--MySQL租户下
SELECT * FROM oceanbase.DBA_OB_LOG_RESTORE_SOURCE;--Oracle租户下
SELECT * FROM SYS.DBA_OB_LOG_RESTORE_SOURCE;

其中:

  • TYPE列为LOCATION,表示备租户是通过主租户或源端的备租户的日志归档来同步日志。
  • TYPE列为SERVICE,表示备租户是通过网络连接主租户或源端的备租户来同步日志。

查看日志链路信息:

--SYS租户下
SELECT * FROM oceanbase.GV$OB_LOG_TRANSPORT_DEST_STAT;--MySQL租户下
SELECT * FROM oceanbase.GV$OB_LOG_TRANSPORT_DEST_STAT;--Oracle租户下
SELECT * FROM SYS.GV$OB_LOG_TRANSPORT_DEST_STAT;

查看日志同步进度

对于主租户而言,每个主租户至少有两个日志流,即一个系统日志流,一个普通日志流。备租户与主租户的日志流数相同,也至少有两个日志流,其日志同步进度需要考虑多个日志流的总同步进度。

在同一个租户内,不同日志流之间的同步时间是可比较的,备租户总的同步进度为每个日志流同步进度的最小值。

登录备租户所在集群的SYS租户。

obclient(root@sys)[oceanbase]> SELECT TENANT_NAME, TENANT_ID, TENANT_ROLE, SCN_TO_TIMESTAMP(SYNC_SCN) 
FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'beizuhu';
+-------------+-----------+-------------+----------------------------+
| TENANT_NAME | TENANT_ID | TENANT_ROLE | SCN_TO_TIMESTAMP(SYNC_SCN) |
+-------------+-----------+-------------+----------------------------+
| beizuhu     |      1008 | STANDBY     | 2025-09-28 09:49:13.137952 |
+-------------+-----------+-------------+----------------------------+
1 row in set (0.011 sec)

查询结果中,SCN_TO_TIMESTAMP(SYNC_SCN)列显示了备租户当前的同步进度。将该时间与实际时间进行对比,如果相差较多,则表示备租户的同步进度落后于主租户。

确认备租户同步进度较慢之后,可以执行以下命令,进一步查询同步进最慢的日志流。

SELECT LS_ID, SCN_TO_TIMESTAMP(END_SCN) FROM oceanbase.GV$OB_LOG_STAT WHERE TENANT_ID = 1008 AND ROLE = 'LEADER';

备租户也可以看自己的日志同步进度:

--MySQL租户下
SELECT TENANT_NAME, TENANT_ROLE, SCN_TO_TIMESTAMP(SYNC_SCN) FROM oceanbase.DBA_OB_TENANTS;--Oracle租户下
SELECT TENANT_NAME, TENANT_ROLE, SCN_TO_TIMESTAMP(SYNC_SCN) FROM SYS.DBA_OB_TENANTS;

暂停或开启日志同步

备租户在日志同步过程中,支持暂停日志同步以及暂停后重新开启日志同步。

暂停日志同步

登录备租户所在集群的SYS租户。

暂停日志同步:

ALTER SYSTEM RECOVER STANDBY [TENANT = tenant_name] CANCEL ;

仅在使用sys租户执行命令时,才需要在语句中添加TENANT=tenant_name参数指定备租户名。

暂停日志同步后,备租户不会再从主租户同步任何日志。需要尽量避免因暂停日志同步而导致的备租户日志断流。

暂停同步后,可以分别查询DBA_OB_TENANTSGV$OB_LOG_STAT视图,发现此时日志流的同步进度会停留在命令执行的时间点。

开启日志同步

暂停日志同步后,可以通过更改备租户恢复终点的方式再次开启日志同步。

登录备租户所在集群的SYS租户。

ALTER SYSTEM RECOVER STANDBY [TENANT = tenant_name] UNTIL UNLIMITED;

仅在使用sys租户执行命令时,才需要在语句中添加TENANT=tenant_name参数指定备租户名。

开启日志同步压缩

在备租户的日志同步过程中,可以开启日志同步压缩,以便减少日志传输过程中所使用的带宽。

⭐️ 租户级配置项log_transport_compress_all用于设置日志传输是否开启压缩,默认值为False,表示日志传输不开启压缩。

登录备租户所在集群的SYS租户。

系统租户下指定备租户开启日志同步压缩:

ALTER SYSTEM SET log_transport_compress_all = True TENANT = beizuhu;

开启日志同步压缩后,系统默认会按照压缩算法lz4_1.0对日志进行压缩。

如果需要修改压缩算法,可修改配置项log_transport_compress_func的值。

⭐️ 租户级配置项log_transport_compress_func用于设置日志传输所使用的压缩算法,当前支持的压缩算法有lz4_1.0zstd_1.0zstd_1.3.8,默认为lz4_1.0

系统租户下修改指定备租户的压缩算法:

ALTER SYSTEM SET log_transport_compress_func = 'zstd_1.0' TENANT = beizuhu;

References
【1】https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000003379237

http://www.dtcms.com/a/418825.html

相关文章:

  • React-props的children属性
  • 济宁做网站的公司邯郸公司网站建设
  • 特别分享:关于Pipeline
  • 速通ACM省铜第十七天 赋源码(Racing)
  • ARM(IMX6ULL)——通信(IIC/I2C)
  • 零基础学AI大模型之LangChain-PromptTemplate
  • FFT去除规律条纹
  • JAVA中的权限修饰符
  • 前端面试十四之webpack和vite有什么区别
  • 小米路由器 做网站银川森林半岛
  • Kafka04-知识速记
  • 【Linux】高级I/O
  • 开源的容器化平台:Docker高级应用与实战案例
  • 3.7 广域网 (答案见原书 P116)
  • 临淄网站制作首选公司seo排名需要多少钱
  • k8s-部署单master节点
  • Python 2025:量子计算编程的新前沿
  • 二级学院网站建设自评报告互联网营销公司有哪些
  • 做网站滨州现在写博客还是做网站
  • 基于 Service Worker 的图书馆资源缓存技术研究
  • php网站后台验证码不显示哈尔滨教育云平台网站建设
  • 银行门户网站是什么意思网页设计代码中字体的颜色如何改
  • 【代码的暴力美学】-- C语言基础编程题_1
  • Java 架构师系列:JVM 与 AI 负载的优化策略
  • 数据分析-Excel-常用函数
  • Python 文件操作
  • Java 大视界 -- Java 大数据机器学习模型在电商产品销量预测与库存优化管理中的应用
  • 陕西开龄建设网站浙江省建设厅网站如何查安全员
  • 使用 Jenkins 的流水线项目实施 CI/CD
  • 网站建设平台安全问题有哪些方面做网站自动赚钱吗