【问题标题】:Handling All Nodes Down in Cassandra when using DataStax C# Driver使用 DataStax C# 驱动程序时在 Cassandra 中处理所有节点故障
【发布时间】:2015-08-08 06:49:54
【问题描述】:

我在 Azure 中有一个简单的两节点集群设置,我正在使用 DataStax C# 驱动程序连接到它。

我可以毫无问题地关闭单个节点。只要我有一个节点运行一切都很好。但是,如果我将两个节点都关闭,然后将一个节点重新启动,则驱动程序永远不会注意到这一点。它一直说所有主机都已尝试并且即使节点再次可用也无法查询。

我想这对于拥有 20 个节点的人来说是一种罕见的情况,但目前只有两个节点且预算有限,我必须为这种可能性做好计划。我在 Azure 中有一个始终在运行的辅助角色,我需要一种重新连接(或刷新连接)的方法,以让 C# 驱动程序看到节点再次可用。我不想每次发生这种情况时都必须重新启动我的服务。

我没有看到任何从异常中知道我需要重新连接的好方法,因为它可能是一个临时错误,并且我没有看到 Cluster 或 Session 对象上有任何明显的属性来知道我需要重置连接.

【问题讨论】:

    标签: c# azure cassandra datastax-enterprise


    【解决方案1】:

    DataStax C# 驱动程序公开了一个ReconnectionPolicy 接口并提供了一些内置实现来配置驱动程序在节点出现故障时将如何尝试重新连接。

    例如,配置Cluster尝试重新连接500ms后被认为是down的节点:

    Cluster.Builder()
       .WithReconnectionPolicy(new ConstantReconnectionPolicy(500))
       .Build()
    

    【讨论】:

    • 太棒了!像魅力一样工作。如果您正在进行一次性查询,最好在每次查询后调用 Cluster.Shutdown() 以释放连接?还是让连接保持打开状态就可以了?
    • 您应该在应用生命周期内调用一次Cluster.Shutdown(),最好是在不再发出查询之后。
    猜你喜欢
    • 2015-08-07
    • 2014-10-13
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    • 2014-03-27
    • 2018-04-16
    • 2015-03-21
    • 2015-06-23
    相关资源
    最近更新 更多