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

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

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

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

修改内容如下:

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

配置两台负载均衡服务器

每台服务器上需要安装keepalived

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

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

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

一般出现的裂脑的原因:

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

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

  3. 仲裁服务器  出现故障

  4. iptables  selinux 阻止了

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

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

解决方案:

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

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

  3. 做好监控报警

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

 

 

 

 

 

 

版权声明:本文为phplk原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/phplk/p/7219755.html