2017-02-15 64 views
0

我已经配置了一个卡桑德拉clustter与3个节点卡桑德拉聚类故障切换到高Avialability

Node1(192.168.0.2) , Node2(192.168.0.3), Node3(192.168.0.4) 

https://i.stack.imgur.com/vXqsi.png

创建与复制因数的密钥空间 '测试' 为2。

Create KEYSPACE test WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 2}

当我停止Node2或Node3(一次一个,同时一次)时,我可以在keyspace.table上执行CRUD操作。

当我停止Node1和尝试更新/创建节点4或节点3连胜,得到下面的错误虽然节点3和节点4启动并运行 - :

All host(s) tried for query failed (tried: /192.168.0.4:9042 (com.datastax.driver.core.exceptions.DriverException: Timeout while trying to acquire available connection (you may want to increase the driver number of per-host connections))) com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: /192.168.0.4:9042 (com.datastax.driver.core.exceptions.DriverException: Timeout while trying to acquire available connection (you may want to increase the driver number of per-host connections)))

我不知道如何卡桑德拉选举的领导者如果领导者节点死亡。

+1

在cassandra中没有领导者的概念...检查是否可以通过端口9042 telnet到主机(192.168.0.4) –

+0

您能否提供更多关于在queires上使用的一致性级别的信息(这对行为有巨大的影响你期待)?你正在使用驱动程序或使用cqlsh访问? –

+0

@undefined_variable ....是我可以从本地桌面telnet到端口9042上的所有节点。 – UAnand

回答

0

因此,您使用的是replication_factor 2,因此只有2个节点将拥有您的keyspace副本(并非全部为3个节点)。

如果您的设置您可以使用此calculator找出有一个体面的一致性。在你的情况下,结果是你可以承受没有节点的损失,而不会影响应用程序

+0

我更改了RF:3,然后再次用已停止的Node1和Node2,Node3向上尝试。但它仍然给我以下的错误(无法达到一致性水平QUORUM)。如何达到QUORUM的一致性水平?有没有特定的方式来做到这一点? 所有尝试查询的主机失败(尝试:/192.168.0.3:9042(com.datastax.driver.core.exceptions.ServerError:服务器端发生意外错误/192.168.0.3:9042:com.google .common.util.concurrent.UncheckedExecutionException:java.lang.RuntimeException:org.apache.cassandra.exceptions.UnavailableException:无法达到一致性级别QUORUM) – UAnand

+0

Cassandra版本I使用它是2.1.8。并且我将一致性级别设置为QUOTUM。 – UAnand

0

我觉得我不清楚答案。复制因素是关于您的数据将存在多少副本。一致性级别是您的客户在获得服务器响应之前等待的多少副本。例如:你所有的节点都在运行。客户端使用CL Quorum创建CQL,服务器将复制2个节点(3/2 + 1)中的数据并回复给客户端,在后台它也将复制第三个节点上的数据。

在您的示例中,如果关闭3节点群集的2个节点,则永远不会实现QUORUM以发出请求(使用CL QUORUM),因此必须使用一致性级别ONE,一旦节点重新启动,cassandra将复制他们的数据。可能发生的一件事情是:在cassandra复制其他2个节点上的数据之前,客户端向node1或node2发出请求,并且数据尚未存在。

+0

谢谢..问题已解决。 我将一致性级别更改为QUORUM和复制因子3,并且在cassandra.yaml中,我评论了num_token并为3个节点生成了initial_token。通过进行这些更改,集群因此在3个节点的集群中,在任何时间点只有一个节点可以关闭,2个节点应始终处于高可用状态。 – UAnand