Docker swarm服务发现和负载均衡原理「一」

Docker swarm服务发现和负载均衡原理「一」

首页战争策略CODE SOG更新时间:2024-05-07

基于DNS的负载均衡

创建自己的overlay网络,swarm默认创建了一个ingress网络,但是没有dns功能的。

[root@Manager01 ~]# docker network create -d overlay lookyoo

z36we4j6vc14r7uho4252oh0g

[root@Manager01 ~]# docker network ls

NETWORK ID NAME DRIVER SCOPE

33c492e0ac9e bridge bridge local

506979b3fb58 docker_gwbridge bridge local

6490a2e0f3c0 host host local

icv8o55n6f79 ingress overlay swarm

z36we4j6vc14 lookyoo overlay swarm

50522c84156d none null local

基于DNS的负载均衡

流程图如下:

基于DNS负载均衡

DNS SERVER内嵌于docker中,docker DNS解析服务名并但会容器ID地址列表(随机排序)。客户端通常会挑第一个IP访问,因此负载均衡kennel发生在服务器的不同实例之间。

使用dnsrr模式创建一个centos容器

[root@Manager01 ~]# docker service create --endpoint-mode dnsrr --replicas 1 --name lookyoo-centos --network lookyoo centos ping www.baidu.com

ixj8ef6xytdyek7j8gaqr2bx3

overall progress: 1 out of 1 tasks

1/1: running [==================================================>]

verify: Service converged

查看service

[root@Manager01 ~]# docker service ls

ID NAME MODE REPLICAS IMAGE PORTS

ixj8ef6xytdy lookyoo-centos replicated 1/1 centos:latest

查看task

[root@Manager01 ~]# docker service ps lookyoo-centos

ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS

ljpn4xwknj8h lookyoo-centos.1 centos:latest Worker01 Running Running 2 minutes ago

使用dnsrr模式创建一个副本数是2的nginx容器的服务

[root@Manager01 ~]# docker service create --endpoint-mode dnsrr --replicas 2 --name lookyoo-nginx --network lookyoo nginx:1.10

77ifiq9ex92zaf9wyqib74lqi

overall progress: 2 out of 2 tasks

1/2: running [==================================================>]

2/2: running [==================================================>]

verify: Service converged

查看service

[root@Manager01 ~]# docker service ls

ID NAME MODE REPLICAS IMAGE PORTS

ixj8ef6xytdy lookyoo-centos replicated 1/1 centos:latest

77ifiq9ex92z lookyoo-nginx replicated 2/2 nginx:1.10

查看task

[root@Manager01 ~]# docker service ps lookyoo-nginx

ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS

k9aha3eegv74 lookyoo-nginx.1 nginx:1.10 Manager02 Running Running about a minute ago

upmqf3kg55p8 lookyoo-nginx.2 nginx:1.10 Worker02 Running Running about a minute ago

上面可以看到lookyoo-centos在Worker01节点上面,使用dig命令来解析lookyoo-nginx服务

wxmini-test节点

[root@Worker01 ~]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

c835006aec97 centos:latest "ping www.baidu.com" 14 minutes ago Up 14 minutes lookyoo-centos.1.ljpn4xwknj8hf09dpygzaoxix

进入容器,使用dig命令解析lookyoo-nginx,解析到了10.0.2.31和10.0.2.32

[root@Manager02 ~]# docker exec -it c835006aec97 /bin/bash

[root@c835006aec97 /]# dig lookyoo-nginx

; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7_5.1 <<>> lookyoo-nginx

;; global options: cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61513

;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:

;lookyoo-nginx. IN A

;; ANSWER SECTION:

lookyoo-nginx. 600 IN A 10.0.2.31

lookyoo-nginx. 600 IN A 10.0.2.32

;; Query time: 0 msec

;; SERVER: 127.0.0.11#53(127.0.0.11)

;; WHEN: Mon Nov 05 08:35:02 UTC 2018

;; MSG SIZE rcvd: 89

使用ping命令解析lookyoo-nginx服务,轮流解析到10.0.2.31和10.0.2.32

[root@c835006aec97 /]# ping lookyoo-nginx

PING lookyoo-nginx (10.0.2.31) 56(84) bytes of data.

64 bytes from lookyoo-nginx.1.k9aha3eegv74trsv7xjbow7zq.lookyoo (10.0.2.31): icmp_seq=1 ttl=64 time=0.493 ms

64 bytes from lookyoo-nginx.1.k9aha3eegv74trsv7xjbow7zq.lookyoo (10.0.2.31): icmp_seq=2 ttl=64 time=0.344 ms

64 bytes from lookyoo-nginx.1.k9aha3eegv74trsv7xjbow7zq.lookyoo (10.0.2.31): icmp_seq=3 ttl=64 time=0.359 ms

[root@c835006aec97 /]# ping lookyoo-nginx

PING lookyoo-nginx (10.0.2.32) 56(84) bytes of data.

64 bytes from lookyoo-nginx.2.upmqf3kg55p8sog7bwmtmq1fa.lookyoo (10.0.2.32): icmp_seq=1 ttl=64 time=1.39 ms

64 bytes from lookyoo-nginx.2.upmqf3kg55p8sog7bwmtmq1fa.lookyoo (10.0.2.32): icmp_seq=2 ttl=64 time=1.44 ms

64 bytes from lookyoo-nginx.2.upmqf3kg55p8sog7bwmtmq1fa.lookyoo (10.0.2.32): icmp_seq=3 ttl=64 time=1.29 ms

基于DNS负载均衡缺点:

某些应用程序将DNS主机名缓存到IP地址映射,会导致应用程序在映射更改时超时。

具有非零DNS ttl值会导致DNS条目反映最新详细信息时发生延迟。

适用于不需要对外提供服务的容器,因为不能使用-p参数,做端口映射。

注意

(一)dnsrr模式不能使用端口映射,如下会报错:

[root@wxmini-ops ~]# docker service create --endpoint-mode dnsrr --name lookyoo-nginx --replicas 1 --network lookyoo -p 19090:80 nginx

Error response from daemon: rpc error: code = InvalidArgument desc = EndpointSpec: port published with ingress mode can't be used with dnsrr mode

,
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved