
環境
ホスト:
- Ubuntu 18.04 デスクトップ 64 ビット
- Visual Studio コード + CassandraCSharpDriver
ゲスト:
- Ubuntu 18.04 サーバー 64 ビット
- JavaとCassandraがインストールされている
- 単一ノード
- レプリケーション 1
- 一貫性 1
- Cassandraサービスが実行中
- キースペースとテーブルが作成されました
- テーブルに入力されたデータ
- ゲスト用の Virtual Box ネットワークがブリッジに設定されています。
問題
ホスト マシンでコードを実行すると、エラーが発生します。
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$
私が試したこと
VM を使用せずに同じホスト上でコードと Cassandra を実行する Windows マシンでは、コードが問題なくデータベースに挿入したりデータベースから選択したりできるため、コードとデータベースは正常に動作します。
問題なく両方向に ping を実行でき、traceroute は次のように返します。
基本:
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:~$
ポートあり:
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:~$
ゲストVMのポート番号を開いたiptables -I INPUT 1 -p tcp --dport 9042 -j ACCEPT
次のエラー メッセージが表示されます:
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$
質問
ホスト マシン上のコードが Cassandra データベースに接続できるように VM ゲストを構成するにはどうすればよいでしょうか? VM が適切に構成されていないために問題が発生していると思いますか?
192.168.0.15 を使用してサーバーに接続していますが、サーバーは内部的に 127.0.0.1 を使用しているようです。着信接続を 127.0.0.1 に転送する必要がありますか? そうであるかどうかを確認するにはどうすればよいですか。また、必要な場合はポートを転送するにはどうすればよいですか? コードとサーバーが同じマシンである Windows でコードをテストしていたときと同様に、ローカル ポート 127.0.0.1 に接続していました。