首批通过分布式安全可靠测评,为关键业务系统打造
副本管理
更新时间:2026-04-13 16:46:32
本文主要介绍通过 ob-operator 进行租户的副本管理。
修改租户 Primary Zone
修改租户的 Primary Zone,可以修改 priority 配置项用于指定 zone 的优先级,数字越大优先级越高。最小值为 1。
Primary Zone 描述了 Leader 副本的偏好位置,而 Leader 副本承载了业务的强一致读写流量,即 Primary Zone 决定了 OceanBase 数据库的流量分布。通过修改 Primary Zone 属性可以切换业务流量,或者是从一个机房切换到另一个机房,或者是从一个城市切换到另一个城市,适用于容灾场景、扩缩容等场景。
操作步骤
修改租户配置文件
tenant.yaml,调整每个 Zone 的 priority 值。- zone: zone1 priority: 1 - zone: zone2 priority: 1 - zone: zone3 priority: 3 # 修改后 - zone: zone1 priority: 3 - zone: zone2 priority: 2 - zone: zone3 priority: 1例如上述配置,租户原本的 Primary Zone 为
zone3;zone1,zone2,修改优先级后租户的 Primary Zone 为zone1;zone2;zone3.配置文件修改后,运行如下命令使改动生效。
kubectl apply -f tenant.yaml执行以下语句,查看当前 Kubernetes 集群中租户的 OBTenant 资源,来判断是否修改成功。
kubectl get obtenants.oceanbase.oceanbase.com -n oceanbase -o yaml当看到租户的 OBTenant 资源中
status.resourcePool.priority对应的值变为修改后的值,则说明修改成功。status: ...... resourcePool: - zone: zone1 priority: 3 - zone: zone2 priority: 2 - zone: zone3 priority: 1也可以通过以下命令更简单地查看结果。
kubectl get obtenants.oceanbase.oceanbase.com -n oceanbase -o wide返回结果示例如下:
NAME STATUS TENANTNAME TENANTROLE CLUSTERNAME AGE LOCALITY PRIMARYZONE POOLLIST CHARSET t1 running t1 PRIMARY obcluster 13m ... zone1;zone2;zone3 ... utf8mb4可以看到 PRIMARYZONE 字段已经修改为了
zone1;zone2;zone3,与设置的 priority 相符合。
修改租户 locality
修改租户的 locality,可以修改 type 配置项用于指定副本类型和副本数量,副本类型支持 full、logonly、readonly。
操作步骤可参考 修改租户 Primary Zone。
修改租户配置文件 tenant.yaml 内的具体内容如下:
type:
name: Full # 支持 Full 和 Readonly 两种副本类型
replica: 1
增加副本
前提
- 在集群中已增加 Zone,具体操作可参考在集群中增加 zone。
操作步骤
在租户中增加 Zone 的操作可以通过修改租户的配置文件 tenant.yaml 来完成。
当前集群中共包含 4 个可用区 zone1、zone2、zone3、zone4,租户对应的 zone 为 zone1、zone2、zone3,现需要扩容至 zone1、zone2、zone3、zone4。
修改配置文件 tenant.yaml,增加 zone4。
# 示例: 租户中有 3 个 zone pools: - zone: zone1 unitNum: 1 type: name: Full replica: 1 priority: 3 resource: ... - zone: zone2 unitNum: 1 type: name: Full replica: 1 priority: 3 resource: ... - zone: zone3 unitNum: 1 type: name: Full replica: 1 priority: 3 resource: ... # 在租户中增加 zone(zone4) pools: - zone: zone1 unitNum: 1 type: name: Full replica: 1 priority: 3 resource: ... - zone: zone2 unitNum: 1 type: name: Full replica: 1 priority: 3 resource: ... - zone: zone3 unitNum: 1 type: name: Full replica: 1 priority: 3 resource: ... - zone: zone4 unitNum: 1 type: name: Full replica: 1 priority: 3 resource: ...配置文件修改后,运行如下命令使改动生效。
kubectl apply -f tenant.yaml执行以下语句,查看当前 Kubernetes 集群中租户的 OBTenant 资源。
kubectl get obtenants.oceanbase.oceanbase.com -n oceanbase -o wide返回结果示例如下,观察 LOCALITY 字段符合预期。
NAME STATUS TENANTNAME TENANTROLE CLUSTERNAME AGE LOCALITY PRIMARYZONE POOLLIST CHARSET t1 running t1 PRIMARY obcluster 19m FULL{1}@zone1,FULL{1}@zone2,FULL{1}@zone3,FULL{1}@zone4 ... ... utf8mb4
减少副本
操作步骤
在租户中减少 Zone 的操作可以通过修改租户的配置文件 tenant.yaml 来完成。
当前集群中共包含 4 个可用区 zone1、zone2、zone3、zone4,租户对应的 zone 为 zone1、zone2、zone3、zone4,现需要缩容至 zone1、zone2、zone3。
修改配置文件 tenant.yaml,减少 zone4。
# 示例: 租户中有 4 个 zone pools: - zone: zone1 unitNum: 1 type: name: Full replica: 1 priority: 3 resource: ... - zone: zone2 unitNum: 1 type: name: Full replica: 1 priority: 3 resource: ... - zone: zone3 unitNum: 1 type: name: Full replica: 1 priority: 3 resource: ... - zone: zone4 unitNum: 1 type: name: Full replica: 1 priority: 3 resource: ... # 在租户中减少 zone(zone4) pools: - zone: zone1 unitNum: 1 type: name: Full replica: 1 priority: 3 resource: ... - zone: zone2 unitNum: 1 type: name: Full replica: 1 priority: 3 resource: ... - zone: zone3 unitNum: 1 type: name: Full replica: 1 priority: 3 resource: ...配置文件修改后,运行如下命令使改动生效。
kubectl apply -f tenant.yaml执行以下语句,查看当前 Kubernetes 集群中租户的 OBTenant 资源。
kubectl get obtenants.oceanbase.oceanbase.com -n oceanbase -o wide返回结果示例如下,观察 LOCALITY 字段符合预期。
NAME STATUS TENANTNAME TENANTROLE CLUSTERNAME AGE LOCALITY PRIMARYZONE POOLLIST CHARSET t1 running t1 PRIMARY obcluster 25m FULL{1}@zone1,FULL{1}@zone2,FULL{1}@zone3 ... ... utf8mb4