目录
- Nginx负载均衡
- 1.Nginx负载均衡按层划分
- 1.2负载均衡按层划分应用场景:
- 1.2.1.四层负载均衡
- 1.2.2.七层负载均衡
- 2.Nginx负载均衡配置场景
- 3.Nginx upstream配置语法
- 4.环境规划实验7层
- 4.1.web1配置
- 4.2.web02配置
- 4.3.LB01 配置
- 4.4.验证
- 5.Nginx负载均衡后端服务器状态
- 测试案例:
- 6.Nginx负载均衡调度算法
- 7.配置四层负载均衡
Nginx负载均衡
web服务器,直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用WEB服务器集群,前端使用Nginx负载均衡,将请求分散到打到我们后端服务器集群中,实现负载均衡的分发。那么会大大提升系统的吞吐率,请求性能、高容灾。
LB load balance
SLB server lb
1.Nginx负载均衡按层划分
1.2负载均衡按层划分应用场景:
1.2.1.四层负载均衡
IP地址
TCP/UDP
端口号
1.2.2.七层负载均衡
HTTP
HTTPS
FTP
SMTP
2.Nginx负载均衡配置场景
Nginx实现负载均衡需要用到proxy_pass代理模块配置。
Nginx负载均衡是将客户端请求代理转发至一组upstream虚拟服务池
3.Nginx upstream配置语法
Syntax:upstream name {…}
Default:–
Context:http
//upstream 例子
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com:8080;
server unix:/tmp/backend3;
server backend1.example.com:8080 backup;
}
server {
location / {
proxy_pass http://backend;
}
}
4.环境规划实验7层
角色 | 外网 | 内网 | 主机名 |
LB1 | ens33:192.168.154.41 | ens32:172.168.20.12 | bl01 |
web1 | 192.168.154.132 | 172.168.20.6 | web01 |
web2 | 192.168.154.133 | 172.168.20.7 | web02 |
4.1.web1配置
[root@web01 www1]# echo "hellow 172.168.20.6" > index.html
[root@web01 www1]# cat /etc/nginx/conf.d/www1.conf
server {
listen 80;
server_name yan.www.com;
access_log /html/www1/log/access.log;
error_log /html/www1/log/error.log;
location / {
root /html/www1/;
index index.html;
}
}
[root@web01 www1]# systemctl reload nginx
4.2.web02配置
[root@web02 www1]# echo "hellow 172.168.20.7" > index.html
[root@web01 www1]# cat /etc/nginx/conf.d/www1.conf
server {
listen 80;
server_name yan.www.com;
access_log /html/www1/log/access.log;
error_log /html/www1/log/error.log;
location / {
root /html/www1/;
index index.html;
}
}
[root@web02 www1]# systemctl reload nginx
4.3.LB01 配置
[root@bl01 nginx]# cat proxy_params
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
[root@bl01 conf.d]# cat upstream.conf
upstream web { #创建及群组
server 172.168.20.6;
server 172.168.20.7;
}
server {
listen 80;
server_name yan.www.com;
location / {
proxy_pass http://web;
include proxy_params; #调用及群组
}
}
[root@bl01 conf.d]# systemctl restart nginx
4.4.验证
使用浏览器访问yan.www.com,然后不断刷新测试
5.Nginx负载均衡后端服务器状态
后端web服务器在前端Nginx负载调度器中的状态
状态 | 概述 |
down | 当前的server展示不参与负载均衡 |
backup | 预留的备份服务器 |
max_fails | 允许请求失败的次数 |
fail_timeout | 经过max_fails失败后,服务服务暂停时间 |
max_conns | 限制最大接受连接数 |
测试案例:
1.测试down状态,测试该server不参与负载均衡的调度
upstream load_pass {
server 172.168.20.6 down;
}
2.测试backup及down状态
upstream load_pass {
server 172.168.20.6 down;
server 172.168.20.7 backup;
server 172.168.20.6 max_fails=1 fail_timeout=2s;
}
location / {
proxy_pass http://load_pass;
include proxy_params;
}
3.测试max_fail失败次数和fail_timeout多少次则标记down
upstream load_pass {
server 172.168.20.6;
server 172.168.20.7 max_fail=2 fail_timeout=10s;
}
4.测试max_conns最大TCP连接数
upstream load_pass {
server 172.168.20.6;
server 172.168.20.7 max_conns=1;
}
6.Nginx负载均衡调度算法
调度算法 | 概述 |
轮询 | 按时间寻内需逐一分配后端服务器默认(rr) |
weight | 加权轮询,weight值越大,分配道德访问几率越高(wrr) |
ip_hash | 每个请求按访问ip的hash结果分配,这样来自同一个ip地址固定访问后端服务器 |
url_hash | 按照访问url的hash结果来分配请求,每个URL定向到同一个后端服务器 |
least_conn | 最少连接数,那个机器连接数最少就分发(lc) |
wlc | 加权最少连接 |
1.Nginx负载均衡【rr】轮询具体配置
upstream load_pass {
server 172.168.20.6;
server 172.168.20.7;
}
2.均衡【weight】权重轮询具体配置
upstream load_pass {
server 172.168.20.6 weight=5;
server 172.168.20.7;
}
3.Nginx股灾均衡ip_hash具体配置,不能和weight一起使用。
//如果客户端走相同代理,会导致某一台服务器连接过多
upstream load_pass {
ip_hash;
server 172.168.20.6;
server 172.168.20.7;
}
7.配置四层负载均衡
7.1修改主配置文件/etc/nginx/nginx.conf
[root@bl01 ~]# cat /etc/nginx/nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
#四层代理
include /etc/nginx/conf.c/*.conf; //添加代理目录
[root@bl01 ~]# mkdir /etc/nginx/conf.c //创建负载配置文件目录
[root@bl01 ~]# vim /etc/nginx/conf.c/lb.conf //配置四层负载文件
stream {
upstream ssh_web01 {
server 192.168.154.132:22;
}
upstream ssh_web02 {
server 192.168.154.133:22;
}
upstream mysql_01 {
server 192.168.154.135:3306;
}
server {
listen 5555;
proxy_pass ssh_web01;
proxy_connect_timeout 1s;
proxy_timeout 300s;
}
server {
listen 6666;
proxy_pass ssh_web01;
}
server {
listen 33061;
proxy_pass mysql_01;
}
}