Die App auf dem Hostcomputer kann die Cassandra-Datenbank des Gastcomputers nicht abfragen

Die App auf dem Hostcomputer kann die Cassandra-Datenbank des Gastcomputers nicht abfragen

Umfeld

Gastgeber:

  • Ubuntu 18.04 Desktop 64Bit
  • Visual Studio Code + CassandraCSharpTreiber

Gast:

  • Ubuntu 18.04 Server 64Bit
  • Java und Cassandra installiert
  • Einzelner Knoten
  • Replikation 1
  • Konsistenz 1
  • Cassandra-Dienst wird ausgeführt
  • Schlüsselraum und Tabelle erstellt
  • In die Tabelle eingegebene Daten
  • Virtual Box-Netzwerk für Gäste auf Bridge eingestellt.

Das Problem

Wenn ich den Code auf dem Hostcomputer ausführe, erhalte ich eine Fehlermeldung:

user@desktop:~/Desktop/vsc$ dotnet run
Unhandled exception. Cassandra.NoHostAvailableException: All hosts tried for query failed (tried 192.168.0.15:9042: SocketException 'No route to host')
   at Cassandra.Connections.ControlConnection.Connect(Boolean isInitializing)
   at Cassandra.Connections.ControlConnection.InitAsync()
   at Cassandra.Tasks.TaskHelper.WaitToCompleteAsync(Task task, Int32 timeout)
   at Cassandra.Cluster.Cassandra.SessionManagement.IInternalCluster.OnInitializeAsync()
   at Cassandra.ClusterLifecycleManager.InitializeAsync()
   at Cassandra.Cluster.Cassandra.SessionManagement.IInternalCluster.ConnectAsync[TSession](ISessionFactory`1 sessionFactory, String keyspace)
   at Cassandra.Cluster.ConnectAsync(String keyspace)
   at Cassandra.Tasks.TaskHelper.WaitToComplete(Task task, Int32 timeout)
   at Cassandra.Tasks.TaskHelper.WaitToComplete[T](Task`1 task, Int32 timeout)
   at Cassandra.Cluster.Connect(String keyspace)
   at HelloWorld.Program.Main(String[] args) in /home/user/Desktop/vsc/Program.cs:line 15
user@desktop:~/Desktop/vsc$ 

Was ich versucht habe

Auf einem Windows-Computer, auf dem der Code und Cassandra auf demselben Host ohne Verwendung einer VM ausgeführt werden, funktionieren der Code und die Datenbank einwandfrei, da der Code problemlos in die Datenbank einfügen und daraus auswählen kann.

Ich kann problemlos in beide Richtungen pingen und Traceroute gibt Folgendes zurück:

Basic:

user@desktop:~$ traceroute 192.168.0.15
traceroute to 192.168.0.15 (192.168.0.15), 30 hops max, 60 byte packets
 1  node1 (192.168.0.15)  0.737 ms  0.694 ms  0.697 ms
user@desktop:~$ 

Mit Anschluss:

user@desktop:~$ traceroute 192.168.0.15 -p 9042
traceroute to 192.168.0.15 (192.168.0.15), 30 hops max, 60 byte packets
 1  node1 (192.168.0.15)  0.386 ms  0.388 ms  0.422 ms
user@desktop:~$ 

Die Portnummer in der Gast-VM wurde geöffnetiptables -I INPUT 1 -p tcp --dport 9042 -j ACCEPT

Jetzt erhalte ich folgende Fehlermeldung:

user@desktop:~/Desktop/vsc$ dotnet run
Unhandled exception. Cassandra.NoHostAvailableException: All hosts tried for query failed (tried 192.168.0.15:9042: SocketException 'Connection refused')
   at Cassandra.Connections.ControlConnection.Connect(Boolean isInitializing)
   at Cassandra.Connections.ControlConnection.InitAsync()
   at Cassandra.Tasks.TaskHelper.WaitToCompleteAsync(Task task, Int32 timeout)
   at Cassandra.Cluster.Cassandra.SessionManagement.IInternalCluster.OnInitializeAsync()
   at Cassandra.ClusterLifecycleManager.InitializeAsync()
   at Cassandra.Cluster.Cassandra.SessionManagement.IInternalCluster.ConnectAsync[TSession](ISessionFactory`1 sessionFactory, String keyspace)
   at Cassandra.Cluster.ConnectAsync(String keyspace)
   at Cassandra.Tasks.TaskHelper.WaitToComplete(Task task, Int32 timeout)
   at Cassandra.Tasks.TaskHelper.WaitToComplete[T](Task`1 task, Int32 timeout)
   at Cassandra.Cluster.Connect(String keyspace)
   at HelloWorld.Program.Main(String[] args) in /home/user/Desktop/vsc/Program.cs:line 15
user@desktop:~/Desktop/vsc$ 

Frage

Wie konfiguriere ich den VM-Gast, damit ich den Code auf dem Hostcomputer abrufen kann, um eine Verbindung zur Cassandra-Datenbank herzustellen? Ich gehe davon aus, dass das Problem auftritt, weil die VM nicht richtig konfiguriert ist?

Ich verbinde mich mit dem Server über 192.168.0.15, aber intern scheint der Server 127.0.0.1 zu verwenden. Muss ich eingehende Verbindungen an 127.0.0.1 weiterleiten? Wie überprüfe ich, ob dies der Fall ist, und wie leite ich den Port bei Bedarf weiter? Als ich den Code in Windows testete, wobei der Code und der Server dieselbe Maschine waren, stellte ich eine Verbindung zum lokalen Port 127.0.0.1 her.

verwandte Informationen