【使用版本】OceanBase 社区版 V4.2.x(OBD 部署,3 节点虚拟机)
【环境背景】
用 OBD 部署 3 节点集群做实验环境,装的是 NTP(不是 chrony)。部署文档提到时钟同步是前置条件,但没有展开说原因。
【问题描述】
- OceanBase 对 OBServer 之间时钟偏差的具体容忍阈值是多少?超过会发生什么(选举失败?事务乱序?还是直接无主)?
- 为什么官方部署指引要求 NTP 以 -x(slew,渐变调整)模式启动,而不是默认的 step 模式?step 模式下时钟跳变对运行中的集群具体有什么影响?
- 生产上应该监控哪个指标来发现时钟漂移?ntpq -p 里的 offset 达到多少需要告警?
论坛小助手
#4
1. OceanBase 对节点时钟偏差的要求
根据文档中的信息,OceanBase 数据库作为一个分布式数据库,其集群的多个节点以及 OCP 节点的时钟必须配置时钟同步服务(如 NTP 或 chrony),以确保所有节点之间的时钟偏差在 2 秒以内。这是因为如果集群时间不同步,则可能影响到 OceanBase 集群的选举模块,导致没有主副本或者脑裂问题。因此,可以总结出以下几点:
-
具体容忍阈值:OceanBase 集群要求各个节点之间的时间偏差应控制在 2 秒之内。
-
超过后的影响:如果时钟偏差超过这个范围,可能会出现以下几种情况:
- 选举失败:集群可能无法成功选举出新的主副本。
- 事务乱序:分布式系统中,事务处理依赖于准确的时间戳,较大的时钟差异可能导致事务顺序混乱。
- 直接无主:极端情况下,整个集群可能会因为无法选出主副本而进入一种不正常的工作状态。
2. 为什么选择 NTP 的 -x (slew) 模式而非默认的 step 模式
NTP 提供了两种主要的时钟调整模式:step 和 slew。对于运行中的 OceanBase 集群而言,使用 -x 选项启动 NTP 服务的原因在于它能避免突然的时钟跳跃对正在进行的操作造成干扰或破坏。具体来说,
-
Slew 模式 (
-x): 逐步调整系统时间直到与参考源一致。这种方式更平滑,减少因时间突然变化引起的问题。
-
Step 模式 (默认): 当检测到的时间差超过一定阈值时,NTP 会直接重置本地时钟到正确的值。这种操作虽然快速,但在分布式环境中特别是涉及到事务处理的情况下,可能会导致短暂但严重的异常行为,比如数据一致性问题。
因此,为了避免这些问题,推荐使用 -x 选项来保证时钟调整过程更加平稳可控。
3. 生产环境监控建议
为了有效监控并及时发现潜在的时钟漂移问题,在生产环境中应该定期检查相关指标,并设置合理的告警阈值。通常可以通过查看 ntpq -p 命令输出的结果来进行初步评估。关于具体的告警阈值设定,
-
offset 达到多少需要告警:一般来说,当
offset 接近或达到 1 秒左右时就应当引起注意,并考虑采取措施进行校正。但是最佳实践是将该阈值设定得更低一些,例如 500 毫秒或根据实际情况进一步优化调整,以便更早地发现问题所在。
-
其他监控手段:除了监控 NTP 服务本身的状态外,还可以利用诸如 OCP 等管理平台提供的监控功能来观察整个集群内各节点的时间同步状况,确保它们都处于良好的工作状态之中。
希望以上内容能够帮助您更好地理解和维护您的 OceanBase 集群!如果还有其他方面的需求,请随时告知。
检索到的文档如下:
- 检查 NTP 偏移量
- OceanBase 数据库性能的影响因素
- 在您开始前
- data_storage_error_tolerance_time
- 数据库层高可用
- 部署前准备
- 错误码
- data_storage_warning_tolerance_time
- 部署生产环境