ahua671 发表于 2018-12-29 07:47:49

LVS+Keepalived+httpd

  LVS简介
  lvs有三种工作模式NAT(地址转换),IP Tunneling(IP隧道)、Direct Routing(直接路由)。 工作效率最低的是NAT模式,但NAT模式可以用于各种系统,各种环境的负载均衡,只需要一个公网ip即可实现 IP Tunneling模式调度器将连接分发到不同的后端real server,然后由real server处理请求直接相应给用户,大大提高了调度器的调度效率,后端real server没有物理位置和逻辑关系的限制,后端real server可以在Lan/Wlan,但是后端real server必须支持IP隧道协议. DR(Direct Routing)是效率最高的,与IP Tunneling类似,都是处理一般连接,将请求给后端real server,然后由real server处理请求直接相应给用户,Direct Routing与IP Tunneling相比,没有IP封装的开销,但由于采用物理层,所以DR模式的调度器和后端realserver必须在一个物理网段里,中间不能过路由器(也就是一个交换机相连).
  lvs支持8种不同的调度算法轮叫(rr)、加权轮叫(wrr)、最小连接(lc)、加权最小连接(wlc)、基于局部性最小连接(lblc)、带复制的基于局部性最少链接(lblcr)、目标地址散列(dh)和源地址散列(sh).
  Keepalived是运行在lvs 之上,它的主要功能是实现真实机的故障隔离及负载均衡器间的失败 切换,提高系统的可用性
  系统平台:Centos6.4
  Keepalived版本:keepalived-1.2.4.
  LVS版本:ipvsadm-1.2
  LVS_Master:192.168.10.51
  LVS_Slave:192.168.10.40
  Apache1:192.168.10.41
  Apache2:192.168.10.49
一、安装apache
  1.1我们采用yum安装
  #yum –y installhttpd
  #/etc/init.d/httpdstart
  1.2分别在两台web上建立测试页
  # echo"zhangfang111111">/var/www/html/index.html
  # echo"zhangfang222222">/var/www/html/index.html
  1.3 测试是否正常
  Web1
http://s3.运维网.com/wyfs02/M01/6C/98/wKiom1VMg5aBC4TXAAC07XmEP0M227.jpg
  Web2
