Docker部署tenine實現(xiàn)后端應用的高可用與負載均衡(推薦)
采用Docker方式的Tengine 和 keepalived 組合模式可以實現(xiàn)小應用場景的高可用負載均衡需求
網(wǎng)絡架構

一、環(huán)境準備
兩臺物理主機: 22.04.3-Ubuntu Linux
Docker版本:24.0.9
3個IP地址 192.168.30.191 192.168.30.192 192.168.30.190(作為虛擬IP)
二、軟件安裝
兩臺機器上都執(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ù)各自應用需要創(chuàng)建鏡像
三、軟件配置
兩臺機器上都執(zhí)行
1. 創(chuàng)建應用容器
假設 SpringBoot 各物理主機上創(chuàng)建了,SpringBoot端口為 9166
2. 代理訪問應用
使用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;
# 當設置為 on 時,Nginx 會在發(fā)送響應時,盡量將數(shù)據(jù)合并成一個大的 TCP 數(shù)據(jù)包進行發(fā)送。這可以減少 TCP 包的數(shù)量,從而提高網(wǎng)絡傳輸效率,尤其是在發(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代理的所有請求實體的大小限制為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";
}
}
}有關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應用有安全攔截(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
在 兩臺主機上 創(chuàng)建必要映射目錄
mkdir -p /apps/keepalived
在主機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
}
}在主機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 腳本結果導致的優(yōu)先級變更,檢測失?。_本返回非0)則優(yōu)先級減5
fall 2 #檢測連續(xù)2次失敗才算確定是真失敗。會用weight減少優(yōu)先級(1-255之間) 默認值為 3
rise 1 #檢測1次成功就算成功。但不修改優(yōu)先級 默認值為 2
interface 當前節(jié)點服務器的網(wǎng)卡名稱
priority 優(yōu)先級,每一個節(jié)點上不一樣
virtual_ipaddress 虛擬ip
virtual_router_id 共享相同虛擬IP的節(jié)點上該參數(shù)值必須一樣 ,
keepalived可以代理多個虛擬IP,每一個虛擬IP對應的virtual_router_id值不可一樣。
state 指定當前keepalived的初始狀態(tài),這個可用是 MASTER 或者 BACKUP ,如果是BACKUP 則作為從節(jié)點,但是這個值會根據(jù)監(jiān)控腳本運行狀態(tài)改變優(yōu)先級從而導致狀MASTER /BACKUP 態(tài)切換
三臺主機上執(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 是指當前節(jié)點服務器的網(wǎng)卡名稱,如果不想開啟debug模式去掉–loglevel debug
4. 測試高可用
兩臺都啟動了keepalived后,目前 192.168.30.190 IP應該是綁定在 191 這臺物理主機上,
可以 瀏覽器訪問 http://192.168.30.190/nginx_check_status 可以看到如下頁面顯示:

192.168.30.190 是 keepalived的虛擬IP, 然后可以訪問SpringBoot應用接口看下是否負載均衡了
關閉 191上面的SpringBoot 看下 訪問情況
關閉 191 上面的 Tengine 看下 訪問情況
到此這篇關于Docker部署tenine實現(xiàn)后端應用的高可用與負載均衡的文章就介紹到這了,更多相關Docker部署tenine內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- docker安裝nginx實現(xiàn)對springboot項目的負載均衡的操作方法
- docker swam集群如何實現(xiàn)負載均衡
- Docker安裝Nacos容器并根據(jù)Nginx實現(xiàn)負載均衡
- docker搭建nginx實現(xiàn)負載均衡的示例代碼
- 基于Docker部署Tomcat集群、 Nginx負載均衡的問題小結
- docker swarm外部驗證負載均衡時不生效的解決方案
- Docker Nginx容器和Tomcat容器實現(xiàn)負載均衡與動靜分離操作
- 使用Docker Compose 實現(xiàn)nginx負載均衡的方法步驟
- 詳解Docker Swarm服務發(fā)現(xiàn)和負載均衡原理
- 詳解利用nginx和docker實現(xiàn)一個簡易的負載均衡
相關文章
docker-compose快速搭建docker私有倉庫的步驟
這篇文章主要介紹了docker-compose快速搭建docker私有倉庫的步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-12-12
數(shù)據(jù)卷(Data Volumes)及dockefile詳解
在生產(chǎn)環(huán)境中使用Docker,往往需要對數(shù)據(jù)進行持久化,或者需要在多個容器之間進行數(shù)據(jù)共享,這必然涉及容器的數(shù)據(jù)管理操作,今天給大家介紹下數(shù)據(jù)卷(Data Volumes)及dockefile的相關知識,感興趣的朋友一起看看吧2023-01-01
docker創(chuàng)建中間件環(huán)境的實現(xiàn)步驟
本文主要介紹了docker創(chuàng)建中間件環(huán)境的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2025-08-08
云原生自動化應用于docker倉庫私有憑據(jù)secret創(chuàng)建
這篇文章主要為大家介紹了云原生自動化應用于docker倉庫私有憑據(jù)secret創(chuàng)建,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-03-03
一臺虛擬機基于docker搭建大數(shù)據(jù)HDP集群的思路詳解
這篇文章主要介紹了一臺虛擬機基于docker搭建大數(shù)據(jù)HDP集群?,本篇文章主要講了大數(shù)據(jù)集群搭建的架構設計和實現(xiàn)思路部分,后面文章會探討上層應用的構建,需要的朋友可以參考下2022-11-11
docker中搭建overlay 網(wǎng)絡實驗環(huán)境
這篇文章主要介紹了docker中搭建overlay 網(wǎng)絡實驗環(huán)境的相關資料,需要的朋友可以參考下2017-08-08

