Docker Swarm 負載均衡詳解nginx
ingress network是一個特殊的overlay網絡,便於服務的節點直接負載均衡。當任何swarm節點在已發佈的端口上接收到請求時,它將該請求轉發給調用的IPVS模塊,IPVS跟蹤參與該服務的全部容器IP地址,選擇其中一個,並經過ingress network將請求路由給它。web
Docker Swarm 負載均衡試驗測試docker
一、管理節點:建立一個測試容器my_webjson
docker service create --replicas 3 --network my-network --name my_web nginx
二、管理節點:添加暴露端口網絡
docker service update --publish-add 8080:80 my_web
三、管理節點:獲取虛擬IP負載均衡
docker service inspect -f '{{json .Endpoint.VirtualIPs}}' my_web [{"NetworkID":"3d1ut7rm89tvqvhh98wl3bxtx","Addr":"10.0.0.2/24"}]
注:可用虛擬VIP或者服務名稱去訪問。tcp
測試負載均衡:192.168.1.79:8080ide
注:在每一個不一樣副本中訪問。測試
Docker Swarm 負載均衡模式選擇spa
負載均衡有兩種模式:VIP、DNSRR
一、管理節點:經過查看服務詳細信息篩選當前模式負載均衡模式
docker service inspect my_web
[ "EndpointSpec": { "Mode": "vip" } }, "Endpoint": { "Spec": { "Mode": "vip", "Ports": [ { "Protocol": "tcp", "TargetPort": 80, "PublishedPort": 8080, "PublishMode": "ingress" } ] }, ]
注:當前模式爲VIP模式。
二、管理節點:設置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
三、管理節點:建立一個測試容器my_web2
docker service create --replicas 3 --network my-network --name my_web2 nginx
四、管理節點:添加dnsrr模式
docker service update --endpoint-mode dnsrr my_web2
五、工做節點:進入容器測試
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可代理工做節點端暴露的端口進行再次代理,作到雙層負載均衡的做用。保證高可用與大規模的應用。