两地两中心灾备,伪异地双活

两地两中心灾备,伪异地双活

Deng YongJie's blog 1,871 2023-03-26

架构图:

OceanBase异地双活架构设计

配置流程:

  1. 集群部署略过,上面文章有介绍
  2. 两地部署集群完成后,部署OCP平台,OCP连接OBD拉起的ODP集群VIP,以达到高可用目的
  3. 在OCP平台接管集群,然后分别添加业务层的ODP主机
  4. 通过OCP平台拉起业务层的ODP集群,与上面OBD拉起的ODP集群起到隔离作用,把OCP的流量与业务层流量隔离,分流到不同的ODP集群
  5. 配置归档目的端,用于同步数据、日志
  6. 配置两地机房的租户主备关系

配置两地机房的主备租户流程:

#官方文档配置主备租户的方法:https://www.oceanbase.com/docs/common-oceanbase-database-cn-10000000001697255

#首先执行开启归档,在惠州集群需要成为主租户的,sys租户执行
obclient -h172.18.x.x -P2883 -uroot@sys#hz-obcluster -p'xxxxxx' -Doceanbase -A

#注意这里的目录要为空的,可以随意定义名字。但是要区分开主租户
ALTER SYSTEM SET LOG_ARCHIVE_DEST='LOCATION=file:///oceanbase_backup/hz-obcluster/xxx_tenant_hz/archive' TENANT = xxx_tenant;

ALTER SYSTEM SET data_backup_dest='file:///oceanbase_backup/hz-obcluster/xx_tenant_hz/data' TENANT = xx_tenant;

ALTER SYSTEM ARCHIVELOG TENANT = xx_tenant;

#如果需要重新设置归档目的端,则需要关闭归档才能重置。
ALTER SYSTEM NOARCHIVELOG TENANT = xx_tenant;

#系统租户查看集群中所有租户的归档进度
SELECT * FROM oceanbase.DBA_OB_ARCHIVELOG;

#查看集群中所有租户的归档模式是否为ARCHIVELOG。
SELECT TENANT_NAME, LOG_MODE FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_TYPE='USER'\G

#查看归档状态为DOING后再执行备份
SELECT * FROM oceanbase.DBA_OB_ARCHIVELOG;

#先发起备份,可以指定租户发起
ALTER SYSTEM BACKUP TENANT = xx_tenant;

#查看备份结果,完成后可以查看备份集时间点
SELECT * FROM oceanbase.CDB_OB_BACKUP_JOB_HISTORY\G

#记录备份集时间点,后面恢复时需要用到。注意更换租户的ID,别搞错了
SELECT * FROM oceanbase.CDB_OB_BACKUP_SET_FILES WHERE backup_set_id = 1 AND tenant_id = 1006\G

#记录时间点为
END_TIMESTAMP: 2023-05-29 16:14:46.446370


#在广西集群创建备租户的资源池、资源单元。
创建资源单元:
CREATE RESOURCE UNIT resource_unit_xx MAX_CPU 8, MIN_CPU 1, MEMORY_SIZE '16G', MAX_IOPS 80000, MIN_IOPS 10000, IOPS_WEIGHT 0, LOG_DISK_SIZE '500G';

创建资源池:
CREATE RESOURCE POOL xx_pool UNIT='resource_unit_xx',UNIT_NUM=1,ZONE_LIST=('zone1','zone2','zone3');


#然后在广西备租户执行,恢复惠州主租户的数据和日志。注意修改租户名字,目录地址改成上面定义的。然后把时间改成上面的备份集时间点,然后把pool名字改成上面创建的资源池名字
ALTER SYSTEM RESTORE standby_xx_tenant FROM 'file:///oceanbase_backup/hz-obcluster/xx_tenant_hz/data,file:///oceanbase_backup/hz-obcluster/xx_tenant_hz/archive' until TIME='2023-05-29 16:14:46.446370' WITH 'pool_list=xx_pool';

#注意:上面恢复租户的时候,如果开启了回收站功能,并且删除过相同名字的租户,需要清理回收站,重新发起恢复租户。否则会提示恢复租户超时等报错!

#上面的恢复命令会比较慢,耐心等待。然后查询恢复状态,查看STATUS字段,RESTORING就是恢复中。
SELECT * FROM CDB_OB_RESTORE_HISTORY;


#刚恢复出的新备租户不会连续同步主租户或备租户归档的日志,需要通过 RECOVER 命令设置备租户的恢复终点。
#等到上面查询的SUCCESS 状态完成后,才能执行下面命令。设置指定备租户名 UNLIMITED(表示无穷大)一直进行同步归档日志,主备的作用。
ALTER SYSTEM RECOVER STANDBY tenant = standby_xx_tenant UNTIL UNLIMITED;



#然后把同步的SCN转换成时间,再把这个时间和和本地时间作对比,判断延迟是否同步正常,和当前时间区间不大则正常。注意修改最后面的备租户名字。同时这也是查看主备同步状态的命令和依据
SELECT TENANT_NAME, TENANT_ROLE, SWITCHOVER_STATUS, SCN_TO_TIMESTAMP(SYNC_SCN)  FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'standby_xx_tenant';


#然后登录主租户,创建数据,看下同步是否正常。
obclient -h172.18.x.x -P2883 -uroot@xx_tenant#hz-obcluster -p'xxxxxx'
create database jette_test;
use jette_test;
create table sdftest (id int , name char(20));


#然后登录备租户查看是否有数据。注意修改租户名字为备租户,跟主租户的名字不一样
obclient -h192.168.x.x -P2883 -uroot@standby_xx_tenant#gx-obcluster -p'xxxxxx'

show databases;
#有数据同步则配置完成!

#可以在线重命名租户名字,登录到备租户
ALTER TENANT standby_xx_tenant RENAME GLOBAL_NAME TO gx_xx_tenant;
#然后查看主备关系是否更新过来
SELECT TENANT_NAME, TENANT_ROLE, SWITCHOVER_STATUS, SCN_TO_TIMESTAMP(SYNC_SCN)  FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'gx_xx_tenant';

如果主租户故障,则需要手动去备租户切换为主。无法自动切换!有以下两种方式:

Switchover
允许主租户与其中一个备租户交换角色,保证数据无损。两地集群正常的情况下任意切换主备角色

Failover
主租户不可用的情况下,可以将一个备租户切换为主租户。使用了这个方式切主,需要重新建立主备关系。

如果某个集群down了只能用failover,两个集群正常情况下,可以使用switchover切换角色