使用docker部署多个nginx站点并配置负载均衡

news2025/1/11 18:38:10

项目前端部署在docker。该前端有时会出现无法访问,重启docker容器后又可以。猜测是不是单个docker容器压力过大,就想引入负载均衡试试效果。

一、负载均衡的好处

负载均衡跟集群结合效果才好,docker容器分布于不同的服务器。但我们没有这个条件。不过,同一份程序,多部署几个docker容器,我猜测多少会有点好处:
1)减少单点故障风险
2)如果docker容器有连接数限制,则多个容器可以减轻压力
3)减轻单个容器运算压力

二、部署

1、部署结构

部署3个docker容器,一个负责转发,做负载均衡服务器;其余两个是应用的前端。负载均衡服务器会根据一定的规则将用户请求分摊到每个前端头上。
在这里插入图片描述

2、创建负载均衡的docker容器

为方便更新,创建容器时采用挂载宿主机文件夹的方式。从脚本可知,外置了nginx的配置文件,日志。

sudo docker run --name nginx-szdata-lb --privileged -it -p 80:80 \
-v /home/admin/szdata/nginx/conf/lb.conf:/etc/nginx/nginx.conf:ro \
-v /home/admin/szdata/nginx/conf/conf.d:/etc/nginx/conf.d:ro \
-v /home/admin/szdata/nginx/logs:/var/log/nginx \
-d nginx

3、创建应用前端的docker容器

类似地,有:
1)应用1

sudo docker run --name nginx-szdata-web1 --privileged -it -p 8001:80 \
-v /home/admin/szdata/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro \
-v /home/admin/szdata/nginx/conf/conf.d:/etc/nginx/conf.d:ro \
-v /home/admin/szdata/web:/usr/share/nginx/html:rw \
-v /home/admin/szdata/nginx/logs:/var/log/nginx \
-d nginx

2)应用2

sudo docker run --name nginx-szdata-web2 --privileged -it -p 8002:80 \
-v /home/admin/szdata/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro \
-v /home/admin/szdata/nginx/conf/conf.d:/etc/nginx/conf.d:ro \
-v /home/admin/szdata/web:/usr/share/nginx/html:rw \
-v /home/admin/szdata/nginx/logs:/var/log/nginx \
-d nginx

可见应用1和应用2都使用了同一份程序代码。

三、配置

1、配置文件概况

lb.conf,负载均衡服务器配置;nginx.conf,应用的配置。
在这里插入图片描述
conf.d/default.conf是一份公共配置。每个nginx容器如果想使用这份公共配置的话,引入就好。当然也可以不用。

