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

Docker部署tenine實(shí)現(xiàn)后端應(yīng)用的高可用與負(fù)載均衡(推薦)

 更新時間:2024年09月13日 09:55:32   作者:小時候的陽光  
采用Docker部署Tengine和Keepalived,實(shí)現(xiàn)了一種適用于小型應(yīng)用場景的高可用負(fù)載均衡解決方案,本方案需要兩臺Ubuntu服務(wù)器、Docker軟件以及三個IP地址,適合需要簡易而可靠的負(fù)載均衡和高可用性的小型應(yīng)用部署,感興趣的朋友跟隨小編一起看看吧

采用Docker方式的Tengine 和 keepalived 組合模式可以實(shí)現(xiàn)小應(yīng)用場景的高可用負(fù)載均衡需求

網(wǎng)絡(luò)架構(gòu)

一、環(huán)境準(zhǔn)備

兩臺物理主機(jī): 22.04.3-Ubuntu Linux

Docker版本:24.0.9

3個IP地址 192.168.30.191 192.168.30.192 192.168.30.190(作為虛擬IP)

二、軟件安裝

兩臺機(jī)器上都執(zhí)行

1. 下載Tenine鏡像

docker pull axizdkr/tengine:3.1.0

本次鏡像來源 https://github.com/Axizdkr/tengine

2. 下載Keepalived鏡像

docker pull osixia/keepalived:2.0.20

3. 制作SpringBoot鏡像

根據(jù)各自應(yīng)用需要創(chuàng)建鏡像

三、軟件配置

兩臺機(jī)器上都執(zhí)行

1. 創(chuàng)建應(yīng)用容器

假設(shè) SpringBoot 各物理主機(jī)上創(chuàng)建了,SpringBoot端口為 9166

2. 代理訪問應(yīng)用

使用Tengine 代理訪問SpringBoot

創(chuàng)建必要映射目錄

mkdir -p /apps/tengine/cfg  /apps/tengine/logs   /appstengine/vue

在目錄 /apps/tengine/cfg 創(chuàng)建 nginx.conf

#user  nobody;
worker_processes  8;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    #access_log  logs/access.log  main;
    sendfile        on;
    # 當(dāng)設(shè)置為 on 時,Nginx 會在發(fā)送響應(yīng)時,盡量將數(shù)據(jù)合并成一個大的 TCP 數(shù)據(jù)包進(jìn)行發(fā)送。這可以減少 TCP 包的數(shù)量,從而提高網(wǎng)絡(luò)傳輸效率,尤其是在發(fā)送大文件時
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    proxy_buffer_size 128k;
    proxy_buffers 4 256k;
    proxy_busy_buffers_size 256k;
    gzip  on;
    gzip_min_length 2k;
    gzip_buffers   4 32k;
    gzip_http_version 1.1;
    gzip_comp_level 6;
    gzip_types text/plain text/css text/javascriptapplication/json application/javascript application/x-javascriptapplication/xml;
    gzip_vary on;
    gzip_proxied any;
    # 將Nginx代理的所有請求實(shí)體的大小限制為20m
    client_max_body_size 100m;
   upstream cluster1 {
       server 192.168.30.191:9166;
       server 192.168.30.192:9166;
       check interval=3000 rise=2 fall=5 timeout=1000 type=http;
       check_http_send "HEAD / HTTP/1.0\r\n\r\n";
       check_http_expect_alive http_2xx http_3xx;
    }
    server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        error_page  404              /404.html;
        # 統(tǒng)一走代理訪問vue前端頁面  xxxx/dist  
        location ~ /([A-Za-z0-9_-]+)/dist
        {
          root /vue/;
          index  index.html index.htm;
        }
        #代理SpringBoot訪問
        location /api/
        {
            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme';
            proxy_set_header X-Nginx-Proxy true;
            proxy_pass http://cluster1/;
        }
        location /nginx_basic_status {
            stub_status on;
        }
        location /nginx_check_status {
            check_status;
        }
        # 主要用于keepalived 檢查
        location /health_check {
           access_log off;
           return 200 "OK";
        }
    }
}

