适用版本
OceanBase 数据库 V3.2.x 版本。
问题描述
OceanBase 集群 2-2-2 扩展节点变为 3-3-3 架构,为了避免发生负载均衡,对机器参数做了如下设置.
obclient> alter system set enable_rebalance=false;
obclient> alter system set enable_auto_leader_switch=false;
obclient> alter system set resource_soft_limit=100;
但是,在添加 Server 时依然发生了 unit 迁移,迁移到了新加入的 Server 上。
问题原因
在 OceanBase 数据库 V3.2.x 版本,当 Root Service 节点存在 CPU 或 MEMORY 超卖的情况时,Root Service 会尝试迁出 Unit 释放资源,避免 Root Service 节点服务不稳定。 在本案例中,集群初始状态为 2-2-2,租户的 unit_number=2,因为同一台机器不能有多个同租户的 Unit,虽然 Root Service 节点所在的 Server 存在 MEMORY 的超卖,但是无法把普通租户的 Unit 迁移到另一台 Server 上。当扩容集群为 3-3-3 时,zone 内的 Server 个数大于租户的 unit_number,Root Service 会主动把超卖节点上的用户租户的 Unit 迁移到新加入的 Server 上去。 目前,这段逻辑没有控制开关。
解决方法
不要超卖。
适当调大配置项
resource_hard_limit。