
환경
주인:
- 우분투 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에 연결했습니다.