假设我们在GCE上有一个3节点(linux)cassandra 3.7群集(可能与EC2相同)。虚拟机知道他们的私有IP,也有公共IP。
根据doc: multiple network interfaces配置节点,简而言之就是将私有IP用于listen_address,将public IP用于broadcast_address,将公用IP用于种子。
根据上述文档,“Cassandra在建立连接后切换到私有IP”。但这不会发生,tcpdump显示到端口7000的流量的一端始终是公共IP。 在cassandra-rackdc.properties上使用“prefer_local = true”只会让客户端尝试连接到失败的私有IP。
所有这些工作,客户端连接和节点相互看到,但节点之间的通信通过其公共IP发生。我们希望客户端连接到公共IP,从协调器获取公共IP列表作为联系点(端点),但协调器通过私有IP转发请求。可以这样做(没有iptables等)吗?
答案 0 :(得分:0)
初步测试表明以下情况有效:
1)
listen_address: private
broadcast_address: public
rpc_address: private
broadcast_rpc_address: public
seeds: public
nodetool status shows public.
2)
listen_address: private
broadcast_address: private (or comment out)
rpc_address: private
broadcast_rpc_address: public
seeds: private
nodetool status shows private
some few data between nodes on port 7000 go through public.