主機應用程式無法查詢客戶機 Cassandra 資料庫

主機應用程式無法查詢客戶機 Cassandra 資料庫

環境

主持人:

  • Ubuntu 18.04 桌面版 64 位
  • Visual Studio Code + CassandraCSharpDriver

客人:

  • Ubuntu 18.04 伺服器 64 位
  • 安裝了 Java 和 Cassandra
  • 單節點
  • 複製1
  • 一致性1
  • Cassandra 服務正在運行
  • 建立的鍵空間和表
  • 資料輸入表中
  • 訪客的 Virtual Box 網路設定為 Bridge。

問題

當我在主機上運行程式碼時,出現錯誤:

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$ 

我嘗試過的

在 Windows 機器上,機器在同一台主機上運行程式碼和 Cassandra,而不使用 VM,程式碼和資料庫工作正常,因為程式碼能夠插入資料庫並從資料庫中進行選擇,沒有任何問題。

我可以毫無問題地 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 資料庫?我假設問題發生是因為虛擬機器配置不正確?

我使用 192.168.0.15 連接到伺服器,但伺服器內部似乎使用 127.0.0.1。我需要將任何傳入連線轉發到 127.0.0.1 嗎?如何檢查是否屬於這種情況以及如何轉送連接埠(如果需要)?當我在 Windows 中測試程式碼時,程式碼和伺服器是同一台機器,我連接到本機連接埠 127.0.0.1。

相關內容