【发布时间】:2015-08-07 13:48:17
【问题描述】:
我在 Azure 中设置了两个节点,并尝试在连接 C# 驱动程序时使故障转移正常工作。在使用 cqlsh 和 OpsCenter 时,我的节点似乎可以正常通信。
var contact = "publicipforfirstnode";
_cluster = Cassandra.Cluster.Builder().AddContactPoint(contact).Build();
_session = _cluster.Connect("demo");
我最初使用第一个节点的公共 IP 连接。这工作正常。但是,在配置中,我使用虚拟网络分配的内部网络 IP,例如 10.1.0.4、10.1.0.5 等。我将它们设置为每个节点的 listen_address 和 broadcast_rpc_address。即使我在配置中使用内部 IP,我也可以很好地连接公共 IP。我有一个特殊的防火墙规则,允许我从公共 IP 上的某台机器进行连接。但是为了避免内部节点通信的防火墙规则,我将节点放在同一个虚拟网络上,不需要额外的工作。
在我的第一个节点出现故障之前,这看起来很棒。 然后它使用内部 IP 尝试第二个节点。
我收到一个错误:所有主机都尝试查询(First 的公共 IP 节点),(第二节点的内部 IP)
但由于我是从不在虚拟网络中的机器连接的,因此无法访问此内部 IP。我的应用程序不会在内部网络中,所以这似乎是一个问题。
不使用内部 ips 迫使我设置身份验证和/或我不想做的特殊防火墙规则。有没有办法强制 c# 驱动程序使用公共 ips 并允许节点在内部 ips 上进行通信?除非您有多个区域,否则使用内部 ips 似乎是推荐的最佳做法。
【问题讨论】:
标签: c# azure cassandra datastax-enterprise