Amazon ec2 EC2中的Cassandra集群通过专用IP与其自身通信。我如何与外界沟通?

Amazon ec2 EC2中的Cassandra集群通过专用IP与其自身通信。我如何与外界沟通?,amazon-ec2,cassandra,spring-data,Amazon Ec2,Cassandra,Spring Data,我有一个三机集群托管在AWS中 每台机器都将其侦听地址定义为其本地IP。 每台机器都将其广播地址列为其本地IP。 每台计算机都将其RPC地址列为其本地IP。 每台机器都将其种子属性设置为三个本地IP的列表。 集群正确启动,并且与自身通信良好。当我使用Spring数据连接到此集群时,我将contactPoints属性设置为节点的三个公共IP地址的列表。我可以成功地连接到一个节点,但是Cassandra Java驱动程序会抛出关于尝试通过其私有IP连接到其他两个节点的异常。我怀疑该节点正在为驱动程序

我有一个三机集群托管在AWS中

每台机器都将其侦听地址定义为其本地IP。 每台机器都将其广播地址列为其本地IP。 每台计算机都将其RPC地址列为其本地IP。 每台机器都将其种子属性设置为三个本地IP的列表。 集群正确启动,并且与自身通信良好。当我使用Spring数据连接到此集群时,我将contactPoints属性设置为节点的三个公共IP地址的列表。我可以成功地连接到一个节点,但是Cassandra Java驱动程序会抛出关于尝试通过其私有IP连接到其他两个节点的异常。我怀疑该节点正在为驱动程序提供内部IP以供使用,而不是我通过contactPoints提供的公共IP

我的第一个猜测是将每一个的RPC地址更改为它们的公共IP,但这不起作用。 我的第二个猜测是将每个节点的广播地址更改为它的公共IP,但这不起作用。 我的第三个猜测是同时做1和2,但这不起作用。 还有什么东西不见了吗?其中一个应该有用而我却把事情搞砸了


多亏了

集群使用广播地址向其他实例宣布它们应该尝试通过该地址与节点通信。无论如何,集群都不知道客户机将使用某种NAT转换连接到它。如果本地和外部客户机混合使用,集群也不知道它的外部IP地址,因为它是一个基础设施而不是集群属性

因此,驾驶员有责任了解如何连接到集群。一些驱动程序只接受一个有限的IP列表,它们应该连接到这些IP,并且只连接到这些IP

但是Java驱动程序有一个名为AddressTranslater的策略,您可以实现该策略来执行从内部IP到外部IP的转换,例如使用AWS API


这里有一个指向我自己没有使用过的实现的链接:

广播地址是广播到其他Cassandra节点的地址。最好将侦听地址和广播地址都设置到节点的本地IP。当您要通过节点的公共IP访问Cassandra时,应该将rpc_地址和broadcast_rpc_地址设置为节点的公共IP

但出于安全考虑,最好不要将卡桑德拉暴露在公众面前。如果您的应用程序也在AWS中运行,那么最好让Cassandra只在本地IP上侦听,并让应用程序访问本地IP