调整虚拟环境的 Spread 守护程序超时

Vertica 依靠 Spread 守护程序在数据库节点之间传递消息。有时,节点无法在指定的 Spread 超时内对消息做出响应。这些失败可能是由网络延迟峰值或节点 VM 中的短暂暂停(例如,计划的 Azure 维护超时)引起的。在任何一种情况下,Vertica 都假定无响应节点已关闭,并开始从数据库中移除它们,即使它们可能仍在运行。您可以根据需要通过调整 Spread 超时来解决此问题。

调整 Spread 超时

默认情况下,Spread 超时取决于配置的 Spread 段数:

如果 Spread 超时很可能在网络或数据库节点响应之前发生,则将超时增加到无响应时间最大长度加上五秒。例如,如果 Azure 保留内存的维护将节点 VM 最多暂停 30 秒,则将 Spread 超时设置为 35 秒。

如果您不确定网络或节点中断可能持续多长时间,则逐渐增加 Spread 超时,直到离开数据库的运行中节点实例减少。

要查看 Spread 超时的当前设置,请查询系统表 SPREAD_STATE。例如,以下查询显示当前超时设置 (token_timeout) 设置为 8000 毫秒:

=> SELECT * FROM V_MONITOR.SPREAD_STATE;
    node_name     | token_timeout
------------------+---------------
 v_vmart_node0003 |          8000
 v_vmart_node0001 |          8000
 v_vmart_node0002 |          8000
(3 rows)

要更改 Spread 超时,请调用元函数 SET_SPREAD_OPTION 并将令牌超时设置为新值。以下示例将超时设置为 35000 毫秒(35 秒):

=> SELECT SET_SPREAD_OPTION( 'TokenTimeout', '35000');
NOTICE 9003:  Spread has been notified about the change
                   SET_SPREAD_OPTION
--------------------------------------------------------
 Spread option 'TokenTimeout' has been set to '35000'.

(1 row)

=> SELECT * FROM V_MONITOR.SPREAD_STATE;
    node_name     | token_timeout
------------------+---------------
 v_vmart_node0001 |         35000
 v_vmart_node0002 |         35000
 v_vmart_node0003 |         35000
(3 rows);

Azure 维护和 Spread 超时

虚拟机上的 Azure 计划维护可能会使节点暂停的时间超过 Spread 超时期限。如果是这样,Vertica 可能会将未响应 Spread 消息的节点视为关闭,并将其从数据库中移除。

Azure 维护任务的长度通常是明确定义的。例如,在对托管 VM 的系统执行维护时,保留内存的更新可以将 VM 暂停最多 30 秒。此暂停不会中断节点,节点会在维护完成后恢复正常运行。为防止 Vertica 在节点进行 Azure 维护时移除节点,请根据需要调整 Spread 超时

另请参阅