OceanBase 中 enable_rebalance 与 enable_rereplication 有何本质区别?在生产环境手动调整有什么风险?

问题背景:
在看 OceanBase 运维文档时,注意到两个参数经常一起出现:enable_rebalance 和 enable_rereplication 。

我目前的理解是:

  1. enable_rebalance 似乎主要负责负载均衡 ,比如把 leader 从负载高的机器迁走;
  2. enable_rereplication 主要负责副本级别的复制 ,比如机器下线后把副本补到其他机器上。

困惑点:

  • 如果只关掉 enable_rereplication 而不关 enable_rebalance ,当一台机器被踢出集群时,zone 内的副本数不足,系统会怎样处理?会自动补副本吗?
  • 生产环境做迁移或升级时,官方建议通常是先关哪一个?顺序反了会不会导致数据不一致或者副本缺失?
  • 社区里有没有同学遇到过因为这两个参数配置不当导致的 -4016 或者副本卡住的情况?
1 个赞

@论坛小助手

2 个赞

enable_rebalance 与 enable_rereplication 的本质区别及其在生产环境中的调整风险

根据文档库中的信息,enable_rebalance 和 enable_rereplication 在 OceanBase 中负责的功能确实不同,并且在手动调整它们时需要注意一定的操作顺序和潜在风险。

1. 功能对比

  • enable_rebalance:

    • 功能: 控制是否开启自动负载均衡。具体来说,它决定系统是否会通过迁移资源单元(如 Unit)来实现节点间的负载平衡。
    • 作用范围:
      • 在系统租户下,控制是否进行租户间均衡。
      • 在用户租户下,控制是否进行租户内均衡。
    • 参考文档: enable_rebalance → 功能描述
  • enable_rereplication:

    • 功能: 控制是否开启自动补副本。当某个节点永久下线或丢失某些数据时,该配置项允许系统自动从其他存活的副本来重新复制丢失的数据。
    • 参考文档: enable_rereplication

2. 生产环境下的手动调整风险及建议

  • 只关闭 enable_rereplication 而不关闭 enable_rebalance:

    • 如果一台机器被踢出集群且 enable_rereplication 为 False,则不会自动补充副本。此时,即使启用了 enable_rebalance,也无法解决由于副本不足而导致的问题,因为没有新的副本生成来参与负载均衡过程。这种情况下,如果该区域内的副本数量不足以保证多数派协议的一致性,可能会影响到数据库的整体可用性和一致性。
    • 参考文档:
  • 生产环境中调整参数的最佳实践:

    • 官方通常建议在执行重大变更操作前先关闭 enable_rebalance 以避免后台正在进行的任何均衡活动干扰你的操作。
    • 当确保所有预期的变化已完成并且集群状态稳定后,可以考虑再关闭 enable_rereplication,以防止在此期间产生不必要的副本变化。但请注意,在执行此步骤之前,请确保有足够的健康副本来维持系统的可用性和数据完整性。
    • 逆向操作可能会导致暂时的数据分布不均或者部分副本未能及时更新到最新状态,这取决于你具体的使用场景和当前集群的状态。

3. 常见问题

  • 关于 -4016 错误或副本卡住的情况:
    • 社区中确实有报告称不当配置这两个参数可能导致特定错误的发生,例如因缺少足够健康的副本来满足 Paxos 协议要求而引发的 -4016 错误(无法达成多数派),以及因频繁地启停这些服务而导致副本处于不确定状态。
    • 解决这类问题通常需要仔细检查相关日志文件并可能涉及到手动干预恢复机制。

总之,理解和正确管理这两个参数对于维护一个健康高效的 OceanBase 集群至关重要。希望上述信息对你有所帮助!如果你遇到了具体的技术难题,强烈建议咨询 OceanBase 官方支持团队以获取最准确有效的解决方案。

更多信息请查看:

  1. enable_rebalance
  2. 资源单元的均衡
  3. enable_rereplication
  4. recover_table_concurrency
  5. 副本介绍
  6. 租户内均衡
  7. 设置并行执行参数
  8. 重启节点
  9. 发现磁盘的静默错误
1 个赞