首批通过分布式安全可靠测评,为关键业务系统打造
OceanBase 数据库为什么要求节点之间的时间偏差小于 100ms
更新时间:2023-11-13 02:05
本文讲解在 V2.x/V3.x 版本上配置节点时钟同步的原理说明。
为什么需要节点之间的时间偏差 <100ms
Paxos 选举协议会检查每个消息在发送端和接收端的时间差(即消息的延迟时间),并且设置了最大允许的延迟(100ms*2 + 200ms=400ms),其中同时考虑了 2 个机器间的时钟延迟上限(max 100ms)和 rpc 延迟上限(200ms)。
当消息延迟超过这个上限后,就认为是过期消息,就会被选举模块忽略。
影响
影响是 lease 机制无法正常工作,会导致:
选举不能正常进行,进而无主。
双主风险。
基本上集群是不太可能不出问题的,一定会处于一个特别怪异的状态,就会遇到各种各样的错,然后整个集群基本上是处于一种不可用的状态。
当服务器间时钟偏差大于 100 毫秒后,会导致系统不可用(不能读写,但不会丢数据)。
调整方法
第一种情况:如果 observer 的节点上系统时间比标准时间慢:可直接调整。
第二种情况:如果 observer 的节点上系统时间比标准时间快:可以仅仅停止问题节点的 observer 进程。
在停止 observer 进程之前,建议 stop server 动作将该 server 上的 leader 副本的 leader 切换到其他节点。然后停止进程,等待足够的 Gap time,然后将时间调正确。
更多信息
可以使用下列方法来检查节点之间的时间误差。
$ clockdiff <ip>
可以使用下列方法来检查当前节点和时钟服务器之间的误差。
// if running ntpd service
clock_offset=$(ntpq -np | grep -e '^*' | awk '{print $9}')
echo $clock_offset
// if running chronyd service
chrony_server=$(chronyc -n sources | grep -e '^\^\*' | awk '{print $2}')
clock_offset=$(chronyc -n tracking | grep "$chrony_server" -A 3|tail -1 | awk '{print $4}')
echo $clock_offset
适用版本
OceanBase 数据库 V2.x、V3.x 的各个版本。