欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

docker swam集群如何實現(xiàn)負(fù)載均衡

 更新時間:2024年02月04日 10:34:24   作者:ghostwritten  
這篇文章主要介紹了docker swam集群如何實現(xiàn)負(fù)載均衡問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

1. 初始化集群

第一個節(jié)點(diǎn)(manager):

$ docker swarm init
Swarm initialized: current node (9qksq9kb8tt9i5un3y2eqbhlj) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-5b3w5w10px9ok0t39zs1nujng8x37rcapfkg885hmrokb5wvqi-9v45djurbjeajp3ln80zqcevu 172.17.0.6:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

第二個節(jié)點(diǎn)(worker):

$ docker swarm join 172.17.0.6:2377 --token $(ssh -o StrictHostKeyChecking=no 172.17.0.6 "docker swarm join-token -q worker")
Warning: Permanently added '172.17.0.6' (ECDSA) to the list of known hosts.
This node joined a swarm as a worker.

默認(rèn)情況下,對服務(wù)的請求基于公共端口進(jìn)行負(fù)載均衡。

2. 虛擬IP

下面的命令將創(chuàng)建一個名為lbapp1的新服務(wù),其中運(yùn)行兩個容器。

服務(wù)通過端口公開81

$ docker service create --name lbapp1 --replicas 2 -p 81:80 katacoda/docker-http-server
7w8k1esxuyx1gs17hwa4svop5

當(dāng)向集群中端口81上的節(jié)點(diǎn)發(fā)出請求時,它會將負(fù)載分散到兩個容器上。

$ curl host01:81
<h1>This request was processed by host: cbc4fa365043</h1>
$ curl host01:81
<h1>This request was processed by host: faecced3dc9f</h1>

HTTP響應(yīng)指示哪個容器處理請求。

在第二臺主機(jī)上運(yùn)行命令會得到相同的結(jié)果,它會跨這兩臺主機(jī)處理請求。

在下一步中,我們將探討如何使用它來部署一個實際的應(yīng)用程序。

3. 服務(wù)發(fā)現(xiàn)

Docker群模式包括一個路由網(wǎng),它支持多主機(jī)網(wǎng)絡(luò)。

它允許兩個不同主機(jī)上的容器通信,就像它們在同一主機(jī)上一樣。

它通過創(chuàng)建虛擬可擴(kuò)展LAN (VXLAN)來實現(xiàn)這一點(diǎn),VXLAN是為基于云的網(wǎng)絡(luò)設(shè)計的。

路由以兩種不同的方式工作。

  • 首先,基于公共端口暴露的服務(wù)。任何對端口的請求都將被分發(fā)。
  • 其次,該服務(wù)被賦予一個虛擬IP地址,該IP地址僅在Docker網(wǎng)絡(luò)內(nèi)部可路由。

當(dāng)向IP地址發(fā)出請求時,它們被分發(fā)到底層容器。

這個虛擬IP是在Docker中的嵌入式DNS服務(wù)器上注冊的。

當(dāng)基于服務(wù)名進(jìn)行DNS解析時,返回Virtual IP。

在這個步驟中,你將創(chuàng)建一個負(fù)載均衡的http,它被附加到一個覆蓋網(wǎng)絡(luò),并查找它是虛擬IP。

$ docker network create --attachable -d overlay eg1
cf4fx7p2a75irup0pjafylpd4

這個網(wǎng)絡(luò)將是一個“群體范圍網(wǎng)絡(luò)”。

這意味著只有作為服務(wù)啟動的容器才能將自己附加到網(wǎng)絡(luò)上。

$ docker service create --name http --network eg1 --replicas 2 katacoda/docker-http-server

通過調(diào)用服務(wù)http, Docker添加了一個條目到它是嵌入式DNS服務(wù)器。

網(wǎng)絡(luò)上的其他容器可以使用友好的名稱來發(fā)現(xiàn)IP地址。

