Cassandra有两个冗余节点

问题描述 投票:9回答:1

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

1个种子节点(在两个yamls中配置)

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

我的要求是有两个服务器是彼此完美的副本,如果一个服务器暂时关闭(例如由于磁盘空间故障),另一个服务器可以接管请求,直到损坏的服务器重新联机。

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

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

提前谢谢了,

cassandra
1个回答
21
投票

Cassandra不做主从复制。 cassandra没有大师。相反,数据分布在群集中。分配机制取决于许多事情。

数据存储在分区中的节点上。还记得cassandra是一个分区的行存储吗?这就是分区的用武之地。数据存储在分区中。分区的所有行一起存储在单个节点(和副本)中。多少个副本取决于表的复制因子。如果表的复制因子为3,则该表的每个分区(以及该分区中的所有行)都存储在另外两个副本中。这就像说 - “我想要3份这样的数据”。

在写入期间,客户端可以指定一致性级别(CL)。这是写入成功必须确认的节点数。客户端也可以指定CL进行读取。 Cassandra向n = CL节点发出读取请求,并将最新值作为查询结果。

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

在容错方面,您可以根据需要调整CL和RF。例如,如果您有RF = 3,读取CL = 2,写入CL = 2,那么您具有完全一致性,并且您可以容忍一个节点发生故障。对于RF = 5,读CL = 3,写CL = 3,你有相同的,但可以容忍2个节点下降。

双节点集群并不是一个好主意。您可以设置RF = 2(所有数据都已复制),写入CL = 2并读取CL = 1。但是,这将意味着如果节点关闭,您只能读取但不能写入。您可以设置读取CL = 2并写入CL = 1,在这种情况下,如果节点发生故障,您可以写入但不能读取。实际上,你应该选择至少5个(至少4个)节点,RF = 3。任何低于这个,你要求麻烦。

© www.soinside.com 2019 - 2024. All rights reserved.