首页 > 代码库 > web开发之负载均衡的简单架构

web开发之负载均衡的简单架构

负载均衡

负载均衡的核心思想就是:请求分担

最简单的配置:

一台负载均衡服务器 两台webserver服务器

两台webserver服务器需要配置相同的服务器环境,设置相同的域名指向

负载均衡服务器需要修改nginx.conf配置文件

修改内容如下:

upstream www_server_pools{
    server 10.0.169.158 weight=2;#webserver服务器IP地址,权重
    server 10.0.169.160 weight=1;#webserver服务器IP地址,权重
    #ip_hash;每个服务器过来 固定访问一个服务器  可以解决session问题
    #fair;
    #hash $request_url
    #hash_method crc32; #每个请求按照逐一的书信不同的后端服务器  如果服务器down掉自动剔除
}
server{
  listen  80;
  server_name  www.91porn.com  91porn.com;
  location / {
    proxy_pass http://www_server_pools;#域名请求过来  自动查询连接池
    proxy_set_header Host $host; #把主机头发给轮询的主机
    proxy_set_header X-forward-For $remote_addr; #获取真实的IP地址
  }
}
 
server 主机端口作用
weight 权重
max_fails=1 最大错误的尝试次数
fail_timeout=10s 错误请求超时时间
backup 找备用服务器

高可用负载均衡服务器配置方法:

配置两台负载均衡服务器

每台服务器上需要安装keepalived

修改keepalived配置文件  vim /etc/keepalived/keepalived.conf

 
#第一步删除第32行后的所有行(virtual_server 192.168.200.100 443)
#主负载服务器配置文件修改如下
global_defs {
  notification_email {
    17854284556@163.com #接受包含错误信息的邮件的邮箱
  }
  notification_email_from master@liangkun.com  #发送错误信息的邮件服务器
  smtp-server 10.0.169.1 #发送邮件服务器的IP
  smtp_connect_timeout 30  #连接超时时间
  router_id LVS_1 #表示服务器编号  这里不能一样
}
vrrp_instace VI_1 {  #VI_1  这里要相同  可以自定义
  state MASTER  #MASTER 主负载
  interface eth2  # 这里要看好你的网卡  
  virtual_router_id 160 #ip地址的最后一位  两台主机之间要一样
  priority 200 #权重
  advert_int 1 # 通信间隔时间  秒为单位
  autentication {
    auth_type PASS #认证
    auth_pass 1234 #密码
  }
  virtual_ipaddress {
    10.0.169.253 #阿里云会提供两个地址  一个内网 一个外网 ip 这时候 要写内网的IP
  }
}
#辅负载服务器配置文件修改如下
global_defs {
  notification_email {
    17854284556@163.com #接受包含错误信息的邮件的邮箱
  }
  notification_email_from master@liangkun.com  #发送错误信息的邮件服务器
  smtp-server 10.0.169.1 #发送邮件服务器的IP
  smtp_connect_timeout 30  #连接超时时间
  router_id LVS_2 #表示服务器编号  这里不能一样
}
vrrp_instace VI_1 {  #VI_1  这里要相同  可以自定义
  state BACKUIP  #MASTER 主负载  BACKUP 表示辅负载
  interface eth3  # 这里要看好你的网卡  本地服务器的网卡
  virtual_router_id 158 #ip地址的最后一位  两台主机之间要一样
  priority 150 #权重
  advert_int 1 # 通信间隔时间  秒为单位
  autentication {
    auth_type PASS #认证
    auth_pass 1234 #密码
  }
  virtual_ipaddress {
    10.0.169.253 #阿里云会提供两个地址  一个内网 一个外网 ip 这时候 要写内网的IP
  }
}
最后启动keepalived
service keepalived restart
ip addr
chkconfig --level keepalived 2345 on
 

裂脑问题

两台高可用的负载均衡服务器一个主 一个辅 两个服务器之间 检测不到对方的心跳 但是两台服务器都可以独立的正常工作 这样就可能出现一个问题  一个IP在两台服务器上同时存在 最严重的是两台主机占用一个IP地址 用户写入数据 可能会同时写入两个  容易导致两个服务器数据不同步  数据丢失  这个问题就叫做裂脑

一般出现的裂脑的原因:

  1. 两个服务器之间 心跳线路故障  导致无法通信

  2. 网卡驱动问题 以及IP配置问题

  3. 仲裁服务器  出现故障

  4. iptables  selinux 阻止了

  5. 心跳网卡的地址配置 错误

  6. virtual_ipaddress 配置不一致 导致 裂脑问题

解决方案:

  1. 同时使用串行线路和以太网链接 一条线路坏了 另一条启用  (串行线路距离较短)

  2. 如果检测到裂脑 强行关闭一个心跳节点

  3. 做好监控报警

  4. 引入第三方仲裁 也就是说 每个节点 必须判定自身的状态 如果自身能够ping同网关 则对方有问题 如果ping不通则自身有问题

 

 

 

 

 

 

web开发之负载均衡的简单架构