Nginx负载均衡
Nginx负载均衡
之前介绍过利用nginx搭建rtmp服务器,实现rtsp转流与rtmp/hls拉流;也介绍过反向代理神器Nginx Proxy Manager,通过可视化界面实现反向代理和https配置。
此篇介绍nginx另一大功能:负载均衡
负载均衡
Nginx
具有占有内存少,并发能力强等优点,非常适合用来做负载均衡服务,负载均衡*(Load Balance
)*其意思就是将工作分摊到不同的服务器上,从而提高了系统的反应速度与总体性能等,解决互联网系统的高并发和高可用的问题。
部署Nginx
有两种简单的方式安装nginx
常规安装
- CentOS
# 配置EPEL源
sudo yum install -y epel-release
sudo yum -y update
# 安装
sudo yum install -y nginx
# 启动
service nginx start
- MacOS
# 安装
brew install nginx
# 启动
nginx -s start
- 配置文件
- 默认配置文件:
- linux:
/etc/nginx/nginx.conf
- mac:
/usr/local/etc/nginx/nginx.conf
- linux:
- 自定义配置文件:
/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;
}
}
}
Nginx
的 upstream
模块主要支持以下五种分配方式:
- 轮询(默认)
upstream backend-server {
server app-server1:80;
server app-server2:80;
server app-server3:80;
}
- weight
负载均衡服务器会以一定权重将请求转发到3台服务器
upstream backend-server {
server app-server1:80;
server app-server2:80 weight=2;
server app-server3:80 weight=3;
}
- ip_hash
根据每个请求IP地址的Hash结果进行分配,使得每个访客会固定访问同一台服务器
upstream backend-server {
ip_hash;
server app-server1:80;
server app-server2:80;
server app-server3:80;
}
- fair
根据后端服务器响应时间来分配,响应时间越短越优先
upstream backend-server {
server app-server1:80;
server app-server2:80;
server app-server3:80;
fair;
}
- 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)负载均衡策略;
Stream
和HTTP
在 nginx.conf 同级
- 最少连接负载均衡策略
在后端被代理服务器性能不均时,在考虑上游服务器组中各服务器权重的前提下,将客户端连接分配给活跃连接最少的被代理服务器,从而有效提高处理性能高的被代理服务器的使用率
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;
}
}
- 一致性哈希负载均衡策略
哈希负载均衡策略通过指令参数 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;
}
}
参考
文章标题:Nginx负载均衡
文章链接:http://120.46.217.131:82/archives/62/
最后编辑:2023 年 3 月 21 日 22:06 By Yang
许可协议: 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)