【问题标题】:Cassandra system.hints table is empty even when the one of the node is down即使其中一个节点关闭,Cassandra system.hints 表也是空的
【发布时间】:2016-05-21 09:52:31
【问题描述】:

我正在从 academy.datastax.com 学习 Cassandra。我正在本地机器上尝试复制和一致性演示。 RF = 3,一致性 = 1。

当我的 Node3 关闭并且我正在使用 update 命令更新我的表时,SYSTEM.HINTS 表应该存储 node3 的提示,但它始终是空的。

我是否需要对配置进行任何更改才能使提示正常工作或默认设置是否正常?

surjanrawat$ ccm node1 nodetool getendpoints mykeyspace mytable 1
127.0.0.3
127.0.0.4
127.0.0.5

surjanrawat$ ccm status
Cluster: 'mycluster'
--------------------
node1: UP
node3: DOWN
node2: UP
node5: UP
node4: UP

cqlsh:mykeyspace> select * from system.hints ;

 target_id | hint_id | message_version | mutation
-----------+---------+-----------------+----------

(0 rows)

【问题讨论】:

  • RF=3 和 5 个节点更可能是下节点不是变异分区的副本。您是否尝试过针对不同分区进行多次更新?如果要验证功能,将 RF 增加到相同数量的节点将确保下节点是副本。

标签: cassandra cqlsh


【解决方案1】:

您是否使用完全相同版本的 Cassandra 创建集群?从版本 3+ 开始,提示存储在协调器的本地文件系统中。我问这个是因为在 Datastax 演示期间发生了完全相同的事情(我使用 3.0.3 而不是 2.1.5)我重播了这些步骤,但使用了 2.1.5 和表中的提示,正如预期的那样。

【讨论】:

  • 在这种情况下,我们还有什么办法可以检查协调器中的提示吗?
【解决方案2】:

当我遇到同样的问题时,偶然发现了这篇文章。最新版本的 cassandra 不会将提示存储在 system.hints 表中。我使用的是 cassandra 3.9,提示存储在文件系统中。

在 cassandra.yaml 文件中配置。

# Directory where Cassandra should store hints.
# If not set, the default directory is $CASSANDRA_HOME/data/hints.
# hints_directory: /var/lib/cassandra/hints

在我的情况下,我使用的是 ccm,我能够在以下位置找到提示

${user_home}/.ccm/mycluster/node1/hints 

其中 mycluster 是我的集群名称,node1 是我的节点名称。希望这对某人有所帮助。

【讨论】:

    【解决方案3】:

    要了解为什么没有编写提示,您需要很好地掌握 Cassandra replicates data 是如何编写的。

    复制因子为 2 表示每行有两个副本,其中每个 副本在不同的节点上。所有副本都同样重要;那里 不是主副本或主副本。

    如果集群中的复制因子为 3 和 5 个节点,您可能会丢失另一个节点并且仍然不存储提示,因为您的数据复制策略仍然有效。尝试再杀死两个节点,然后检查提示表。

    【讨论】:

    • 它将使用 HH 来确保所有副本的最终一致性。任何向下的副本和协调器都会创建一个 HH。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    • 2021-11-30
    • 2021-08-25
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    相关资源
    最近更新 更多