gpt4 book ai didi

cassandra - Cassandra 中的单点故障

转载 作者:行者123 更新时间:2023-12-03 06:54:17 27 4
gpt4 key购买 nike

在制作 Cassandra 教程时,讲师提到 cassandra 没有单点故障。也就是说,如果集群中的某个节点发生故障,它不应该影响客户端访问它的方式。

所以我尝试了以下方法:关闭我的 3 节点集群中的一个节点。

然后尝试连接到那个关闭的节点。

我被拒绝连接,这很明显,因为该节点已关闭。但我希望 Cassandra 能够以循环方式将连接路由到下一个节点,正如讲师提到的那样。但事实并非如此。这是为什么?

ccm status
node1: UP
node3: UP
node2: UP
ccm node2 stop
ccm status
node1: UP
node3: UP
node2: DOWN
ccm node2 cqlsh
Connection error: Could not connect to 127.0.0.2:9160

编辑:

我注意到的另一件事是我能够执行写入操作。但默认操作失败。我没有调整一致性级别。我正在使用默认值。这是我得到的:

cqlsh> CREATE KEYSPACE example with replication = {'class': 'SimpleStrategy', 'replication_factor': 1};
cqlsh> use example ;
cqlsh:example> CREATE TABLE users(id varchar PRIMARY KEY, email varchar, password varchar, name varchar);
cqlsh:example> INSERT INTO users (id, email, name, password) VALUES ('user1','user1@example.com','foo','foo_pwd');
cqlsh:example> SELECT * from users ;
Unable to complete request: one or more nodes were unavailable.

最佳答案

如果节点已关闭并且您使用的驱动程序不保存状态,则它不知道要连接到哪个节点。如果您使用任何新一代驱动程序,您会发现即使您最初连接的节点出现故障,您也可以继续执行查询。

DataStax Python 驱动程序示例:

from cassandra.cluster import Cluster
sessions = Cluster("127.0.0.1").connect()
session.execute("Select * from ks.tab")

#Turn off Cassandra 127.0.0.1

session.execute("select * from ks.tab") # Will be ok if replication on ks is more than 1 and CL is one

编辑:

复制级别和一致性级别这两个都有详细描述in this blog post

您观察到的是:

只要负责其散列键的节点处于运行状态,插入就会在默认一致性(1)下成功。因此,即使 RF 为 1,宕机的节点仍将允许许多写入(和读取)成功。如果您继续尝试其他值,您将看到大约 1/3 的输入选择散列到损坏的节点,并且您会收到不可用的异常。

尽管选择 * 需要检查每个节点上的数据,这意味着如果任何节点出现故障,此命令将失败(除非 RF>1)

关于cassandra - Cassandra 中的单点故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25005240/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com