负载均衡指的是对请求数据包的转发,从负载均衡下面的节点服务器来看,接收到的请求还是来自访问负载均衡器
的客户端的真实用户,而反向代理服务器指的是接收到用户的请求后,会代理用户重新发起请求代理下的节点服务器,最后把数据返回给客户端用户,在节点服务器看来,范文的节点服务器的客户端用的就是反向代理服务器了,而非真实的网站访问用户。
Nginx http功能模块
ngx_nginx upstream 负载均和模块,可以实现网站的负载均衡功能及节点的健康检查
ngx_http_proxy_module Proxy模块,用于把请求后抛给服务器节点或upstream服务器池
Nginx的upstream支持5种分配方式。其中,前三种为Nginx原生支持的分配方式,后两种为第三方支持的分配方式:
1)rr轮询
轮询是upstream的默认分配方式,即每个请求按照时间顺序轮流分配到不同的后端服务器,如果某个后端
服务器down掉后,能自动剔除。按照1:1轮询。
upstream backend {
server 192.168.1.101:88;
server 192.168.1.102:88;
}
2)wrr轮询
轮询的加强版,即可以指定轮询比率,weight和访问几率成正比,主要应用于后端服务器异质的场景下。
upstream backend {
server 192.168.1.101 weight=1;
server 192.168.1.102 weight=2;
server 192.168.1.103 weight=3;
}
3)ip_hash (upstream_fair)
每个请求按照访问ip(即Nginx的前置服务器或者客户端IP)的hash结果分配,这样每个访客会固定访问
一个后端服务器,可以解决session一致问题。
upstream backend {
ip_hash;
server 192.168.1.101:81;
server 192.168.1.102:82;
server 192.168.1.103:83;
}
注:当使用ip_hash时,服务器状态不可使用weight和backup
4)fair (第三方的hash模块)
fair顾名思义,公平地按照后端服务器的响应时间(rt)来分配请求,响应时间短即rt小的后端服务器优
先分配请求。
upstream backend {
server 192.168.1.101;
server 192.168.1.102;
fair;
}
5)url_hash
与ip_hash类似,但是按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,主要应
用于后端服务器为缓存时的场景下。
upstream backend {
server 192.168.1.101;
server 192.168.1.102;
hash $request_uri;
hash_method crc32;
}
upstream支持的状态参数
down: 暂停对该服务器的调度
backup: 类似于LVS Sorry Server,当所有的非backup的服务器故障
max_fails: 请求失败的次数,默认为1
fail_timeout: 在经历max_fails次失败后,暂停服务的时间
[vip: 10.0.0.11]
[LB1 Nginx] [LB2 Nginx]
10.0.0.20 10.0.0.21
web1 web2 phpserver1 phpserver2
10.0.0.22 10.0.0.23 10.0.0.24 10.0.0.24
一、实施过程
后端服务器部署详细过程:
安装软件:
# yum install nginx php php-fpm -y
# vim /etc/nginx/nginx.conf //添加php配置
在server里面添加如下配置:
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
修改php-fpm进程账户并开启php-fpm的进程: 端口是9000
#vim /etc/php-fpm.d/www.conf //修改如下参数,默认值是apache
user = nginx
group = nginx
为什么设置成nginx:
因为nginx.conf配置的账户为nginx
# systemctl start php-fpm
前端nginx反向代理服务器:
upstream web {
server 10.0.0.22 weight=1 max_fails=2 fail_timeout=2;
server 10.0.0.23 max_fails=2 fail_timeout=5 down;
}
upstream phpserver {
server 10.0.0.24 backup;
server 10.0.0.25;
} #上面的配置写到http里面server外面
server {
listen 80;
server_name www.baidu.com;
location ~* \.html${ #html的配置
proxy_pass http://web;
}
location ~* \.php$ { #php的配置
proxy_pass http://phpserver;
proxy_set_header Host $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;
proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 256k;
}
}