호스트 시스템 앱이 게스트 시스템 Cassandra 데이터베이스를 쿼리할 수 없습니다.

호스트 시스템 앱이 게스트 시스템 Cassandra 데이터베이스를 쿼리할 수 없습니다.

환경

주인:

  • 우분투 18.04 데스크탑 64비트
  • Visual Studio 코드 + CassandraCSharpDriver

손님:

  • 우분투 18.04 서버 64비트
  • 자바와 카산드라 설치
  • 단일 노드
  • 복제 1
  • 일관성 1
  • 카산드라 서비스 실행 중
  • 키스페이스 및 테이블 생성
  • 테이블에 입력된 데이터
  • Bridge로 설정된 게스트용 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에 연결했습니다.

관련 정보