zoukankan      html  css  js  c++  java
  • haproxy+keepalived

    http://www.osyunwei.com/archives/7512.html  (主要参考)
    http://blog.chinaunix.net/uid-25266990-id-3989321.html (次要参考)
    http://xz159065974.blog.51cto.com/8618592/1405812 (动静态分离)
    http://www.cnblogs.com/dkblog/archive/2011/07/06/2098949.html
    ---------------------------------------------------------------

    操作系统:CentOS 6.5 64位

    Web服务器:192.168.21.127、192.168.21.128

    站点:bbs.osyunwei.com和sns.osyunwei.com部署在两台Web服务器上

    实现目的:

    增加两台服务器(主主模式),通过HAProxy+Keepalived实现Web服务器负载均衡

    架构规划:

    HAProxy服务器:192.168.1.117、192.168.1.118

    虚拟服务器(VIP):192.168.1.20、192.168.1.30

    Realserver: 192.168.1.119   192.168.1.120

    部署完成之后:

    1、VIP:192.168.1.20指向192.168.1.117;VIP:192.168.1.30指向192.168.1.118;

    2、当192.168.1.117宕机时,VIP:192.168.1.20漂移到192.168.1.118上;

    3、当192.168.1.118宕机时,VIP:192.168.1.30漂移到192.168.1.117上;

    这样的主主模式好处是,两台服务器在提供服务的同时,又互为对方的备份服务器。

    具体操作:

    第一部分:在两台HAProxy服务器上分别操作

    一、关闭SElinux、配置防火墙

    1、vi /etc/selinux/config

    #SELINUX=enforcing #注释掉

    #SELINUXTYPE=targeted #注释掉

    SELINUX=disabled #增加

    :wq!  #保存退出

    setenforce 0 #使配置立即生效

    2、vi /etc/sysconfig/iptables  #编辑

    -A RH-Firewall-1-INPUT -d 224.0.0.18 -j ACCEPT  #允许组播地址通信

    -A RH-Firewall-1-INPUT -p    vrrp    -j ACCEPT  #允许VRRP(虚拟路由器冗余协)通信

    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT  #允许80端口通过防火墙

    :wq! #保存退出

    /etc/init.d/iptables restart #重启防火墙使配置生效

    二、安装HAProxy

    1、创建HAProxy运行账户和组

    groupadd haproxy #添加haproxy组

    useradd -g haproxy haproxy -s /bin/false #创建haproxy运行账户haproxy并加入到haproxy组,不允许haproxy用户直接登录系统

    2、安装编译工具

    yum install  gcc gcc-c++ make openssl-devel kernel-devel

    3、安装HAProxy

    HAProxy下载地址:http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.24.tar.gz

    上传haproxy-1.4.24.tar.gz到/usr/local/src目录中

    cd /usr/local/src #进入软件包存放目录

    tar zxvf haproxy-1.4.24.tar.gz #解压

    cd  haproxy-1.4.24  #进入安装目录

    make  TARGET=linux26 CPU=x86_64  PREFIX=/usr/local/haprpxy  #编译

    make install PREFIX=/usr/local/haproxy  #安装

    参数说明:

    TARGET=linux26

    #使用uname -r查看内核,如:2.6.18-371.el5,此时该参数就为linux26

    #kernel 大于2.6.28的用:TARGET=linux2628

    CPU=x86_64   #使用uname -r查看系统信息,如x86_64 x86_64 x86_64 GNU/Linux,此时该参数就为x86_64

    PREFIX=/usr/local/haprpxy   #/usr/local/haprpxy为haprpxy安装路径

    4、设置HAProxy

    mkdir -p  /usr/local/haproxy/conf  #创建配置文件目录

    mkdir -p /etc/haproxy  #创建配置文件目录

    cp /usr/local/src/haproxy-1.4.24/examples/haproxy.cfg  /usr/local/haproxy/conf/haproxy.cfg  #拷贝配置模板文件

    ln -s  /usr/local/haproxy/conf/haproxy.cfg   /etc/haproxy/haproxy.cfg  #添加配置文件软连接

    cp -r  /usr/local/src/haproxy-1.4.24/examples/errorfiles  /usr/local/haproxy/errorfiles  #拷贝错误页面

    ln -s  /usr/local/haproxy/errorfiles  /etc/haproxy/errorfiles  #添加软连接

    mkdir -p  /usr/local/haproxy/log  #创建日志文件目录

    touch  /usr/local/haproxy/log/haproxy.log  #创建日志文件

    ln -s  /usr/local/haproxy/log/haproxy.log  /var/log/haproxy.log  #添加软连接

    cp /usr/local/src/haproxy-1.4.24/examples/haproxy.init  /etc/rc.d/init.d/haproxy  #拷贝开机启动文件

    chmod +x  /etc/rc.d/init.d/haproxy  #添加脚本执行权限

    chkconfig haproxy on  #设置开机启动

    ln -s  /usr/local/haproxy/sbin/haproxy  /usr/sbin  #添加软连接

    5、配置haproxy.cfg参数

    cp  /usr/local/haproxy/conf/haproxy.cfg   /usr/local/haproxy/conf/haproxy.cfg-bak  #备份

    vim  /usr/local/haproxy/conf/haproxy.cfg  #编辑,修改  (两台机子一样)

    在第二台机118上:scp root@192.168.1.117:/usr/local/haproxy/conf/haproxy.cfg /usr/local/haproxy/conf/haproxy.cfg

    # this config needs haproxy-1.1.28 or haproxy-1.2.1
    global
            log 127.0.0.1   local0 #在本机记录日志
            log 127.0.0.1   local1 notice
            #log loghost    local0 info
            maxconn 65535   #每个进程可用的最大连接数
            nbproc  8  #进程数量,可以设置多个,提高处理效率
            chroot /usr/local/haproxy  #haproxy安装目录
            uid 500  #运行haproxy的用户uid(cat /etc/passwd查看)
            gid 500  #运行haproxy的组uid(cat /etc/group查看)
            daemon   #以后台守护进程运行
            pidfile /usr/local/haproxy/haproxy.pid  #将所有进程写入pid文件
            #debug   #调试模式
            #quiet   #安装模式
    defaults
            #log     global
            log  127.0.0.1   local3  #日志文件设置
            mode    http  #运行模式tcp、http、health
            option  httplog
            option  http-pretend-keepalive  #服务器端保持长连接
            option  http-server-close   #每次请求完毕后主动关闭http通道
            option  forceclose    #服务端响应后主动关闭请求连接,及早释放服务连接,不必等到客户端应答确认
            option  httpclose       #每次请求完毕后主动关闭http通道
            option  accept-invalid-http-request       #接受无效的http请求,一般建议不设置,但是可解决部分杂牌浏览器访问打不开页面问题
            option  dontlognull     #不记录健康检查的日志信息
            option  redispatch  #如果后端有服务器宕机,强制切换到正常服务器
            option  abortonclose  #丢弃由于客户端等待时间过长而关闭连接但仍在haproxy等待队列中的请求
            option  forwardfor  except 127.0.0.0/8  #不记录本机转发的日志
            option  originalto  #记录客户端访问的目的IP
            maxconn  65535  #每个进程可用的最大连接数
            balance source  #同一IP地址的所有请求都发送到同一服务器
            retries 3   #三次连接失败,则判断服务不可用
            contimeout      5000  #连接超时
            clitimeout      50000 #客户端超时
            srvtimeout      50000 #服务器超时
            timeout check 5s  #检测超时
            timeout http-request 5s  #http请求超时时间
            timeout queue 30s  #一个请求在队列里的超时时间
            timeout http-keep-alive  5s  #设置http-keep-alive的超时时间
            stats refresh 30s #统计页面自动刷新时间
            stats uri  /haproxy-status  #统计页面URL路径
            stats realm haproxy-status  #统计页面输入密码框提示信息
            stats auth admin:123456     #统计页面用户名和密码
            stats hide-version          #隐藏统计页面上HAProxy版本信息
    
    frontend    web  #自定义描述信息
            bind :80  #监听80端口
            acl www.ccqq.com  hdr(host) -i www.ccqq.com  #规则设置,-i后面是要访问的域名,如果访问bbs.osyunwei.com这个域名,就负载均衡到bbs.osyunwei.com作用域
            use_backend www.ccqq.com if www.ccqq.com   #acl和if后面的名称必须相同这里为bbs.osyunwei.com
            acl img.ccqq.com  hdr(host) -i img.ccqq.com  #规则设置,-i后面是要访问的域名,如果访问sns.osyunwei.com这个域名,就负载均衡到sns.osyunwei.com作用域
            use_backend img.ccqq.com if img.ccqq.com
    
    backend www.ccqq.com
            mode http
            balance roundrobin
            #option  httpchk /index.php  #检测服务器此文件是否存在,如果没有,则认为服务器连接异常,此参数可以不设置
            server web01 192.168.1.120:80   check  inter  2000  rise 3  fall  3  weight 100
            #inter  2000 心跳检测时间;rise 3 三次连接成功,表示服务器正常;fall  3 三次连接失败,表示服务器异常; weight 100 权重设置
            server web02 192.168.1.119:80   check  inter  2000  rise 3  fall  3  weight 100
    
    backend img.ccqq.com
            mode http
            balance roundrobin  #设置负载均衡模式,source保存session值,roundrobin轮询模式
            #option  httpchk /index.php  #检测服务器此文件是否存在,如果没有,则认为服务器连接异常,此参数可以不设置
            server web01 192.168.1.119:80   check  inter  2000  rise 3  fall  3  weight 100
            server web02 192.168.1.120:80   check  inter  2000  rise 3  fall  3  weight 100
            #errorloc  503  http://www.osyunwei.com/404.html
            errorfile 403 /etc/haproxy/errorfiles/403.http
            errorfile 500 /etc/haproxy/errorfiles/500.http
            errorfile 502 /etc/haproxy/errorfiles/502.http
            errorfile 503 /etc/haproxy/errorfiles/503.http
            errorfile 504 /etc/haproxy/errorfiles/504.http
    

    在windows下修改 hosts  :

    192.168.1.20 www.ccqq.com
    192.168.1.30 img.ccqq.com

    二、安装配置keepalived(2配置参考1,大体上一样)

    1、安装配置keepalived
    [root@node1 src]# yum -y install popt popt-devel popt-static openssl-devel kernel-devel libnl libnl-devel
    [root@node1 src]# wget http://www.keepalived.org/software/keepalived-1.2.4.tar.gz
    [root@node1 src]# tar xf keepalived-1.2.4.tar.gz
    [root@node1 src]# cd keepalived-1.2.4
    [root@node1 keepalived-1.2.4]# ./configure --prefix=/usr/local/keepalived

    [root@node1 keepalived-1.2.4]# make && make install

    [root@node1 keepalived-1.2.4]# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
    [root@node1 keepalived-1.2.4]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
    [root@node1 keepalived-1.2.4]# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
    [root@node1 keepalived-1.2.4]# mkdir -p /etc/keepalived
    [root@node1 keepalived-1.2.4]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

    [root@node1 keepalived-1.2.4]# chmod +x /etc/init.d/keepalived

    配置
    [root@node1 keepalived-1.2.4]# vim /etc/keepalived/keepalived.conf
    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
         carbon3@qq.com
       }
       notification_email_from keepalived@domain.com
       smtp_server 127.0.0.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
    }
    vrrp_script chk_http_port {
                    script "/opt/check_haproxy.sh"
                    interval 2
                    weight 2
    }
    vrrp_instance VI_1 {
        state MASTER
        interface eth0
        virtual_router_id 51
        mcast_src_ip 192.168.1.117
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
    track_script {
            chk_http_port
            }
        virtual_ipaddress {
           192.168.1.20
        }
    }
    
    vrrp_instance VI_2 {
        state BACKUP
        interface eth0
        virtual_router_id 52
        priority 99
        advert_int 1
        authentication {
             auth_type PASS
             auth_pass 1111
        }
        virtual_ipaddress {
            192.168.1.30
             }
    }
    

     BACKUP 机的 keepalived 配置:

    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
         carbon3@qq.com
       }
       notification_email_from keepalived@domain.com
       smtp_server 127.0.0.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
    }
    vrrp_script chk_http_port {
                    script "/opt/check_haproxy.sh"
                    interval 2
                    weight 2
    }
    vrrp_instance VI_1 {
        state BACKUP
        interface eth0
        virtual_router_id 51
        mcast_src_ip 192.168.1.118
        priority 99
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
    track_script {
            chk_http_port
            }
        virtual_ipaddress {
           192.168.1.20
        }
    }
    vrrp_instance VI_2 {
        state MASTER
        interface eth0
        virtual_router_id 52
        priority 100
        advert_int 1
        authentication {
             auth_type PASS
             auth_pass 1111
        }
        virtual_ipaddress {
            192.168.1.30
             }
    }
    View Code

     

    检测脚本,为了防止haproxy服务关闭导致keepalived不自动切换。  测了有问题 

     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #vim /opt/check_haproxy.sh
    #!/bin/bash
    if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
         /etc/init.d/haproxy  start
    fi
    sleep 2
    if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
           /etc/init.d/keepalived stop
    fi

    9、启动两台keepalived和Haproxy服务。

     
    1
    2
    #servcie haproxy start
    #service keepalived start

    ip addr  查看两台机的VIP

    域名测试  是否正常










    ---日志问题 没试成功------------------------------------------
    1.vim /etc/rsyslog.conf
    添加local0.* /var/log/haproxy.log
    2.Haproxy.conf代码
    global
    log 127.0.0.1 local0 info
    ......
    3. 日志输出在/var/log/haproxy.log下

    centos 下,修改 vim /etc/sysconfig/rsyslog ,把

    SYSLOGD_OPTIONS=”-m 0″ 改为 SYSLOGD_OPTIONS=”-m 0 -r”

    service rsyslog restart

    -----------------------------------------------

    cd /

    find -name haproxy
    [root@carbonlinux /]rm -rf /usr/share/haproxy
    [root@carbonlinux /]# rm -rf /usr/sbin/haproxy
    [root@carbonlinux /]# rm -rf /usr/local/sbin/haproxy
    [root@carbonlinux /]# rm -rf /usr/local/doc/haproxy
    [root@carbonlinux /]# rm -rf /etc/haproxy
    [root@carbonlinux /]# rm -rf /etc/rc.d/init.d/haproxy
    [root@carbonlinux /]# rm -rf /var/lock/subsys/haproxy

  • 相关阅读:
    面试中你能做到随机应变吗? 沧海
    QQ只是一场意外 沧海
    面 试 中 要 慎 言 沧海
    你会应对这些面试题吗? 沧海
    面 试 小 技 巧 沧海
    面试抓住最初三分钟至关重要 沧海
    面试的十二种高级错误 沧海
    几种有难度的面试 沧海
    面试技巧: 轻松过关10种方法 沧海
    面 试 细 节 一 点 通 沧海
  • 原文地址:https://www.cnblogs.com/carbon3/p/5862837.html
Copyright © 2011-2022 走看看