http://s3.运维网.com/wyfs02/M02/6C/93/wKioL1VMhR3z2NqvAADHi64WIiQ288.jpg
  访问都ok
  
  1.3执行lvs.sh脚本绑定VIP
  #catlvs.sh
  #!/bin/bash
  #description:Config lvs.sh
  VIP=192.168.10.180
  
  /etc/rc.d/init.d/functions
  
  case"$1" in
  start)
         /sbin/ifconfig lo:0 $VIP netmask255.255.255.255 broadcast $VIP
         /sbin/route add -host $VIP dev lo:0
         echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore
         echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce
         echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
         echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
         sysctl -p >/dev/null 2>&1
         echo "RealServer Start OK"
         ;;
  stop)
         /sbin/ifconfig lo:0 down
         /sbin/route del $VIP >/dev/null2>&1
         echo "0">/proc/sys/net/ipv4/conf/lo/arp_ignore
         echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
         echo "0">/proc/sys/net/ipv4/conf/all/arp_ignore
         echo "0">/proc/sys/net/ipv4/conf/all/arp_announce
         echo "RealServer Stoped"
         ;;
  *)
         echo "Usage: $0 {start|stop}"
         exit 1
  esac
  
  exit 0
  #lvs.sh start
  


  二、安装lvs+keepalievd(两台调度器都安装)
  2.1安装之前系统需要安装popt-statickernel-devel make gcc openssl-devel lftp libnl* popt*
  2.2 开启路由转发功能
  #vim /etc/sysctl.conf
  net.ipv4.ip_forward= 1
  #sysctl -p
  2.3.安装ipvsadm
  #wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
  2.4做软连接,防止make时出错,找不到kernel文件
  #ln -s/usr/src/kernels/2.6.32-504.16.2.el6.x86_64/ /usr/src/linux/
  #tar ipvsadm-1.26.tar.gz
  #cd ipvsadm
  #make &&make install
  Ipvsadm安装完成
  2.5安装keepalived
  #wgethttp://www.keepalived.org/software/keepalived-1.2.4.tar.gz
  # tar zxvfkeepalived-1.2.4.tar.gz
  #cdkeepalived-1.2.4
  # ./configure&& make && make install
  三、keepalived做成启动服务,方便管理
  # cp/usr/local/etc/rc.d/init.d/keepalived /etc/init.d/
  # cp/usr/local/etc/sysconfig/keepalived /etc/sysconfig/
  # mkdir/etc/keepalived/
  cp /usr/local/etc/keepalived/keepalived.conf/etc/keepalived/
  # cp/usr/local/sbin/keepalived /usr/sbin/
  # servicekeepalived start | stop
  3.1修改keepalived配置文件如下
  ! ConfigurationFile for keepalived
  
  global_defs {
     notification_email {
     18801457794@139.com
     }
     notification_email_from root@localhost
     smtp_server 127.0.0.1
     smpt_connect_timeout 30
     router_id zhangfang
  }
  
  vrrp_instanceVI_1 {
      state MASTER
      interface eth0 #指定HA监测网络的接口
      virtual_router_id 20 #虚拟路由标示,这是标示是一个数字,同一个vrrp实例使用唯一的标示,即同一vrrp_instance下,MASTER和BACKUP必须是一致的
      priority 100 #定义优先级,数字越大,优先级越高
      advert_int 1 #设置MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
      authentication { #设置验证类型和密码
        auth_type PASS #设置认证类型,主要有PASS和AH两种
        auth_pass 1111 #设置验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通行
      }
      virtual_ipaddress {
        192.168.10.180
      }
  }
  
  virtual_server192.168.10.180 80 {
      delay_loop 6 #设置运行状况的检查时间
      lb_algo rr
      lb_kind DR
      #persistence_timeout 50 #会话保持时间
      protocol TCP #转发协议类型
      real_server 192.168.10.41 80 {
        weight 3
      TCP_CHECK {    #realserver的状态检测设置部分
              connect_timeout 10 #标示10s无响应超时
              nb_get_retry 3 #重试次数
              delay_before_retry 3 #重试间隔
         connect_port 80
        }
      }
      real_server 192.168.10.49 80 {
        weight 3
        TCP_CHECK {
              connect_timeout 10
              nb_get_retry 3
           delay_before_retry 3
              connect_port 80
        }
}
}
  3.2将配置文件同步到LVS_Slave上
  #scp/etc/keepalived/keepalived.conf root@192.168.10.40:/etc/keepalived/
  修改内容如下:
  state BACKUP #状态
  priority 100 #修改优先级
  3.3分别启动两台lvs,我们来查看日志
  LVS_Master
http://s3.运维网.com/wyfs02/M02/6C/98/wKiom1VMg9TDawQMAATTeA3I5gU694.jpg
  注意,从划红线区域看到这台主机绑定了VIR
  通过ipaddr 查看下VIP是否绑定
http://s3.运维网.com/wyfs02/M01/6C/93/wKioL1VMhaLyZav9AAFxj5-tDL0367.jpg
  LVS_Slave:日志信息
http://s3.运维网.com/wyfs02/M02/6C/98/wKiom1VMhGOjWo_CAATUlI7_mXk239.jpg
  3.4我们在LVS_Master上看下群集状态
http://s3.运维网.com/wyfs02/M00/6C/98/wKiom1VMhILSkeVfAAFxj5-tDL0883.jpg
  四、进行测试
  在浏览器里面输入http://192.168.10.180
http://s3.运维网.com/wyfs02/M01/6C/93/wKioL1VMhg-R-AwOAADLfJxqa4k414.jpg
http://s3.运维网.com/wyfs02/M00/6C/93/wKioL1VMhh2jWe9WAADLwj1MdhQ598.jpg
  说明按照轮询的算法,分别转后至节点,从而达到负载均衡的效果
  五、模拟故障
  5.1停掉节点1
  #/etc/init.d/httpdstop
  5.2查看lvs状态
  #ipvsadm -ln
  IP VirtualServer version 1.2.1 (size=4096)
  ProtLocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port         Forward Weight ActiveConn InActConn
  TCP192.168.10.180:80 rr
  ->192.168.10.41:80             Route   3   0          2
  注意出现故障的那台机器,已经被踢出了,从而实现了健康检查
  测试一下
