婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 詳解Docker Swarm服務發現和負載均衡原理

詳解Docker Swarm服務發現和負載均衡原理

熱門標簽:百度地圖標注備注 威海人工智能電銷機器人系統 地圖標注員怎么去做 機器人電銷有什么用 上海電銷卡外呼系統廠家 貴州全自動外呼系統廠家 好看的地圖標注圖標下載 德州外呼系統排名 福州外呼系統中間件

本文將介紹基于 DNS 的負載均衡、基于 VIP 的負載均衡和路由網格(Routing Mesh)。

使用的技術

Docker 使用了 Linux 內核 iptables 和 IPVS 的功能來實現服務發現和負載均衡。

iptables 是 Linux 內核中可用的包過濾技術,它可用于根據數據包的內容進行分類、修改和轉發決策。

IPVS 是 Linux 內核中可用的傳輸級負載均衡器。

準備工作

swarm 集群: 【Manager】node1、【Worker】node2

客戶端鏡像: registry.cn-hangzhou.aliyuncs.com/anoy/ubuntu

服務端鏡像: registry.cn-hangzhou.aliyuncs.com/anoy/vote

如圖所示,我們將在 swarm 集群中部署 “client” 服務 和 “vote” 服務,其中 “vote” 服務部署多個副本??蛻舳苏埱?“vote” 服務時,輸出結果中包含服務端的容器 ID,這樣就更方便演示網絡請求。

集群狀態

[root@node1 ~]# docker node ls
ID              HOSTNAME      STATUS       AVAILABILITY    MANAGER STATUS   ENGINE VERSION
rnr2i1y2of3n5vy2vzh2vkzq0 *  node1        Ready        Active       Leader       18.03.1-ce
qvik057dvphx5s06evmswahaf   node2        Ready        Active                 18.03.1-ce

使用如下命令,創建 overlay 網絡:

docker network create --driver overlay overlay1

基于 DNS 的負載均衡

下圖描述了基于 DNS 的負載均衡是如何工作的:

DNS server 內嵌于 Docker 引擎。Docker DNS 解析服務名 “vote” 并返回容器 ID 地址列表(隨機排序)。客戶端通常會挑第一個 IP 訪問,因此負載均衡可能發生在服務器的不同實例之間。

使用如下命令創建 2 個基于 DNS 負載均衡的服務 “client” 、 “vote”:

docker service create --endpoint-mode dnsrr --replicas 1 --name client --network overlay1 registry.cn-hangzhou.aliyuncs.com/anoy/ubuntu ping anoyi.com

docker service create --endpoint-mode dnsrr --name vote --network overlay1 --replicas 2 registry.cn-hangzhou.aliyuncs.com/anoy/vote

查看服務信息:

[root@node1 ~]# docker service ls
ID         NAME        MODE        REPLICAS      IMAGE                         PORTS
2mrj3pqyioc3    client       replicated     1/1         registry.cn-hangzhou.aliyuncs.com/anoy/ubuntu:latest
826s79tsixuh    vote        replicated     2/2         registry.cn-hangzhou.aliyuncs.com/anoy/vote:latest

[root@node1 ~]# docker service ps client
ID         NAME        IMAGE                         NODE        DESIRED STATE    CURRENT STATE      ERROR        PORTS
f74i688vbh12    client.1      registry.cn-hangzhou.aliyuncs.com/anoy/ubuntu:latest  node2        Running       Running 2 minutes ago

[root@node1 ~]# docker service ps vote
ID         NAME        IMAGE                        NODE        DESIRED STATE    CURRENT STATE        ERROR        PORTS
7iiuzl2a63hy    vote.1       registry.cn-hangzhou.aliyuncs.com/anoy/vote:latest  node1        Running       Running 47 seconds ago
uyhxxqfdima7    vote.2       registry.cn-hangzhou.aliyuncs.com/anoy/vote:latest  node2        Running       Running about a minute ago

可以看出 "client" 運行于 node2,在 node2 上進入 client 容器,使用 dig 來解析服務名 "vote",如下所示,"vote" 解析到 10.0.0.6 和 10.0.0.5

