架构图:
配置流程:
- 集群部署略过,上面文章有介绍
- 两地部署集群完成后,部署OCP平台,OCP连接OBD拉起的ODP集群VIP,以达到高可用目的
- 在OCP平台接管集群,然后分别添加业务层的ODP主机
- 通过OCP平台拉起业务层的ODP集群,与上面OBD拉起的ODP集群起到隔离作用,把OCP的流量与业务层流量隔离,分流到不同的ODP集群
- 配置归档目的端,用于同步数据、日志
- 配置两地机房的租户主备关系
配置两地机房的主备租户流程:
#官方文档配置主备租户的方法: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
主租户不可用的情况下,可以将一个备租户切换为主租户。使用了这个方式切主,需要重新建立主备关系。