设为首页 收藏本站
查看: 1215|回复: 0

[经验分享] Docker 容器部署 Consul 集群

[复制链接]

尚未签到

发表于 2016-1-11 13:12:50 | 显示全部楼层 |阅读模式
一、Consul 介绍
         Consul 提供了分布式系统的服务发现和配置的解决方案。基于go语言实现。并且在git上开放了源码。consul还包括了分布式一致协议的实现,健康检查和管理UI。Docker 的简单介绍,可以参考前面一篇文章。配合Docker来做应用容器,用Consul 来做集群的服务发现和健康检查,并且还可以轻量级得做到水平和垂直可扩展。
二、Consul Agent、Server、Client
        通过运行 consul agent 命令,可以通过后台守护进程的方式运行在所有consul集群节点中。并且可以以server或者client 模式运行。并且以HTTP或者DNS 接口方式,负责运行检查和服务同步。Server模式的agent负责维护consul集群状态,相应RPC查询,并且还要负责和其他数据中心进行WAN Gossips交换。client 节点是相对无状态的,Client的唯一活动就是转发请求给Server节点,以保持低延迟和少资源消耗。
 
        如下图,是官网的一个典型系统结构,Consul建议我们每个DataCenter的Server的节点最好在3到5个之间,以方便在失败以及数据复制的性能。Client的数量可以任意。图中,最重要的两个概念一个是Gossip协议,一个是Consensus 协议。DataCenter的所有节点都会参与到Gossip协议。Client 到Server 会通过LAN Gossip。所有的节点都在Gossip pool中,通过消息层来实现节点之间的通信以达到故障检测的目的,并且不需要给Client配置Server的地址。而Server节点还会参与到WAN Gossip池中。这样,通过Server节点就可以让DataCenter之间做简单的服务发现。比如增加一个Datacenter就只需要让Server节点参与到Gossip Pool中。并且,DataCneter之间的通信和服务请求就可以通过WAN Gossip 来随机请求另外一个DataCenter的Server节点,然后被请求的Server 会再把请求foword到本DataCenter的leader节点。Server leader的选举是通过Consul的Raft 算法实现。Leader 节点需要负责所有请求和处理,并且这些请求也必须复制给所有的其他非leader的Server节点。同样,非Leader节点接收到RPC请求的时候也会foward 到leader节点。
DSC0000.jpg
 
三、在Docker 容器中启动Consul Agent
1、下载 progrium/consul 镜像
2、以Server 模式在容器中启动一个agent
docker run -p 8600:53/udp -h node1 progrium/consul -server -bootstrap
DSC0001.jpg
这里试验一下8600(DNS) 接口,然后我们就用dig的方式可以交互和访问了。
DSC0002.jpg
 
四、用Docker 容器启动Consul集群
1、分别启动三个server节点
         用bootstrap-expect 3 来启动三个服务节点,并且绑定到容器的同一个ip
docker@boot2docker:~$ docker run -d --name node1 -h node1 progrium/consul -server -bootstrap-expect 3
 
docker@boot2docker:~$ JOIN_IP="$(docker inspect -f '{{ .NetworkSettings.IPAddress }}' node1)”
 
docker@boot2docker:~$ docker run -d --name node2 -h node2 progrium/consul -server -join $JOIN_IP
 
docker@boot2docker:~$ docker run -d --name node3 -h node3 progrium/consul -server -join $JOIN_IP
2、启动client节点
        docker@boot2docker:~$ docker run -d -p 8400:8400 -p 8500:8500 -p 8600:53/udp -h node4 progrium/consul -join $JOIN_IP
查看容器信息:
DSC0003.jpg
3、进入容器查看
        我们可以进入容器来查看一下consul是如何管理agent节点,以及选举server 的leader的。
Server node3 节点如下:
DSC0004.jpg

        这个时候我们关掉Server节点,容器name是node1的 d7a68580a730 容器,再观察
node3节点信息如下:
DSC0005.jpg
 
 
Server node2 节点如下:
DSC0006.jpg
Client 节点node4如下:
DSC0007.jpg

 
        用Consul还可以做Docker容器内部的健康监测, DNS Docker Container 以及运行时配置管理。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
container重启一个节点的时候并且暴露相同的端口的时候会造成心跳检测失败。如下:
 
此时,需要等上3分钟左右再重启或者手动清空ARP表的缓存。
版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-163076-1-1.html 上篇帖子: 安装docker时遇到的问题汇总 下篇帖子: docker根据容器创建镜像
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表