keepalived+haproxy构建高可用负载均衡

一、环境介绍

      我用的是centos6.7,内核版本为2.6.32-573.el6.x86_64,keepalived版本为keepalived-1.2.22,haproxy版本为haproxy-1.6.4

      # yum install libnl* popt* openssl openssl-devel -y

      下载并安装ipvsadm-1.26  、libnfnetlink-1.0.1、   libnfnetlink-devel-1.0.1

     html-A IP 192.168.1.41

     html-B IP 192.168.1.59

     haproxy_master 192.168.1.240   主

     haproxy_backup 192.168.1.92     备

     VIP(virtual IP) 192.168.1.180

二、在192.168.1.240和192.168.1.92上安装Keepalived

     1.下载keepalived    http://www.keepalived.org/download.html

     2.安装

        #tar -zxvf keepalived-1.2.22.tar.gz
        #ln -s /usr/src/kernels/2.6.32-573.el6.x86_64/ /usr/src/linux
        #cd keepalived-1.2.22
    #./configure --prefix=/ --mandir=/usr/local/share/man/ --with-kernel-dir=/usr/src/kernels/2.6.32-573.el6.x86_64/
    #make 

        #make install
    #cd /etc/keepalived/
    #mv keepalived.conf keepalived.conf.default

     3.编写配置文件

        #vim   keepalived.conf

         ! Configuration File for keepalived


         vrrp_script chk_http_port {
         script "/etc/keepalived/check_haproxy.sh"
         interval 2
         weight 2

    global_defs {

            #设置邮件报警,可以不设

            #  notification_email {
            #  wt@123.com
            #  }
            # notification_email_from wt@123.com
            #  smtp_server 192.168.1.100       #邮件服务器IP
            #  smtp_connect_timeout 30    


         router_id LVS_DEVEL
    }
    vrrp_instance VI_1 {
         state MASTER #192.168.1.92上改为BACKUP
         interface eth0
         virtual_router_id 51
         priority 150 #192.168.1.92上改为120
         advert_int 1
         authentication {
             auth_type PASS
             auth_pass 1111
         }

         track_script {
             chk_http_port
         }

         virtual_ipaddress {
             192.168.1.180
         }
   }
   }

    4.编写keepalived自启动脚本

       #vim  /etc/keepalived/check_haproxy.sh

       #!/bin/bash
   A=`ps -C haproxy --no-header |wc -l`
   if [ $A -eq 0 ];then
   /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg
   sleep 3
   if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];then
   /etc/init.d/keepalived stop
   fi
   fi

       赋予脚本执行权限
      #chmod 755 /etc/keepalived/check_haproxy.sh   该脚本可保证haproxy程序意外挂掉时重新启动程序

三、在192.168.1.240和192.168.1.92上安装Haproxy

     1.下载Haproxy http://download.csdn.net/detail/a15134566493/9521419

     2.安装配置

        #tar -zxvf haproxy-1.6.2.tar.gz
        #cd haproxy-1.6.2

        # make TARGET=linux26 PREFIX=/usr/local/haproxy install

    #cd /usr/local/haproxy/

        # mkdir conf logs

        #cd conf/

        # vim haproxy.cfg

             ######## 全局配置信息 #########
######参数是进程级的,通常和操作系统相关#######                         

   global
    log 127.0.0.1 local3 info #日志服务器
    maxconn 4096 #最大连接数
    uid nobody #用户身份
    gid nobody #组身份
    daemon #守护进程方式后台运行
    nbproc 1 #工作进程数量

####### 默认设置 ###################
#####这些参数是配置 frontend,backend,listen 组的 ###########
   defaults
    log global
    mode http #工作模式 http ,tcp 是 4 层,http是 7 层
    maxconn 2048 #最大连接数
    retries 3 #3 次连接失败就认为服务器不可用
    option redispatch #如果 cookie 写入了 serverId 而客户端不会刷新 cookie,当serverId 对应的服务器挂掉后,强制定向到其他健康的服务器
    stats uri  /haproxy #使用浏览器访问 http://192.168.1.240/haproxy,可以看到服务器状态
    contimeout 5000
    clitimeout 50000
    srvtimeout 50000


   frontend http-in
    bind 0.0.0.0:80
    mode http
    log global
    option httplog #日志类别 http 日志格式
    option httpclose #打开支持主动关闭功能
       #acl php url_reg  -i  .php$ #acl <ACL名字>  <类型>  <大小写>  <规则>  有PHP网页就取消注释
       acl html url_reg  -i  .html$  
#use_backend  <服务器组>  if  <ACL名字>
       #use_backend php-server if  php         有PHP网页就取消注释
       use_backend html-server if  html
       default_backend html-server
#默认使用的服务器组

        ######以下注释的是PHP的配置,没有PHP网页可以不写这个配置#############
   #backend php-server
    #mode http
    #balance roundrobin #负载均衡的方式
    #option httpchk GET /index.php #健康检查
    cookie SERVERID insert indirect nocache #客户端的 cookie 信息
    #server php-A 192.168.1.30:80 weight 1 cookie 1 check inter 2000 rise 2 fall 5
    #server php-B 192.168.1.40:80 weight 1 cookie 2 check inter 2000 rise 2 fall 5
    #cookie 1 标识 serverid 为 1
    #check inter 2000 检测心跳频率
    #rise 2 2 次正确认为服务器可用
    #fall 5 5 次失败认为服务器不可用

   backend html-server
    mode http
    balance roundrobin
    option httpchk GET /index.html
    cookie SERVERID insert indirect nocache
    server html-A 192.168.1.41:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5
    server html-B 192.168.1.59:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5 
3.启动HAproxy
           # /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg

4.查看HAproxy状态

           由于使用了keepalived虚拟主机,所以可访问192.168.1.180/haproxy查看HAproxy状态

四、搭建网页服务器

      1.# yum install httpd -y

      2.在/var/www/html/目录下创建index.html,

            在192.168.1.41的index.html中写  i am 192.168.1.41

            在192.168.1.59的index.html中写  i am 192.168.1.59

     3.#service httpd restart

5.在客户端访问 HAproxy 测试

           在浏览器访问192.168.1.180即可访问。其显示的网页内容实际上是192.168.1.41或192.168.1.59的网页。

           实际效果:

          

原文地址:https://www.cnblogs.com/wt11/p/5695805.html