负载均衡

[toc]

负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

语法配置

upstream uuclass {
    server 192.168.205.10:80 weight=2;
    server 192.168.205.11:80 weight=4;
}
server {
    listen      81;
    server_name localhost;
    location / {
        proxy_pass http://uuclass;
        include proxy_params;
    }
}

在线演示

可选参数调度状态

参数 说明
down 当前的server暂时不参与负载均衡
backup 预留的备份服务器
max_fails 允许请求失败的次数
fail_timeout 经过max_fails失败后,服务暂停的时间
max_conns 限制最大的接收连接数

调度算法

调度算法 说明
轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务,如果后端某台服务器死机,自动剔除故障系统,使用户访问不受影响。
weight(加权轮询) weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。或者仅仅为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。
ip_hash 每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题。
url_hash 按访问的URL的哈希结果来分配请求,使每个URL定向到一台后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身不支持url_hash,如果需要这种调度算法,则必须安装Nginx的hash软件包。
least_conn 最少连接数,根据当前后端服务器所响应的客户端情况,把当前访问请求调度到后端服务器响应相对较少服务器上。

你以为这样就完事了吗,错,万物都是两面性的,当你解决了一个问题,就会产生另一大堆问题,呵呵

负载均衡引发的一系列问题

session一致性问题

如果你的网站有登录,那就要面临session的问题

方法一:基于nginx的ip_hash策略

upstream uuclass {
    ip_hash;   <-------here
    server 192.168.205.10:80 weight=2;
    server 192.168.205.11:80 weight=4;
}

方法二:session集中管理

比较靠谱的解决方案是,把session存到Redis里,单独开一台服务器作为Redis服务器,Laravel可以很方便的配置session存储的driver,原生PHP可以修改php.ini

  • 存储到memcache
session.save_handler = memcache
 
session.save_path = "tcp://192.168.56.11:11211"
  • 存储到redis
session.save_handler = redis
 
session.save_path ="tcp://localhost:6379"

提醒:别忘了给PHP安装memcache或者redis插件

参考文章

负载均衡集群中的session解决方案

代码同步问题

机器多的话,总不能一台一台去手动更新代码吧

rsync,缓存、日志等文件过滤

多台服务器环境搭建问题

要保证每一台服务器的配置都一样,难道要手动一台一台去配置吗,这时候可以用到docker了

日志排查麻烦

反向代理隐藏了真实的IP地址,排查日志需要逐台排查

吐槽

负载均衡这种东西,云平台已经很成熟了,花点钱去买个现成的吧,如果是个人学习的可以自己搭建玩一玩,商用的还是用别人的产品比较靠谱,各种问题都替你考虑好了,配置起来也简单

你可能感兴趣的:(负载均衡)