利用Traefik+Docker构建可弹性扩展的微服务或服务集群

简介python

Traefik是一个与Nginx、HAProxy有些类似的HTTP反向代理服务器,兼有负载均衡的功能。Nginx和HAProxy都有一个相同的问题就是,后端服务(一般称之为upstream或backend)变化(是否能正常工做、上线、下线、扩展)时,不容易动态更新Nginx和HAProxy的配置文件和重载服务,尽管有一些相似于Registrator, ConsulConsul-Template 这样的工具能够来作这样的事。git

FastStoneEditor1

图1:微服务常见的一种请求分发图。github

与Nginx、HAProxy不一样的是,Traefik更适合须要服务发现和服务注册的应用场景。例如,Traefik与Docker相结合很是容易,只须要指定label便可(虽然能够使用docker run指定label,但更推荐使用docker-compose.yml指定)。演示的例子直接能够参考官方网站,也能够参考下面的例子,很是简单并通俗易懂。须要指出的是Traefik并非只能与Docker相结合,Docker, Swarm, Mesos/Marathon, Consul, Etcd, Zookeeper, BoltDB, Amazon ECS, Rest API, file...均可以。具体的能够参考官方网站和Google it。web

p_w_picpath

图2:Traefik是如何管理请求的docker

一个简单的演示:apache

1.建立Traefik服务,能够使用Docker也能够使用命令行的方式。后端

注意:不熟悉docker-compose的能够先学习一下docker-compose的语法和应用,或者直接忽略它,再根据下文的相对目录结构、文件和命令建立。服务器

docker-compose.yml 文件内容以下:负载均衡

version: '2'    
services:     
  traefik:     
    p_w_picpath: traefik:latest     
    restart: unless-stopped     
    command: --web --docker --docker.domain=docker.localhost --logLevel=DEBUG     
    networks:     
      - webgateway     
    ports:     
      - "80:80"     
      - "8080:8080"     
      - "443:443"     
    volumes:     
      - /var/run/docker.sock:/var/run/docker.sock     
      - /dev/null:/traefik.toml
networks:    
  webgateway:     
    driver: bridge


p_w_picpath_thumb7

2.使用whoami应用做为一个简易的HTTP Web服务:less

docker-compose.yml 文件内容以下:

version: '2'    
services:     
  whoami:     
    p_w_picpath: emilevauge/whoami     
    networks:     
      - web     
    labels:     
      - "traefik.backend=whoami"     
      - "traefik.frontend.rule=Host:whoami.docker.localhost"
networks:    
  web:     
    external:     
      name: traefikself_webgateway

p_w_picpath_thumb8

3.经过docker-compose logs traefik命令查看Traefik日志:

p_w_picpath_thumb9

4.使用docker-compose scale whoami=3 命令扩展3个whoami应用,观察访问状况,经过CURL结果能够发现默认是轮询的wrr。

p_w_picpath_thumb10

p_w_picpath_thumb12

5.Traefik有一个Dashboard Web UI,能够经过网页了解当前Traefik中的运行状况和节点的健康状态。

p_w_picpath_thumb1

p_w_picpath_thumb14

更多参考:

官方网站(英文):https://docs.traefik.io/

使用Docker和Traefik构建微服务(英文) http://blog.hypriot.com/post/microservices-bliss-with-docker-and-traefik/

tag:traefik,docker,微服务

--end--

相关文章
相关标签/搜索