Nginx集群的负载均衡(7层)

nginx负载均衡(HTTP Load Balancing)

网络拓扑图

1.准备四台Centos 7系统
2.使用ansible在四台系统上分别安装nginx

3.配置各机器ip,然后重启network服务
本人使用的linux虚拟机的网卡模式均为:NAT

vim /etc/sysconfig/network-scripts/ifcfg-ens33

nignx_LB
nignx_server1
nginx_server2
nignx_server3

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的排错方法
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的记录。

  1. 负载均衡器上的配置
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;
        }


}  
  1. 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是我们的反代服务器
  1. 查看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)
在路由器配置等价路由

参考资料:
nginx负载均衡官方文档参考
$remote_addr与X-Forwarded-For的具体使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值