根据osi分四层负载均衡和七层负载均衡
四层:主要是在传输层,传输层能支持到tcp协议的控制,所以对客户端的请求只需要进行tcp/ip的包转发,就可以实现负载均衡
七层:主要是在应用层,可以实现http协议的改写,头信息的改写,安全应用规则的控制以及转发等的规则,nginx就是七层负载均衡的SLB
nginx负载均衡实现的原理:使用的是proxy_pass
把所有端的请求,代理转发到对应后端的服务器上,转发到一组小服务池,upstream server
配置语法:
必须是在http以内,server层以外
例子:
在/opt/app下面有三个文件夹 code1 code2 code3
在每个文件夹中都放了不同展示效果的页面
比如其中一个页面index.html
<html> <head> <meta charset="utf-8"> <title>server1</title> </head> <body style="background-color:yellow;"> <h1>server 1</h1> </body> </html>
在 /etc/nginx/conf.d/下建了三个conf server1.conf server2.conf server3.conf
比如其中一个conf中server1.conf
server{ listen 8001; server_name localhost; access_log /var/log/nginx/log/server1.access.log main; location /{ root /opt/app/code1; index index.html index.htm; }
server2.conf
server{ listen 8002; server_name localhost; access_log /var/log/nginx/log/server2.access.log main; location /{ root /opt/app/code2; index index.html index.htm; }
等
开始配置负载均衡
新建一个虚拟server 叫:upsream_test.conf
upstream imooc{ server 116.62.103.228:8001; server 116.62.103.228:8002; server 116.62.103.228:8003; } server{ listen 80; server_name localhost jeson.peak; access_log /var/log/nginx/test_proxy.access.log main; location /{ proxy_pass http://imooc; include proxy_params; } }
nginx -s reload -c /etc/nginx/nginx.conf
访问 jeson.peak就可以了 ,默认是轮询的状态
假设有一个服务挂掉
iptables -I INPUT -p tcp --dport 8002 -j DROP
用这个规则关掉8002之后
就不会显示对应的8002端口对应的页面了
清理规则 iptables -F
配置负载均衡调度中的状态
nginx的轮询策略与加权轮询
ip_hash是把相同请求转到同一台服务器
url_hash 是基于url负载均衡的方式