使用Docker Swarm的Cassandra集群 – 从外部访问

我有一个cassandra集群/服务运行使用docker群模式和使用覆盖networking。 我需要我的应用程序从覆盖networking之外访问cassandra数据库。 应用程序应该能够直接访问任何cassandra节点。 有什么解决scheme可以帮助实现吗?

我试了一下docker-flow-proxy,但是不能实现目标。 这是我试过的。

创build了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 

开始dockerstream代理容器…

 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 

configuration代理….

 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" 

但是当我尝试使用cqlshtesting从主机访问时,我得到以下错误

 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节点了?