`
m635674608
  • 浏览: 5041493 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

用 consul + consul-template + registrator + nginx 打造真正可动态扩展的服务架构

 
阅读更多

在互联网应用领域,服务的动态性需求十分常见,这就对服务的自动发现和可动态扩展提出了很高的要求。

Docker 的出现,以及微服务架构的兴起,让众多开源项目开始关注在松耦合的架构前提下,如何基于 Docker 实现一套真正可动态扩展的服务架构。

基本需求

基本的需求包括:

  • 服务启动后要能自动被发现(vs 传统需要手动进行注册);
  • 负载要能动态在可用的服务实例上进行均衡(vs 传统需要静态写入配置);
  • 服务规模要方便进行快速调整(vs 传统需要较长时间的手动调整)。

相关项目

服务发现

服务发现的项目已经有不少,包括之前介绍的 consul,以及 skydnsserf、以及主要关注一致性的强大的 zookeeper 等。

这些项目各有优缺点,功能上大同小异,都是要通过某种机制来获取服务信息,然后通过维护一套(分布式)数据库来存储服务的信息。这也是为什么 etcd 受到大家关注和集成。

在这里,选用 HashiCorp 公司的 consul 作为服务发现的管理端,它的简介可以参考 这里

服务注册

服务注册的手段有很多,当然,从发起方是谁可以分为两大类,主动注册还是被动探测。

主动注册,顾名思义,服务启动后,向指定的服务发现管理端的 API 发送请求,给出自身的相关信息。这样做,对管理端的要求简单了很多,但意味着服务自身要完成注册工作,并且极端情况下,管理端比较难探测出真正存活的服务。

被动探测,则是服务发现管理端通过某种机制来探测存活的服务。这样可以获取真实的服务情况,但如何探测是个很难设计的点,特别当服务类型比较复杂的时候。

以上两种,都对网络连通性要求较高。从短期看,主动注册方式会比较容易实现一些,应用情形更广泛;但长期维护上,被动探测方式应该是更高效的设计。

这里,我们选用 gliderlabs 的 registrator,它可以通过跟本地的 docker 引擎通信,来获取本地启动的容器信息,并且注册到指定的服务发现管理端。

配置更新

服务被调整后,负载均衡器要想动态重新分配负载,就需要通过配置来获取更新。这样的方案也有不少,基本上都是要安装一些本地 agent 来监听服务发现管理端的信息,生成新的配置,并执行更新命令。

HashiCorp 公司 的consul-template,可以通过监听 consul 的注册信息,来完成本地应用的配置更新。

负载均衡

负载均衡对性能要求很高,其实并不是软件所擅长的领域,但软件方案胜在成本低、维护方便。包括 lvshaproxy 都是很优秀的设计方案。

这里,我们选用 nginx。nginx 不仅是个强大的 web 代理服务器,同时在负载均衡方面表现也不俗。更关键的,新版本的 nginx 对在线升级支持做到了极致。实时配置更新更是不在话下,可以保证服务的连续性。

实验过程

准备工作

首先,从 这里 下载模板文件。

主要内容如下:

#backend web application, scale this with docker-compose scale web=3
web:
  image: yeasy/simple-web:latest
  environment:
    SERVICE_80_NAME: http
    SERVICE_NAME: web
    SERVICE_TAGS: backend
  ports:
  - "80"

#load balancer will automatically update the config using consul-template
lb:
  image: yeasy/nginx-consul-template:latest
  hostname: lb
  links:
  - consulserver:consul
  ports:
  - "80:80"

consulserver:
  image: gliderlabs/consul-server:latest
  hostname: consulserver
  ports:
  - "8300"
  - "8400"
  - "8500:8500"
  - "53"
  command: -data-dir /tmp/consul -bootstrap -client 0.0.0.0

# listen on local docker sock to register the container with public ports to the consul service
registrator:
  image: gliderlabs/registrator:master
  hostname: registrator
  links:
  - consulserver:consul
  volumes:
  - "/var/run/docker.sock:/tmp/docker.sock"
  command: -internal consul://consul:8500

如果没有安装 docker 和 docker-compose,需要先进行安装,以 ubuntu 系统为例。

$ curl -sSL https://get.docker.com/ | sh
$ sudo pip install docker-compose

执行

docker-compose 模板所在目录,执行

$ sudo docker-compose up

相关镜像即可自动被下载,下载完毕后,容器就启动起来了。

访问 http://localhost 可以看到一个 web 页面,提示实际访问的目标地址。

多次刷新,可以看到目标地址没有变化,这是因为,目前我们只有一个 web 后端服务器。

2015-08-18 03:37:58: 6 requests from <LOCAL: 172.17.1.150> to WebServer <172.17.1.148>

调整后端为 3 个服务器。

$ sudo docker-compose scale web=3

然后,再次访问 http://localhost,多次刷新,可以看到访问的实际目标地址发生了变化,新启动的 web 服务器被自动注册,并且 nginx 自动对它们进行了负载均衡。

2015-08-18 03:37:58: 6 requests from <LOCAL: 172.17.1.150> to WebServer <172.17.1.148>
2015-08-18 03:38:17: 5 requests from <LOCAL: 172.17.1.150> to WebServer <172.17.1.152>
2015-08-18 03:38:20: 5 requests from <LOCAL: 172.17.1.150> to WebServer <172.17.1.153>

转载请注明:http://blog.csdn.net/yeasy/article/details/47749725

分享到:
评论

相关推荐

    Consul+upsync+Nginx动态配置负载均衡.pdf

    在微服务架构中,服务实例可能会频繁增减,Consul+upsync+Nginx能快速适应这些变化,无需人工干预,降低了运维复杂度。此外,由于减少了不必要的服务中断,用户体验也得到提升。 总之,Consul+upsync+Nginx的组合...

    docker-nginx-consul-template:Docker映像已安装nginx和consul模板

    什么是docker-nginx-consul-template? 带有nginx和consul模板的Docker映像,用于从consul动态更新其配置文件。 该镜像基于构建。 如何使用这张图片? docker镜像是通过自动构建的。 在Dockerfile中 FROM yeasy/...

    consul+springboot+gradle-demo.zip

    `Consul`是HashiCorp公司推出的一款用于服务发现和服务配置的开源工具,支持分布式系统,广泛应用于微服务架构中。`Spring Boot`则简化了基于`Spring`的应用开发,通过提供默认配置来快速启动项目。`Gradle`作为构建...

    consul镜像+docker-compose.yaml

    consul镜像+docker-compose.yaml

    .NetCore+Consul+Ocelot实现服务网关和服务注册与发现.rar

    在现代微服务架构中,服务发现和服务网关是至关重要的组件。本文将深入探讨如何使用`.NetCore`、`Consul`和`Ocelot`来实现这些功能,并基于提供的项目压缩包进行详细讲解。 首先,`.NetCore`是微软推出的一种跨平台...

    consul-1.6.1-win-64.zip

    Consul 是一款由 HashiCorp 公司开发的开源工具,用于实现分布式系统的服务发现与配置。这个压缩包“consul-1.6.1-win-64.zip”提供了 Consul 的1.6.1版本,专为在Windows 64位操作系统上运行而设计。在IT领域,服务...

    Consul+Ocelot+.NetCore Api+IdentityServer 4

    随着学习的深入,开发者还可以探索更高级的主题,比如使用Kubernetes作为容器编排工具替代Consul,或者引入 Sleuth 和 Zipkin 进行服务跟踪,以增强系统的可观测性。总的来说,掌握这些技术对构建健壮、可扩展的...

    Consul+Grafana+Prometheus实现服务器监控-window版.zip

    在IT领域,监控系统是确保服务稳定性和性能的关键工具。本资源包"Consul+Grafana+Prometheus实现服务器监控-window版.zip"提供了一套完整的解决方案,专为Windows环境设计,用于实时监控服务器的健康状况和性能指标...

    go-micro+grpc+consul+gin 注册中心以及服务间通信

    这个架构利用Go语言的强大性能,结合Micro微服务框架、gRPC通信协议、Consul服务发现以及Gin web框架,实现了高效、可扩展的服务注册与发现以及服务间的通信。 1. **go-micro**: Go-Micro 是一个用于构建分布式系统...

    dotnet-NETCoreOcelotIdentityServer4Consul基础架构实现

    1. **服务发现**:Consul可以帮助微服务架构中的各个服务互相找到彼此,动态更新服务发现信息。 2. **健康检查**:Consul可以监控服务的健康状态,确保只有健康的实例参与服务调用。 3. **配置中心**:Consul提供了...

    nginx+consul+upsync完成负载均衡的软件包,由于官网下载太慢,所以把包上传以下方便大家使用.zip

    在IT行业中,构建高效、可扩展的Web服务是至关重要的,而负载均衡是实现这一目标的关键技术之一。在这个场景中,我们使用的是一套由`nginx`、`consul`和`upsync`组成的解决方案,旨在优化网络流量分配,提高系统的...

    consul最新版windows-linux下载.zip

    consul最新版windows-linuxconsul最新版windows-linuxconsul最新版windows-linuxconsul最新版windows-linuxconsul最新版windows-linuxconsul最新版windows-linuxconsul最新版windows-linux

    .NetCore+Consul+Ocelot服务网关和服务注册与发现

    《.NetCore+Consul+Ocelot:构建服务网关和服务注册与发现的实践...这一方案在保证系统稳定性的同时,也提升了微服务架构的可扩展性和灵活性。对于希望深入了解和实践微服务架构的开发者,这是一个非常有价值的参考。

    Go-GOMicro搭建Consul服务发现集群实例

    在IT行业中,服务发现是微服务架构中的关键一环,它允许服务之间的动态发现和通信。Go Micro 是一个用于构建微服务的 Go 语言框架,它支持多种服务发现机制,其中包括 Consul。Consul 是一个功能强大的服务网格工具...

    consul-registrator-maven-plugin

    这个 maven 插件允许使用 consul 代理注册服务。 要求:领事代理必须在服务主机上运行和侦听。...consul.registrator.customServiceId - 可选,如果未提供 serviceId 将默认为服务名称和随机 UUID 的串联 c

    lua-resty-consul, 库与ngx_lua中的consul接口的接口.zip

    lua-resty-consul, 库与ngx_lua中的consul接口的接口 lua-resty-consul库与ngx_lua中的consul接口的接口目录概述依赖项方法新插件 。get_decodedget_json_decoded把了删除get_client_body_reader

    Go-一个用于设置Consul服务后端的nginx模块

    标题中的“Go-一个用于设置Consul服务后端的nginx模块”揭示了本文将深入探讨一个用Go语言编写的特定Nginx模块,该模块专为集成Consul服务发现系统作为其后端而设计。Consul是HashiCorp公司开发的一款强大的服务发现...

    springcloud+consul+gateway+openfein实践

    在微服务架构中,Spring Cloud是一个广泛使用的框架,它提供了许多工具和服务来帮助开发者构建分布式系统。本实践项目主要涉及Spring Cloud与Consul、Gateway和OpenFeign的整合,这三者是Spring Cloud生态系统中的...

    asp.netcode+consul+redis.zip

    它提供了一组完整的特性,包括服务发现、健康检查、KV存储、多数据中心的解决方案,是微服务架构中不可或缺的部分。在本项目中,Consul被用作服务注册和发现机制,使得微服务能够动态地找到并互相通信。 **Redis**...

    springboot+consul+多数据源配置 版本2.1.2

    在IT行业中,Spring Boot、Consul以及多数据源配置是构建高效、可扩展的企业级应用的关键组件。本文将深入探讨这些技术以及它们如何在版本2.1.2中协同工作。 首先,Spring Boot是由Pivotal团队开发的一个框架,旨在...

Global site tag (gtag.js) - Google Analytics