调整虚拟环境的 Spread 守护程序超时
Vertica 依靠 Spread 守护程序在数据库节点之间传递消息。有时,节点无法在指定的 Spread 超时内对消息做出响应。这些失败可能是由网络延迟峰值或节点 VM 中的短暂暂停(例如,计划的 Azure 维护超时)引起的。在任何一种情况下,Vertica 都假定无响应节点已关闭,并开始从数据库中移除它们,即使它们可能仍在运行。您可以根据需要通过调整 Spread 超时来解决此问题。
调整 Spread 超时
默认情况下,Spread 超时取决于配置的 Spread 段数:
重要
如果您使用 Azure 市场部署 Vertica 群集,则默认 Spread 超时设置为 35 秒。如果在 Azure 中手动创建群集,则默认 Spread 超时设置为 8 或 25 秒。如果 Spread 超时很可能在网络或数据库节点响应之前发生,则将超时增加到无响应时间最大长度加上五秒。例如,如果 Azure 保留内存的维护将节点 VM 最多暂停 30 秒,则将 Spread 超时设置为 35 秒。
如果您不确定网络或节点中断可能持续多长时间,则逐渐增加 Spread 超时,直到离开数据库的运行中节点实例减少。
重要
Vertica 无法对节点在超时期限过去之前出现故障或不正确关闭做出反应。如果将 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);
注意
使用 SET_SPREAD_OPTION 更改 Spread 设置对群集的影响很小,因为当新设置在整个群集中传播时,它会暂停。正是由于这种延迟,因此 Spread 超时的更改不会立即在系统表SPREAD_STATE
中可见。
Azure 维护和 Spread 超时
虚拟机上的 Azure 计划维护可能会使节点暂停的时间超过 Spread 超时期限。如果是这样,Vertica 可能会将未响应 Spread 消息的节点视为关闭,并将其从数据库中移除。
Azure 维护任务的长度通常是明确定义的。例如,在对托管 VM 的系统执行维护时,保留内存的更新可以将 VM 暂停最多 30 秒。此暂停不会中断节点,节点会在维护完成后恢复正常运行。为防止 Vertica 在节点进行 Azure 维护时移除节点,请根据需要调整 Spread 超时。