原理:反向代理
作用
将请求分摊给多个目标,首先需要一个转发者,根据不同服务器的优良程度进行合理分配,保证所有服务器将性能发挥到极致,保证服务器集群的整体性能最优,这便是负载均衡的作用
详情
客户端通过反向代理发送请求,反向代理通过设置的某种负载均衡机制转发请求到目标服务器(这些服务器运行着相同的项目)把获得的内容返回给客户端,期间,代理请求根据配置被发往不同的服务器
流程
客户端发送请求
反向代理根据负载均衡机制转发请求到服务器
转发期间根据配置发往不同的服务器
在分配发往的服务器获得相应数据返回客户端
负载均衡算法
源地址哈希法(ip_hash):根据获取客户端的ip地址,通过哈希函数计算出一个数值,用该数值对服务器列表大小进行取模运算,得到结果便是客户端要访问的服务器序列号,通过源地址哈希法进行负载均衡,同一IP地址的客户端,当服务器列表不变时,每次映射同一服务器中进行访问
轮询法:将请求按照顺序轮流分配到服务器上,均衡对待每一台服务器,不关心服务器实际连接数和当前系统均衡
随机法:通过系统随机算法,根据服务器列表大小值来随机选取其中一台服务器进行访问
加权轮询法(weight):不同服务器配置和当前系统负载并不相同,抗压能力也不相同,给配置高、负载低的机器配置更高的权重,让其处理更多的请求,而配置低、负载高的机器,分配更少的权重,降低其系统负载,将请求顺序按照权重分配给不同的服务器
加权随机法:同加权轮询一样,根据服务器不同配置,不同的系统负载分配不同的权重,不同的是,加权随机是按照权重随机分配服务器
最小连接法:由于服务器的配置各不相同,对请求处理速度有快有慢,最小连接法根据服务器当前的连接情况,动态选取其中当前积压连接最少的一台服务器来处理当前请求,尽可能提升服务器的利用效率,将请求合理分配到每一台服务器
实现配置
#连接池的名称(ghost.com),绑定域名,访问域名进行不同权重值的分配
upstream ghost.com{
#绑定服务器,根据服务器优良性分配权值
#参数说明:ip,端口,分发策略
server 110.40.220.80:1000 weight=10;
server 220.40.110.80:1000 weight=20;
server 40.80.110.200:1000 weight=30;
}
server{
listen 80;
server_name ghost.com;
location / {
#连接池名称
proxy_pass http://ghost.com;
# 用户请求的时候HOST的值是dieqi.xyz, #那么代理服务会像后端传递请求的还是dieqi.xyz
proxy_set_header Host $host;
# 将$remote_addr的值放进变量X-Real-IP中,$remote_addr的值为客户端的ip
proxy_set_header X-Real-IP $remote_addr;
# 客户端通过代理服务访问后端服务, 后端服务通过该变量会记录真实客户端地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}