了解仲裁和 epsilon

仲裁和 epsilon 是集群运行状况和功能的重要衡量指标,它们共同指示集群是如何应对可能出现的通信和连接挑战的。

仲裁是确保集群完全正常运行的前提。如果集群处于仲裁状态,则过半数的节点运行状况良好,并可相互通信。如果失去仲裁状态,则集群将无法完成正常的集群操作。一次只能有一组节点处于仲裁状态,因为其中所有节点会共享一个数据视图。因此,如果允许两个非通信节点以不同方式修改数据,则无法再将这些数据协调到一个数据视图中。

每个节点都参加评议,选择一个节点为主节点;其余每个节点为辅助节点。 主节点负责在集群内同步信息。形成仲裁后,系统会通过持续表决来维持这种仲裁关系;如果主节点脱机,则仍保持联机的节点将选举出一个新的主节点。

由于集群中可能会出现两个部分的节点数量正好相等的情况,因此,其中一个节点会有一个额外的百分比表决权重,称为 epsilon。如果一个大型集群中两个相等部分之间的连接发生故障,而所有节点运行状况均正常,则具有 epsilon 的那组节点将保持仲裁。 例如,如果在一行的 12 个节点与另一行的 12 个节点之间建立一个链接来构成一个 24 节点集群,但此链接失败,则持有 epsilon 的那组节点将保持仲裁并继续提供数据,而另外 12 个节点将停止提供数据。 但是,如果具有 epsilon 的节点运行状况不正常或脱机,则不会形成仲裁,此时,所有节点都将停止提供数据。

创建集群时,系统会自动将 epsilon 分配给第一个节点。 只要集群处于仲裁状态,在持有 epsilon 的节点运行状况不佳或者由其高可用性配对节点所接管时,epsilon 就会自动重新分配到运行状况良好的节点。

一般来说,假设集群节点间连接可靠,则较大的集群要比较小的集群更加稳定。与双节点集群相比,包含 24 个节点的集群更容易保持“过半数的节点外加 epsilon”这样的仲裁要求。

双节点集群在保持仲裁方面具有一定的难度。在双节点集群中,两个节点均不具有 epsilon,而是会持续进行投票,以确保一个节点发生故障后,另一个节点对数据拥有完全读写访问权限,并可访问逻辑接口和管理功能。