一、Consul是什么?
二、单体部署
docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul -p 8500:8500 --net dznetwork --ip 172.172.0.5 -v /data/consul:/consul/data consul agent -server -bootstrap -ui -node=1 -client='0.0.0.0'
这里指定了网络组和IP,可以根据自身情况来搭建
三、群集部署
此示例由一个Consul Client以及三个Consul Server组成,其中,Consul的Client和Server节点共同构成一个Data Center。Consul支持多数据中心
docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_client_1 -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600 --net dznetwork --ip 172.172.0.5 -v /data/consul:/consul/data consul agent -server -bootstrap -ui -node=consul_client_1 -client='0.0.0.0' -bind='172.172.0.5' -bootstrap-expect=3 --restart=always
docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_1 --net dznetwork --ip 172.172.0.6 consul agent -server -node=consul_server_1 -retry-join='172.172.0.5' --restart=always
docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_2 --net dznetwork --ip 172.172.0.7 consul agent -server -node=consul_server_2 -retry-join='172.172.0.5' --restart=always
docker run -d -e CONSUL_BIND_INTERFACE='eth0' --name=consul_server_3 --net dznetwork --ip 172.172.0.8 consul agent -server -node=consul_server_3 -retry-join='172.172.0.5' --restart=always
然后就可以通过宿主IP打开 http://192.168.1.100:8500/ Web管理界面
四、HA整体架构
对于实际应用中,我们往往会考虑单点问题,因此会借助一些负载均衡技术来做高可用的架构,这里给出一个建议的HA示例的整体架构:
注:对于一个API请求,首先会经历一个Load Balancer才会到达API Gateway,这个Load Balancer可以是基于硬件的F5,也可以是基于软件的Nginx或LVS再搭配Keepalived,一般来说大部分团队都会选择Nginx。然后API Gateway通过部署多个,来解决单点问题,也达到负载均衡的效果。而对于API Gateway和Consul Client之间的连接,我们往往也会增加一个Load Balancer来实现服务发现的高可用,这个Load Balancer也一般会基于Nginx/LVS搭配Keepalived,API Gateway只需要访问一个Virtual IP即可。而在Consul Data Center中,Consul Server会选择3或5个,Consul Client也会部署多个,刚刚提到的Virtual IP则会指向多个Consul Client,从而防止了Consul Client的单点问题。
这样就能达到真正的高可用。