集群扩缩容
本节介绍的是通过 OBD 手动扩缩容的方式,如果集群通过 OCP 管理,那么也可以直接在 OCP 上操作。
集群扩缩容包括两种,一种是节点,即扩容每个 Zone 内的 OBServer 的数量;还有一种是 Zone,即增减 Zone 的数量。两种操作都需要在 sys 租户下进行。
扩容
扩容节点
场景
本例从 1-1-1 的集群架构扩容到 2-2-2 的集群架构
操作流程
-
新建新增集群的配置文件
新增集群配置参数建议跟原集群配置保持一致,防止资源量以及性能跟其他节点不同,注意:需要替换 server 名字以及 IP 地址。
比如:原先为zone1(server1)、zone2(server2)、zone3(server3)。现在新增的配置里面 zone 不变,server 要变成 server4、server5、server6,并且将 IP 替换为新的 OBServer 地址。
可以参照 配置文件。
-
使用 OBD 部署 新集群
obtest2 为新集群名字
obd cluster deploy obtest2 -c obtest2.yaml -
把新的配置文件复制到原本的配置文件中。
查看原配置文件路径。
[admin@obtest conf]$ obd cluster list
+--------------------------------------------------------------+
| Cluster List |
+---------+----------------------------------+-----------------+
| Name | Configuration Path | Status (Cached) |
+---------+----------------------------------+-----------------+
| obtest | /home/admin/.obd/cluster/obtest | running |
| obtest2 | /home/admin/.obd/cluster/obtest2 | destroyed |
+---------+----------------------------------+-----------------+根据原配置文件路径,找到原配置文件 config.yaml , 打开原配置文件,将新配置文件的节点内容复制到原配置文件中,复制后的配置文件可参考 配置文件。
vim /home/admin/.obd/cluster/obtest/config.yaml注意
新配置一定要放在对应原配置内容下面。
-
启动集群
这里的集群为原集群,原先的 OBServer 不会受影响,只会启动新加入的节点。
obd cluster start obtest -
将节点添加到集群
使用 root 用户登录集群的 sys 租户,并执行如下命令。
alter system add server 'xxx.xxx.x.xxx:2882' zone 'zone1';
alter system add server 'xxx.xxx.x.xxx:2882' zone 'zone2';
alter system add server 'xxx.xxx.x.xxx:2882' zone 'zone3'; -
确认集群节点信息
# 集群内通过如下 SQL 命令查询
select * from __all_server;
# OBD 查询
obd cluster display obtest -
添加成功后,根据业务实际情况,调整租户的资源配置,即调大 UNIT_NUM。
ALTER RESOURCE TENANT tenant1 UNIT_NUM 2;
扩容 Zone
场景
本例从 zone1,zone2,zone3 扩容为 zone1,zone2,zone3,zone4,zone5
操作流程
前面增加节点的操作跟扩容节点相同,需要注意的是zone需要变化
-
添加 zone
alter system add zone 'zone4' region 'sys_region';
alter system start zone 'zone4';
alter system add zone 'zone5' region 'sys_region';
alter system start zone 'zone5'; -
添加 节点 到集群
alter system add server 'xx.xx.xx.xx:2882' zone 'zone4';
alter system add server 'xx.xx.xx.xx:2882' zone 'zone5'; -
修改 resource pool
alter resource pool pool_1 zone_list=('zone1','zone2','zone3','zone4','zone5'); -
通过修改租户的 Locality 来增加副本。每次只能增加一个 Zone 内的 Locality。
ALTER TENANT tenant1 LOCALITY='F@zone1,F@zone2,F@zone3,F@zone4';
ALTER TENANT tenant1 LOCALITY='F@zone1,F@zone2,F@zone3,F@zone4,F@zone5'; -
确认当前副本信息
select SVR_IP,SVR_PORT,TENANT_ID,ROLE,count(*) from CDB_OB_TABLE_LOCATIONS group by SVR_IP,SVR_PORT,TENANT_ID,ROLE;
操作结束后,本次扩容完成,等待副本迁移完成。
缩容
缩容 Zone
场景
在进行集群的缩容操作前,需要确认集群中资源对当前负载有较多冗余,查看集群中资源的详细信息的相关操作请参见常用SQL。 本案例中的缩容是将集群中租户的 5 副本降为 3 副本的场景。
操作步骤
-
(可选)如果租户使用了 z4 或 z5 作为 Primary Zone,则需要修改该租户的 Primary Zone。
ALTER TENANT tenant_name PRIMARY_ZONE='z1,z2,z3'; -
通过修改租户 tenant1 的 Locality 来删除副本。根据 Locality 的变更规则,每次只能删除一个 Zone 内的 Locality,Locality 的变更规则相关信息请参见官网 OceanBase 数据库文档 Locality 概述。
ALTER TENANT tenant1 LOCALITY='F@z1,F@z2,F@z3,F@z4';
ALTER TENANT tenant1 LOCALITY='F@z1,F@z2,F@z3'; -
执行以下命令,停止 z4、z5。
ALTER SYSTEM STOP ZONE z4;
ALTER SYSTEM STOP ZONE z5; -
缩小资源池 pool1 的 ZONE_LIST 范围,从而将 z4、z5 从资源池中移出。
ALTER RESOURCE POOL pool1 ZONE_LIST=('z1','z2','z3'); -
执行以下语句,从集群中删除 Zone 中的 OBServer 节点。
注意
本示例中,仅租户 tenant1 使用了 z4、z5 上的资源,在实际场景中,如果有其他租户也使用了 z4 或 z5,则还需要对这些租户也执 行一遍前面的步骤(步骤 2 ~ 步骤 5)。
ALTER SYSTEM DELETE SERVER 'xxx.xxx.x.xx4:2882';
ALTER SYSTEM DELETE SERVER 'xxx.xxx.x.xx5:2882';删除后,可以执行以下语句,确认列表中已查询不到这些 OBServer 节点,则表示删除成功。
SELECT * FROM oceanbase.DBA_OB_SERVERS; -
确认 OBServer 节点删除成功后,执行以下语句,从集群中删除 Zone。
ALTER SYSTEM DELETE ZONE z4;
ALTER SYSTEM DELETE ZONE z5;删除后,可以执行如下语句,确认列表中已查询不到这些 Zone,则表示删除成功。结束后,本次缩容完成。
缩容节点
场景
在进行集群的缩容操作前,需要确认集群中资源对当前负载有较多冗余,查看集群中资源的详细信息的相关操作请参见常用SQL。 该案例场景为当前集群中共包含 3 个可用区 z1、z2、z3,每个 Zone 内包含 2 个 OBServer 节点,将每个 Zone 缩容到 1 个 OBServer 节点。
操作步骤
-
使用 root 用户登录集群的 sys 租户。
注意
如果要删除的节点没有任何 UNIT,那么可以跳过 2-6,直接删除。
由于当前版本暂不支持调小租户的 UNIT_NUM,该缩容方式仅适用于当前集群中 Unit 数量小于或等于计划删除 OBserver 节点后的单个 Zone 中的可用 OBserver 节点数量。例如,本示例中,如果租户 tenant1 的 UNIT_NUM 为 2,则删除各 Zone 中的 OBServer 时会失败。
-
临时关闭 rebalance,否则租户会自动调度均衡
alter system set enable_rebalance=False; -
查看当前 Unit 分布,获取待迁移的 UNIT_ID。
SELECT * FROM OCEANBASE.__all_unit; -
手动迁移Unit
ALTER SYSTEM MIGRATE UNIT = unit_id DESTINATION = 'xx.xx.xx.xx:2882'; -
确认 Unit 的迁移进度
# 查看迁移状态
SELECT * FROM oceanbase.DBA_OB_UNIT_JOBS WHERE JOB_TYPE = 'MIGRATE_UNIT';
# 如果 MIGRATE_FROM_SVR_IP和MIGRATE_FROM_SVR_PORT为空,则迁移完成
SELECT * FROM oceanbase.DBA_OB_UNITS WHERE SVR_IP = 'xx.xx.xx.xx'; -
多台节点迁移重复 3-5
-
删除各 Zone 中的 OBServer 节点。
ALTER SYSTEM DELETE SERVER 'xxx.xxx.x.xx1:2882' ZONE='z1';
ALTER SYSTEM DELETE SERVER 'xxx.xxx.x.xx2:2882' ZONE='z2';
ALTER SYSTEM DELETE SERVER 'xxx.xxx.x.xx3:2882' ZONE='z3';如果列表中已经查询不到旧节点信息,则表示删除成功。如果列表中仍然有该节点,且该节点的状态为 DELETING,则表示该节点仍然在删除状态中。
SELECT * FROM OCEANBASE.DBA_OB_SERVERS; -
恢复 rebalance。
alter system set enable_rebalance=True;
租户资源的扩缩容
租 户资源的扩缩容也是包括两种,一种是增加租户的资源单元(unit)配置大小;另一种是增加租户的资源单元(unit)数量。两种操作均需在 sys 租户下进行操作。
前提条件
在进行租户的扩容和缩容操作前,需要进行以下操作:
-
由于空闲的资源池会被计算为占用的资源,故在扩容前,如果有租户被删除,建议与租户对应的资源池也一并删除,以便释放资源。删除资源池的相关操作请参见官网 OceanBase 数据库文档 删除资源池。
-
进行租户缩容前,建议进行一轮转储以便释放租户正在使用的内存。手动触发转储的相关操作请参见官网 OceanBase 数据库文档 手动触发转储。
-
查看集群中资源的分配情况,了解集群中资源的使用情况。查看集群节点的资源总量和分配状态的相关操作请参见官网 OceanBase 数据库文档 查看集群的资源信息。