與端口一起,這個IP地址可以在網(wǎng)絡(luò)內(nèi)部使用,以達(dá)到負(fù)載均衡。

使用Dig查找內(nèi)部虛擬IP。

通過使用--attable標(biāo)志,Swarm服務(wù)之外的容器可以訪問網(wǎng)絡(luò)。

$ docker run --name=dig --network eg1 benhall/dig dig http
Unable to find image 'benhall/dig:latest' locally
latest: Pulling from benhall/dig
12b41071e6ce: Pull complete d23aaa6caac4: Pull complete a3ed95caeb02: Pull complete Digest: sha256:ed7d241f0faea3a015d13117824c04a433a79032619862e4e3741a31eb9e4272
Status: Downloaded newer image for benhall/dig:latest

; <<>> DiG 9.10.2 <<>> http
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59560
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;http.                          IN      A

;; ANSWER SECTION:
http.                   600     IN      A       10.0.1.2

;; Query time: 1 msec
;; SERVER: 127.0.0.11#53(127.0.0.11)
;; WHEN: Thu Sep 30 07:59:23 UTC 2021
;; MSG SIZE  rcvd: 42

通過ping該名稱還可以發(fā)現(xiàn)IP地址。

$ docker run --name=ping --network eg1 alpine ping -c5 http
PING http (10.0.1.2): 56 data bytes
64 bytes from 10.0.1.2: seq=0 ttl=64 time=0.287 ms
64 bytes from 10.0.1.2: seq=1 ttl=64 time=0.108 ms
64 bytes from 10.0.1.2: seq=2 ttl=64 time=0.160 ms
64 bytes from 10.0.1.2: seq=3 ttl=64 time=0.157 ms
64 bytes from 10.0.1.2: seq=4 ttl=64 time=0.131 ms

--- http ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 0.108/0.168/0.287 ms

這應(yīng)該與給服務(wù)的虛擬IP相匹配。

您可以通過檢查服務(wù)來發(fā)現(xiàn)這一點(diǎn)。

$ docker service inspect http --format="{{.Endpoint.VirtualIPs}}"
[{cf4fx7p2a75irup0pjafylpd4 10.0.1.2/24}]

每個容器仍然會被賦予一個唯一的IP地址。

$ docker inspect --format="{{.NetworkSettings.Networks.eg1.IPAddress}}" $(docker'{print $1}')cker-http-server | head -n1 | awk  
10.0.1.4

這個虛擬IP確保在集群中按照預(yù)期的方式進(jìn)行負(fù)載平衡。而IP地址確保它在集群外工作。

4. 多主機(jī)LB和服務(wù)發(fā)現(xiàn)

虛擬IP和端口負(fù)載均衡和服務(wù)發(fā)現(xiàn)都可以用于多主機(jī)場景,應(yīng)用程序可以在不同的主機(jī)上與不同的服務(wù)通信。

在這個步驟中,我們將部署一個復(fù)制的Node.js應(yīng)用程序,它與Redis通信來存儲數(shù)據(jù)。

首先,需要有一個覆蓋網(wǎng)絡(luò),應(yīng)用程序和數(shù)據(jù)存儲可以連接。

$ docker network create -d overlay app1-network

部署Redis時,可以連接網(wǎng)絡(luò)。應(yīng)用程序希望能夠連接到一個名為Redis的實例。為了使應(yīng)用程序能夠通過嵌入式DNS發(fā)現(xiàn)虛擬IP,我們調(diào)用服務(wù)Redis。

$ docker service create --name redis --network app1-network redis:alpine

每個主機(jī)都應(yīng)該有一個Node.js容器實例,其中一個主機(jī)存儲Redis。

$ docker ps
CONTAINER ID        IMAGE                                COMMAND                  CREATED             STATUS              PORTS               NAMES
06f131fda216        redis:alpine                         "docker-entrypoint.s…"   27 seconds ago      Up 25 seconds       6379/tcp            redis.1.mq95cigfa7etgefqs1pye9crv
1890d08df8cc        katacoda/docker-http-server:latest   "/app"                   7 minutes ago       Up 7 minutes        80/tcp              http.2.j5c4ari06egpy3zqw6b0n3iyl

