物理备库容灾,创建空备租户报错ERROR 4765

【 使用环境 】 测试环境
【 OB or 其他组件 】
【 使用版本 】oceanbase-ce-4.3.5.1
【问题描述】 创建空备租户报错:
CREATE STANDBY TENANT IF NOT EXISTS haiyisec LOG_RESTORE_SOURCE = “SERVICE=10.22.10.92:3306 USER=rep_user@mysql PASSWORD=123456” RESOURCE_POOL_LIST=(‘haiyisec_pool’);

ERROR 4765 (HY000): create standby tenant may fail, SYS LS sync status is abnormal: NOT AVAILABLE, please check V$OB_LS_LOG_RESTORE_STATUS

【复现路径】
1.机器A (10.22.10.92)和机器B(10.22.10.93) 分别部署oceanbase容器,执行以下命令:
docker run -d
-p 3306:2881
-p 2882:2882
-v /root/oceanbase/ob:/root/ob
-v /root/oceanbase/obd/cluster:/root/.obd/cluster
-v /root/oceanbase/hybackup:/hybackup
–name odb
-e OB_TENANT_NAME=mysql
-e OB_TENANT_PASSWORD=123456
oceanbase/oceanbase-ce
2.机器A: 备租户的源端 ,进行如下操作
(SELECT LS_ID FROM oceanbase.CDB_OB_LS_HISTORY WHERE TENANT_ID = ‘mysql’) EXCEPT (SELECT LS_ID FROM oceanbase.CDB_OB_LS WHERE TENANT_ID = ‘mysql’);
(SELECT LS_ID FROM oceanbase.DBA_OB_LS_HISTORY) EXCEPT (SELECT LS_ID FROM oceanbase.DBA_OB_LS);
以上查询结果都为空;
然后执行:ALTER SYSTEM ARCHIVELOG;
接着创建用户:CREATE USER rep_user IDENTIFIED BY ‘123456’;
GRANT SELECT ON oceanbase.* TO rep_user;
3.机器B:
a.先删除租户:DROP TENANT mysql;
b.创建空备租户出现问题描述的错误。
4.配置文件config.yaml:
oceanbase-ce:
servers:

  • 172.17.0.2
    global:
    home_path: /root/ob/observer
    mysql_port: 2881
    rpc_port: 2882
    zone: zone1
    appname: obcluster
    memory_limit: 6G
    system_memory: 1G
    datafile_size: 5G
    log_disk_size: 5G
    root_password:
    scenario: express_oltp
    obconfig_url:
    cpu_count: 16
    production_mode: false
    syslog_level: INFO
    enable_syslog_wf: false
    enable_syslog_recycle: true
    max_syslog_file_count: 4
    enable_rich_error_msg: true
    cluster_id: 1754299056
    5.参考的文档:
    https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002013557

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

针对您遇到的问题,我们可以使用 obdiag 工具来采集相关日志和进行根因分析。根据您提供的错误信息,这可能是由于主租户的同步状态异常导致的。为了更好地诊断问题,请先使用 obdiag 进行日志采集。

日志采集场景: 主备库延迟
日志采集命令: obdiag gather scene run --scene=observer.delay_of_primary_and_backup

请您执行上述命令,并将采集到的日志压缩包提供给我们。这将有助于我们进一步分析问题。

另外,为了确定具体的问题,在此需要您提供一些信息:

  1. 您的主租户和备租户分别部署在哪些服务器上?
  2. 主租户和备租户之间的网络连接是否正常?
  3. 您可以查看 V$OB_LS_LOG_RESTORE_STATUS 视图,确认具体的同步状态吗?
  4. 在创建备租户之前,是否有任何操作或事件可能导致主租户的同步状态异常?
  5. 您是否已经尝试过重启主租户或备租户?

感谢您的配合,我们会尽快为您解决问题。

附上敏捷诊断工具 obdiag 使用帮助链接

1.主部署在机器A (10.22.10.92) ,备部署在机器B(10.22.10.93)
2.网络正常,在备机器的容器里面可以访问主10.22.10.92:3306,反之也可以
3. V$OB_LS_LOG_RESTORE_STATUS查询结果 问题描述里面有,错误码8004
4.没有
5.重启过主租户也没用


可以检查一下两个集群的集群名,用 sys 租户连上去 show parameters like ‘%cluster%’; 可以查看到集群名和集群 ID,有可能集群名一样,但是集群 ID 不一样,可以尝试部署的时候通过环境变量 OB_CLUSTER_NAME 指定一下不同的集群名。

指定不同的集群名之后,出现了下面的报错:
select * from V$OB_LS_LOG_RESTORE_STATUS\G
*************************** 1. row ***************************
TENANT_ID: 1012
LS_ID: 1
SYNC_LSN: 0
SYNC_SCN: 1
SYNC_STATUS: NOT AVAILABLE
ERR_CODE: -4122
COMMENT: Unexpected exceptions
1 row in set (0.002 sec)

这两个是在一台机器上吗,observer 应该是用容器的 ip bootstrap 的,是不是因为互相访问不了,可以确认下网络是不是能够连通的。

确实有问题:创建备租户使用了宿主机的ip和映射端口,语句如下
CREATE STANDBY TENANT IF NOT EXISTS haiyisec LOG_RESTORE_SOURCE = “SERVICE=10.22.10.92:3306 USER=rep_user@mysql PASSWORD=123456” RESOURCE_POOL_LIST=(‘haiyisec_pool’);

但是,查询这个数据的时候,这个地址会变为 主租户对应 容器内的地址,因为是2个不同的机器,用这个地址肯定无法访问,请问下有什么方式解决吗?

如果一定要用容器话的话可以看下 ob-operator,在 K8s 上部署,不然可能没什么办法,这个地址应该是 observer 会根据查询到的内部表中的地址来。

https://oceanbase.github.io/ob-operator/zh-Hans/docs/manual/ob-operator-user-guide/high-availability/standby-tenant-of-ob-operator

没有k8s环境,我们公司统一使用的是通过docker部署管理,那是不是 意味着dokcer单机部署的不能使用 物理备库容灾的功能了?