前言
之前写过LVS集群的实现方式,虽然LVS的性能非常的高;但是LVS是工作在传输层
的,对于应用层是无能为力的,例如:web环境需要使用https,这次后端服务器全部都要配置ssl证书;且LVS没有健康检测功能,需要借助其他方式进行健康检测。
Nginx不单单可以做一个web服务,它还可以做缓存服务器,负载均衡等;由于工作在应用层,它的并发量低于LVS;同时自身也具有较为优秀I/O复用:epoll
的并发能力;因为它的I/O模型为以下几种:
noblocking #异步
asynchronus #非阻塞
signal driven #事件驱动机制
nginx实现负载均衡的主要模块:
ngx_http_proxy_module
ngx_http_upstream_module
一、环境准备
一共需要三台虚拟机进行模拟
拓扑图如下:
反向代理服务:
PIP:172.16.10.100 #桥接 LIP:192.168.0.1 #接口为vmnet2
UpStream-1:
UIP:192.168.0.2 #接口为vmnet2
UpStream-2
UIP:192.168.0.3 #接口为vmnet2
分别在两个上游服务器启动httpd服务,分别提供不同的内容
上游服务-1:Httpd Server-1 上游服务-2:Httpd Server-2
二、编辑配置文件
(1).定义上游服务集群,只能在http
配置端加入集群
server address [parameters];
upstream upservers { server 192.168.0.2 max_fails=2 fail_timeout=1s; server 192.168.0.3 max_fails=2 fail_timeout=1s; }
upservers: #上面的upservers字段为集群的组名,可自定义
ip_hash; #为源地址hash,可用于session保持;定义在upstream中;
其中常用的
parameters
如下:
weight=number #定义权重
max_fails=number #当上游服务器健康检测失败次数达到"number",就下线该"Server";
fail_timeout= #健康检测的超时时长
down #手动下线标记,可用于升级上游服务器时使用
backup #备份主机标记,表示主服务器正常时该主机不启用,一旦主服务下线就调度至该主机
(2).配置Server
段
location / {
proxy_pass http://upservers;
#http://集群组名
proxy_set_header Host $host;
#自定义头,名称为Host,值为$host(客户端请求的HOST)
proxy_set_header X-Real-IP $remote_addr;
#自定义头,名称为X-Real-IP,值为$remote_addrt(客户端IP)
}
修改上游服务器,使其记录真实客户端IP。本次测试上游服务为httpd
服务。日志记录修改如下:
vim /etc/httpd/conf/httpd.conf
原有的:LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 修改为:LogFormat "%{X-Real-IP}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
三、测试
客户端此时访问Proxy Server
,将会轮询调度
nginx反向代理时缓存的配置
<center>END</center>