日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker Swarm服务发现和负载均衡原理

發布時間:2025/6/17 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker Swarm服务发现和负载均衡原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

?

Docker使用的是Linux內核iptables和IPVS的功能來實現服務發現和負載均衡。Iptables是Linux內核中可用的包過濾技術,可根據數據包的內容進行分類、修改和轉發決策。IPVS是Linux內核中可用的傳輸級負載均衡。

?

本地創建一個集群環境,我本地有三節點集群環境:

?

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

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

?

  • 基于DNS的負載均衡:
  • DNS server內嵌于Docker引擎。在創建集群的時候可以直接指定

    --endpoint-mode dnsrr 來指明,這個服務里面的task或者是所有啟動的容器訪問都通過DNS的方式來進行負載均衡,這個是啥意思。操作下就清楚了:

    ?

    創建一個網絡

    docker network create --driver overlay overlay1

    創建client節點(啟動一個),和vote節點(啟動多個),實現client節點訪問vote的時候,是給均衡到不同的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

    ?

    然后進行如下操作

    docker service ls 查看服務

    docker service ps xxxxclient的id ?查看client的信息,找到他在哪個節點上,然后登陸到那個節點節點的機器上

    docker ps ?查看容器,找到client對應的容器

    docker exec -it xxxxclientid bash ?登陸到這個容器 ?

    上面操作如下圖

    此時在client容器上,可以直接dig vote 看下對vote的dns解析

    ?

    如上,有兩條。可以測試下是不是會被隨機解析到上面,這里用ping

    ?

    是可以看到均衡效果的,這個就是基本的DNS解析來實現負載均衡。但是這樣會產生問題,某些應用程序將DNS主機名緩存到IP地址映射,這回導致應用程序在訪問更改時超時,具有非零DNS ttl 值會導致DNS條目反應最新的詳細信息時發生延遲。

    ?

  • 基于VIP的負載均衡。
  • ??基于VIP的負載均衡可以解決1中DNS總是隨便挑給客戶端帶來的不方便的影響。每個服務都有一個IP地址,并且該IP地址映射到與該服務關聯的多個容器的IP地址。在這種情況下,與服務關聯的服務IP不會改變,即使與該服務關聯的容器死亡并重新啟動。

    ??運行過程中,DNS service會將服務名”vote”解析到VIP,使用iptables和ipvs,VIP實現2個服務端”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

    ?

    并沒有指定--endpoint-mode,也就是說Docker Swarm默認就是用的VIP

    ?

    查看這兩個服務的VIP

    docker service inspect --format {{.Endpoint.VirtualIPs}} vote

    docker service inspect --format {{.Endpoint.VirtualIPs}} client

    ?

    然后跟上面姿勢一樣,找下client在哪個節點上,登上去,看下他是怎么dns vote的。

    ?

    這次DNS就只有一個解析了,解析到的地址是vote服務的VIP,ping的話也不會存在跳轉別的ip的情況。

    現在別動,繼續在client里面執行

    curl vote | grep -i "container id"

    通過返回來的容器id來區分到底是誰在為我們干活

    ?

    路由網格(Routing mesh)

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

    ?

    直接在上面的實操例子上更新一個端口映射

    docker service update --publish-add 80:80 9fk2k04fw98p

    ?

    Sandbox和vote容器是ingress網絡的一部分,它有助于路由網格。client容器和vote容器是overlay1網絡的一部分,有助于內部負載均衡。所有容器都是默認docker_gwbridge網絡的一部分。遵循iptables中的NAT規則顯示,端口80上的主機流量發送到node1里的Sandbox.

    這樣,然后瀏覽器訪問(不同刷新):

    ?

    跟預期的一樣,每個節點上不停的刷新都會看到下面的容器id會交替變化,說明負載均衡是好使的。

    ?

    總結

    以上是生活随笔為你收集整理的Docker Swarm服务发现和负载均衡原理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。