CassandraTorres 2020-01-03
为防止八卦通信出现问题,请确保对群集中的所有节点使用相同的种子节点列表。在节点首次启动时,在所有最关键的节点上将种子设置为相同。默认情况下,一个节点会记住在后续重启之间闲聊的其他节点。指定种子节点没有其他目的,只是为加入群集的新节点引导八卦过程。种子节点不是单点故障,在节点操作之外,它们在群集操作中也没有任何其他特殊目的。
故障检测是一种从闲聊状态和历史记录本地确定系统中节点何时关闭或已恢复的方法。该卡珊德拉数据库使用此信息,以避免路由客户端请求不可达的节点只要有可能。(数据库还可以通过动态侦听避免路由到性能不佳的节点。)
闲话过程直接跟踪其他节点的状态(直接向其闲聊的节点)和间接跟踪其他节点的状态(围绕二手,第三手进行通讯的节点等等)。数据库没有使用固定的阈值来标记故障节点,而是使用权责发生制检测机制来计算每个节点的阈值。该阈值考虑了网络性能,工作量和历史条件。在八卦交换期间,每个节点都会维护一个滑动窗口,该窗口在群集中来自其他节点的八卦消息到达时间之间。
要调整故障检测器的灵敏度,请配置phi_convict_threshold属性。较低的值会增加无响应的节点将被标记为关闭的可能性。在大多数情况下,请使用默认值,但对于Amazon EC2,应将其增加到10或12(由于经常遇到网络拥塞)。在不稳定的网络环境中(有时为EC2),将该值提高到10或12有助于防止错误故障。不建议使用高于12且低于5的值。
节点故障可能是由各种原因引起的,例如硬件故障和网络中断。节点中断通常是短暂的,但可能会持续很长时间。由于节点中断很少表示永久离开集群,因此不会自动导致节点从环网中永久删除。其他节点将定期尝试与失败的节点重新建立联系,以查看它们是否已备份。要永久更改集群中节点的成员资格,必须显式在集群中添加或删除节点。
当节点在中断后重新联机时,可能会丢失对其维护的副本数据的写入。存在修复机制来恢复丢失的数据,例如提示的切换和使用nodetool修复的手动修复。中断的时间长短决定了使用哪种修复机制来使数据一致。