Nehmen wir an, wir haben einen 3-Knoten (Linux) Cassandra 3.7 Cluster auf GCE (das gleiche wahrscheinlich für EC2). VMs kennen ihre privaten IPs und haben auch eine öffentliche IP.Cassandra auf GCE: Verwenden Sie private IP für Internodium und öffentliche IP für Samen
Knoten wurden nach doc: multiple network interfaces konfiguriert, die kurz gesagt private IPs für listen_address, öffentliche IP für broadcast_address und öffentliche IP für Seeds verwenden.
Gemäß dem obigen Dokument "wechselt Cassandra nach dem Herstellen einer Verbindung zur privaten IP-Adresse." aber das passiert nicht, tcpdump zeigt ein Ende des Verkehrs an Port 7000 ist immer eine öffentliche IP. Die Verwendung von "prefer_local = true" in cassandrackdc.properties lässt die Clients nur versuchen, eine Verbindung mit den privaten IPs herzustellen, die fehlschlagen.
All dies funktioniert, Clients verbinden und Knoten sehen einander, aber die Kommunikation zwischen Knoten passieren durch ihre öffentlichen IPs. Wir möchten, dass Clients eine Verbindung zur öffentlichen IP herstellen, eine Liste öffentlicher IPs als Kontaktpunkte (Endpunkte) vom Koordinator erhalten, aber einen Koordinator, um Anfragen über die privaten IPs weiterzuleiten. Kann das gemacht werden (ohne iptables und so)?