使用docker部署多个nginx站点并配置负载均衡 您所在的位置:网站首页 docker实现负载均衡 使用docker部署多个nginx站点并配置负载均衡

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

2024-02-28 01:34| 来源: 网络整理| 查看: 265

项目前端部署在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种策略及原理



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有