📜  Cassandra 中的高可用性机制

📅  最后修改于: 2021-09-10 01:56:36             🧑  作者: Mango

在本文中,我们将使用以下关键术语了解 Cassandra 中的高可用性机制。

1. Seed Node
2. Gossip Communication Protocol
3. Failure Detection 
4. Hinted Handoff  

让我们一一讨论。

1. 种子节点:
在 Apache Cassandra 中,它是第一个在集群中启动的节点。如果我们想配置种子节点,那么我们可以在 Cassandra.yaml 文件中配置,该文件是 Cassandra 中的主文件,用于更改任何配置设置。种子节点有助于引导新节点加入 Cassandra 中的集群。

种子节点还有助于提供有关另一个节点的信息。当一个新节点上线时,它将与种子节点进行八卦以获取有关集群中其他节点的信息。

图 –种子节点

启动顺序:
在 Cassandra 启动序列中起着重要作用。起始序列给出初始序列,因此,一个一个地启动种子节点,然后是其他节点。

最佳实践:在 Cassandra 中,为集群中的每个数据中心设置多个种子节点始终是一个好习惯。

侦听器地址和存储端口:
在节点间通信中,我们使用了 Cassandra 中的 listener_address 和存储端口进行通信。 Cassandra 的默认端口 id 是 7000。在 Cassandra 中,集群中每个节点的端口 id 必须相同。

listener_address= ip address of node 
storage_port = 7000 (by default) 

2.八卦通讯协议:
在 Cassandra 中,节点会定期(每秒)交换关于它们自己以及它们所知道的其他节点的状态信息(例如,死的还是活的)。在 Cassandra 中,八卦通信协议也称为流行病协议。它是一种快速、分散的自动了解集群的方式,对集群中的节点信息非常有帮助。

在 Gossip 通信协议中允许快速重启,然后 Gossip 信息由每个节点本地保存。了解持久性的含义对于评估不同的数据存储系统很重要。

持久性是“去除原因后效果的持续存在”。在计算机系统中存储数据的上下文中,这意味着数据在创建它的过程结束后仍然存在。换句话说,要使数据存储被认为是持久的,它必须写入非易失性存储。

危急:
任何数据中心的种子节点列表在集群中的每个节点上都必须相同,这是一项重要任务

3.故障检测:
在故障检测的情况下,节点根据八卦状态和历史在本地确定并相应地在集群中调整路由。 Phi Accrual 是故障检测算法的重要算法。它表示节点的死状态和活动状态之间的持续怀疑级别,即节点发生故障的置信度。它可以是网络性能、必须优先考虑的工作负载问题等等。

如果某个节点检测到故障,则其他节点将定期尝试与故障节点进行闲聊,以查看它是否重新联机。

现在,让我们看看使用 CQL 查询来检查节点的状态。默认情况下,cqlsh 连接到 127.0.0.1。要获取主机 ID、发布版本等信息,请使用以下 CQL 查询。

SELECT peer, data_center, host_id, 
            preferred_ip, rack, release_version, 
            rpc_address, schema_version 
FROM system.peers; 

要获取节点的信息,请在 Cassandra 中使用以下 CQL 命令。

nodetool gossipinfo 

通过执行终止节点:

nodetool stopdaemon  

查看 node1 上的 gossipinfo。注意 node2 的 gossip 信息仍然存在,因为它是集群的一部分,但它的 STATUS 状态是关闭的。

4. 提示交接:
在 Cassandra 中,它是高可用机制的重要方面之一。它有助于减少重新加入集群的故障节点的恢复时间,并通过容忍不一致的读取来确保绝对的写入可用性。如图所示,如果在写入时副本关闭,另一个健康副本存储提示,如果所有相关副本都关闭,则协调器或本地存储提示。

Hint = location [failed replica] 
              + affected [row key] 
              + actual data being written  

笔记:
在 Cassandra 中,当负责该令牌范围的节点再次启动时,将传递提示。

反熵:
在高可用机制的情况下,反熵是副本同步机制,以确保所有节点上的数据都是最新的。

例子:
一般来说,建议在集群中有足够的节点和足够的复制因子以避免写请求失败。例如,考虑一个由三个节点组成的集群,节点 1、节点 2 和节点 3,复制因子为 2。当行 K 写入协调器(在本例中为节点 A)时,即使节点 3 是下来,可以满足 ONE 或 QUORUM 的一致性级别。为什么?节点 1 和节点 2 都会接收数据,因此满足一致性级别要求。节点 1 提示为节点 3 存储并在节点 3 出现时写入。同时,协调器可以确认写入成功。

图 –提示切换:写入路径期间的修复