[root@node2 ~]# docker ps
CONTAINER ID    IMAGE                         COMMAND         CREATED       STATUS       PORTS        NAMES
1eed67d37cbb    registry.cn-hangzhou.aliyuncs.com/anoy/vote:latest   "gunicorn app:app -b…"  About a minute ago  Up About a minute  80/tcp       vote.2.uyhxxqfdima7smos5pki84wul
436702b21a1c    registry.cn-hangzhou.aliyuncs.com/anoy/ubuntu:latest  "ping anoyi.com"     3 minutes ago    Up 3 minutes              client.1.f74i688vbh12on8oniufht633

[root@node2 ~]# docker exec -it 436702b21a1c /bin/bash

root@436702b21a1c:/# dig vote

;; ANSWER SECTION:
vote.      600 IN A  10.0.0.5
vote.      600 IN A  10.0.0.6

使用 ping 解析 "vote" 服務,如下所示,交替解析到 10.0.0.6 和 10.0.0.5

root@436702b21a1c:/# ping -c1 vote
PING vote (10.0.0.6) 56(84) bytes of data.
64 bytes from vote.2.uyhxxqfdima7smos5pki84wul.overlay1 (10.0.0.6): icmp_seq=1 ttl=64 time=0.087 ms

root@436702b21a1c:/# ping -c1 vote
PING vote (10.0.0.5) 56(84) bytes of data.
64 bytes from vote.1.7iiuzl2a63hyj084qgufc175v.overlay1 (10.0.0.5): icmp_seq=1 ttl=64 time=0.767 ms

如果使用 curl,如下所示,請求也能解析到不同的容器

root@436702b21a1c:/# curl vote | grep -i "container id"
 % Total  % Received % Xferd Average Speed  Time  Time   Time Current
                 Dload Upload  Total  Spent  Left Speed
100 3162 100 3162  0   0  7542   0 --:--:-- --:--:-- --:--:-- 7546
     Processed by container ID 9b42319d4f13

root@436702b21a1c:/# curl vote | grep -i "container id"
 % Total  % Received % Xferd Average Speed  Time  Time   Time Current
                 Dload Upload  Total  Spent  Left Speed
100 3162 100 3162  0   0  452k   0 --:--:-- --:--:-- --:--:-- 514k
     Processed by container ID 1eed67d37cbb

基于 DNS 負載均衡存在如下問題:

  1. 某些應用程序將 DNS 主機名緩存到 IP 地址映射,這會導致應用程序在映射更改時超時
  2. 具有非零 DNS ttl 值會導致 DNS 條目反映最新的詳細信息時發生延遲

基于 VIP 的負載均衡

基于 VIP 的負載均衡克服了基于 DNS 負載均衡的一些問題。在這種方法中,每個服務都有一個 IP 地址,并且該 IP 地址映射到與該服務關聯的多個容器的 IP 地址。在這種情況下,與服務關聯的服務 IP 不會改變,即使與該服務關聯的容器死亡并重新啟動。

下圖描述了基于 VIP 的負載均衡是如何工作的:

DNS server 會將服務名 "vote" 解析到 VIP,使用 iptables 和 ipvs,VIP 實現 2 個服務端 "vote" 容器的負載均衡。

使用如下命令創建 2 個 VIP 模式的服務 “client” 、 “vote”:

docker service create --replicas 1 --name client --network overlay1 registry.cn-hangzhou.aliyuncs.com/anoy/ubuntu ping anoyi.com

docker service create --name vote --network overlay1 --replicas 2 registry.cn-hangzhou.aliyuncs.com/anoy/vote

查看這 2 個服務和它們的服務 IP:

[root@node1 ~]# docker service inspect --format {{.Endpoint.VirtualIPs}} vote
[{tetug0isdx1gri62g7cfm889i 10.0.0.9/24}]

[root@node1 ~]# docker service inspect --format {{.Endpoint.VirtualIPs}} client
[{tetug0isdx1gri62g7cfm889i 10.0.0.7/24}]

在 "client" 的容器中使用如下命令,可以看到服務名 "vote" 映射到 VIP "10.0.0.9"

