主机应用程序无法查询客户机 Cassandra 数据库

主机应用程序无法查询客户机 Cassandra 数据库

环境

主持人:

  • 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。

相关内容