环境
主持人:
- Ubuntu 18.04 桌面版 64 位
- Visual Studio 代码 + CassandraCSharpDriver
客人:
- Ubuntu 18.04 服务器 64 位
- 已安装 Java 和 Cassandra
- 单节点
- 复制 1
- 一致性 1
- Cassandra 服务正在运行
- 已创建键空间和表
- 数据输入到表中
- 将虚拟机箱网络设置为 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 而不使用虚拟机,代码和数据库工作正常,因为代码能够插入和从数据库中选择而不会出现任何问题。
我可以毫无问题地 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:~$
在客户虚拟机中打开端口号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$
问题
如何配置 VM 客户机,以便获取主机上的代码以连接到 Cassandra 数据库?我假设问题发生是因为 VM 配置不正确?
我使用 192.168.0.15 连接到服务器,但服务器内部似乎使用 127.0.0.1。我需要将任何传入连接转发到 127.0.0.1 吗?如何检查是否是这种情况,如果需要,如何转发端口?当我在 Windows 中测试代码时,代码和服务器是同一台机器,我连接到本地端口 127.0.0.1。