[root@node2 ~]# docker exec -it f3d1c4ef53f8 /bin/bash

root@f3d1c4ef53f8:/# dig vote

;; ANSWER SECTION:
vote.      600 IN A  10.0.0.9

Service IP "10.0.0.9" 使用 Linux 內核的 iptables 和 IPVS 負載均衡到 2 個容器。iptables 實現防火墻規則,IPVS 實現負載均衡。為了證明這一點,我們需要使用 nsenter 進入容器的網絡空間 ( namespace )。為此,我們需要找到網絡的命名空間。

如下是 node2 上的網絡命名空間:

[root@node2 ~]# cd /run/docker/netns/

[root@node2 netns]# ls
1-tetug0isdx 1-vyy22w04t6 be7330b99a27 d67fa9efb59e ingress_sbox

前 2 個命名空間是用于 overlay 網絡,后面的用于容器。下面的命令用于找到 "client" 容器的網絡命名空間:

[root@node2 netns]# docker ps
CONTAINER ID    IMAGE                         COMMAND         CREATED       STATUS       PORTS        NAMES
43a789312e70    registry.cn-hangzhou.aliyuncs.com/anoy/vote:latest   "gunicorn app:app -b…"  3 minutes ago    Up 3 minutes    80/tcp       vote.1.u46ms31e8zjdxtwrxvaec8zub
f3d1c4ef53f8    registry.cn-hangzhou.aliyuncs.com/anoy/ubuntu:latest  "ping anoyi.com"     4 minutes ago    Up 4 minutes              client.1.ycox088aek5ajejezubwsjqf2

[root@node2 netns]# docker inspect f3d1c4ef53f8 | grep -i sandbox
      "SandboxID": "be7330b99a274a03a7f58e9e991346dc6f048836a1682c7244a6068acbfb664c",
      "SandboxKey": "/var/run/docker/netns/be7330b99a27",

SandboxID 即為 "client" 容器的網絡命名空間。

使用如下命令,我們就能夠進入到 "client" 容器的網絡命令空間:

nsenter --net=f3d1c4ef53f8 sh

下面,我們可以看到 iptables 的轉發規則和 IPVS 輸出:

sh-4.2# iptables -nvL -t mangle

Chain OUTPUT (policy ACCEPT 606 packets, 50867 bytes)
 pkts bytes target   prot opt in   out   source        destination
  0   0 MARK    all -- *   *    0.0.0.0/0      10.0.0.7       MARK set 0x102
  0   0 MARK    all -- *   *    0.0.0.0/0      10.0.0.9       MARK set 0x103

sh-4.2# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
 -> RemoteAddress:Port      Forward Weight ActiveConn InActConn
FWM 258 rr
 -> node2:0           Masq  1   0     0
FWM 259 rr
 -> 10.0.0.10:0         Masq  1   0     0
 -> 10.0.0.11:0         Masq  1   0     0

Service IP "10.0.0.9" 使用 iptables OUTPUT 鏈獲得標記 0x103 (十六進制 -> 十進制:259),然后 IPVS 使用此標記并將它負載均衡到 "10.0.0.10" 和 "10.0.0.11" 。

查看 vote 服務的 2 個容器的 IP 如下所示,即 VIP "10.0.0.9" 負載均衡到不同的容器實例:

[root@node2 netns]# docker inspect vote.1.u46ms31e8zjdxtwrxvaec8zub | grep IPv4
            "IPv4Address": "10.0.0.10"

[root@node1 ~]# docker inspect vote.2.tutj19i4iwu1xn7arsaq815cu | grep IPv4
            "IPv4Address": "10.0.0.11"

進入 client 服務的容器,使用 curl 請求 vote 服務,輸出結果如下,即請求分發到不同的容器:

root@f3d1c4ef53f8:/# curl vote | grep -i "container id"
 % Total  % Received % Xferd Average Speed  Time  Time   Time Current
                 Dload Upload  Total  Spent  Left Speed
100 3162 100 3162  0   0 14409   0 --:--:-- --:--:-- --:--:-- 14438
     Processed by container ID c2af209c4e90