調(diào)用HTTP服務(wù)器將在Redis中存儲請求并返回結(jié)果。這是負(fù)載平衡,兩個容器通過覆蓋網(wǎng)絡(luò)與Redis容器通信。

應(yīng)用程序現(xiàn)在分布在多個主機(jī)上。

參考:

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 部署維護(hù)docker環(huán)境的詳細(xì)教程

    部署維護(hù)docker環(huán)境的詳細(xì)教程

    這篇文章主要介紹了部署維護(hù)docker環(huán)境的詳細(xì)教程,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-02-02
  • 樹莓派系列之使用docker安裝青龍面板和改端口號的配置問題

    樹莓派系列之使用docker安裝青龍面板和改端口號的配置問題

    這篇文章主要介紹了樹莓派系列之使用docker安裝青龍面板和改端口號的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • docker端口映射的實現(xiàn)示例

    docker端口映射的實現(xiàn)示例

    Docker 端口映射允許我們將容器內(nèi)部的服務(wù)綁定到宿主機(jī)上的一個或多個端口,本文主要介紹了docker端口映射的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • kali安裝docker和portainer的配置方法

    kali安裝docker和portainer的配置方法

    docker的出現(xiàn)給很多服務(wù)提供了方便,許多arm結(jié)構(gòu)的硬件也能運(yùn)行x86服務(wù),今天給大家介紹kali安裝docker和portainer的配置方法,感興趣的朋友一起看看吧
    2021-06-06
  • Docker部署Ragflow(完美解決502 bad gateway)

    Docker部署Ragflow(完美解決502 bad gateway)

    本文主要介紹了Docker部署Ragflow,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • Docker容器化部署嘗試——多容器通信(node+mongoDB+nginx)

    Docker容器化部署嘗試——多容器通信(node+mongoDB+nginx)

    這篇文章主要介紹了Docker容器化部署嘗試——多容器通信(node+mongoDB+nginx),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • docker-compose快速搭建docker私有倉庫的步驟

    docker-compose快速搭建docker私有倉庫的步驟

    這篇文章主要介紹了docker-compose快速搭建docker私有倉庫的步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Docker 數(shù)據(jù)卷及數(shù)據(jù)容器詳細(xì)介紹及示例

    Docker 數(shù)據(jù)卷及數(shù)據(jù)容器詳細(xì)介紹及示例

    這篇文章主要介紹了Docker 數(shù)據(jù)卷及數(shù)據(jù)容器詳細(xì)介紹及示例的相關(guān)資料,Docker 很強(qiáng)大,不僅部署維護(hù)提高效率,docker和宿主之間的數(shù)據(jù)共享以及docker間的數(shù)據(jù)共享需要好好研究一下,需要的朋友可以參考下
    2016-11-11
  • 如何解決docker commit后鏡像越來越大問題

    如何解決docker commit后鏡像越來越大問題

    解決Docker Commit后鏡像變大問題的方法:方法1直接打包容器并導(dǎo)入為鏡像;方法2將容器根目錄文件壓縮后導(dǎo)入為鏡像,方法1更優(yōu),在其他設(shè)備運(yùn)行時可能出現(xiàn)內(nèi)存不足錯誤
    2025-03-03
  • 使用docker-compose實現(xiàn)不停機(jī)部署/灰度發(fā)布的四種方法

    使用docker-compose實現(xiàn)不停機(jī)部署/灰度發(fā)布的四種方法

    灰度發(fā)布是一種軟件部署策略,它允許將新版本的部分功能或服務(wù)逐步推送給用戶,而不是一次性對所有用戶進(jìn)行大規(guī)模更新,本文主要給大家介紹了使用docker-compose實現(xiàn)不停機(jī)部署/灰度發(fā)布的四種方法,需要的朋友可以參考下
    2024-11-11

最新評論