一、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节点。
三、在Docker 容器中启动Consul Agent
1、下载 progrium/consul 镜像
2、以Server 模式在容器中启动一个agent
docker run -p 8600:53/udp -h node1 progrium/consul -server -bootstrap
这里试验一下8600(DNS) 接口,然后我们就用dig的方式可以交互和访问了。
四、用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
查看容器信息:
3、进入容器查看
我们可以进入容器来查看一下consul是如何管理agent节点,以及选举server 的leader的。
Server node3 节点如下:
这个时候我们关掉Server节点,容器name是node1的 d7a68580a730 容器,再观察
node3节点信息如下:
Server node2 节点如下:
Client 节点node4如下:
用Consul还可以做Docker容器内部的健康监测, DNS Docker Container 以及运行时配置管理。
container重启一个节点的时候并且暴露相同的端口的时候会造成心跳检测失败。如下:
此时,需要等上3分钟左右再重启或者手动清空ARP表的缓存。
版权声明:本文为博主原创文章,未经博主允许不得转载。
相关推荐
Docker容器部署RuoYi-Vue前后端分离项目 此次部署项目是我亲身经历,而且是一次性部署成功,没有部署超过两次甚至多次的情况,过程虽然很艰难,但结果还是很满意的,我希望大家用心去部署这个项目,你会发现部署这个...
教程:在linux虚拟机下(centos),通过docker容器,部署hadoop集群。一个master节点和三个slave节点。
docker 一键部署redis集群 shell脚本 适用centos7.x版本,按照说明 将参数传递给 安装脚本,自动执行部署程序,亲测可用
Docker容器部署tomcat出现中文乱码.docx
docker compose部署redis集群,三主三从,并且外网可以访问,另外还可以从gitee上获取此文件,gitee上除了Redis之外还会陆续提供其他docker部署的文件,https://gitee.com/korov/Docker.git
Docker集群化部署
第二部分归纳和比较了三类基于Docker的主流容器云项目,包括专注Docker容器编排与部署的容器云、专注应用支撑的容器云以及一切皆容器的Kubernetes,进而详细解读了Kubernetes核心源码的设计与实现,最后介绍了几种...
docker集群部署,导出导入镜像,各自集群部署的知识。docker集群部署,导出导入镜像,各自集群部署的知识。docker集群部署,导出导入镜像,各自集群部署的知识。docker集群部署,导出导入镜像,各自集群部署的知识。
本文介绍VMware虚拟机下centos7操作系统中如何安装云原生 Kubernetes(k8s)集群、k8s可视化界面kuboard,以及如何利用docker容器化将springboot+vue项目在k8s集群中部署运行。
利用docker来部署fastdfs集群.zip
在Linux7.9环境下,docker的安装部署,以及后续ZABBIX6的镜像下载,容器运行,监控调试,等等,简直手把手,不允许你不会。
最近要在公司里搭建一个hadoop测试集群,于是采用docker来快速部署hadoop集群。 0. 写在前面 网上也已经有很多教程了,但是其中都有不少坑,在此记录一下自己安装的过程。 目标:使用docker搭建一个一主两从三台机器...
环境说明:操作系统:Ubuntu16.04orCentOS7Kubernetes版本:v1.8.3Docker版本:v17.09-ce均采用当前最新稳定版本。关闭selinux。打开下面网址,下载下面两个红色框框的包。...kubernetes-node-linux-amd64.tar.gz上传到...
针对完全虚拟化技术不能快速部署Web集群及自适应动态扩容的问题。本文提出了一种基于Docker容器组建Web集群的设计方案。...实验结果表明,通过Docker容器部署Web集群系统开销小,能有效的满足Web集群的部署和扩容需求。
容器部署解决方案Docker容器部署解决方案Docker容器部署解决方案Docker容器部署解决方案Docker容器部署解决方案Docker容器部署解决方案Docker容器部署解决方案Docker容器部署解决方案Docker
docker容器入门学习,docker简介、docker在centos7中的安装部署、docker镜像使用
第二部分深入解读基于Docker的主流容器云技术,讲解了构建自己的容器云的方法,深入分析了3类Docker容器云技术的实现方法的设计思路,包括专注Docker容器编排与部署的容器云(Compose、Machine、Swarm、Fleet)、...
docker容器中搭建kafka集群环境,kafka集群配置注意事项与优化
Docker容器&微服务部署(1).pdf
SpringCloudAlibaba微服务docker容器打包和部署示例实战.doc