我有一个使用docker swarm模式并使用覆盖网络运行的cassandra集群/服务。我需要我的应用程序从覆盖网络外部访问cassandra数据库。应用程序应该能够直接访问任何cassandra节点。是否有任何解决方案可以帮助实现这一目标?
我试着docker-flow-proxy,但我无法实现目标。这是我试过的。
创建了cassandra集群......
sudo docker service create -e CASSANDRA_SEEDS=192.168.0.3 --detach=false --network overlay-net --network proxy --replicas 5 --name cassclu bitnami/cassandra
启动了docker-flow-proxy容器......
sudo docker service create --name proxy --detach=false -p 80:80 -p 443:443 -p 9042:9042 -p 9160:9160 -p 8080:8080 --network proxy -e MODE=swarm vfarcic/docker-flow-proxy
配置代理....
sudo curl "192.168.1.76:8080/v1/docker-flow-proxy/reconfigure?reqMode=tcp&serviceName=cassclu&servicePath.1=/&port.1=9042&srcPort.1=9042&&servicePath.2=/&port.2=9160&srcPort.2=9160"
但是当我尝试使用cqlsh测试从主机上访问时,我收到以下错误
cqlsh -u cassandra
Password:
Connection error: ('Unable to connect to any servers', {'127.0.0.1': error(111, "Tried connecting to [('127.0.0.1', 9042)]. Last error: Connection refused")})
更新:发现问题正在发生,因为当docker容器启动时,cassandra节点已经离开了cassandra集群。
有没有办法让docker swarm知道cassandra状态,以便请求不会被路由到cassandra节点,这个节点已经关闭了?