
Ambiente
Hospedar:
- Ubuntu 18.04 Desktop 64 bits
- Código do Visual Studio + CassandraCSharpDriver
Convidado:
- Servidor Ubuntu 18.04 64 bits
- Java e Cassandra instalados
- Nó único
- Replicação 1
- Consistência 1
- Serviço Cassandra em execução
- keyspace e tabela criada
- Dados inseridos na tabela
- Rede Virtual Box para convidados configurados para Bridge.
O problema
Quando executo o código na máquina host, recebo um erro:
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$
O que eu tentei
Em uma máquina Windows onde a máquina executa o código e o Cassandra no mesmo host sem usar uma VM, o código e o banco de dados funcionam bem, pois o código é capaz de inserir e selecionar no banco de dados sem problemas.
Posso executar ping em ambas as direções sem problemas e o traceroute retorna o seguinte:
Básico:
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:~$
Com porta:
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:~$
Abriu o número da porta na VM convidadaiptables -I INPUT 1 -p tcp --dport 9042 -j ACCEPT
Agora recebendo a seguinte mensagem de erro:
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$
Pergunta
Como configuro o convidado da VM para obter o código na máquina host para conectar-se ao banco de dados Cassandra? Presumo que o problema esteja acontecendo porque a VM não está configurada corretamente.
Eu me conecto ao servidor usando 192.168.0.15, mas internamente o servidor parece usar 127.0.0.1. Preciso encaminhar alguma conexão de entrada para 127.0.0.1? Como verifico se esse é o caso e como encaminho a porta, se necessário? Assim como quando estava testando o código no Windows onde o código e o servidor eram a mesma máquina, eu estava me conectando à porta local 127.0.0.1.