leader副本选举时间

inline int64_t CALCULATE_RENEW_LEASE_INTERVAL() { return std::min<int64_t>(0.5 * MAX_TST, 500_ms); }// 续约周期固定为消息延迟的一半,最大不超过500ms
inline int64_t CALCULATE_TIME_WINDOW_SPAN_TS() { return 2 * MAX_TST; }// 时间窗口的长度,为两个最大单程消息延迟, 默认为2s
inline int64_t CALCULATE_MAX_ELECT_COST_TIME() { return 10 * MAX_TST; }// 一次选举可能出现的最大耗时设置,默认为10s
inline int64_t CALCULATE_LEASE_INTERVAL() { return 4 * MAX_TST; }// 4个消息延迟,默认是4s
inline int64_t CALCULATE_TRIGGER_ELECT_WATER_MARK() { return std::min<int64_t>(MAX_TST, 1_s); }// 触发无主选举的Lease剩余水位线,1个最大消息延迟,最大不超过1s

CALCULATE_TIME_WINDOW_SPAN_TS 这个时间是不是用来判断选举rpc信息在2秒内没有到达就会被认为是过期消息了??

CALCULATE_LEASE_INTERVAL 这个时间是不是leader副本每次租约时间是4秒??

CALCULATE_TRIGGER_ELECT_WATER_MARK 这个是在3秒内没有收到其他follower副本的rpc信息,leader就卸任了吗?

2 个赞

你好,我理解为

inline int64_t CALCULATE_TIME_WINDOW_SPAN_TS() {
return 2 * MAX_TST;
}
其中,MAX_TST` 是任意两台机器间的单程网络延迟上限,默认值为 100ms。因此,CALCULATE_TIME_WINDOW_SPAN_TS的默认值为:2 * 100ms = 200ms,在选举过程中,如果某个副本的消息未能在时间窗口内到达,则可能被视为无效或过期消息。
inline int64_t CALCULATE_LEASE_INTERVAL() {
return 4 * MAX_TST;
}
同理,lease_time是4个消息延迟,默认是4s

1 个赞

MAX_TST 这个变量的默认值 在哪看的?是这里吗?https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000210147?back=kb

1 个赞

CALCULATE_TIME_WINDOW_SPAN_TS用于计算时间窗口的长度,所谓时间窗口是指,paxos中的acceptor角色需要一个窗口期来收集所有参与选举的proposer角色的拉票消息,并从中根据优先级选取最优副本成为leader,即下图中的浅蓝色窗口的长度:

CALCULATE_LEASE_INTERVAL用于计算副本的租约时长,是上图粉色+红色的的窗口时间。
CALCULATE_TRIGGER_ELECT_WATER_MARK用于计算提前开启下一次选举的时间点,一旦lease剩余时间小于这个值,就开启下一轮选举,当上轮租约到期时,下一轮的leader立马无缝上任,中间没有gap。否则当上一任租约到期后,再开启选举流程会导致多浪费一些选举时间。

2 个赞

4.x版本这样写的


可以参考

1 个赞

嗯嗯 ,这个我看到了,不过这个上面说的是 500ms leader续约一次。

我在生产问题中发现 rpc延迟时间200ms-800ms甚至1秒多都不会出现副本切主发生。在实际切主发生时间段rpc通信延迟在2秒多,所以想深究下 具体是延迟多久才会出现副本切主?

你看看 这个:https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000207690

1 个赞

大佬 这个有链接吗

你们现在使用版本是多少

1 个赞

ob3.1.2

这个应该是内部开发文档,暂时没对外公布

1 个赞

那就忽略我提到的,我这是V4版本,有改动

这个无所谓,理解那个版本都行

那 4版本对外公布的 ,这几个时间配置 ,我和其他同学理解对不对啊。帮忙看看
inline int64_t CALCULATE_RENEW_LEASE_INTERVAL() { return std::min<int64_t>(0.5 * MAX_TST, 500_ms); }// 续约周期固定为消息延迟的一半,最大不超过500ms
inline int64_t CALCULATE_TIME_WINDOW_SPAN_TS() { return 2 * MAX_TST; }// 时间窗口的长度,为两个最大单程消息延迟, 默认为2s
inline int64_t CALCULATE_MAX_ELECT_COST_TIME() { return 10 * MAX_TST; }// 一次选举可能出现的最大耗时设置,默认为10s
inline int64_t CALCULATE_LEASE_INTERVAL() { return 4 * MAX_TST; }// 4个消息延迟,默认是4s
inline int64_t CALCULATE_TRIGGER_ELECT_WATER_MARK() { return std::min<int64_t>(MAX_TST, 1_s); }// 触发无主选举的Lease剩余水位线,1个最大消息延迟,最大不超过1s

CALCULATE_RENEW_LEASE_INTERVAL:leader副本每隔500ms续约一次。
CALCULATE_TIME_WINDOW_SPAN_TS:这个是选举rpc延迟时间阈值,超过这个值就是过期信息。
CALCULATE_TRIGGER_ELECT_WATER_MARK:租约还剩最后一秒,触发无主选举。

CALCULATE_TRIGGER_ELECT_WATER_MARK 租约小于该值,触发选举。
CALCULATE_TIME_WINDOW_SPAN_TS 用于计算时间窗口的长度,时间窗口是指计算选举拉票信息并选取最优副本成为leader的时间
CALCULATE_RENEW_LEASE_INTERVAL 续约时间

2 个赞

那哪个变量是控制选举消息超时被认为是过期消息的?

2 个赞