示例1:租户副本数升级

    集群原始状态

    • 共三个zone:z1,z2,z3;三个zone都属于region: hz,每个zone内一个observer。

    • 两个租户:系统租户syslocality=’F@z1,F@z2,F@z3’, resource_pool_list=(‘sys_pool’);普通租户tt locality=’F@z1,F@z2,F@z3’, resource_pool_list=(‘pool1’);。

    集群目标状态

    • 系统租户sys不做调整,普通租户tt由三副本调整为五副本,即locality由F@z1,F@z2,F@z3变为F@z1,F@z2,F@z3,F@z4,F@z5。

    操作步骤

    1. 集群中目前只有z1、z2、z3三个 zone,先给集群增加z4、z5这两个zone,使用如下的SQL语句:
    1. alter system add zone z4;
    2. alter system start zone z4;
    3. alter system add zone z5;
    4. alter system start zone z5;
    1. 在z4和z5上各添加一个 OBServer,使用如下SQL语句:
    1. alter system add server "ip:port" zone 'z4';
    2. alter system add server "ip:port" zone 'z5';
    1. 给租户tt在z4和z5上添加副本,租户tt在z4和z5上需要有可用的unit和resourcepool资源,使用如下语句给租户tt在z4和z5上添加资源。
    1. create resource pool pool2 unit = 'box', unit_num = 1,zone_list=('z4','z5');
    2. alter tenant tt resource_pool_list=('pool1','pool2');
    1. 给租户tt在z4和z5上添加完资源后,开始通过修改locality增加副本,依据【变更规则】,每次为tt增加一个zone内的locality。
    1. alter tenant tt locality="F@z1,F@z2,F@z3,F@z4";

    执行完该语句后,rs的后台线程开始给租户tt在z4上添加副本,可以通过【变更进度】的方式查询locality的变更进度。

    1. z4上的副本添加完成后,继续修改locality,为租户tt在z5上继续添加副本,通过如下指令触发。
    1. alter tenant tt locality="F@z1,F@z2,F@z3,F@z4,F@z5";

    仍然可以通过【变更进度】的方式查询locality的变更进度。这次变更完成后,就完成了租户tt由三副本到五副本的变更。事实上,多个租户都有locality的变更是可以同时进行的,可以同时对多个租户执行上述操作。

    示例2:租户搬迁

    租户搬迁,涉及到集群机器的管理,租户unit资源的管理,以及租户数据副本的分布三个层面的操作,需要分别进行:

    1. 机器资源层面,增删 Zone、增删机器。

    2. 租户资源层面,增加 resource pool、从旧的 resourcepool 删除 Zone 和 unit。

    3. 租户数据层面,通过修改租户locality、完成数据副本的迁移。

    操作步骤比较复杂,之所以这样,是因为 OB 多租户和资源管理的方式决定的:

    1. 集群新增 Zone 和 Server,不一定可以给一个租户用。

    2. 一个租户新增的 Zone 和 unit,不一定可以给所有表分区使用。

    关于删除操作,有如下约束:

    1. 删除 Zone的前提是 Zone 里没有 Server。
    2. 删除 Server 的前提是,里面的 unit 全部迁移走(或者没有 unit)
    3. 删除一个 Zone 所有 unit(通过修改 resource pool 的 zone_list 或者修改 tenant的resource_pool_list)的前提是,租户所有分区的副本都没有在这个 Zone 上有分布(通过修改租户或表的locality)。

    所以,要想安全移除一个 Zone,操作顺序是:

    1. 修改locality,删除某个Zone的副本
    2. 修改resource pool的zone_list或者tenant的resource_pool_list,删除某个 Zone 的 unit
    3. 删除这个 Zone 的所有 Server。
    4. 删除 Zone。

    集群原始状态

    • 共三个zone:z1,z2,z3;三个zone都属于region: hz,每个zone内一个observer。
    • 一个租户:系统租户syslocality=’F@z1,F@z2,F@z3’, resource_pool_list=(‘sys_pool’);

    集群目标状态

    将系统租户sys的两个zone从hz迁到sh,即locality由F@z1,F@z2,F@z3变为F@z1,F@z4,F@z5,其中z4和z5属于region: sh。

    操作步骤

    1. 集群中目前只有z1,z2,z3三个zone,先给集群增加一个zone:z4,使用如下的SQL语句。
    1. alter system add zone z4;
    2. alter system start zone z4;
    1. 在z4添加一个 OBServer,使用如下SQL语句。
    1. alter system add server "ip:port" zone 'z4';
    1. 给租户sys在z4上添加副本,租户sys在z4上需要有可用的unit和resource pool资源,使用如下语句给租户sys在z4上添加资源。
    1. create resource pool sys_pool2 unit ='sys_unit_config', unit_num = 1, zone_list=('z4');
    2. alter tenant sys resource_pool_list=('sys_pool','sys_pool2');
    1. 给租户sys在z4上添加完资源后,开始通过修改locality增加副本,依据【变更规则】,每次为sys增加一个zone内的locality。
    1. alter tenant sys locality="F@z1,F@z2,F@z3,F@z4";

    执行完该语句后,rs的后台线程开始给租户sys在z4上添加副本,可以通过【变更进度】的方式查询locality的变更进度。

    1. z4上的副本添加完成后,继续修改locality,将租户sys在z2上的添加副本下掉,通过如下指令触发。
    1. alter tenant syslocality="F@z1,F@z3,F@z4";

    仍然可以通过【变更进度】的方式查询locality的变更进度。

    1. (可选)停止z2。

    如果z2上所有租户都要执行上述操作去掉z2上的副本,可以在执行上面alter locality减副本动作之前,先停止zone。

    1. alter system stop zone z2;

    这样做,可以加快减副本的速度。

    b. (可选)修改primary_zone。

    如果z2为租户的primary_zone,需要根据情况设定新的primary_zone(根据应用切换情况来定)。

    1. alter tenant sys primary_zone='z1';
    1. 集群中目前只有z1,z2,z3,z4四个zone,给集群再增加一个zone:z5,使用如下的SQL语句。
    1. alter system add zone z5;
    2. alter system start zone z5;
    1. 在z5添加一个 OBServer,使用如下SQL语句。
    1. alter system add server "ip:port" zone'z5';
    1. 给租户sys在z5上添加副本,租户sys在z5上需要有可用的unit和resource pool资源,使用如下语句给租户sys在z5上添加资源。
    1. create resource pool sys_pool3 unit ='sys_unit_config', unit_num = 1, zone_list=('z5');
    2. alter tenant sysresource_pool_list=('sys_pool','sys_pool2','sys_pool3');
    1. 给租户sys在z5上添加完资源后,开始通过修改locality增加副本,依据【变更规则】,每次为sys增加一个zone内的locality。
    1. alter tenant sys locality="F@z1,F@z3,F@z4,F@z5";

    执行完该语句后,rs的后台线程开始给租户sys在z5上添加副本,可以通过【变更进度】的方式查询locality的变更进度。

    1. z5上的副本添加完成后,继续修改locality,将租户sys在z3上的添加副本下掉,通过如下指令触发。
    1. alter tenant sys locality="F@z1,F@z4,F@z5";

    仍然可以通过【变更进度】的方式查询locality的变更进度。

    1. (可选)停止z3。

    如果z3上所有租户都要执行上述操作去掉z3上的副本,可以在执行上面alter locality减副本动作之前,先停止zone。

    1. alter system stop zone z3;

    这样做,可以加快减副本的速度。

    b. (可选)修改primary_zone。

    如果z3为租户的primary_zone,需要根据情况设定新的primary_zone(根据应用切换情况来定)。

    1. alter tenant sys primary_zone='z4';
    1. 到这里,已经将z2,z3迁移到z4和z5上,此时已经可以将z2和z3下掉,执行如下语句。
    1. alter resource pool sys_pool zone_list = ('z1'); // 系统租户resource pool中删除已经没有数据的z2, z3
    2. alter system delete server 'ip:port'; //这里删除z2上的server
    3. alter system delete server 'ip:port'; //这里删除z3上的server
    4. alter system stop zone z2; //如果之前没有stop过
    5. alter system delete zone z2;
    6. alter system stop zone z3; //如果之前没有stop过
    7. alter system delete zone z3;