有比较多的运维操作,例如 ADD REPLICA LS,MIGRATE REPLICA LS 等,这个几个官网上都有介绍此文档不再详细介绍使用方法了,需要注意的是都会存在一个限制就是必须在目标机器上拥有租户的 Unit 资源,因此需要知道租户 Unit 资源从哪来的,如何让这个机器拥有 Unit 资源,本文档详细说明租户 Unit 的创建、副本与 Unit 的关系,以及典型运维场景的解决方案。
详细说明
租户资源
租户资源(租户 Unit)是 OceanBase 多租户架构中的核心概念,用于定义租户的资源分配和副本分布规则。通过合理配置资源规格、资源池和租户属性,可以实现资源隔离、高可用性和灵活扩展。 租户 Unit 是在创建租户时设定的,创建一个租户的过程(详情参见:创建租户)。
创建资源规格(UNIT_CONFIG): CPU、内存、磁盘空间、IOPS 等资源项进行的定义。总的来说是对单个 Unit 配置。
CREATE RESOURCE UNIT if not exists unit_1 MAX_CPU 2, MEMORY_SIZE='2G';创建资源池(RESOURCE_POOL): 通过规定
ZONE_LIST和UNIT_NUM来确定 Unit 的位置信息。CREATE RESOURCE POOL if not exists pool_1 UNIT = 'unit_1', UNIT_NUM = 1, ZONE_LIST = ('zone1', 'zone2', 'zone3');创建租户: 将之前创建的资源池
RESOURCE_POOL分配个租户并确定租户的LOCALITY(缺省为ZONE_LIST),一个租户可以分配多个ZONE_LIST不冲突的资源池RESOURCE_POOL,但是每个资源池RESOURCE_POOL最多只能分配给一个租户。CREATE TENANT mysql RESOURCE_POOL_LIST = ('pool_1'), primary_zone='zone2', locality="F@zone2, F@zone3" set ob_tcp_invited_nodes='%';通过创建的 mysql 租户(tenant_id = 1004)查看
CDB_OB_LS视图,具体内容如下图所示。
可知日志流副本分布在
zone2和zone3上。通过创建的 mysql 租户(tenant_id = 1004)查看
DBA_OB_UNITS视图,具体内容如下图所示。
可知 Unit 资源分布在
zone1,zone2,zone3上。综上可知:有租户 Unit 的机器上不一定有这个租户的日志流副本存在,出现空 Unit 的情况也是正常的,但是日志流副本只能在对应租户的 Unit 下建立。
决定 Unit 分布,日志流副本的分布的因素如下:
设定
RESOURCE_POOL中的ZONE_LIST和UNIT_NUM决定了租户 Unit 所在位置。(对于同构 Zone 来说决定租户 Unit 所在位置的可能性不大,但是对于异构 Zone(OceanBase 数据库 V4.2.5 BP5 版本)而言每个 Zone 可能都是由不同的的RESOURCE_POOL来限定,这个时候 Unit 位置就比较重要了)。设定
LOCALITY决定了用户创建日志流副本在 Zone 的分布。
运维场景
日志流 LEADER 迁移
当 DDL 操作的很慢可能的一个原因是 RS 与用户 1 号日志流的 LEADER 不在一台机器上,若相切在一起。
如果当前 1:1:1 环境:用户 1 号日志流的
LEADER在zone2,RS 在zone1,则修改系统日志流的PRIMARY_ZONE,使LEADER迁移至指定的 Zone。如果当前 2:2:2 环境:用户 1 号日志流在
UNIT1,UNIT2,UNIT3(上面 3 台机器),SYS 租户的 1 号日志流在UNIT4,UNIT5,UNIT6(下面 3 台机器)。此例子中将 LEADER 切在一起使用MIGRATE UNIT转移整个 Unit 资源,间接调整副本位置(注意:如果使用MIGRATE REPLICA LS则要求目标节点必须存在租户 Unit 资源,而MIGRATE UNIT直接迁移资源单元,解决 Unit 缺失问题)。
删除 Zone 时的 Unit 迁移
当前 1:1:1 环境下,删除一个 Zone(指删除 zone1)让环境变成 zone2,zone3,删除 Zone(指删除 zone1)时提示无法迁移 Unit,但该 Zone(指删除 zone1)无日志流副本(由于租户资源池的 ZONE_LIST 包含待删除 Zone(指删除 zone1),即使无副本也会保留 Unit),步骤如下:
停止 Zone(指删除 zone1)。
ALTER SYSTEM STOP ZONE zone1;修改资源池的
ZONE_LIST,移除待删除 Zone(指删除 zone1)。ALTER RESOURCE POOL POOL_1 ZONE_LIST=('zone2','zone3');删除 zone1。
ALTER SYSTEM DELETE ZONE zone1;警告
删除 Zone 操作存在一定的风险,请谨慎操作。若确实需要执行删除 Zone 操作,但无法明确操作的正确性,为避免误操作,请联系 OceanBase 技术支持团队。
日志流副本分布与 Zone 删除
Zone1 存在日志流副本但无多余机器,如何安全删除,步骤如下:
修改租户 LOCALITY。
ALTER TENANT test LOCALITY="F@zone2,F@zone3";调整资源池
ZONE_LIST。ALTER RESOURCE POOL POOL_1 ZONE_LIST=('zone2','zone3');停止 zone1。
ALTER SYSTEM STOP ZONE zone1;删除 zone1。
ALTER SYSTEM DELETE ZONE zone1;警告
删除 Zone 操作存在一定的风险,请谨慎操作。若确实需要执行删除 Zone 操作,但无法明确操作的正确性,为避免误操作,请联系 OceanBase 技术支持团队。
适用版本
OceanBase 数据库 V4.x 版本。