Nginx负载均衡

  5 分钟   7635 字    |    

Nginx负载均衡

之前介绍过利用nginx搭建rtmp服务器,实现rtsp转流与rtmp/hls拉流;也介绍过反向代理神器Nginx Proxy Manager,通过可视化界面实现反向代理和https配置。

此篇介绍nginx另一大功能:负载均衡

负载均衡

Nginx 具有占有内存少,并发能力强等优点,非常适合用来做负载均衡服务,负载均衡*(Load Balance)*其意思就是将工作分摊到不同的服务器上,从而提高了系统的反应速度与总体性能等,解决互联网系统的高并发和高可用的问题。

部署Nginx

有两种简单的方式安装nginx

常规安装

  1. CentOS
# 配置EPEL源
sudo yum install -y epel-release
sudo yum -y update
# 安装
sudo yum install -y nginx
# 启动
service nginx start 
  1. MacOS
# 安装
brew install nginx
# 启动
nginx -s start
  1. 配置文件
  • 默认配置文件:
    • linux:/etc/nginx/nginx.conf
    • mac:/usr/local/etc/nginx/nginx.conf
  • 自定义配置文件:/etc/nginx/conf.d/
  • 静态文件:/usr/share/nginx/html/index.html

Docker部署

# 快速启动,要监听多个端口,需要-p 80:80 换成 --net host
docker run -p 80:80 --name nginx -itd nginx:alpine
# 配置启动,首先要在宿主机nginx文件夹下存在从别处拷贝过来nginx.conf 文件
docker run -d --name nginx --restart always --net host -v $HOME/docker_data/nginx/nginx.conf:/etc/nginx/nginx.conf -v $HOME/docker_data/nginx/html:/usr/share/nginx/html -v $HOME/docker_data/nginx/logs:/var/log/nginx nginx:alpine
用docker启动nginx,需考虑端口映射的问题,-p 代表向外暴露的端口,nginx配置文件中也只能监听这些端口,--net host代表暴露所有端口

可视化配置

Nginx Proxy Manager更多的是可视化配置反向代理,nginxWebUI能够可视化配置负载均衡

docker run -itd -v /home/nginxWebUI:/home/nginxWebUI -e BOOT_OPTIONS="--server.port=8080" --privileged=true --net=host cym1102/nginxwebui:latest

七层负载均衡

七层负载均衡,即在应用层HTTP协议层面,对HTTP请求作负载均衡

nginx.conf

user  nginx;
worker_processes  auto;

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

events {
    worker_connections  10240;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    keepalive_timeout  65;
    #负载均衡;
    upstream backend-server {
        server server1:80;
        server server2:80;
        server server3:80;
    }
    server {
      server_name localhost;
      # 监听80端口
      listen 80 ;
      access_log /var/log/nginx/access.log;
      # 启用自定义负载均衡
      location / {
        proxy_pass http://backend-server;
      }
    }
}

Nginxupstream 模块主要支持以下五种分配方式:

  1. 轮询(默认)
upstream backend-server {
    server app-server1:80;
    server app-server2:80;
    server app-server3:80;
}
  1. weight

负载均衡服务器会以一定权重将请求转发到3台服务器

upstream backend-server {
    server app-server1:80;
    server app-server2:80 weight=2;
    server app-server3:80 weight=3;
}
  1. ip_hash

根据每个请求IP地址的Hash结果进行分配,使得每个访客会固定访问同一台服务器

upstream backend-server {
    ip_hash;
    server app-server1:80;
    server app-server2:80;
    server app-server3:80;
}
  1. fair

根据后端服务器响应时间来分配,响应时间越短越优先

upstream backend-server {
    server app-server1:80;
    server app-server2:80;
    server app-server3:80;
    fair;
}
  1. url_hash

根据访问url的hash结果来分配请求,使得每个url会固定访问同一台服务器

upstream backend-server {
    server app-server1:80;
    server app-server2:80;
    server app-server3:80;
    hash $request_uri;    hash_method crc32;
}

四层负载均衡

四层负载均衡,即在传输层TCP/UDP协议层面,对TCP/UDP请求作负载均衡

nginx.conf

stream {
    upstream backend {
        server app-server1:8080 weight=5;
        server app-server2:8080 weight=1;
        server app-server3:8080 weight=1;
    }

    server {
        listen 8080;
        proxy_pass backend;
    }
}

Nginx 的 Stream 上游模块支持与 Nginx HTTP 上游模块一致的轮询(Round Robin)、哈希(Hash)及最少连接数(least_conn)负载均衡策略;

StreamHTTPnginx.conf 同级
  1. 最少连接负载均衡策略

在后端被代理服务器性能不均时,在考虑上游服务器组中各服务器权重的前提下,将客户端连接分配给活跃连接最少的被代理服务器,从而有效提高处理性能高的被代理服务器的使用率

stream {
    upstream backend {
        least_conn;
        server app-server1:8080 weight=5;
        server app-server2:8080 weight=1;
        server app-server3:8080 weight=1;
    }

    server {
        listen 8080;
        proxy_pass backend;
    }
}
  1. 一致性哈希负载均衡策略

哈希负载均衡策略通过指令参数 consistent 设定是否开启一致性哈希负载均衡策略。Nginx 的一致性哈希负载均衡策略是采用 Ketama 一致性哈希算法,当后端服务器组中的服务器数量变化时,只会影响少部分客户端的请求。

stream {
    upstream backend {
        hash $remote_addr consistent;
        server app-server1:8080 weight=5;
        server app-server2:8080 weight=1;
        server app-server3:8080 weight=1;
    }

    server {
        listen 8080;
        proxy_pass backend;
    }
}

参考

  1. https://juejin.cn/post/6885618130471780366
  2. https://m.w3schools.cn/nginx/nginx_upstream_tcp.html
~  ~  The   End  ~  ~


 赏 
感谢您的支持,我会继续努力哒!
支付宝收款码
tips
文章二维码 分类标签:技术nginx
文章标题:Nginx负载均衡
文章链接:http://120.46.217.131:82/archives/62/
最后编辑:2023 年 3 月 21 日 22:06 By Yang
许可协议: 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
(*) 7 + 8 =
快来做第一个评论的人吧~