nginx负载均衡(HTTP Load Balancing)
1.准备四台Centos 7系统
2.使用ansible在四台系统上分别安装nginx
3.配置各机器ip,然后重启network服务
本人使用的linux虚拟机的网卡模式均为:NAT
vim /etc/sysconfig/network-scripts/ifcfg-ens33
systemctl restart network //重启服务,使用修改的配置文件生效
4.修改配置启用负载均衡
vim /usr/local/nginx/conf/nginx.conf
5.检查配置文件是否存在语法错误,分别启动各个机器上的nginx服务
nginx -t //检查语法错误
systemctl start nginx //启动nginx服务
systemctl enable nginx //设置nginx服务开机自启动
6.访问LB的网址,反复刷新是否实现负载均衡(默认轮询round robin)
注意:nginx存在forbidden的排错方法
1.查看iptables规则链,查看是否有阻止访问的规则
iptables -F //清空iptables的规则链
2.查看selinux是否关闭
setenforce 0 //暂时关闭selinux
3.查看访问的页面权限,是否更改过umask值,导致页面没访问权限
umask //查看umask值
chmod 555 index.html
4.还未解决具体看error.log日志进行排错
tail -f /usr/local/nginx/logs/access.log //实时监控nginx产生的日志
realip模块的使用(获取nginx上游真实ip)
下图是日志记录的格式
查看访问日志,发现remote_addr为LB的ip,并不是真实客户端的的ip
FullNat用户访问的请求包目的ip与源ip都发生替换,nginx服务器日志中记录的访问信息源ip为负载均衡器的ip,网络层无法存储真实客户机ip,所以只能通过应用层记录RIP,通过在HTTP请求报文中添加相应字段记录真实ip,并在backand服务器中访问字段中的真实ip,从而可以实现对真实ip的记录。
- 负载均衡器上的配置
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
proxy_pass http://my_nginx_lb;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
}
- nginx server上的配置
location / {
root /usr/share/nginx/html/;
index index.html;
set_real_ip_from 192.168.44.138;
real_ip_header X-Real-IP;
}
set_real_ip_from指令是告诉nginx,192.168.44.138是我们的反代服务器
- 查看nginx server访问日志中是否有真实服务器的ip
注意:
`proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for;`
X-Forwarded-For往往使用在多层代理的情况,proxy_add_x_forwarded_for变量中保存的是客户端请求头的X-Forwarded-For与remote_addr两部分,这两部分通过逗号连接,每次使用上面语句
都相当于在客户端请求头中的X-Forwarded-For增加(并没有覆盖)proxy_add_x_forwarded_for中保存的信息,所以X-Forwarded-For相当于一个链路反追踪。
proxy_set_header X-Real-IP $remote_addr;
remote_addr 只能获取到与服务器本身直连的上层请求ip,所以设置$remote_addr一般都是设置在第一个代理上面;
六种负载均衡调度算法
1.round-robin
按顺序轮询,可以添加权重weight
2.least-conneted
优先使用连接数较少的nginx服务器,均衡分配访问压力
3.ip-hash
以网页购物车为例,如果用户同时打开多个连接添加不同的商品,由于使用负载均衡器,同一个用户的请求可能会访问到不同的backand nginx
server,nginx保存用户session时,会导致同一个用户的session信息在不同的nginx
server信息不一致,为了保证session的一致性,需保证同一个用户ip访问同一台nginx
server,使用ip-hash可以通过hash算法计算用户ip产生的固定编号,使同一个用户ip每次访问,LB都会将其交给同一台nginx
server服务器处理。
4.generic-hash
ip-hash是基于ip计算hash值,nginx同时也支持基于url的hash功能,可通过使用generic-hash功能。
5.least-time
需购买nginx plus
6.random
四层负载均衡
根据端口号进行转发
三层负载均衡(nginx中无)
通过路由实现的负载均衡(ospf)
在路由器配置等价路由