一、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表的缓存。
版权声明:本文为博主原创文章,未经博主允许不得转载。
相关推荐
3、支持单机伪集群部署(3 server + 1 client) 4、支持多机分布式集群部署(3 server + 1 client) 5、支持数据目录、日志目录、端口、ACL令牌token、Gossip Encryption Key参数灵活配置 6、支持创建、启动、停止、...
Flannel 的主要任务是在整个 Docker 集群中创建一个统一的网络空间,确保每个容器都可以通过一个扁平的 IP 网络与任何其他容器通信。它的工作原理是分配一个大的虚拟网络(如 10.244.0.0/16)给所有节点,然后为每个...
4、支持单机伪集群部署(3 server + 1 client) 5、支持多机分布式集群部署(3 server + 1 client) 6、支持数据目录、日志目录、端口、ACL令牌token、Gossip Encryption Key参数灵活配置 7、支持创建、启动、停止、...
综上所述,Docker容器弹性化应用实践涉及将传统应用进行微服务化改造,利用Docker实现轻量级部署和隔离,通过Mesos和Marathon实现资源的有效管理和弹性扩展,并借助一系列辅助工具确保服务的稳定性和监控。...
Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。 Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。Docker-Compose运行...
要部署Consul,首先在一台机器上启动Consul容器,使用命令: ``` docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap ``` 然后,修改其他两台机器上的Docker守护进程配置文件...
接着,我们搭建Consul集群。Consul提供了服务发现、健康检查、KV存储等多种功能,对于Docker环境,它可以很好地处理服务的动态性。Registrator与Consul协同工作,确保服务的注册信息始终与容器的状态同步。当Docker...
在这个项目中,Terraform可能被用来配置和自动化Docker容器的部署,确保Vault集群的配置一致性和可重复性。 5. **Terraform HCL**:HCL(HashiCorp Configuration Language)是Terraform使用的声明式语言,用于描述...
《学习Docker网络》这本书深入探讨了Docker容器在现代软件开发中的网络配置与管理。Docker网络是Docker生态系统中的关键组成部分,它允许容器之间的通信,并为微服务架构提供了强大的支持。以下是对Docker网络核心...
4. **Kubernetes (K8s)**: Kubernetes 是Google开源的一个容器编排系统,用于自动化容器的部署、扩展和管理。K8s提供了强大的集群管理能力,包括服务发现、负载均衡、自动扩缩容、自我修复等功能。 5. **Service ...
书中也提到了持续集成与持续部署的概念,并将其应用在Docker容器中。持续集成是指频繁地将代码集成到主干的做法,其目的是更早地发现错误,减少集成问题,而持续部署则是自动化将集成的代码部署到生产环境。在Docker...
在分布式环境中,Docker容器的通信是实现微服务架构和集群管理的关键。Docker的Overlay网络提供了一种方式,使得跨主机的容器可以相互通信,无需关心它们实际运行在哪台物理机上。下面将详细介绍如何在两台服务器上...
Consul 是一款开源的服务网格工具,由 HashiCorp 公司开发,用于实现分布式系统的服务发现、健康...同时,了解相关最佳实践和使用场景,如与 Docker、Kubernetes 等容器化技术的集成,将有助于提升你的 DevOps 能力。
在领科云的解决方案中,Docker容器被用作Mesos的任务单元,Mesos能够调度和启动这些容器,实现了应用的快速部署和更新。Docker的轻量级特性也使得启动和停止应用变得更加迅速,从而提高了服务的响应速度和可用性。 ...
1. **容器编排**:文档可能深入讨论了如何使用如Kubernetes、Docker Swarm或Mesos这样的容器编排系统,实现对大规模容器集群的高效管理。这些工具帮助自动化容器的部署、扩展和运行时管理,确保服务的高可用性和稳定...
Docker Overlay网络是一种在现有物理或虚拟网络之上构建的软件定义网络层,它允许Docker容器在不同的主机间通信,而无需关心底层网络的具体配置。Overlay网络的核心思想是通过网络虚拟化技术,将多个独立的网络连接...