Docker Swarm 負載均衡詳解 or 模式選擇


Docker Swarm 負載均衡詳解

  • Swarm模式內置DNS組件,可以自動為集群中的每個服務分配DNS記錄。
  • Swarm manager使用內部負載均衡,根據服務的DNS名稱在集群內的服務之間分發請求。
  • Swarm manager使用 ingress load blancing暴露你想從外部訪問集群提供的服務。
  • Swarm manager自動為服務分配一個范圍30000-32767端口的Published Port,也可以為該服務指定一個Published Port。

ingress network是一個特殊的overlay網絡,便於服務的節點直接負載均衡。當任何swarm節點在已發布的端口上接收到請求時,它將該請求轉發給調用的IPVS模塊,IPVS跟蹤參與該服務的所有容器IP地址,選擇其中一個,並通過ingress network將請求路由給它。


Docker Swarm 負載均衡試驗測試

1、管理節點:創建一個測試容器my_web

docker service create --replicas 3 --network my-network --name my_web nginx

2、管理節點:添加暴露端口

docker service update --publish-add 8080:80 my_web

3、管理節點:獲取虛擬IP

docker service inspect -f '{{json .Endpoint.VirtualIPs}}' my_web

[{"NetworkID":"3d1ut7rm89tvqvhh98wl3bxtx","Addr":"10.0.0.2/24"}]

:可用虛擬VIP或者服務名稱去訪問。

測試負載均衡:192.168.1.79:8080

:在每個不同副本中訪問。


Docker Swarm 負載均衡模式選擇

負載均衡有兩種模式:VIP、DNSRR

  • VIP:分配獨立的虛擬IP,DNS記錄解析到服務名中作為代理IP。
  • dnsrr:DNS記錄不解析VIP,而去解析每個容器內的IP。dnsrr模式不支持端口對外暴露。

1、管理節點:通過查看服務詳細信息篩選當前模式負載均衡模式

docker service inspect my_web
[
            "EndpointSpec": {
                "Mode": "vip"
            }
        },
        "Endpoint": {
            "Spec": {
                "Mode": "vip",
                "Ports": [
                    {
                        "Protocol": "tcp",
                        "TargetPort": 80,
                        "PublishedPort": 8080,
                        "PublishMode": "ingress"
                    }
                ]
            },
]

注:當前模式為VIP模式。

2、管理節點:設置DNS輪詢模式

docker service create \
--replicas 3 \
--name my-web \
--network my-network \
--endpoint-mode dnsrr \
nginx
# 創建服務
docker service create \
# 創建副本數
--replicas 3 \
# 服務名
--name my-web \
# 添加網絡
--network my-network \
# 添加負載均衡模式
--endpoint-mode dnsrr \
# 鏡像
nginx
命令解析

3、管理節點:創建一個測試容器my_web2

docker service create --replicas 3 --network my-network --name my_web2 nginx 

4、管理節點:添加dnsrr模式

docker service update --endpoint-mode dnsrr my_web2 

5、工作節點:進入容器測試

docker exec -it 06a5a7ae6e7e sh
# 測試進入容器查看解析記錄
/ # nslookup my_web2
Server: 127.0.0.11 Address: 127.0.0.11:53 Non-authoritative answer: Name: my_web2 Address: 10.0.0.13 Name: my_web2 Address: 10.0.0.4 Name: my_web2 Address: 10.0.0.12 # 工作節點:測試進入容器多次ping服務名 / # ping my_web2 PING my_web2 (10.0.0.4): 56 data bytes 64 bytes from 10.0.0.4: seq=0 ttl=64 time=0.116 ms
/ # ping my_web2 PING my_web2 (10.0.0.12): 56 data bytes 64 bytes from 10.0.0.12: seq=0 ttl=64 time=0.745 ms
/ # ping my_web2 PING my_web2 (10.0.0.13): 56 data bytes 64 bytes from 10.0.0.13: seq=0 ttl=64 time=0.546 ms

Docker Swarm 負載均衡模擴展知識

可在容器Swarm負載均衡之上在建立一層負載均衡。HAProxy可代理工作節點端暴露的端口進行再次代理,做到雙層負載均衡的作用。保證高可用與大規模的應用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM