Cassandra 卡桑德拉-不明白为什么这个简单的设置不起作用?

Cassandra 卡桑德拉-不明白为什么这个简单的设置不起作用?,cassandra,Cassandra,我是卡桑德拉的新手。我尝试这两种简单的设置:单个数据中心集群。但我不明白为什么第二个不起作用 所有节点均安装cassandra 3.3,配置如下: 设置1: 3个节点的集群大小:192.168.1.201、192.168.1.202和192.168.1.203 复制因子:2 写入一致性级别:仲裁2个节点 读取一致性级别:仲裁2个节点 数据中心:dc1 =============== 状态=向上/向下|/状态=正常/离开/加入/移动 -地址加载令牌拥有主机ID机架 UN 192.168.1.20

我是卡桑德拉的新手。我尝试这两种简单的设置:单个数据中心集群。但我不明白为什么第二个不起作用

所有节点均安装cassandra 3.3,配置如下:

设置1:

3个节点的集群大小:192.168.1.201、192.168.1.202和192.168.1.203 复制因子:2 写入一致性级别:仲裁2个节点 读取一致性级别:仲裁2个节点 数据中心:dc1

===============

状态=向上/向下|/状态=正常/离开/加入/移动

-地址加载令牌拥有主机ID机架

UN 192.168.1.201 4.57 MB 256?a0138a81-45f9-4df5-af97-362c1bd2e242机架1

UN 192.168.1.202 1.67 MB 256?e8a73b59-8852-4e3d-951e-bf8e231d6b5f机架1

UN 192.168.1.203 4.87 MB 256?7b02c94c-14c5-4b34-8a0d-dc16dec8c1f9机架1

所有3个节点都已启动

设置2:

4个节点的群集大小-192.168.1.201、192.168.1.202、192.168.1.203和192.168.1.204 复制因子:2 写入一致性级别:仲裁2个节点 读取一致性级别:仲裁2个节点 数据中心:dc1

===============

状态=向上/向下|/状态=正常/离开/加入/移动

-地址加载令牌拥有主机ID机架

UN 192.168.1.201 3.87 MB 256?a0138a81-45f9-4df5-af97-362c1bd2e242机架1

UN 192.168.1.202 2.54 MB 256?42bcba40-3941-43af-b694-06c1d4f615cc机架1

UN 192.168.1.203 3.77 MB 256?7b02c94c-14c5-4b34-8a0d-dc16dec8c1f9机架1

DN 192.168.1.204 1.67 MB 256?e8a73b59-8852-4e3d-951e-bf8e231d6b5f机架1

正如您所看到的,节点192.168.1.204已关闭,我为了测试目的将其强制关闭,而其他3个节点仍处于打开状态! 但是,这是行不通的。每次运行查询时,都会使用DevCenter GUI工具返回一个错误: 没有足够的副本可用于一致性仲裁处的查询,需要2个副本,但只有1个副本处于活动状态

如果我使用nodetool删除节点192.168.1.204,安装程序2变为安装程序1,那么它会再次工作

我认为,安装程序2应该和安装程序1一样运行良好


有人能解释一下原因吗?

要达到一半以上的法定人数,您需要复制副本的数量/2+1


您有一个4节点的集群,最多有3个节点。如果复制因子为2,则需要两个节点最多2/2+1=2个副本,仲裁才能成功。如果您拥有的一段数据属于宕机节点,那么您将无法满足仲裁要求,因此会出现该错误。但是,如果一致性级别为1,它将起作用。为了使1个节点关闭,并且仍然能够达到仲裁,您需要将复制系数设置为至少3 3/2+1=2(所需的3个节点中的2个)。

谢谢您的回答!我的cql是:从我的_表中选择*;如果我没有弄错,因为查询需要所有数据,所以导致了错误。如果我只查询一段数据:请参见我的_表中的lct*,其中id=244860a0-f5c0-4c86-a3c3-89d1b9093bf0;假设一段数据没有存储在宕机节点中,那么查询将运行?是的,分区的2个副本可能位于启动的节点上。为了实现高可用性,如果计划使用quorum以实现更高的一致性,那么您实际上应该使用至少3的RF…是的,我三天前就回答了这个问题-1表示不搜索。