有關(guān)Tengine的 健康檢查配置說明,請參考官方文檔:
https://tengine.taobao.org/document_cn/http_upstream_check_cn.html

注意:
Tengine 健康檢查會不停的訪問 http://192.168.30.191:9166/ http://192.168.30.192:9166/ 這兩個地址,如果你的SpringBoot應(yīng)用有安全攔截(Shiro 或者 SpringSecurity)記得放行這個URL

創(chuàng)建Tengine容器

  sudo docker run --network=host \
 --privileged \
 --restart=always \
 --name tengine \
 -v /apps/tengine/cfg/nginx.conf:/etc/nginx/nginx.conf:ro \
 -v /apps/tengine/logs:/var/log/nginx \
 -v /apps/tengine/vue:/vue/ \
 -d axizdkr/tengine:3.1.0

3. 創(chuàng)建Keepalived

在 兩臺主機(jī)上 創(chuàng)建必要映射目錄

mkdir -p /apps/keepalived

在主機(jī)191目錄下創(chuàng)建
在目錄/apps/keepalived下創(chuàng)建配置文件 keepalived.conf 內(nèi)容如下:

vrrp_script chk_nginx {
    script "curl -s http://172.17.0.1/health_check"
    interval 2
    weight -3
}
vrrp_instance VI_2 {
    state MASTER
    interface enp10s0
    virtual_router_id 54
    priority 101
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.30.190
    }
    track_script {
        chk_nginx
    }
}

在主機(jī)192目錄下創(chuàng)建
在目錄/apps/keepalived下創(chuàng)建配置文件 keepalived.conf 內(nèi)容如下:

vrrp_script chk_nginx {
    script "curl -s http://172.17.0.1/health_check"
    interval 2
    weight -3
}
vrrp_instance VI_2 {
    state BACKUP
    interface enp9s0
    virtual_router_id 54
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.30.190
    }
    track_script {
        chk_nginx
    }
}

主要是如下幾個變量要注意:

interval 2 每隔2秒執(zhí)行一次

weight -5 腳本結(jié)果導(dǎo)致的優(yōu)先級變更,檢測失?。_本返回非0)則優(yōu)先級減5

fall 2 #檢測連續(xù)2次失敗才算確定是真失敗。會用weight減少優(yōu)先級(1-255之間) 默認(rèn)值為 3

rise 1 #檢測1次成功就算成功。但不修改優(yōu)先級 默認(rèn)值為 2

interface 當(dāng)前節(jié)點(diǎn)服務(wù)器的網(wǎng)卡名稱

priority 優(yōu)先級,每一個節(jié)點(diǎn)上不一樣

virtual_ipaddress 虛擬ip

virtual_router_id 共享相同虛擬IP的節(jié)點(diǎn)上該參數(shù)值必須一樣 ,
keepalived可以代理多個虛擬IP,每一個虛擬IP對應(yīng)的virtual_router_id值不可一樣。

state 指定當(dāng)前keepalived的初始狀態(tài),這個可用是 MASTER 或者 BACKUP ,如果是BACKUP 則作為從節(jié)點(diǎn),但是這個值會根據(jù)監(jiān)控腳本運(yùn)行狀態(tài)改變優(yōu)先級從而導(dǎo)致狀MASTER /BACKUP 態(tài)切換

三臺主機(jī)上執(zhí)行:

docker run -d --name keepalived \
	--cap-add=NET_ADMIN \
	--cap-add=NET_BROADCAST \
	--cap-add=NET_RAW \
	--net=host \
	-e KEEPALIVED_INTERFACE=eth0 \
	-v /apps/keepalived/keepalived.conf:/container/service/keepalived/assets/keepalived.conf \
	osixia/keepalived:2.0.20 --loglevel debug --copy-service

變量 KEEPALIVED_INTERFACE 是指當(dāng)前節(jié)點(diǎn)服務(wù)器的網(wǎng)卡名稱,如果不想開啟debug模式去掉–loglevel debug

