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可代理工做节点端暴露的端口进行再次代理,作到双层负载均衡的做用。保证高可用与大规模的应用。