我在Spring Cloud生态系统上有几个微服务,作为配置服务器和注册服务器我有领事。此外,我将4个节点上的Docker Swarm和3个consul代理作为服务器模式,将1个consul代理作为每个节点的客户端模式。
我的问题是什么: 我尝试在consul实例上的每个节点上作为docker容器运行,例如:
docker run -d --name consul -h node1 -p 8500:8500 -p ... progrium/consul -server -advertise ${CONSUL_MASTER} -bootstrap-expect 3
并与其他领事代理人一起加入主要领事:
docker run -d --name consul -h node2 -p 8500:8500 -p ... progrium/consul -server -advertise $(docker info --format "{{.Swarm.NodeAddr}}") -join ${CONSUL_MASTER}
然后将我的微服务部署为Docker Swarm中的堆栈:
docker stack deploy --compose-file docker-compose.yml my_stek
我在每个微服务中的bootstrap.yml是:
spring:
application:
name: service-name
cloud:
consul:
host: consul
port: 8500
config:
enabled: true
format: yaml
发现我的服务后出现问题,因为有网络 -
Consul不在swarm集群中运行,无法检查我的微服务的健康状况,我的微服务无法从配置服务器接收配置文件。
所以,请帮助我组织正确的架构。也许我应该在Swarm集群中运行我的领事 - 这是解决这个问题的常用方法,或者它有其他解决方案。谢谢你的帮助!!!