include /etc/nginx/conf.d/*.conf;

在这里插入图片描述

2、负载均衡服务器的配置

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/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  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

	# 以下内容是重点
    upstream szdata-web{
	   server 192.168.175.128:8001;
	   server 192.168.175.128:8002;
    }
    server {
        listen       80;
        listen  [::]:80;
        server_name  localhost;    
    	
        location / {
    	  proxy_pass http://szdata-web;
    	}
    }
}

szdata-web,自己起的名字。

3、应用的配置

1)nginx.conf

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/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  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;

}

2)conf.d/default.conf

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #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   /usr/share/nginx/html;
    }
}

四、conf.d

如上所述,conf.d/default.conf是公共配置片段,里面内容只有一个“server”。我有时装的nginx,有这个东东,有时又没有。也没啥,知道是公共片段,用作引用就好。不引用,无非就多写点冗余代码而已。

五、docker部署nginx的优越性
采用docker部署nginx,实在方便,启动、停止,都很爽。如果直接跑在操作系统下,想停止、重启就麻烦了,需要杀掉相关进程。

不过,要结合挂载方式才能体现该优越性。否则配置文件也跟着删掉。

nginx负载均衡的5种策略及原理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/602168.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue.js 中的 Vuex 是什么?如何使用 Vuex?

Vue.js 中的 Vuex 是什么?如何使用 Vuex? 在 Vue.js 中,Vuex 是一种状态管理模式。它可以帮助我们在应用程序中管理共享状态,使得我们的代码更加可维护和可扩展。本文将深入探讨 Vuex 的概念和使用方法,并提供一些相关…

基于DAC0832的信号发生器设计与实现(源码+原理图+PCB)

摘要: 本课题设计了一个基于DAC0832的信号发生器,使之输出不同频率的正弦波、三角波、锯齿波和方波,并通过按键切换不同的波形,也可以改变频率以及频率变化的步进。本方案选择了DAC0832作为核心芯片,并与51单片机结合…

nginx系统优化

nginx系统优化 一:隐藏nginx版本号 方法一:修改配置文件 vim /usr/local/nginx/conf/nginx.confnginx -t systemctl restart nginx curl -I http://192.168.52.108方法二:修改源代码 vim /opt/nginx-1.24.0/src/core/nginx.h ##配置文件里…

Redis面试-高频常考30题(面试突击,建议收藏)

1.BigKey问题,多大算big?你如何发现?如何删除?如何处理? 关于bigkey的面试题,已经在博客 Redis7实战加面试题-高阶篇(Redis线程与IO多路复用,BigKey,缓存双写) 里详细说明 2.手机登录某App&#xff0…

接口测试用例怎么写?一文1600字教你写一个优秀的接口测试的测试用例

一、用例设计1 1、接口测试概念 接口测试:测试系统间接口的一种测试,测试的对象主要是接口,主要是测试外部系统与所测系统之间以及内部系统之间的交互点 2、接口测试方法 a、可以通过开发脚本代码进行测试 b、可以通过开源免费的接口调用…

使用HHDBCS的SSH通道登陆数据库

传统远程登录或文件传输方式,例如Telnet、FTP,使用明文传输数据,存在很多的安全隐患。 随着人们对网络安全的重视,SSH协议已经越来越被用户所青睐。 SSH协议通过对网络数据进行加密和验证,在不安全的网络环境中提供了…

Spring Cloud Alibaba 快速上手搭建公司项目(三)GateWay

Gateway是Spring Cloud生态系统中的一个组件,它是一个基于Spring Cloud Gateway的API网关。它提供了一种简单、快速和可扩展的方式来管理微服务之间的请求流量。 它是一个轻量级的API网关,它可以轻松地与Spring Cloud集成,并提供了一些高级功…

你是外包,麻烦不要偷吃零食,注意素质..

我自己没经历过外包,靠自己的所见所闻可能写出来的东西会很主观,所幸我有不少外包的读者,还有几个在外包工作或工作过的朋友,在跟她们深度交流之后,这这里聊一下我自己的一些看法。 注:本文不代表所有外包公…

libtorch教程(一)开发环境搭建:VS+libtorch和Qt+libtorch

前言 事实上,在前面的pytorch部署博客和libtorch的QT部署中笔者已经分享了自己搭建libtorch开发环境的记录。其余并无太多要赘述的。 本教程禁止转载。同时,本教程来自知识星球【CV技术指南】更多技术教程,可加入星球学习。 Transformer、目…

苹果CMS仿T5资源站影视资源分享网站模板

简介: 苹果cms仿T5资源站影视资源分享网站模板,包括首页、详情页、留言页、和播放弹窗!适合拿去做资源站! 云盘地址: http://zijieyunpan.cn/eF3crCQyWVO 演示:

Android Input子系统 - PhoneWindowManager

基本概念 PhoneWindowManager也是运行于systemserver线程中,在Event事件分发之前处理,比如电源键。Event事件分发后,仅有包含Activity的apk线程才可以处理,如果apk中没有activity但是想处理Event事件怎么办呢?可以在PhoneWindowManager做做文章了。 在SystemServer中, inputM…

数影周报:免费VPN泄露3.6亿条数据,句子互动获数百万美融资

本周看点:免费VPN泄露3.6亿条用户数据;推特信任与安全主管宣布辞职;宣亚国际宣布推出OrangeGPT;亚马逊日本将在关东地区开设两个新物流中心;句子互动完成数百万美元Pre-A轮融资...... 数据安全那些事 免费VPN泄露3.6亿…

黑客松必备|Bear Necessities Hackathon赞助商Workshop汇总

由Moonbeam和AWS Startups联合主办的Bear Necessities Hackathon黑客松启动仪式于5月30日举行。本次黑客松将历时约1个月的时间,包含6个挑战,分别由Moonbeam基金会、Chainlink、StellaSwap、SubQuery、Biconomy提供赞助,总奖池超过5万美金。了…

requests做接口测试

Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。Requests 的哲学是以 PEP 20 的习语为中心开发的,所以它…

【linux 脚本篇】流程控制语句-case

目录 🍁案例一:菜单选项 🍂if语句执行 🍂case语句执行 🍁案例二:rsync服务脚本 🍂if语句执行 🍂case语句执行 🍁案例三:nginx服务脚本 🍁案例四&a…

【收藏】FP独立站建站安心收款经验分享

前几天有个客户咨询我,跟我说了他的疑问。他是在阿里巴巴国际站上面做鞋服,但看到同行在独立站上铺fp,所以他想问问:怎么建立一个独立站并在上面成功推出fp呢?今天,我就来跟有类似诉求的朋友们分享一下&…

企业邮箱保密性评测揭晓:哪个流行的企业邮箱保密性更高?

大多数流行的电子邮件提供商都没有为您的电子邮件提供足够的保护,这已不是什么秘密。在这里我们将了解流行的电子邮件提供商使用的不同类型的加密,以及您如何选择满足您的隐私需求的企业邮箱最佳提供商。 一、谷歌邮箱 默认情况下,Gmail使用T…

element-ui更改单元格字体颜色

作者创建的项目为vue3ts,写法上有些需要注意的点: 如果script 标签使用了 setup,这个时候 export 是没有必要的,也就是使用了setup 后,就不要再写 export 了,不然会报错“A default export must be at the…

(通用0bug)纯原生实现一个类似浏览器搜索功能(ctrl + f)

如果可以实现记得点赞分享,谢谢老铁~ 一、问题的描述 由于公司业务需要在搜索框中,模拟Ctrl F 的搜索功能,支持自选可搜索区域范围,且支持回车查看下一个,上下查看,自动滚动定位,…

OpenAI新作,直指DeepMind格局小了!大模型复杂推理应逐步验证

作者 | Python、Zenmoore 谷歌旗下的DeepMind,因AlphaGo而名声大振;而推出ChatGPT的OpenAI,近日更是如日中天。 然而,OpenAI公开了一篇论文[1],结论同DeepMind去年11月的工作[2]完全相反。在对比差异时,论…