docker服务发现——最终测试

最终测试

首先启动confd,按照前面的命令,去掉onetime参数,放到后台最为守护进程长期运行,确保etcd注册目录修改之后,能准实时生成haproxy的配置文件。

然后在两台slave,一台启动两个nginx容器,一台启动一台,模拟上面的a.abc.com和b.abc.com两个域名。

docker run -P -v `pwd`/html:/var/www/html -d dockerfile/nginx

这里暴露所有的端口(80和443),然后挂载当前的html目录给该容器,再html目录中创建一个1.html文件,
包含容器id、内部ip、外部ip作为测试。同样启动两个之后,通过master上的etcdctl配置这几个启动的容器:

etcdctl set /services/web/a.abc.com/server1/ip 10.211.55.12
etcdctl set /services/web/a.abc.com/server1/port 49154
etcdctl set /services/web/a.abc.com/server2/ip 10.211.55.12
etcdctl set /services/web/a.abc.com/server2/port 49156
etcdctl set /services/web/b.abc.com/server1/ip 10.211.55.13
etcdctl set /services/web/b.abc.com/server1/port 49154

confd会间歇性检查目录修改状态:

INFO /home/babydragon/haproxy/haproxy.cfg has md5sum c8fb4ae9c10086b9f94cd11d0edecec1 should be 048c844d73c062014c0fd77d9548c47d

2015-02-09T11:42:00+08:00 master confd[3781]: INFO Target config /home/babydragon/haproxy/haproxy.cfg out of sync

2015-02-09T11:42:00+08:00 master confd[3781]: INFO Target config /home/babydragon/haproxy/haproxy.cfg has been updated

然后haproxy被更新:

acl is_a.abc.com hdr(host) -i a.abc.com

acl is_b.abc.com hdr(host) -i b.abc.com

use_backend a.abc.com_cluster if is_a.abc.com

use_backend b.abc.com_cluster if is_b.abc.com

backend a.abc.com_cluster
cookie SERVERID insert indirect nocache

server server1 10.211.55.12:49154 cookie server1 check

server server2 10.211.55.12:49156 cookie server2 check

backend b.abc.com_cluster
cookie SERVERID insert indirect nocache

server server1 10.211.55.13:49154 cookie server1 check

重新启动haproxy的容器(没有配置直接加载haproxy.cfg),查看status页面,两个backend都已经生效。通过curl模拟下:

curl -H "Host: a.abc.com" http://10.211.55.11:49154/1.html

I am a80b37f78259 on 172.17.0.4 (Host: 10.211.55.12)

curl -H "Host: a.abc.com" http://10.211.55.11:49154/1.html

I am 209b20bab7ce on 172.17.0.3 (Host: 10.211.55.12)

由于配置了负载均衡为轮询方式,两次请求被落到了不同的容器上,haproxy正确的将请求分发到了两个容器中。

转载自:https://coolex.info/blog/485.html

时间: 2024-08-21 16:16:48

docker服务发现——最终测试的相关文章

docker服务发现——etcd集群

etcd etcd用于服务发现的基础注册和通知,功能类似于zk,通过注册和监听,实现基础的服务发现. 安装 etcd安装非常简单,可以用go自己编译,etcd也提供了可以直接使用的二进制包(64位). 具体的安装提示页面在github上, 直接按照上面的描述下载即可.为了方便,把里面的etcd相关的二进制文件(etcd, etcdctl等) 复制到了/usr/local/bin中,方便后续使用. 运行 首先尝试单机版启动,参照手册先直接启动,etcd默认监听的是localhost,既只监听了lo

docker服务发现——confd

confd confd通过读取配置(支持etcd,consul,环境变量),通过go的模板,生成最终的配置文件. 安装 安装和etcd一样,非常方便,已经提供了64位的可执行程序,下载下来之后直接放到PATH中(/usr/local/bin)即可(别忘了+x). haproxy配置生成 confd配置文件默认在/etc/confd中,可以通过参数-confdir指定.目录中包含两个子目录,分别是:conf.d templates. confd会先读取conf.d目录中的配置文件(toml格式),

Docker网络和服务发现

