【问题标题】:Does Cassandra need all the servers to have the same time?Cassandra 是否需要所有服务器都具有相同的时间?
【发布时间】:2018-08-27 23:43:58
【问题描述】:

我在 Windows 机器上有一个 .NET 应用程序,在 Linux (CentOS) 服务器上有一个 Cassandra 数据库。 Windows 机器可能会在几秒钟后发生,当这种情况发生时,删除或更新查询不会生效。

Cassandra 是否要求所有服务器都具有相同的时间? Cassandra 驱动程序是否发送带有时间戳的查询? (我只是写简单的删除或更新查询,没有时间戳或 TTL)。

更新:我使用Datastax C# driver

【问题讨论】:

    标签: cassandra datastax cassandra-3.0


    【解决方案1】:

    Cassandra 遵循“最后写入胜出”的原则。因此,系统时间对于确定哪些写入成功至关重要。谷歌搜索“cassandra 时间同步”以找到 results like thisthis,它们解释了为什么时间同步很重要,并提出了一种利用内部 NTP 池解决问题的方法。这些文章专门提到了 AWS 架构,但原则适用于任何 cassandra 安装。

    【讨论】:

    • 感谢您的回答。我已经按照您的条款进行了搜索,发现了另一个问题。 stackoverflow.com/questions/34898693/… 但它说集群自己同步时钟。所以我不明白。这个问题是在 cassandra pre 3.0 中还是在 3.0 中?
    • 时间同步是每个 Cassandra 版本的问题。 NTP(网络时间协议)守护进程需要安装在每个节点上,但默认设置是不够的。节点本身不同步时钟。必须正确配置 NTP。最佳做法是在您的网络中创建一个 NTP 池。此池同步到外部池,然后您的 cassandra 节点上的 ntp 守护程序同步到您的内部池,如我帖子中的第二个链接中所述。
    • 你知道这个问题是否也发生在它连接到集群的驱动程序上?
    • 对不起,我更像是 cassandra 管理员,而不是开发人员,所以我无法确定。也许其他人知道?
    【解决方案2】:

    客户端时间戳用于对相对于彼此的变异操作进行排序。

    DataStax C# driver uses a generator to create them,对于所有运行客户端驱动程序(执行请求的来源)的主机来说,时钟彼此同步非常重要。

    【讨论】:

    • @jorgebg非常感谢您的回复。从上面的文章中,我了解到驱动程序发送带有时间戳的查询。但是,如果我只有一个服务器(我的 .NET 应用程序)和一个 Cassandra 数据库。如果这两个不同步出现问题正常吗?
    • 您的理解是正确的,它是带有时间戳的请求。如果客户端和服务器时钟不同步也不会有问题,因为时间戳用于相对于彼此对突变进行排序,但这些突变的来源将是单个客户端实例。
    猜你喜欢
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 2011-08-24
    • 2016-03-09
    相关资源
    最近更新 更多