最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Docker Swarm結(jié)合Docker Compose部署集群的實現(xiàn)

 更新時間:2023年12月15日 09:32:44   作者:Wang's Blog  
本文主要介紹了Docker Swarm結(jié)合Docker Compose部署集群的實現(xiàn),通過部署和配置幫助讀者更好地理解并應(yīng)用這些工具,感興趣的可以了解一下

docker swarm 結(jié)合 docker-compose.yml 部署集群

1 )準備 docker-compose.yml的文件, 示例 demo 如下

version: "3"
services:
  mysql_c:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    restart: always
    ports:
      - 3306:3306
    volumes:
      - /root/mysql/conf.d:/etc/mysql/conf.d
      - /root/mysql/data:/var/lib/mysql
  goweb1:
    image: gowebimg
    restart: always
    deploy:
      replicas: 6 # 副本數(shù)量
      resources: # 資源
        limits: # 配置cpu
          cpus: "0.3" # 設(shè)置該容器最多只能使用 30% 的 CPU
          memory: 500M # 設(shè)置該容器最多只能使用 500M內(nèi)存
      restart_policy: # 定義容器重啟策略, 用于代替 restart 參數(shù)
        condition: on-failure # 只有當容器內(nèi)部應(yīng)用程序出現(xiàn)問題才會重啟
    depends_on:
      - mysql_c
  nginx:
    image: nginx
    restart: always
    ports:
      - 80:80
    depends_on:
      - goweb1
    volumes:
      - /root/nginx/conf.d/:/etc/nginx/conf.d
    deploy:
      replicas: 6 #副本數(shù)量
      resources: #資源
        limits: #配置cpu
          cpus: "0.3" # 設(shè)置該容器最多只能使用 30% 的 CPU
          memory: 500M # 設(shè)置該容器最多只能使用 500M內(nèi)存
      restart_policy: # 定義容器重啟策略, 用于代替 restart 參數(shù)
        condition: on-failure #只有當容器內(nèi)部應(yīng)用程序出現(xiàn)問題才會重啟
  • 基于 docker-compose可以在一臺服務(wù)器上創(chuàng)建多個容器
  • 想在多臺服務(wù)器上一次創(chuàng)建多個容器, 需要結(jié)合 Swarm
    • docker stack deploy --compose-file docker-compose.yml swarmName
      • swarmName是我們的swarm對應(yīng)的名稱,可以自行隨意配置, 比如 goWebSwarm
  • 以上配置的問題是 mysql 沒有進行集群
    • mysql 需要單獨搭建集群,這里涉及到主從數(shù)據(jù)庫
    • 為了方便起見,直接配置到了 yml 文件里
    • 這里mysql的副本數(shù)量不能配置多個
    • 如果多個,就會運行在多臺服務(wù)器上,會出現(xiàn)數(shù)據(jù)異常和不一致的問題

2 )搭建集群

  • docker swarm init --advertise-addr 192.168.1.10 初始化集群并創(chuàng)建管理節(jié)點(當前指定的ip為管理節(jié)點)
    • 填入自己主機的ip
  • docker swarm join --token SWMTKN-1-52tr219htvsg1volky2tej7pj8bjs2j78q4b6wc9fnt72kkchd-29ohn4mgz191f6oznldvjiw47 192.168.1.10:2377
    • 其他主機加入集群
  • 根據(jù) yml 文件,這里的集群是 nginx 和 goweb的集群,它們都有6個副本,mysql 服務(wù)只有一個副本

3 )部署和驗證

  • docker stack deploy --compose-file docker-compose.yml goWebSwarm 開始部署服務(wù)
    • 調(diào)用這個命令的時候,首先創(chuàng)建了網(wǎng)絡(luò)
    • 接著創(chuàng)建3個服務(wù)
    • 這3個服務(wù)使用了同一個網(wǎng)絡(luò),默認這三個服務(wù)可以直接連通
  • docker service ls 可查看當前運行起來的服務(wù)
  • docker service ps goWebSwarm 查看當前某個服務(wù)
  • 通過 docker-compose 部署,可見生成了3個服務(wù),這三個服務(wù),使用了同一個網(wǎng)絡(luò)
  • 這里同樣存在之前的,mysql服務(wù)啟動了,接著goWeb服務(wù)也啟動,但是mysql服務(wù)并沒有完全可用的狀態(tài)
    • 可以用之前的腳本解決
    • 可以重啟 goWeb項目 (或擴容,縮容來重啟)
    • 可以先單獨部署 mysql的集群,之后再部署 goWeb 和 Nginx 服務(wù)
      • 這種就不屬于這里的集群了,mysql集群作為一項單獨的集群
      • goWeb應(yīng)用的配置文件也要對應(yīng)同步修改

