cassandra gossip 协议和 phi_threshold 是如何工作的?

Posted

技术标签:

【中文标题】cassandra gossip 协议和 phi_threshold 是如何工作的?【英文标题】:How does cassandra gossip protocol and phi_threshold works? 【发布时间】:2017-02-13 01:03:01 【问题描述】:

当前设置,cassandra 2.2.5,gossip 默认为 1 秒,phi 阈值为 8。我面临的问题是提示中的尖峰。提示上升的原因之一是节点被标记为关闭(八卦尚未传达 phi 阈值)。

我读过一篇文章,它说 phi 阈值 8 对应于 18 秒,这里或那里将是几秒钟。现在我需要了解是什么原因,是什么阻止了八卦交流 18 秒。八卦沟通需要满足哪些清单?

【问题讨论】:

【参考方案1】:

回复:“cassandra gossip 协议和 phi_threshold 是如何工作的?”:Phi 是 approximated,如:phi = (tnow - tLast) / mean 和一个节点 is marked down when phi > phi_threshold / 0.434。对于您的设置(假设平均值为 1 [因为节点通常每隔 1 秒接收一次心跳]),如果我们在 8 / 0.434 = 18.42 秒内没有收到任何心跳,则该节点将被标记为关闭。 记录算法的论文可以在here找到。

Re:“八卦交流需要满足哪些清单?”:对我来说有几件事:

网络:gossip 消息被丢弃或 gossip 端口 (7000/7001) 被阻塞; 节点本身:节点忙/无响应(即执行 GC,执行一些繁重的负载操作),因此它们无法发送任何/太多八卦消息。

【讨论】:

可以配置 Gossip 使用不同的端口吗? 这是storage_port 配置值。对我来说,在更改值之前在防火墙中打开 7000 端口会更有意义。 我们有 7000 个打开,我担心的是由于存储端口拥塞,八卦消息没有被传达,它导致相信其他节点该节点已关闭,因此产生了很多提示。所以我在想,如果 gossip 可以在其他端口上工作,它会更简单。 我怀疑更改端口会产生很大的不同,它会是相同的流量。或者我可能误解了你所说的拥塞是什么意思。另外,当您说hints goes up 时,那是哪个指标? TotalHintsInProgress? 是的,端口 7000 用于任何 C* 节点间通信(八卦、数据流、协调......)。更改 storage_port 的值将不会导致此其他端口上仅发生 gossip 流量,它仅意味着现在此其他端口上发生所有 C* 节点间通信流量。

以上是关于cassandra gossip 协议和 phi_threshold 是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章

一万字详解 Redis Cluster Gossip 协议

Consul 内部实现

Cassandra 中的 Gossip 参数在哪里设置?

cassandra的schema version, gossip_generation 和host id

Python基础-----迭代器协议和For循环机制

python-迭代器协议和for循环工作机制