本文讲的是Docker网络和服务发现[编者的话] 本文是<Docker网络和服务发现>一书的全文,作者是Michael Hausenblas.本文介绍了Docker世界中的网络和服务发现的工作原理,并提供了一系列解决方案. 前言 当你开始使用Docker构建应用的时候,对于Docker的能力和它带来的机会,你会感到很兴奋.它可以同时在开发环境和生产环境中运行,只需要将一切打包进一个Docker镜像中,然后通过Docker Hub分发镜像,这是很直接了当的.你会发现以下过程很令人满意:你可以快速

Docker Workflow(四):服务发现与负载均衡

本文讲的是Docker Workflow(四):服务发现与负载均衡,[编者的话]作者讲述了如何将服务发现(Consul.io与Consul-Template)与负载均衡(Nginx)相结合,实现灵活的配置和自动化重载,降低运维难度.当你还执着于给容器分配固定IP这件事上时,也许服务发现才是正道. 这是关于我们如何在IIIEPE的生产环境中使用Docker的系列文章的最后一部分.如果你还没看过第一(译文).第二(译文)和第三(译文)部分,请先前往阅读再继续.本文中,我将讨论如何配置服务发现和负载均

基于Docker的负载均衡和服务发现

应用的容器化和微服务化带来的问题 在缺省网络模型中,容器每次重启后,IP会发生变动,在一个大的分布式系统保证IP地址不变是比较复杂的事情 IP频繁发生变动,动态应用部署无法预知容器的IP地址,client端如何发现server端的访问端点? 解决方案(根据客户端是否有感知进行分类) 客户端的发现.client 订阅注册中心,有一个固定的注册中心地址,client订阅某个服务的注册中心,注册中心根据服务的运行状态推送某个服务的访问端点列表给client端. 该方案的实现举例有dubbo,DNS的解

基于Docker的应用负载均衡与服务发现

基于Docker的应用负载均衡与服务发现 概述 现在微服务架构越来越流行,阿里云容器服务对于微服务架构提供了很好的支撑,平台提供了便利的服务注册与发现机制,内置的服务负载均衡与路由功能,以及灵活的模板编排.全生命周期管理. 对于Web应用,下图是阿里云容器服务对弹性高可用Web应用负载均衡及路由支持的一种形式: 阿里云容器路由服务 假如你有一个Web应用需要运行多个实例,并对外提供服务.可以配置docker compose模板如下(以Java应用的Tomcat+Mysql为例), 这里通过Doc

DockOne微信分享(七十一):基于Docker的负载均衡和服务发现

本文讲的是DockOne微信分享(七十一):基于Docker的负载均衡和服务发现[编者的话]Docker已经成为时下热门的容器技术,各大公司,中小创业者,都选择采用Docker技术架构其下一代的系统和应用. 随着系统规模扩大,单一Docker容器不能应对压力,需要横向扩展到多个容器,我们需要考虑负载均衡的问题:单一职责的Docker容器之间需要相互通信,而容器在每一次重启之后,它的IP都可能发生变化,那么服务和服务之间如何发现对方? 这一次我们一起来交流基于Docker的负载均衡和服务发现.内容

利用阿里云容器服务实现Docker微服务间的负载均衡和服务发现

基于容器服务实现Docker微服务间的负载均衡和自动服务发现的方法 在容器服务上可以通过acsrouting将基于域名的http的服务暴漏出去,而且能够配合健康检查自动的负载均衡和服务发现,当其中一个容器出现问题之后,routing会自动将健康检查失败的容器从后端摘除,所以能做到自动的服务发现. 然而这个是将服务暴漏到外网的,那么服务间如何通过这种方式做到自动的服务发现和的负载均衡呢?容器服务引入了负载均衡的功能,只需要使用.local结尾的域名,并在依赖的服务的external_links中增

在Docker Swarm模式下,Docker应用如何实现服务发现

本文讲的是在Docker Swarm模式下,Docker应用如何实现服务发现[编者的话]无论容器是否存在于集群之中,本文将告诉我们如何可靠地连接到它.  [深圳站|3天烧脑式Kubernetes训练营]培训内容包括:Kubernetes概述和架构.部署和核心机制分析.进阶篇--Kubernetes调工作原理及源码分析等. 当我们第一次考虑在生产环境中使用容器时,常常会面对一个问题:当容器运行在一组服务器集群上时,无论它在哪个服务器上,如何让其他实体(人或应用程序)可靠地连接到它.  一定程度上,