root@f3d1c4ef53f8:/# curl vote | grep -i "container id"
 % Total  % Received % Xferd Average Speed  Time  Time   Time Current
                 Dload Upload  Total  Spent  Left Speed
100 3162 100 3162  0   0  165k   0 --:--:-- --:--:-- --:--:-- 171k
     Processed by container ID 43a789312e70

路由網格 (Routing mesh)

使用路由網格,服務暴露的端口會暴露在 Swarm 集群中的所有工作節點。Docker 是通過創建 "ingress" overlay 網絡來實現這一點的,所有節點默認使用內在的 sandbox 網絡命名空間成為 "ingress" overlay 網絡的一部分。

下圖描述了 Routing mesh 如何實現負載均衡的:

首先,會將 Hostname 或 IP 映射到 Sandbox IP,Sandbox 中的 iptables 和 IPVS 負責將請求負載均衡到 2 個 vote 容器。Ingress sandbox 網絡命名空間駐留在 swarm 集群中的所有工作節點,它通過將主機映射的端口負載均衡到后端容器來協助路由網格功能。

使用如下命令創建 vote 服務,使用路由網格暴露端口到所有節點:

復制代碼 代碼如下:
docker service create --name vote --network overlay1 --replicas 2 -p 8080:80 registry.cn-hangzhou.aliyuncs.com/anoy/vote

下圖顯示了 Sandbox、容器和每個節點的網絡之間的映射關系:

如圖所示,Sandbox 和 vote 容器是 "ingress" 網絡的一部分,它有助于路由網格。client 容器和 vote 容器是 "overlay1" 網絡的一部分,它有助于內部負載均衡。所有容器都是默認 "docker_gwbridge" 網絡的一部分。

遵循 iptables 中的 NAT 規則顯示,端口 8080 上的主機流量發送到 node1 里的 Sandbox:

[root@node1 ~]# iptables -nvL -t nat

Chain DOCKER-INGRESS (2 references)
 pkts bytes target   prot opt in   out   source        destination
  0   0 DNAT    tcp -- *   *    0.0.0.0/0      0.0.0.0/0      tcp dpt:8080 to:172.18.0.2:8080
 315 18876 RETURN   all -- *   *    0.0.0.0/0      0.0.0.0/0

進入 node1 上的 Sandbox 網絡命名空間 (ingress_sbox),查看 iptables 的轉發規則和 IPVS 輸出:

[root@node1 netns]# nsenter --net=ingress_sbox sh

sh-4.2# iptables -nvL -t mangle
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target   prot opt in   out   source        destination
  0   0 MARK    tcp -- *   *    0.0.0.0/0      0.0.0.0/0      tcp dpt:8080 MARK set 0x105

sh-4.2# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
 -> RemoteAddress:Port      Forward Weight ActiveConn InActConn
FWM 261 rr
 -> 10.255.0.5:0         Masq  1   0     0
 -> 10.255.0.6:0         Masq  1   0     0

端口 8080 標記為 0x105 (十六進制 -> 十進制:261),IPVS 使用此標記將它負載均衡到 "10.255.0.5" 和 "10.255.0.6" 。

查看 vote 服務的 2 個容器的 IP 如下所示,即主機端口 8080 的流量會負載均衡到不同的容器實例:

[root@node1 netns]# docker inspect 6173afd5fab8 | grep IPv4
            "IPv4Address": "10.255.0.6"
            "IPv4Address": "10.0.0.14"

[root@node2 ~]# docker inspect b07e95c5c681 | grep IPv4
            "IPv4Address": "10.255.0.5"
            "IPv4Address": "10.0.0.13"

驗證負載均衡,在 node1 上通過 node2 的 IP 和 8080 端口請求 vote 服務:

[root@node1 netns]# curl node2:8080 | grep -i "container id"
 % Total  % Received % Xferd Average Speed  Time  Time   Time Current
                 Dload Upload  Total  Spent  Left Speed
100 3162 100 3162  0   0  199k   0 --:--:-- --:--:-- --:--:-- 192k
     Processed by container ID 6173afd5fab8

[root@node1 netns]# curl node2:8080 | grep -i "container id"
 % Total  % Received % Xferd Average Speed  Time  Time   Time Current
                 Dload Upload  Total  Spent  Left Speed
