我已经配置了一个带有3个节点的cassandra clustter
Node1(192.168.0.2) , Node2(192.168.0.3), Node3(192.168.0.4)
创建了一个密钥空间' test'复制因子为2。
使用复制创建KEYSPACE测试= {' class':' SimpleStrategy', ' replication_factor' :2}
当我停止Node2或Node3(一次一个并且同时停止)时,我能够在keyspace.table上执行CRUD操作。
当我停止Node1并尝试从Node4或Node3更新/创建一行时,尽管Node3和Node4已启动并运行,但仍会出现以下错误:
所有尝试查询的主机都失败了(尝试:/192.168.0.4:9042 (com.datastax.driver.core.exceptions.DriverException:Timeout while 试图获得可用的连接(你可能想要增加 每个主机连接的驱动程序数))) com.datastax.driver.core.exceptions.NoHostAvailableException:全部 尝试查询失败的主机(尝试:/192.168.0.4:9042 (com.datastax.driver.core.exceptions.DriverException:Timeout while 试图获得可用的连接(你可能想要增加 每个主机连接的驱动程序数)))
如果领导者节点死亡,我不确定Cassandra如何选举领导者。
答案 0 :(得分:0)
因此,您正在使用replication_factor 2,因此只有2个节点将拥有您的密钥空间的副本(而不是所有3个节点)。
您可以使用此calculator来确定您的设置是否具有良好的一致性。在您的情况下,结果是您可以在不影响应用程序的情况下幸免于没有节点丢失
答案 1 :(得分:0)
我觉得我在回答时并不清楚。复制因子是关于您的数据的副本数量。一致性级别是客户端在从服务器获得响应之前等待的副本数量。 例如:您的所有节点都已启动。客户端使用CL Quorum创建CQL,服务器将以2个节点(3/2 + 1)复制数据并回复客户端,在后台它也将复制第三个节点的数据。
在您的示例中,如果关闭3节点群集的2个节点,您将永远不会获得QUORUM来发出请求(使用CL QUORUM),因此您必须使用一致性级别ONE,一旦节点再次启动,cassandra将复制它们的数据。可能发生的一件事是:在cassandra复制其他2个节点上的数据之前,客户端请求node1或node2并且数据尚未存在。