gpt4 book ai didi

c# - 使用 DataStax C# 驱动程序时故障转移不适用于 Cassandra

转载 作者:行者123 更新时间:2023-11-30 21:57:52 26 4
gpt4 key购买 nike

我在 Azure 中设置了两个节点,并且尝试在连接 C# 驱动程序时进行故障转移。在使用 cqlsh 和 OpsCenter 内时,我的节点似乎通信良好。

var contact = "publicipforfirstnode";
_cluster = Cassandra.Cluster.Builder().AddContactPoint(contact).Build();
_session = _cluster.Connect("demo");

我最初连接第一个节点的公共(public)IP。这很好用。然而,在配置中,我使用虚拟网络分配的内部网络IP,例如10.1.0.4、10.1.0.5等。我将它们设置为每个节点的listen_address和broadcast_rpc_address。即使我在配置中使用内部 IP,我也可以很好地连接公共(public) IP。我有一个特殊的防火墙规则,允许我从公共(public) IP 上的特定计算机进行连接。但是,为了避免内部节点通信的防火墙规则,我将节点放在同一个虚拟网络上,不需要额外的工作。

这看起来很棒,直到我的第一个节点出现故障。 然后它会尝试使用内部 IP 的第二个节点。

I get an error: All Hosts tried for query (Public IP of First Node), (Internal IP of Second Node)

但是由于我是从不在虚拟网络中的计算机进行连接,因此无法访问此内部 IP。我的应用程序不会位于内部网络中,因此这似乎是一个问题。

不使用内部 ip 会迫使我设置身份验证和/或特殊的防火墙规则,而我不想这样做。有什么方法可以强制 C# 驱动程序使用公共(public) ip 并允许节点在内部 ip 上进行通信吗?除非您有多个区域,否则使用内部 ip 似乎是推荐的最佳实践。

最佳答案

驱动程序使用 cassandra.yaml 文件中配置为 broadcast_rpc_address 的 IP 来连接到它们。

就您的情况而言,如果您想使用公共(public) IP 地址与驱动程序连接,则应将 broadcast_rpc_address 设置为公共(public) IP 地址。

您可以在驱动程序中启用跟踪以查看幕后发生的情况:

// Specify the minimum trace level you want to see
Cassandra.Diagnostics.CassandraTraceSwitch.Level = TraceLevel.Info;
// Add a standard .NET trace listener
Trace.Listeners.Add(new ConsoleTraceListener());

From the docs :

  • listen_address:Cassandra 绑定(bind)的 IP 地址或主机名,用于连接其他 Cassandra 节点。
  • broadcast_rpc_address:向驱动程序和其他 Cassandra 节点广播的 RPC 地址。该值不能设置为 0.0.0.0。如果为空,则设置为 rpc_address 或 rpc_interface 的值。如果rpc_address或rpc_interface设置为0.0.0.0,则必须设置此属性。

关于c# - 使用 DataStax C# 驱动程序时故障转移不适用于 Cassandra,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30449194/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com