http://s3.运维网.com/wyfs02/M01/6C/98/wKiom1VMhMajio4mAADHOL-EuOc192.jpg

  查看邮件
http://s3.运维网.com/wyfs02/M02/6C/93/wKioL1VMhk6iUuStAACn3TyyJDg119.jpg
  5.3 关掉MASTER上的keepalived
  #/etc/init.d/keepalivedstop
  5.4 查看SLAE的状态
http://s3.运维网.com/wyfs02/M02/6C/98/wKiom1VMhPCQQkG4AAMPowTzwbg827.jpg
  已经正常接管过来,
  测试一下
http://s3.运维网.com/wyfs02/M02/6C/98/wKiom1VMhTexY0g3AADLwj1MdhQ385.jpg
  访问正常
  注意,大家可以看到,经过上面的演示我们实现了LVS的高可用及前端负载均衡的高可用,同时实现对后端realserer监控,也实现后端resalserver宕机时会给管理员发送邮件,但是我们还有几个问题没有解决,问题如下
1.所以realserver都宕机,怎么处理,是不是用户就没法打开,还是提供一下为何页面
2.怎么完成为何模式keepalived切换?
3.如何在keepalived故障时,发送邮件给指定的管理员
  六、我们在负载均衡器上提供维护页面,这样比较靠谱,也比较常用
  6.1 分别在MASTER和SLAVE安装httpd
  #yum –y installhttpd
  6.2配置维护页面
  #echo"Website is currently under maintenance, please come back later">/var/www/html/index.html
  6.3启动httpd
  #/etc/init.d/httpdstart
  6.4修改配置文件
!Configuration File for keepalived

global_defs{
   notification_email {
   18801457794@139.com
   }
   notification_email_from root@localhost
   smtp_server 127.0.0.1
   smpt_connect_timeout 30
   router_id zhangfang
}

vrrp_instanceVI_1 {
    state MASTER
    interface eth0 #指定HA监测网络的接口
    virtual_router_id 20 #虚拟路由标示,这是标示是一个数字,同一个vrrp实例使用唯一的标示,即同一vrrp_instance下,MASTER和BACKUP必须是一致的
    priority 100 #定义优先级,数字越大,优先级越高
    advert_int 1 #设置MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
    authentication { #设置验证类型和密码
      auth_type PASS #设置认证类型,主要有PASS和AH两种
      auth_pass 1111 #设置验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通行
    }
    virtual_ipaddress {
      192.168.10.180
    }
  }

virtual_server192.168.10.180 80 {
    delay_loop 6 #设置运行状况的检查时间
    lb_algo rr
    lb_kind DR
    #persistence_timeout 50 #会话保持时间
    protocol TCP #转发协议类型
    real_server 192.168.10.41 80 {
      weight 3
TCP_CHECK {   #realserver的状态检测设置部分
            connect_timeout 10 #标示10s无响应超时
            nb_get_retry 3 #重试次数
            delay_before_retry 3 #重试间隔
   connect_port 80
      }
    }
real_server 192.168.10.49 80 {
      weight 3
      TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
      }
    }
   sorry_server 127.0.0.1 80
}
增加sorry_server选项
6.5关闭所有的realserver,并重启下MASTER和SLAVE的keepalived
#/etc/init.d/httpdstop
#/etc/init.d/keepalivedrestart
6.6查看lvs
# ipvsadm-ln
IPVirtual Server version 1.2.1 (size=4096)
ProtLocalAddress:Port Scheduler Flags
-> RemoteAddress:Port         Forward Weight ActiveConn InActConn
TCP192.168.10.180:80 rr
->127.0.0.1:80               Local   1   0          0   
可以看到所有节点已经被踢出,只有本机提供服务
测试
http://s3.运维网.com/wyfs02/M00/6C/93/wKioL1VMhtmx-_2tAADWaIjP-Zw296.jpg





页: [1]
查看完整版本: LVS+Keepalived+httpd