4. 測試高可用

兩臺都啟動了keepalived后,目前 192.168.30.190 IP應(yīng)該是綁定在 191 這臺物理主機(jī)上,

可以 瀏覽器訪問 http://192.168.30.190/nginx_check_status 可以看到如下頁面顯示:

192.168.30.190 是 keepalived的虛擬IP, 然后可以訪問SpringBoot應(yīng)用接口看下是否負(fù)載均衡了

關(guān)閉 191上面的SpringBoot 看下 訪問情況

關(guān)閉 191 上面的 Tengine 看下 訪問情況

到此這篇關(guān)于Docker部署tenine實(shí)現(xiàn)后端應(yīng)用的高可用與負(fù)載均衡的文章就介紹到這了,更多相關(guān)Docker部署tenine內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Docker內(nèi)如何更新Jenkins

    Docker內(nèi)如何更新Jenkins

    本文詳細(xì)介紹了如何在Docker中使用Jenkins,包括Jenkins的基本概念、準(zhǔn)備工作、下載和運(yùn)行Jenkins、通過docker-compose部署Jenkins以及更新Jenkins的步驟
    2024-11-11
  • docker如何查詢指定名字的容器id

    docker如何查詢指定名字的容器id

    要查詢指定名字的Docker容器ID,可以使用命令 docker ps -a --filter "name=CONTAINER_NAME" -q,該命令將返回指定名稱的容器ID,如果存在多個相同名稱的容器,則返回所有這些容器的ID
    2025-03-03
  • 安裝harbor作為docker鏡像倉庫的問題

    安裝harbor作為docker鏡像倉庫的問題

    這篇文章主要介紹了安裝harbor作為docker鏡像倉庫,主要包括docker和docker-compose離線部署,安裝harbor作為本地的倉庫,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • Docker搭建MySQL雙主復(fù)制詳細(xì)教程

    Docker搭建MySQL雙主復(fù)制詳細(xì)教程

    Docker MySQL 雙主復(fù)制是一種數(shù)據(jù)庫高可用和數(shù)據(jù)冗余的技術(shù),它利用 Docker 容器化的優(yōu)勢,在兩個或多臺MySQL服務(wù)器上同時運(yùn)行并維護(hù)數(shù)據(jù)庫副本,這兩個主服務(wù)器可以互相同步數(shù)據(jù)更新,本文給大家介紹了Docker搭建MySQL雙主復(fù)制詳細(xì)教程,需要的朋友可以參考下
    2024-07-07
  • docker部署mysql問題

    docker部署mysql問題

    這篇文章主要介紹了docker部署mysql問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Docker安裝Redis并使用Another?Redis?Desktop?Manager連接的方法

    Docker安裝Redis并使用Another?Redis?Desktop?Manager連接的方法

    Redis?是一個使用C語言編寫的、開源的(遵守?BSD?協(xié)議)、高性能的、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value的NoSQL數(shù)據(jù)庫,這篇文章主要介紹了Docker安裝Redis并使用Another?Redis?Desktop?Manager連接,需要的朋友可以參考下
    2022-09-09
  • 解決docker與vmware的沖突問題

    解決docker與vmware的沖突問題

    這篇文章主要介紹了解決docker與vmware的沖突問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 基于Kubernetes和Docke實(shí)現(xiàn)留言簿案例

    基于Kubernetes和Docke實(shí)現(xiàn)留言簿案例

    這篇文章主要介紹了基于Kubernetes和Docke實(shí)現(xiàn)留言簿案例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 解決Docker Image鏡像無法刪除問題的方法

    解決Docker Image鏡像無法刪除問題的方法

    這篇文章主要給大家介紹了關(guān)于如何解決Docker Image鏡像無法刪除問題的方法,文中通過示例代碼將解決的方法介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • 基于docker的redis集群的搭建方式

    基于docker的redis集群的搭建方式

    這篇文章主要介紹了基于docker的redis集群的搭建方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11

最新評論