跳到主要内容

副本管理

本文主要介绍通过 ob-operator 进行租户的副本管理。

修改租户 Primary Zone

修改租户的 Primary Zone,可以修改 priority 配置项用于指定 zone 的优先级,数字越大优先级越高。最小值为 1。

Primary Zone 描述了 Leader 副本的偏好位置,而 Leader 副本承载了业务的强一致读写流量,即 Primary Zone 决定了 OceanBase 数据库的流量分布。通过修改 Primary Zone 属性可以切换业务流量,或者是从一个机房切换到另一个机房,或者是从一个城市切换到另一个城市,适用于容灾场景、扩缩容等场景。

操作步骤

  1. 修改租户配置文件 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.

  2. 配置文件修改后,运行如下命令使改动生效。

    kubectl apply -f tenant.yaml
  3. 执行以下语句,查看当前 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 的操作可以通过修改租户的配置文件 tenant.yaml 来完成。

当前集群中共包含 4 个可用区 zone1、zone2、zone3、zone4,租户对应的 zone 为 zone1、zone2、zone3,现需要扩容至 zone1、zone2、zone3、zone4

  1. 修改配置文件 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:
    ...
  2. 配置文件修改后,运行如下命令使改动生效。

    kubectl apply -f tenant.yaml
  3. 执行以下语句,查看当前 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

  1. 修改配置文件 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:
    ...
  2. 配置文件修改后,运行如下命令使改动生效。

    kubectl apply -f tenant.yaml
  3. 执行以下语句,查看当前 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