负载均衡
GSLB(全局的负载均衡,往往是以国家为单位,或者以省为单位)
SLB
Nginx就是一个典型的SLB模型,
分为四层负载均衡和七层负载均衡
七层负载均衡可以处理应用层,如thhp信息,Nginx就是典型的七层负载均衡SLB
Nginx实现负载均衡的原理
配置语法
配置语法:upstream name {...};
默认状态:-;
配置方法:http
在/opt/app/下创建code1、code2、code3目录,并放入3个html
在/etc/nginx/conf.d/下准备好三个conf
检查配置语法并重载
nginx -tc /etc/nginx/nginx.conf
nginx -s reload -c /etc/nginx/nginx.conf
在另一台服务器上配置一个conf
每次请求都会不一样,且轮流分配(轮询),此时如果有一台机器挂了,如server2挂了,那么则会在server1和server3之间不断轮询,不再访问server2
upstream举例
upstream backend{
server backend1.example.com weight=5;
server backend1.example.com:8080;
server unix:/tmp/backen3;
server backup1.example.com:8080 backup;
server backup2.example.com:8080 backup;
}
后端服务器在负载均衡调度中的状态
不管如何刷新都只有server3提供服务,即8001和8002不服务
把访问8003的请求drop掉:iptables -I INPUT -p tcp --dport 8003 -j DROP
服务端会把请求转到server2上,后面不管怎么刷新,都会访问server2
清理掉iptable规则再访问:iptables -F
又变回server3,且一直是server3
轮询策略与加权轮询
调度算法
加权轮询:以下配置为,当有7个请求过来的时候,会有5和请求分配给8002
ip_hash:同一个IP永远只访问一个后端,解决身份验证失效的问题
不管怎么刷新,都只定位到一台服务器上
url_hash(1.7.2之后的版本支持):
配置语法:hash key [consistent];
默认状态:-;
配置方法:upstream
此时不会执行轮询,访问哪一个url,hash绑定到一个后端服务后,就永远只访问那一台机器