具有冗余的 Cassandra 两个节点

Cassandra two nodes with redundancy

我按照 DataStax 网站上的文档设置了两台服务器来同时运行 Cassandra。我目前的设置是

1 seed node (configured in both yamls)

运行时,两个节点都启动了(通过 nodetool 测试时)并且似乎都正确复制了数据,但我注意到当我关闭种子节点时,另一个节点不允许客户端连接(既不是通过他们的 API 也不是通过连接到 cqlsh)这是个问题。

我的要求是有两台服务器,它们是彼此的完美副本,万一一台服务器临时停机(例如由于磁盘 space 故障),另一台服务器可以接管请求,直到损坏的服务器重新上线。

鉴于此要求,我有以下问题:

  1. 我是否需要将两个节点都设置为 "seed" 个节点?
  2. 我如何确保在两台服务器上复制所有内容?这是自动发生的还是我需要设置一些设置?

非常感谢,

Cassandra 不做主从复制。卡桑德拉没有大师。相反,数据分布在整个集群中。分配机制取决于许多因素。

数据存储在分区中的节点上。还记得 cassandra 是分区行存储吗?这就是分区的用武之地。数据存储在分区中。分区的所有行一起存储在单个节点(和副本)中。有多少副本取决于 table 的复制因子。如果 table 的复制因子为 3,则 table 的每个分区(因此,该分区中的所有行)都存储在两个额外的副本中。这就像在说 - "I want 3 copies of this data"。

在写入过程中,客户端可以指定一致性级别 (CL)。这是写入成功必须确认的节点数。客户端也可以指定一个 CL 来读取。 Cassandra向n=CL个节点发出读请求,取最近的值作为查询结果。

通过调整读写 CL,您可以控制一致性。如果读取 CL + 写入 CL > 复制因子 (RF),您将获得完全一致性。

在容错方面,您可以根据需要调整 CL 和 RF。比如你RF=3,Read CL=2,Write CL=2,那么你就是全一致性,你可以容忍一个节点宕机。对于 RF=5,Read CL=3,Write CL=3,你有相同的,但可以容忍 2 个节点宕机。

两个节点的集群,并不是一个好主意。您可以设置 RF=2(复制所有数据),写入 CL=2 并读取 CL =1。然而,这意味着如果一个节点宕机了,你只能读而不能写。可以设置read CL=2,write CL=1,这样的话,如果一个节点挂了,只能写不能读。实际上,您应该选择至少 5 个(至少 4 个)RF = 3 的节点。低于这个数值,你就是在自找麻烦。