
環境
主持人:
- 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。