Cassandra 2.2 的一致性和超时问题
Consistency and timeout issues with Cassandra 2.2
我使用的是 Cassandra 2.2,我的应用程序需要高度的一致性。
我配置了一个包含 3 个节点的数据中心集群。
我的密钥空间是用 replication_factor
of 2 创建的。
在每个 configuration.yaml 文件中,我设置了 2 seed_providers(例如 NODE_1 和 NODE_3)。
重要的是,即使一个节点宕机,我的应用程序也应该是完整的。
目前我的应用程序连接集群时存在一些一致性和超时问题。
我已经阅读了整个 Cassandra 2.2 文档,我得出的结论是,对于我的写入操作,最好的 CONSISTENCY LEVEL
应该是 QUORUM
,对于我的读取操作,最好的 ONE
,但我仍然有一些一致性问题。
首先,有很强的一致性是不是正确的选择?
而且,UPDATE
和 DELETE
操作是否被视为写入或读取操作,因为例如带有 WHERE
子句的更新操作仍然必须 'read' 数据?我不确定,特别是在 cassandra 的写入工作流程的上下文中。
我的第二个问题是写操作超时。一个简单轻量级的 INSERT
有时会得到“Cassandra timeout during write query at consistency QUORUM (2 replicas were required but only 1 acknowledged the write)
”
或某些人甚至“... 0 acknoledged”,即使我的所有 3 个节点都已启动。
是否还有一些我应该检查的其他参数,例如 write_request_timeout_in_ms,默认值为 2000 毫秒(这已经是一个很高的值)?
对于写入操作,您将与 Replication Factor = 2
和 Consistency Level = QUORUM
以及对于读取操作的 ONE
具有很强的一致性。但是如果一个节点宕机,写操作就会失败。在 Replication Factor = 2
.
的情况下,Consistency Level = QUORUM
与 ALL
相同
你应该使用 Replication Factor = 3
和 Consistency Level = QUORUM
进行写入和读取操作,以具有强一致性和完整的功能应用程序,即使一个节点关闭。
DELETE
和 UPDATE
操作是写操作。
对于超时问题,请提供 table 失败的模型和查询。
已更新
一致性级别适用于副本,而不是节点。
复制因子 = 2 意味着 3 个节点中的 2 个将包含数据。这些节点将是 replicas.
QUORUM 表示写入操作必须由 2 副本(当复制因子=2)而不是节点确认。
Cassandra根据partition key把数据放在各个节点上。每个节点负责 range 分区键。并非任何节点都可以存储任何数据,因此您需要有活动的副本(而不是节点)来执行操作。这里文章 about data replication and distribution.
当您对具有 3 个活动节点中的 2 个的集群执行 QUORUM 写入请求时,集群有可能只有 1 个活动副本用于分区键,在这种情况下,写入请求将失败。
我使用的是 Cassandra 2.2,我的应用程序需要高度的一致性。
我配置了一个包含 3 个节点的数据中心集群。
我的密钥空间是用 replication_factor
of 2 创建的。
在每个 configuration.yaml 文件中,我设置了 2 seed_providers(例如 NODE_1 和 NODE_3)。
重要的是,即使一个节点宕机,我的应用程序也应该是完整的。
目前我的应用程序连接集群时存在一些一致性和超时问题。
我已经阅读了整个 Cassandra 2.2 文档,我得出的结论是,对于我的写入操作,最好的 CONSISTENCY LEVEL
应该是 QUORUM
,对于我的读取操作,最好的 ONE
,但我仍然有一些一致性问题。
首先,有很强的一致性是不是正确的选择?
而且,UPDATE
和 DELETE
操作是否被视为写入或读取操作,因为例如带有 WHERE
子句的更新操作仍然必须 'read' 数据?我不确定,特别是在 cassandra 的写入工作流程的上下文中。
我的第二个问题是写操作超时。一个简单轻量级的 INSERT
有时会得到“Cassandra timeout during write query at consistency QUORUM (2 replicas were required but only 1 acknowledged the write)
”
或某些人甚至“... 0 acknoledged”,即使我的所有 3 个节点都已启动。
是否还有一些我应该检查的其他参数,例如 write_request_timeout_in_ms,默认值为 2000 毫秒(这已经是一个很高的值)?
对于写入操作,您将与 Replication Factor = 2
和 Consistency Level = QUORUM
以及对于读取操作的 ONE
具有很强的一致性。但是如果一个节点宕机,写操作就会失败。在 Replication Factor = 2
.
Consistency Level = QUORUM
与 ALL
相同
你应该使用 Replication Factor = 3
和 Consistency Level = QUORUM
进行写入和读取操作,以具有强一致性和完整的功能应用程序,即使一个节点关闭。
DELETE
和 UPDATE
操作是写操作。
对于超时问题,请提供 table 失败的模型和查询。
已更新
一致性级别适用于副本,而不是节点。
复制因子 = 2 意味着 3 个节点中的 2 个将包含数据。这些节点将是 replicas.
QUORUM 表示写入操作必须由 2 副本(当复制因子=2)而不是节点确认。
Cassandra根据partition key把数据放在各个节点上。每个节点负责 range 分区键。并非任何节点都可以存储任何数据,因此您需要有活动的副本(而不是节点)来执行操作。这里文章 about data replication and distribution.
当您对具有 3 个活动节点中的 2 个的集群执行 QUORUM 写入请求时,集群有可能只有 1 个活动副本用于分区键,在这种情况下,写入请求将失败。