Docker Swarm負載均衡模式

Docker Swarm負載均衡策略


1. 負載方式

  • ingress network: docker swarm 供外部系統訪問容器訪問(原生支持,詳情看vip方式演示),依賴docker swarm 默認overlay類型的ingress網絡
  • VIP: 同網絡內容器之間的服務通過VIP實現負載均衡
  • DNSRR: 同網絡容器之間的服務通過DNS實現負載均衡

2. 環境準備

4臺虛擬機:可使用docker-machine快速創建3臺包含docker環境的虛擬機

sample@debian:~$ docker-machine ls
NAME       ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER      ERRORS
manager    -        virtualbox   Running   tcp://192.168.99.100:2376           v19.03.12   
worker-1   -        virtualbox   Running   tcp://192.168.99.101:2376           v19.03.12   
worker-2   -        virtualbox   Running   tcp://192.168.99.103:2376           v19.03.12   
worker-3   -        virtualbox   Running   tcp://192.168.99.104:2376           v19.03.12   

3. VIP負載均衡

  1. 登錄docker swarm管理機: docker-machine ssh manager
  2. 創建overlay網絡:docker network create --driver overlay vip-overlay
  3. 創建nginx服務:docker service create --name vip-nginx -p 80:80 --replicas 3 --network vip-overlay nginx
  4. 創建nginx訪問客戶端容器:docker service create --name vip-debian --network vip-overlay yangzhiwei256/debian sleep 3000
  5. 查看nginx服務部署節點信息:docker service ps vip-nginx
docker@manager:~$ docker service ps vip-nginx
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
othtk3grnnj9        vip-nginx.1         nginx:latest        manager             Running             Running 21 minutes ago                       
kkrxqfw6vuy9        vip-nginx.2         nginx:latest        worker-3            Running             Running 21 minutes ago                       
7nxlitp39kws        vip-nginx.3         nginx:latest        worker-1            Running             Running 21 minutes ago                       
  1. 修改nginx歡迎頁(3個節點容器) 路徑:/usr/share/nginx/html/index.html

修改manager節點index頁面

  • 登錄manager節點:docker-machine ssh manager
  • 查看容器信息:docker ps
  • 登錄容器: docker exec -it <容器ID> /bin/bash
  • 修改index.html: echo manager > /usr/share/nginx/html/index.html
  • 其他worker-1、worker-3 重複上述流程
  1. ingress network 訪問(外部系統訪問)
  • 隨便登錄一臺可訪問docker-machine節點的服務器
  • 服務訪問,查看負載均衡效果
  • 注意:每個docker swarm 服務節點都內置loadbalancer模塊,都可實現負載均衡訪問, 實際部署考慮單點故障問題,部署服務節點上層需加nginx網關,實現雙重負載保證高可用
sample@debian:~$ curl 192.168.99.100
worker-1
sample@debian:~$ curl 192.168.99.100
worker-3
sample@debian:~$ curl 192.168.99.100
manager
sample@debian:~$ curl 192.168.99.101
manager
sample@debian:~$ curl 192.168.99.101
worker-3
sample@debian:~$ curl 192.168.99.101
worker-1
  1. vip方式訪問
  • 查看網絡(manager節點)
docker@manager:~$ docker network ls                                                                                                                         
NETWORK ID          NAME                DRIVER              SCOPE
09e9cfc71ee7        bridge              bridge              local
66534a0da6cc        docker_gwbridge     bridge              local
a77be4ecae73        host                host                local
i5tgmrizq64n        ingress             overlay             swarm
6468096b83b4        none                null                local
qhmc36orimf8        vip-overlay         overlay             swarm
  • 查看虛擬IP
docker@manager:~$ docker service inspect -f '{{json .Endpoint.VirtualIPs}}' vip-nginx
[{"NetworkID":"i5tgmrizq64ns0zyogh4he6u8","Addr":"10.0.0.56/24"},{"NetworkID":"qhmc36orimf87frdhxnee3ikv","Addr":"10.0.2.19/24"}]

注意:這裏有2個網絡根據networkID判斷,i5tgmrizq64ns0zyogh4he6u8對比網絡列表是docker swarm默認給外部系統訪問的負載網絡,我們使用的網絡爲vip-overlay,即vip爲10.0.2.19/24
  • 通過vip訪問(同網絡容器內部訪問)
  1. 登錄vip-debian:docker exec -it <vip-debian容器id> /bin/bash
  2. vip服務訪問
docker@worker-2:~$ docker ps
CONTAINER ID        IMAGE                         COMMAND             CREATED             STATUS              PORTS               NAMES
08f862098d8d        yangzhiwei256/debian:latest   "sleep 3000"        48 seconds ago      Up 47 seconds                           vip-debian.1.7xfros0di1wogel0bzi2pk9pd
docker@worker-2:~$ docker exec -it 08f862098d8d /bin/bash                                                                                                   
root@08f862098d8d:/# curl 10.0.2.19
manager
root@08f862098d8d:/# curl 10.0.2.19
worker-1
root@08f862098d8d:/# curl 10.0.2.19
worker-3

4. dnsrr負載均衡

  1. 登錄docker swarm管理機: docker-machine ssh manager
  2. 創建overlay網絡:docker network create --driver overlay dnsrr-overlay
  3. 創建nginx服務:docker service create --name dnsrr-nginx --replicas 3 --network dnsrr-overlay --endpoint-mode dnsrr --publish published=81,target=80,protocol=tcp,mode=host nginx
  4. 創建debian服務:docker service create --name dnsrr-debian --network dnsrr-overlay yangzhiwei256/debian sleep 3000
  5. 修復服務節點nginx index.html,步驟同vip操作
  6. 效果演示
  • 登錄dnsrr-debian容器內部
  • DNS服務訪問
root@d269da355467:/# curl dnsrr-nginx:80
worker-2
root@d269da355467:/# curl dnsrr-nginx:80
worker-3
root@d269da355467:/# curl dnsrr-nginx:80
worker-1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章