Nginx负载均衡-上部

2019-12-02 分类:Linux基础 阅读(296) 评论(0)

Nginx负载均衡

负载均衡的用处


Web服务器,直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用多台WEB服务器组成集群,前端使用Nginx负载均衡,将请求分散的打到我们的后端服务器集群中,实现负载的分发。那么会大大提升系统的吞吐率、请求性能、高容灾

什么是SLB


Nginx是一个典型的SLB(Server Load Balance)网络负载均衡器

负载均衡对比反向代理

反向代理  -> 仅能代理一台服务器
负载均衡  -> 可以代理(多台,集群)
proxy_pass      http协议
fastcgi_pass    fastcgi协议

负载均衡的名词

调度
前端
SLB  Server Load Balance
LB   Load Balance
SLB  阿里云
CLB  腾讯云
ULB  Ucloud

Nginx负载均衡按层划分

Nginx负载均衡按层划分【OSI】
负载均衡按层划分应用场景: 四层负载均衡 tcp/udp协议   只能转发 端口
负载均衡按层划分应用场景: 七层负载均衡, http协议      Nginx最常用

负载均衡按层划分应用场景: 四层负载均衡

负载均衡按层划分应用场景: 七层负载均衡, Nginx最常用

Nginx负载均衡配置场景


Nginx实现负载均衡需要用到proxy_pass代理模块配置.
Nginx负载均衡是将客户端请求代理转发至一组upstream虚拟服务池

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 backup1.example.com:8080   backup;
}
server {
location / {
proxy_pass http://backend;
}
}

配置内容

角色       外网IP(NAT) 内网IP(LAN)    主机名
LB01 eth0:10.0.0.5      eth1:172.16.1.5 lb01
web01 eth0:10.0.0.7 eth1:172.16.1.7   web01
web02 eth0:10.0.0.8 eth1:172.16.1.8 web02

web01操作如下:

[root@web01 ~]# cd /etc/nginx/conf.d/
[root@web01 conf.d]# cat node.conf
server {
listen 80;
server_name node.nfsnobody.com;
location / {
root /node;
index index.html;
}
}
[root@web01 conf.d]# mkdir /node
[root@web01 conf.d]# echo "Web01..." > /node/index.html
[root@web01 conf.d]# systemctl restart nginx
web02操作如下:
[root@web02 ~]# cd /etc/nginx/conf.d/
[root@web02 conf.d]# cat node.conf
server {
listen 80;
server_name node.nfsnobody.com;
location / {
root /node;
index index.html;
}
}
[root@web02 conf.d]# mkdir /node
[root@web02 conf.d]# echo "Web02..." > /node/index.html
[root@web02 conf.d]# systemctl restart nginx
lb01操作如下:
[root@lb01 ~]# cd /etc/nginx/conf.d/
[root@lb01 conf.d]# vim node_proxy.conf
[root@lb01 conf.d]# cat node_proxy.conf
upstream node {
server 172.16.1.7:80;
server 172.16.1.8:80;
}

server {
listen 80;
server_name node.nfsnobody.com;

location / {
proxy_pass http://node;
include proxy_params;
}
}
[root@lb01 conf.d]# systemctl restart ngin

Nginx负载均衡后端状态

状态         概述
down         当前的server暂时不参与负载均衡
backup         预留的备份服务器
max_fails     允许请求失败的次数
fail_timeout 经过max_fails失败后, 服务暂停时间
max_conns     限制最大的接收TCP连接数

1.测试down状态, 测试该Server不参与负载均衡的调度
upstream load_pass {
//不参与任何调度, 相当于注释
server 10.0.0.7:80 down;
}
2.测试backup以及down状态
upstream load_pass {
server 10.0.0.7:80;
server 10.0.0.8:80 backup;
}
3.测试max_fails失败次数和fail_timeout 多少时间内失败多少次则标记down
upstream load_pass {
server 10.0.0.7:80;
server 10.0.0.8:80 max_fails=2 fail_timeout=10s;
}
4.测试max_conns最大TCP连接数
upstream load_pass {
server 10.0.0.7:80;
server 10.0.0.8:80 max_conns=1;
}

Nginx调度策略

调度算法 概述
轮询     按时间顺序逐一分配到不同的后端服务器(默认)
weight     加权轮询,weight值越大,分配到的访问几率越高
ip_hash     每个请求按访问IP的hash结果分配,这样来自同一IP的固定访问一个后端服务器
url_hash 按照访问URL的hash结果来分配请求,是每个URL定向到同一个后端服务器
least_conn 最少链接数,那个机器链接数少就分发

1.加权轮询-->针对http请求
upstream node {
server 172.16.1.7:80 weight=5;
server 172.16.1.8:80;
}
2.Nginx负载均衡ip_hash具体配置, 不能和weight一起使用。
upstream node {
//如果客户端都走相同代理, 会导致某一台服务器连接过多
ip_hash;
server 172.16.1.7:80;
server 172.16.1.8:80;
}

Nginx负载均衡url_hash具体配置

upstream load_pass {
hash $request_uri;
server 192.168.56.11:8001;
server 192.168.56.11:8002;
server 192.168.56.11:8003;
}
//针对三台服务器添加相同文件
/soft/code1/url1.html url2.html url3.html
/soft/code2/url1.html url2.html url3.html
/soft/code3/url1.html url2.html url3.html

192.168.56.100/url1.html
ur1.html   》 192.168.56.11:8080 -> url1.html
ur1.html   》 192.168.56.11:8081 -> url1.html
ur1.html   》 192.168.56.11:8082 -> url1.html
示例:
upstream blog {
server 172.16.1.7:80 max_fails=2 fail_timeout=10s;
server 172.16.1.8:80 max_fails=2 fail_timeout=10s;
server 172.16.1.9:80 backup;
}

1.将能正常请求的blog\edu\zh的两台服务器,前端增加一个负载均衡
[root@lb01 conf.d]# cat proxy.conf
upstream php{
server 172.16.1.7:80;
server 172.16.1.8:80;
server 172.16.1.9:80;
}
server {
listen 80;
server_name blog.nfsnobody.com;
location / {
proxy_pass http://php;
include proxy_params;
}
}
server {
listen 80;
server_name edu.nfsnobody.com;
location / {
proxy_pass http://php;
include proxy_params;
}
}
server {
listen 80;
server_name zh.nfsnobody.com;
location / {
proxy_pass http://php;
include proxy_params;
}
}
标签:

您可能也喜欢:

Keepalived高可用

Keepalived高可用概述 什么是高可用 什么是高可用双击热备, 一般指2台机器启动着相同的业务系统,当有一台机器down机了, 另外一台服务器能快速的接管, 对于访问的用户是无感知的。 高可用使用场景 那么高可用使用在什么场景,业务系统需要保证7x24小时不...

more

Nginx负载均衡-下部

负载均衡相关 负载均衡 F5    硬件 LVS   软件 Haproxy  支持四层和七层 Nginx  仅支持7层 配置Nginx4层负载均衡 通过访问负载均衡的5555端口,实际是后端...

more

Nginx代理服务

Nginx代理服务概述 什么是代理 代理我们往往并不陌生, 该服务我们常常用到如(代理租房、代理收货等等) 那么在互联网请求里面, 客户端无法直接向服务端发起请求, 那么就需要用到代理服务, 来实现客户端和服务通信 Nginx作为代理服务可以实现很多的...

more

欢迎新朋友你的到来!
还没有人抢沙发呢~
昵称
邮箱
网站

切换注册

登录

忘记密码 ?

切换登录

注册