利用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--

相關文章
相關標籤/搜索