使用 DataStax C# 驱动程序时处理 Cassandra 中的所有节点

Handling All Nodes Down in Cassandra when using DataStax C# Driver

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

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

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

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

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

例如,配置 Cluster 尝试在 500 毫秒后重新连接到被认为已关闭的节点:

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