最近一直在全面调研Oceanbase,在测试弹性扩容的时候遇到了问题,我使用OBD搭建了一个单副本单节点(172.30.52.1)的集群,并在ECS临时购买了一台服务器(172.30.52.2)准备增加到集群里,按照标准流程进行了集群扩容:
ALTER SYSTEM ADD SERVER ‘172.30.52.2:2882’ ZONE ‘zone1’;
ALTER RESOURCE TENANT mytenant UNIT_NUM = 2;
接着看
SELECT * FROM oceanbase.DBA_OB_SERVERS;
发现确实是两台服务器,扩容完毕后搭配ODP进行负载均衡,结合看审计日志发现流量确实被负载了。
就接着演练缩容,因为172.30.52.2这台服务器就是模拟高并发临时增加,需要把这台服务器下掉释放,按照流程进行缩容:
ALTER RESOURCE TENANT mytenant UNIT_NUM = 1;
结果问题来了,发现根据Oceanbase的策略,把172.30.52.1这台固定服务器的unit给自动下掉了,DBA_OB_UNITS里只留下了172.30.52.2这台服务器,而我的预期是把172.30.52.2给下掉,导致我在
ALTER SYSTEM STOP SERVER ‘172.30.52.2:2882’
的时候提示:
ERROR 4179 (HY000): Tenant(1007) LS(1) has no enough valid paxos member after stop server, stop server not allowed
这就完全违背了我的初衷,因为172.30.52.1这台服务器在阿里云是包年包月的服务器,应对平时足够,在需要应对高并发的时候临时按时按量的购买了172.30.52.2,结果导致最终172.30.52.1被闲置,无法进行临时服务器释放。
翻阅社区的时候发现有其他人也遇到了类似的问题
关于租户缩容的疑问 - 社区问答- OceanBase社区-分布式数据库
OB通过减少unit_num方式缩容时,是如何确定要下线的机器的? - 社区问答- OceanBase社区-分布式数据库
但是都没有很好的解决疑问
OCP白屏操作的方案暂时不想使用,因为还得专门做服务器来搭建,平时成本控制的很死,没有多余的服务器长期部署这个。
如何稳妥的释放指定的集群节点?缩容关系着整个弹性方案实施的完整闭环。因此需要能得到一些指导,而且一定要稳妥,关系着数据是否可能丢失。整个过程要足够严谨。谢谢。
特地发悬赏贴,感谢各位的帮助,最好有完整的命令以及过程进度监控,能够让我直接操作。
Oceanbase版本:4.3.0.1 社区版