4 )配置部署額外的一臺Nginx服務(wù)器(非集群內(nèi))

  • 額外的NG服務(wù)器,用于做路由和轉(zhuǎn)發(fā)到集群內(nèi)的nginx服務(wù)器
  • 在集群內(nèi)的各個主機磁盤上都有 /root/nginx/conf.d/ 目錄中都有一個 default.conf 文件
    upstream backend {
      ip_hash;
      server goweb1:8080; # 這里是 goweb1 容器服務(wù)的host別名
    }
    
    server {
            listen       80;
            server_name  localhost; # 你的域名地址
            location / {
                  # 設(shè)置主機頭和客戶端真實地址,以便服務(wù)器獲取客戶端真實IP         
                  # 禁用緩存
                  proxy_buffering off; 
                  # 反向代理的地址
                  proxy_pass http://backend;     
            }
            #error_page  404              /404.html;
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root  html;
            }
    }
    
    • 當訪問這個時,nginx將 80 轉(zhuǎn)發(fā)到 8080
  • 現(xiàn)在,我們要配置nginx的主機,也就是轉(zhuǎn)發(fā)到集群內(nèi),進行負載均衡的配置
    upstream backend {
      ip_hash;
      server 192.168.1.10 weight=1; # 集群內(nèi)的服務(wù) ip 這里有一臺 nginx服務(wù)器
      server 192.168.1.11 weight=1;
      server 192.168.1.12 weight=1;
      server 192.168.1.13 weight=1;
    }
    
    server {
            listen       80;
            server_name  goweb.xxxx.com; # 你的域名地址 這里本機可以配置 host, 如果在服務(wù)器配置 域名解析
            add_header backendCode $upstream_status;
            add_header BackendIP "$upstream_addr;" always;
            location / {
                  # 設(shè)置主機頭和客戶端真實地址,以便服務(wù)器獲取客戶端真實 IP
                  proxy_set_header Host $host;
                  proxy_set_header X-Real-IP $remote_addr;
                  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                  # nginx服務(wù)器與被代理服務(wù)連接超時時間,代理超時,請求一臺超過1s就會轉(zhuǎn)發(fā)到其他ip
                  proxy_connect_timeout 1s;
                  # 禁用緩存
                  proxy_buffering off;
                  # 反向代理的地址
                  proxy_pass http://backend;
            }
            #error_page  404              /404.html;
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root  html;
            }
    }
    
  • 上面用于查看nginx服務(wù)器轉(zhuǎn)發(fā)節(jié)點的配置
    • proxy_set_header X-Real-IP $remote_addr;
    • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    • 加上這個,在瀏覽器中可以看到轉(zhuǎn)發(fā)的服務(wù)器,在響應(yīng)表頭,會有一個 BackendIP 的字段
  • 啟動 nginx 主機
    • docker run -itd --name nginxweb -p 80:80 -v /root/nginx/conf.d:/etc/nginx/conf.d nginx

5 )整體架構(gòu)如下

  • 第一層 )nginx 服務(wù)器接收到請求后轉(zhuǎn)發(fā)到集群中的各臺主機上

    • 這里是最外面的一層 nginx 作為負載均衡
    • 這臺nginx服務(wù)器是一臺高性能服務(wù)器,只負責(zé)轉(zhuǎn)發(fā),沒有其他處理任務(wù)
  • 第二層 )集群里面有各類服務(wù)

    • nginx goWeb
      • goWeb 連接到 mysql 或 mysql集群服務(wù)
    • nginx goWeb
      • 同上
    • nginx goWeb
      • 同上
    • 這個集群內(nèi)部的nginx服務(wù)會動態(tài)負載均衡到各個goWeb服務(wù)
  • 第三層 )mysql 或 mysql集群

    • 目前我們的mysql 只有一臺服務(wù),并且配置在compose文件里
  • 以上三個層,是我們服務(wù)端一般的設(shè)計方案,當然上面沒用到 mysql 集群

  • 以上架構(gòu)可支持 100W 的訪問量 (使用mysql集群)

  • 如果需要負載更多, 可把這套架構(gòu)復(fù)制到多個城市地區(qū)

    • 一般情況下,域名解析只能配置到一臺服務(wù)器
    • 當然,有個動態(tài)域名解析,可以支持多臺
    • 這樣就可以根據(jù)請求判斷轉(zhuǎn)發(fā)到那些服務(wù)器

