簡體   English   中英

EC2中的Cassandra群集通過私有IP與自身通信。 我該如何與外界溝通?

[英]Cassandra cluster in EC2 communicates to itself over private IP. How do I communicate with it from the outside?

我在AWS中托管了一個三機集群。

  • 每台機器的偵聽地址均定義為其本地IP。
  • 每台機器的廣播地址都列為本地IP。
  • 每台計算機都有其RPC地址作為其本地IP列出。
  • 每台計算機都將其“種子”屬性設置為三個本地IP的列表。

集群可以正確啟動,並且可以與自身正常通信。 當我使用Spring Data連接到該集群時,我將contactPoints屬性設置為節點的三個公共IP地址的列表。 我可以成功連接到一個節點,但是Cassandra Java驅動程序引發了有關嘗試通過其私有IP連接到其他兩個節點的異常。 我懷疑該節點為驅動程序提供了內部IP而不是我通過contactPoints提供給它的公共IP。

  1. 我的第一個猜測是將每個RPC地址更改為其公共IP,但這沒有用。
  2. 我的第二個猜測是將每個節點的廣播地址更改為其公共IP,但這沒有用。
  3. 我的第三個猜測是同時做#1和#2,但這沒有用。

還缺少什么嗎? 是應該工作的人之一,我只是搞砸了嗎?

謝謝

集群使用broadcast_address向其他實例通告它,它們應嘗試通過該地址與節點進行通信。 群集絕對不知道客戶端是否會使用某種NAT轉換(本地和外部客戶端混合使用)或它的外部IP地址(因為它是基礎結構,而不是群集)來連接到它,屬性)。

因此,驅動程序負責查找如何連接到群集。 一些驅動程序僅接受應連接到的IP的有限列表,並且僅連接到這些IP。

但是Java驅動程序具有一個稱為AddressTranslater的策略,您可以實施該策略以執行從內部IP到外部IP的轉換-例如通過使用AWS API。 http://www.datastax.com/drivers/java/2.0/com/datastax/driver/core/policies/AddressTranslater.html

這是實現的鏈接(我自己沒有使用過): http : //docs.hazelcast.org/docs/3.3/javadoc/com/hazelcast/client/spi/impl/AwsAddressTranslator.html

broadcast_address是廣播到其他Cassandra節點的地址。 最好將listen_address和broadcast_address都設置為節點的本地IP。 當您要通過節點的公共IP訪問Cassandra時,應將rpc_address和broadcast_rpc_address設置為節點的公共IP。

但是出於安全原因,最好不要將Cassandra暴露給公眾。 如果您的應用程序也運行在AWS上,最好讓Cassandra僅偵聽本地IP,並讓應用程序訪問本地IP。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM