ob扩容方式的讨论

【 使用环境 】生产环境
【 OB or 其他组件 】
【 使用版本 】4.3
【问题描述】数据是三副本,集群当前是三个zone,每个zone有一个observer,运行一段时间后发现observer资源吃紧,需要扩容,直接给zone添加observer,这个应该是常规的方法,我想问一个问题,如果我选择把三个zone扩容到5个zone,然后依旧是每个zone一个observer,依旧是3个副本,三个副本数据随机的选择在这个5个zone中分布,这样还可以提高数据的高可用性,因为三个zone ,只允许死一个zone,但是5个zone却可以容忍死两个zone(只要不是同时即可), 但是是不是生产环境一般没必要扩容zone的方式来实现集群的扩容 ,对吧

你的意思是集群级别扩了zone,但是租户的副本数仍然是3副本是吧,这样理论是没问题,但可能出现情况如果宕机两个observer,虽然集群没有挂但刚好某个租户的unit在这两个节点上,这个租户就不可用了。
生产环境肯定集群是几个zone租户也就是几个zon,保持一致就没那么多风险。

@论坛小助手

根据文档库中的信息,以下是对您问题的详细解答:

1. 关于直接给 Zone 添加 Observer 的方式

  • 这是 OceanBase 集群扩容的一种常见方式。通过在现有 Zone 中添加更多的 OBServer 节点(Observer),可以提升该 Zone 的计算和存储能力,从而满足业务增长的需求。
  • 文档中提到,这种纵向扩容方式适用于控制租户资源上限的目的(参考片段 3)。这种方式实现简单,且对现有架构改动较小。

2. 关于扩容 Zone 的方式

  • 您提出的另一种方式是将现有的 3 个 Zone 扩展为 5 个 Zone,并保持每个 Zone 只有一个 Observer,同时数据副本数仍为 3。这种方式确实可以提高系统的高可用性。
  • 根据文档片段 2 和片段 9,增加 Zone 的数量可以通过调整集群部署架构来实现。例如,从三地三中心扩展为三地五中心,从而提升容灾能力。
  • 在 Paxos 协议下,3 副本的数据分布在 5 个 Zone 中时,系统可以容忍最多 2 个 Zone 同时故障(只要剩余的 3 个 Zone 中仍有超过半数的副本存活即可继续提供服务)。

3. 生产环境是否有必要扩容 Zone

  • 一般情况:在生产环境中,直接给现有 Zone 添加 Observer 是更常见的做法,因为这种方式操作简单、风险较低,且能够有效提升单个 Zone 的资源容量。
  • 特殊场景:如果业务对高可用性和容灾能力有更高的要求(例如需要支持城市级容灾或更高的故障容忍度),那么扩容 Zone 的方式可能是更优的选择。
  • 注意事项
    • 扩容 Zone 会涉及更多的架构调整,包括修改租户的 Locality 属性以重新分布数据副本(参考片段 1 和片段 5)。
    • 扩容 Zone 后,需要确保新的 Zone 配置仍然满足 Paxos 协议的多数派原则(参考片段 6)。
    • 扩容 Zone 的操作复杂度较高,可能需要更多的时间和资源投入。

4. 总结建议

  • 如果当前的主要问题是资源吃紧,建议优先考虑在现有 Zone 中添加 Observer 的方式。
  • 如果业务对高可用性和容灾能力有更高要求,或者计划进行架构升级(如从三地三中心扩展为三地五中心),则可以考虑扩容 Zone 的方式。
  • 具体选择哪种方式,应结合业务需求、资源预算以及运维团队的技术能力综合评估。

希望以上解答对您有所帮助!如果还有其他疑问,请随时提出。

具体信息可参考以下文档:

  1. 添加节点
  2. 集群级别的扩容和缩容
  3. 使用 OCP 进行运维
  4. 在 OceanBase 数据库上进行 TPC-C 测试
  5. 添加 Zone
  6. 使用 ob-operator 进行运维
  7. 租户扩容
  8. OceanBase 数据库在 MySQL 模式租户下的扩展功能

简单来说就是,
水平扩容,扩zone,提高容灾和高可用能力
垂直扩容,扩observer节点,提高性能

关键是你新增zone可以只扩容1-2个吧

扩容zone内的observer,至少3个,因为你原来就是3个zone 3个server,zone内扩容要等比例。

1 个赞

你的疑问很正常。
通常提OB 三副本,这个副本的范围所指可大可小,最大的就是指一个 zone ,最小的就是一个具体的 表的分区(4.2 后推出新概念 tablet ,跟 分区 partition 是一一对应的)。
OB 由于支持多租户,所以集群 部署时选三个zone 的时候,创建租户的时候依然要选择租户的副本数。当集群部署是 5 副本的时候, 租户还是可以选 3 副本(用户需要指定在哪三个zone上)。

对于用户而言,高可用是指数据的服务在节点故障时能保持连续,这个泛指所有的数据。所以评估你的数据是否真的有高可用能力时看的是租户里的表的数据是几副本。一般是 3副本就够用了。 4副本的效果等同3副本。这里看的是具体的表。在 4.x以及以后的版本表的副本数跟租户的副本数是一致的(在以前的版本并不一定一致,所以我这里说是看表的副本数)。一般来说 OB 的交付部署集群的zone数量(副本数)跟数据副本数是一致的(不考虑仲裁那种架构。仲裁架构下数据副本数会少1个)。

至于扩容的手段,从3副本扩容到5副本,就租户整体的能力而言,理论上最大能力也是得到了扩充(从3个节点并发读写提升到5个节点并发读写)。这是理论。但是如果租户的primary_zone 只局限于某一个zone 或某2个zone,这种能力上限就并没有提升。大部分时候使用5副本的重要原因往往是为了提升高可用能力(可以容忍最多2个副本的故障)。这个在金融行业很常见。提升高可用能力还包括在跨城部署的时候。3副本跨城部署遇到节点故障性能会下降,5个副本对此有更好的应对方式。

所以一般的用户扩容是扩容每个zone 里的节点数量。从 1-1-1 扩容到 2-2-2 ,而不是扩容到 1-1-1-1-1 .

说到 zone 数量跟 数据副本数量不一致,在其他分布式数据库里却是很常见的做法。并不一定要像 OB 这么工整(我觉得工整一点还是好理解的)
比如说 tikv

又或者 gbase 8a mpp 里 副本数跟节点数可以不一致。

这是分布式数据库有趣的地方,有兴趣的可以查看: MPP 数据库分片和副本技术浅析

是的,但是只要不是同时死,死一个zone后,等副本在别的zone补充上副本后,其实剩下四个zone的时候,还可以再死一个,明白您的意思了,这样生产不建议这样操作

这个确实是一个优点哈,还有一个有优点事,高可用能力也提升了,

tidb 通过添加tikv的个数就可以实现横向扩展,我的疑问是oceanbase 不可以通过添加zone的个数来实现横向扩展吗,5个zone,每个zone一个observer, 数据还是三副本,这三个副本设置成随机选择这个5个zone中的三个,这样不也实现了扩容的目标吗?