關(guān)于 Docker Swarm 的 Raft 一致性算法

  • Raft:一致性算法,在保證大多數(shù)管理節(jié)點存活的情況下,集群才能使用
  • 所以就要求如果集群的話,manager節(jié)點必須 >=3 臺
    • manager: 管理節(jié)點,用于管理工作節(jié)點
  • 如果是兩個臺,其中一臺宕機,剩余的一臺也將不可用,以致整個集群不可用
  • 為了利用 swarm 模式的容錯特性,Docker 建議您根據(jù)組織的高可用性要求實現(xiàn)奇數(shù)個節(jié)點
  • 當您有多個管理器時,您可以從管理器節(jié)點的故障中恢復(fù)而無需停機
    • 一個3管理器群最多可以容忍1名管理器的損失
    • 一個5管理器群最多可以同時丟失2個管理器節(jié)點
    • 一個N管理器集群最多可以容忍丟失 (N - 1) / 2 管理器
    • Docker 建議一個Swarm集群最多使用7個管理器節(jié)點

到此這篇關(guān)于Docker Swarm結(jié)合Docker Compose部署集群的實現(xiàn)的文章就介紹到這了,更多相關(guān)Docker Swarm結(jié)合Docker Compose集群內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • docker常用容器啟動docker-compose.yml配置文件使用

    docker常用容器啟動docker-compose.yml配置文件使用

    這篇文章主要介紹了docker常用容器啟動docker-compose.yml配置文件使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Docker之DockerFile文件的使用及說明

    Docker之DockerFile文件的使用及說明

    本文介紹了Dockerfile的定義、構(gòu)建過程以及Dockerfile的常見指令和體系結(jié)構(gòu),通過案例展示了如何創(chuàng)建自定義鏡像并運行容器
    2025-12-12
  • docker部署rabbitmq消息隊列實踐

    docker部署rabbitmq消息隊列實踐

    文章主要介紹了使用Docker部署RabbitMQ的過程,包括在DockerHub上查找和下載RabbitMQ鏡像、通過Docker啟動鏡像、映射端口、指定主機名和容器名等步驟,并詳細解釋了如何解決啟動失敗的問題及如何通過Web端訪問部署好的RabbitMQ
    2026-04-04
  • Docker將鏡像文件發(fā)布到阿里云的詳細過程

    Docker將鏡像文件發(fā)布到阿里云的詳細過程

    這篇文章主要介紹了Docker將鏡像文件發(fā)布到阿里云的操作,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • 從零開始:Docker中修改Nginx服務(wù)器配置

    從零開始:Docker中修改Nginx服務(wù)器配置

    在Docker中修改Nginx配置是一種常見的操作,它允許我們根據(jù)特定需求來自定義Nginx服務(wù)器的行為,通過修改Nginx配置,我們可以添加新的虛擬主機、更改端口號、啟用SSL等,需要的朋友可以參考下
    2023-10-10
  • 詳解docker pull下來的鏡像存儲在哪里

    詳解docker pull下來的鏡像存儲在哪里

    這篇文章主要介紹了詳解docker pull下來的鏡像存儲在哪里,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • ubuntu 22.04安裝docker的詳細過程

    ubuntu 22.04安裝docker的詳細過程

    這篇文章主要介紹了ubuntu 22.04安裝docker的詳細過程,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2025-04-04
  • 在docker容器中使用非root用戶執(zhí)行腳本操作

    在docker容器中使用非root用戶執(zhí)行腳本操作

    這篇文章主要介紹了在docker容器中使用非root用戶執(zhí)行腳本操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Docker的安裝方法及運行Docker Swarm模式的使用

    Docker的安裝方法及運行Docker Swarm模式的使用

    本文給大家簡單介紹docker的安裝以及1.12版本的swarm模式的使用,包括docker的安裝和配置,對docker swarm簡單使用感興趣的朋友一起看看吧
    2016-11-11
  • docker容器間跨宿主機通信-基于overlay的實現(xiàn)方法

    docker容器間跨宿主機通信-基于overlay的實現(xiàn)方法

    這篇文章主要介紹了docker容器間跨宿主機通信-基于overlay的實現(xiàn)方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02

最新評論

波密县| 永济市| 隆回县| 威海市| 九龙县| 丰顺县| 湖南省| 报价| 迁安市| 丰宁| 金昌市| 安新县| 乌鲁木齐县| 鄢陵县| 古浪县| 晋江市| 平湖市| 阳高县| 同江市| 阿图什市| 尼玛县| 密云县| 武宣县| 林西县| 赫章县| 乐都县| 无棣县| 翼城县| 溧阳市| 古浪县| 林芝县| 麻栗坡县| 宜兰市| 长子县| 高平市| 锡林浩特市| 昭平县| 金乡县| 望谟县| 平江县| 抚顺市|