欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/
可以向 OceanBase 集群中删除节点,删除节点是添加节点的逆向操作,适用于弹性缩容场景和调整部署场景。
弹性缩容场景:集群中有资源富余时,可以通过调整 Unit 分布、缩减租户的
UNIT_NUM
等操作来减少节点的资源占用,并最终通过删除节点来下线机器。调整部署场景:调整集群的部署架构时,如果调整租户的 Locality 属性后使得某 Zone 内不再分布有任何租户的 Unit,可以通过 Stop Zone -> Delete Server -> Delete Zone 等一系列操作下线该 Zone。
注意事项
Delete Server 操作涉及到负载均衡,被删除的节点上的资源单元(称为 Unit )会在同一个 Zone 中进行迁移。Unit 的迁移动作是 Unit 自动均衡的过程,主要由 Root Service 控制。待 Unit 迁移成功,Delete Server 操作即可执行成功。如果您想要选择待删除节点上 Unit 迁移的目标机器,可以手动执行 Unit 迁移。
注意
删除节点会减少可用资源,如果同 Zone 中其他节点的剩余资源不足以容纳待删除节点上的 Unit,将会导致 Unit 迁移失败,故在执行删除节点之前建议先查询 oceanbase.GV$OB_SERVERS
视图判断 Zone 内各节点的资源使用情况。
Unit 自动迁移过程中,迁移任务会占用迁出节点与迁入节点的网络资源和 IO 资源,从而使迁移流量与业务流量叠加,并导致业务流量受影响。为了避免业务流程受影响:
可以先执行 Stop Zone 操作后再执行 Delete Server 操作,确保两种流量不发生叠加。
Stop Zone 的相关操作请参见 隔离节点。
也可以调整迁移任务的相关配置项来控制迁移速度。
迁移任务相关的配置项如下表所示。
配置项名 描述 balancer_idle_time 集群级配置项,可以控制每次发起迁移任务的时间间隔。默认值为 5m,表示 5 分钟,取值范围为 [10s, +∞)。 sys_bkgd_net_percentage 集群级配置项,可以控制迁移任务占用网卡带宽的百分比。默认值为 60,取值范围为 [0, 100]。 查看并修改各配置项值的相关操作请参见 修改集群配置项。
操作步骤
使用
root
用户登录到集群的sys
租户。连接示例如下,连接数据库时请以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -uroot@sys -p***** -A
复制有关更加详细的连接数据库的操作指引,参见 连接数据库概述(MySQL 模式) 和 连接数据库概述(Oracle 模式)。
(可选)手动迁移待删除节点上的 Unit。
注意
下线节点时,建议您先手动迁移待删除的节点上的 Unit 后再执行 Delete Server 操作。
查看当前 Unit 分布,获取待迁移的 Unit 的 ID。
obclient [(none)]> SELECT UNIT_ID,TENANT_ID,STATUS,ZONE,SVR_IP FROM oceanbase.DBA_OB_UNITS; +---------+-----------+--------+-------+----------------+ | UNIT_ID | TENANT_ID | STATUS | ZONE | SVR_IP | +---------+-----------+--------+-------+----------------+ | 1 | 1 | ACTIVE | zone1 | xx.xx.xx.237 | | 2 | 1 | ACTIVE | zone2 | xx.xx.xx.238 | | 3 | 1 | ACTIVE | zone3 | xx.xx.xx.218 | | 1001 | 1002 | ACTIVE | zone3 | xx.xx.xx.218 | | 1002 | 1002 | ACTIVE | zone1 | xx.xx.xx.237 | | 1003 | 1002 | ACTIVE | zone2 | xx.xx.xx.238 | | 1010 | 1008 | ACTIVE | zone3 | xx.xx.xx.218 | | 1011 | 1008 | ACTIVE | zone2 | xx.xx.xx.238 | | 1012 | 1008 | ACTIVE | zone1 | xx.xx.xx.237 | | 1013 | 1010 | ACTIVE | zone3 | xx.xx.xx.218 | | 1014 | 1010 | ACTIVE | zone1 | xx.xx.xx.237 | | 1015 | 1010 | ACTIVE | zone2 | xx.xx.xx.238 | | 1016 | NULL | ACTIVE | zone1 | xx.xx.xx.237 | | 1017 | NULL | ACTIVE | zone2 | xx.xx.xx.238 | +---------+-----------+--------+-------+----------------+ 14 rows in set
复制其中:
UNIT_ID
:表示节点上各 Unit 的 ID。TENANT_ID
:表示该 Unit 所属的租户 ID。如果值为NULL
,表示当前 Unit 不属于任何租户。STATUS
:表示该 Unit 当前的状态:ACTIVE
:正常状态DELETING
:正在删除状态
ZONE
:表示该 Unit 所属的 Zone。SVR_IP
:表示该 Unit 所属的节点 IP。
有关
oceanbase.DBA_OB_UNITS
视图的更多说明,请参见 oceanbase.DBA_OB_UNITS。根据查询结果,执行以下命令,手动迁移 Unit。
语句如下:
obclient [(none)]> ALTER SYSTEM MIGRATE UNIT = unit_id DESTINATION = 'svr_ip:svr_port';
复制相关参数说明如下:
unit_id
:表示待迁移的 Unit 的 ID。svr_ip
:指定 Unit 迁移后的节点的 IP。svr_port
:指定 Unit 迁移后的节点的 RPC 端口。
将 ID 为
1012
的 Unit 迁移到同 Zone 的172.xx.xx.xx
服务器上的示例如下:obclient [(none)]> ALTER SYSTEM MIGRATE UNIT = 1012 DESTINATION = '172.xx.xx.xx:2882';
复制该命令可多次执行,如果手动迁移 Unit 失败,可以根据报错信息解决问题后再重新执行。
更多关于 Unit 迁移的操作及说明,请参见 Unit 迁移。
执行以下命令,删除节点。
语句如下:
obclient [(none)]> ALTER SYSTEM DELETE SERVER 'svr_ip:svr_port' [,'svr_ip:svr_port'...] [ZONE [=] 'zone_name']
复制相关参数说明如下:
svr_ip
:表示待删除的节点的 IP。svr_port
:表示待删除的节点的 RPC 端口。zone_name
:待删除的节点所属的 Zone。如果需要删除多个节点,多个节点要求必须在同一 Zone 内。
删除
zone1
中的一台 OBServer 服务器,示例如下:obclient [(none)]> ALTER SYSTEM DELETE SERVER "172.xx.xx.xx:2882" zone='zone1'
复制待所有操作结束后,查询
oceanbase.DBA_OB_SERVERS
视图,确认节点是否删除成功。obclient [(none)]> SELECT * FROM oceanbase.DBA_OB_SERVERS;
复制如果列表中已经查询不到该节点,则表示删除成功。如果列表中仍然有该节点,且该节点的状态为
DELETING
,则表示该节点仍然在删除状态中。对于未手动迁移 Unit 而是直接执行 Delete Server 操作的场景,可能会导致节点删除失败,确认节点删除失败后,可以参考 后续操作 进行处理。
后续操作
对于未手动迁移 Unit 而是直接执行 Delete Server 操作的场景,由于 Unit 均衡过程中可能会发生资源不足,即同 Zone 中其他节点的剩余资源不足以容纳待删除节点上的 Unit,将会导致 Unit 迁移失败,从而使该节点持续在删除状态中。您可以通过 Root Service 机器上的 /home/admin/oceanbase/log/rootservice.log
查看 Unit 是否迁移失败。如果确认是 Unit 迁移失败,则需要执行 Cancel Delete Server 操作,然后向 Zone 内添加节点对集群扩容后再重新删除节点。向 Zone 内添加节点的相关操作请参见 添加节点。
Cancel Delete Server 的具体操作如下:
使用
root
用户登录到集群的sys
租户。连接示例如下,连接数据库时请以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -uroot@sys -p***** -A
复制执行以下语句,取消删除节点。
语句如下:
obclient [(none)]> ALTER SYSTEM CANCEL DELETE SERVER 'svr_ip:svr_port' [,'svr_ip:svr_port'...] [ZONE [=] 'zone_name']
复制相关参数说明如下:
svr_ip
:表示待取消删除的节点的 IP。svr_port
:表示待取消删除的节点的 RPC 端口,默认为 2882。zone_name
:待取消删除的节点所属的 Zone。
示例如下:
obclient [(none)]> ALTER SYSTEM CANCEL DELETE SERVER '172.xx.xx.xx:2882' zone='zone1';
复制查询
oceanbase.DBA_OB_SERVERS
视图,确认节点是否取消删除成功。obclient [(none)]> SELECT * FROM oceanbase.DBA_OB_SERVERS;
复制如果待取消删除的 OBServer 的状态从
DELETING
变为ACTIVE
,则表示取消删除成功。
欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/