【问题标题】:Cassandra Automatic failover delay when a node failsCassandra 节点故障时的自动故障转移延迟
【发布时间】:2015-03-21 21:19:36
【问题描述】:

我是 Cassandra 的新手。

我在两台 Debian VMware 机器上创建了 2 个 cassandra 2.1 节点。在 asp.net mvc 中,我使用了 datastax 驱动程序 2.1.5,实际上没有任何问题,但是当我关闭或禁用其中一个节点上的网络时,应用程序似乎有 5 或 10 秒的延迟来自动连接其他节点。

当两个节点启动时,查询在 c# 中运行 00:00:00.0620413 秒 当一个节点关闭时,查询运行 00:00:10.0607187 秒。每刷新一次页面延迟 10 秒,当两个节点同时运行时,查询在 1 秒以下执行。

我的代码:

Cluster cluster = Cluster.Builder()
            .AddContactPoints("192.168.0.1", "192.168.0.")
            .WithRetryPolicy(DowngradingConsistencyRetryPolicy.Instance)
            .WithReconnectionPolicy(new FixedReconnectionPolicy(0, 10))
            .WithLoadBalancingPolicy(
                new TokenAwarePolicy(new DCAwareRoundRobinPolicy()))
            .Build();

我在两个节点上的配置: cluster_name: '测试集群' 代币数量:256 种子提供者: - 类名:org.apache.cassandra.locator.SimpleSeedProvider 参数: - 种子:“192.168.0.1, 192.168.0.2” endpoint_snitch: SimpleSnitch

在节点 1 中: 听地址:192.168.0.1 rpc_address:192.168.0.1

在节点 2 中: 听地址:192.168.0.2 rpc_address:192.168.0.2


我的密钥空间: 创建密钥空间 mykeyspace WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 2 };

【问题讨论】:

  • 启用驱动程序日志以检查发生了什么,同时检查“实时”节点的 cassandra 日志。

标签: c# cassandra nosql


【解决方案1】:

您的一致性级别是多少?如果您的一致性级别为 1。您应该会看到失败,因为其中一个节点在 50% 的情况下已关闭。但是由于 datastax 驱动程序中的重试策略,它主要是在读取超时后获取数据。

但是要发生读取超时,它首先必须向向下节点发送请求,因此我认为延迟会增加。

由于默认读取超时为 10 秒,因此您会看到 10 秒的延迟。如果这对您来说很常见,我会说您应该减少此时间。

协调器应该等待读取操作完成多长时间 read_request_timeout_in_ms: 10000

【讨论】:

  • 嗨。 tnx 为您解答。一致性为1,我更改了波纹管参数,但一切都像以前一样。 read_request_timeout_in_ms、range_request_timeout_in_ms、write_request_timeout_in_ms、counter_write_request_timeout_in_ms、cas_contention_timeout_in_ms、request_timeout_in_ms。
  • 你也改变了什么值?
  • read_request_timeout_in_ms=100,range_request_timeout_in_ms=100,write_request_timeout_in_ms=100,counter_write_request_timeout_in_ms=100,cas_contention_timeout_in_ms=100,request_timeout_in_ms=100。但是查询在 c# 00:00:00.0620413 秒内运行,当节点关闭时,查询在 00:00:10.0607187 秒内运行。
  • 进行更改后是否重新启动了节点? cassandra.yaml 文件更改需要重启
【解决方案2】:

我有同样的症状。问题原来是两个节点上的cassandra.yaml文件中指定的broadcast_rpc_address。它指向另一个集群。我的解决方案是将此 IP 更改为当前集群中某个节点的公共 IP。

【讨论】:

    猜你喜欢
    • 2016-03-19
    • 2022-11-25
    • 2013-12-30
    • 2013-04-25
    • 2014-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多