100 3162 100 3162  0   0  7551   0 --:--:-- --:--:-- --:--:-- 7546
     Processed by container ID b07e95c5c681

在 node2 上通過 node1 的 IP 和 8080 端口請求 vote 服務:

[root@node2 ~]# curl node1:8080 | grep -i "container id"
 % Total  % Received % Xferd Average Speed  Time  Time   Time Current
                 Dload Upload  Total  Spent  Left Speed
100 3162 100 3162  0   0  7531   0 --:--:-- --:--:-- --:--:-- 7546
     Processed by container ID 6173afd5fab8

[root@node2 ~]# curl node1:8080 | grep -i "container id"
 % Total  % Received % Xferd Average Speed  Time  Time   Time Current
                 Dload Upload  Total  Spent  Left Speed
100 3162 100 3162  0   0  169k   0 --:--:-- --:--:-- --:--:-- 171k
     Processed by container ID b07e95c5c681

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

標簽:南陽 撫州 邵陽 白城 泉州 南陽 葫蘆島 岳陽

巨人網絡通訊聲明:本文標題《詳解Docker Swarm服務發現和負載均衡原理》,本文關鍵詞  詳解,Docker,Swarm,服務,發現,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳解Docker Swarm服務發現和負載均衡原理》相關的同類信息!
  • 本頁收集關于詳解Docker Swarm服務發現和負載均衡原理的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    夜夜嗨av一区二区三区中文字幕| 欧美激情在线看| 欧美日韩一区视频| 欧美激情一区二区三区不卡| 国产一区二区三区日韩| 精品免费视频一区二区| 久久99久久99小草精品免视看| 精品欧美久久久| 国产一区二区三区久久久| 国产亚洲va综合人人澡精品| 国产一区二区三区av电影| 欧美精品一区二区三区蜜桃| 国产综合一区二区| 自拍偷拍欧美精品| 精品视频在线视频| 久久99精品久久久| 亚洲国产精品成人久久综合一区| 色偷偷成人一区二区三区91| 日韩精品一二三四| 欧美激情一二三区| 欧美日本视频在线| 秋霞av亚洲一区二区三| 国产三级一区二区| 97久久超碰国产精品| 亚洲成人一区二区| 国产人久久人人人人爽| 国产精品一区在线观看乱码| 日韩久久一区二区| 欧美一区二区三区男人的天堂| 国产福利一区在线观看| 一区二区三区不卡在线观看| 日韩亚洲欧美综合| 色综合久久中文字幕综合网 | 91麻豆精品91久久久久久清纯| 国产一区视频在线看| 亚洲欧美一区二区久久| 欧美一级理论片| 91看片淫黄大片一级| 国内精品久久久久影院色| 亚洲一二三四在线观看| 欧美高清在线一区| 精品国产sm最大网站| 欧美主播一区二区三区美女| 国产激情一区二区三区桃花岛亚洲| 亚洲高清免费视频| 中文字幕在线观看不卡视频| 久久免费偷拍视频| 555www色欧美视频| 91电影在线观看| 91在线精品一区二区三区| 精东粉嫩av免费一区二区三区| 亚洲一卡二卡三卡四卡| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 视频一区免费在线观看| 自拍偷自拍亚洲精品播放| 久久精品欧美日韩精品| 精品日韩欧美一区二区| 欧美一卡二卡三卡| 欧美午夜精品久久久久久孕妇| 91一区二区三区在线观看| 国产成人av电影在线| 激情六月婷婷综合| 精品亚洲成a人在线观看| 久久不见久久见免费视频7| 天堂va蜜桃一区二区三区 | 26uuu欧美| 26uuu亚洲综合色欧美| 日韩免费电影一区| 欧美精品久久99久久在免费线| 色婷婷久久久综合中文字幕| 成人免费视频视频在线观看免费| 国产suv精品一区二区6| 成人晚上爱看视频| 成人精品视频一区| 色94色欧美sute亚洲线路一久 | 欧美一级高清片| 精品久久一区二区三区| 精品成人a区在线观看| 国产人妖乱国产精品人妖| 亚洲人精品午夜| 日韩高清欧美激情| 精品午夜久久福利影院| 成年人午夜久久久| 欧美亚日韩国产aⅴ精品中极品| 欧美日本一区二区在线观看| 日韩欧美中文字幕公布| 久久亚洲精品国产精品紫薇| 久久精品无码一区二区三区| 国产日韩欧美精品在线| 亚洲欧美日韩精品久久久久| 亚洲综合视频在线| 久久国产成人午夜av影院| 国产寡妇亲子伦一区二区| av不卡在线播放| 欧美高清视频一二三区| 国产日韩欧美综合一区| 亚洲国产精品影院| 国产精品中文字幕欧美| 91色视频在线| 日韩一区二区三区在线观看| 国产精品美女久久久久高潮| 午夜精品一区二区三区电影天堂 | 国产在线麻豆精品观看| 成人免费高清在线| 欧美日韩国产精选| 国产日韩v精品一区二区| 亚洲国产精品久久一线不卡| 国产乱子伦视频一区二区三区| 91福利小视频| 欧美激情一区二区三区在线| 亚洲自拍偷拍网站| 国产传媒一区在线| 91麻豆精品国产自产在线| 中日韩免费视频中文字幕| 午夜影院久久久| 99国产精品99久久久久久| 精品福利在线导航| 日韩精品三区四区| 欧美视频精品在线观看| 欧美国产精品中文字幕| 美女视频一区在线观看| 欧美亚洲一区三区| 亚洲特级片在线| 成人午夜伦理影院| 久久在线观看免费| 热久久国产精品| 欧美一级欧美三级在线观看| 亚洲综合激情另类小说区| 91小视频在线| 亚洲精品一区二区三区影院| 亚洲一区二区免费视频| 成人亚洲精品久久久久软件| 久久综合九色综合欧美就去吻| 日韩精品三区四区| 国产69精品久久久久777| 毛片一区二区三区| 国产精品一区2区| 又紧又大又爽精品一区二区| 91成人免费网站| 日韩黄色小视频| 国产一区二区三区日韩| 国产成人综合在线观看| 天天做天天摸天天爽国产一区| ㊣最新国产の精品bt伙计久久| 亚洲精品一区二区三区香蕉| 日韩毛片视频在线看| 色一情一乱一乱一91av| 日本高清不卡aⅴ免费网站| 欧美日韩高清不卡| 99在线精品一区二区三区| 国产精品色哟哟网站| 欧美一区二区成人| 欧美zozozo| 久久亚洲精品小早川怜子| 悠悠色在线精品| 欧美另类z0zxhd电影| 中文无字幕一区二区三区| 视频一区欧美日韩| 成人av网站在线观看| 精品欧美一区二区三区精品久久| 日韩中文欧美在线| 欧美精品日韩一本| 国产专区综合网| 国产精品精品国产色婷婷| 国产在线精品免费av| 日韩三级.com| 欧洲激情一区二区| 久久一区二区三区国产精品| 国产一区二区视频在线| 国产精品天干天干在线综合| 色天使久久综合网天天| 美女视频黄 久久| 国产欧美日韩精品一区| 欧美三级蜜桃2在线观看| 日日夜夜一区二区| 日韩一区二区三区电影在线观看| 狠狠色伊人亚洲综合成人| 成人免费在线播放视频| 国产精品久久久久久久久久免费看 | 国产·精品毛片| 国产精品黄色在线观看| av一本久道久久综合久久鬼色| 亚洲免费视频中文字幕| 欧美亚洲综合网| 成人黄色av电影| 国产麻豆午夜三级精品| 亚洲精品中文在线影院| 日韩美女主播在线视频一区二区三区 | 欧美日韩免费电影| 欧美精品99久久久**| 欧美中文字幕一区| 91成人免费电影| 欧美日韩国产一级| 欧美日韩视频一区二区| 91久久国产最好的精华液| 欧美浪妇xxxx高跟鞋交| 亚洲日本免费电影| 欧美怡红院视频| 日韩一本二本av| 国产欧美一区二区三区网站|