
Среда
Хозяин:
- Ubuntu 18.04 Desktop 64 бит
- Visual Studio Code + CassandraCSharpDriver
Гость:
- Ubuntu 18.04 Сервер 64 бит
- Установлены Java и Cassandra
- Один узел
- Репликация 1
- Последовательность 1
- Служба Cassandra запущена
- созданы пространство ключей и таблица
- Данные введены в таблицу
- Сеть 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$
Что я пробовал
На машине с Windows, где машина запускает код и Cassandra на одном хосте без использования виртуальной машины, код и база данных работают нормально, поскольку код может вставлять данные и выбирать их из базы данных без каких-либо проблем.
Я могу пинговать в обоих направлениях без проблем, а 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$
Вопрос
Как мне настроить гостевую виртуальную машину, чтобы я мог получить код на хост-машине для подключения к базе данных Cassandra? Я предполагаю, что проблема возникает из-за того, что виртуальная машина не настроена должным образом?
Я подключаюсь к серверу, используя 192.168.0.15, но внутренне сервер, похоже, использует 127.0.0.1. Нужно ли мне перенаправлять входящие соединения на 127.0.0.1? Как мне проверить, так ли это, и как перенаправить порт, если это необходимо? Когда я тестировал код в Windows, где код и сервер были одной и той же машиной, я подключался к локальному порту 127.0.0.1.