haproxy+keepalived实现高可用

haproxy+keepalived实现高可用。

在写这篇博客之前通过自己的实验实现了双机高可用,在实验的过程中遇到了一些麻烦。而这些麻烦现在感觉都有些莫名其妙,不过现在已经解决,现在把自己的操作与各位分享下。下面开始正题。

网络拓扑如下:


地址分配介绍:

C1:192.168.5.100

ha1:192.168.5.1

ha2:192.168.5.10

rs1:192.168.5.11

rs2:192.168.5.12

开始配置:

在ha1和ha2上做keepalived。

声明:作者在虚拟机上实验:(redhat 6.4)

mount /dev/cdrom media

cd /media/Packages

rpm –ivh haproxy****.rpm

rpm –ivh keepalived***.rpm

也可以自己现在二进制自己编译安装

①rsyslog修改

vi /etc/sysconfig/rsyslog

# Options for rsyslogd

# Syslogd options aredeprecated since rsyslog v3.

# If you want to use them,switch to compatibility mode 2 by "-c 2"

# See rsyslogd(8) for moredetails

SYSLOGD_OPTIONS="-c 2-r"

vi /etc/rsyslog.conf

添加

local2.*      /var/log/haproxy.log

servicersyslog restart

②haproxy配置文件的修改

vi /etc/haproxy/haproxy.cfg

log         127.0.0.1 local2

 

    chroot     /var/lib/haproxy

    pidfile    /var/run/haproxy.pid

    maxconn    4000

    user       haproxy

    group      haproxy

    daemon

 

    # turn on stats unix socket

stats socket /var/lib/haproxy/stats

defaults

    mode                    http

    log                     global

    option                  httplog

    option                  dontlognull

    option http-server-close

    option forwardfor       except 127.0.0.0/8

    option                  redispatch

    retries                 3

    timeout http-request    10s

    timeout queue           1m

    timeout connect         10s

    timeout client          1m

    timeout server          1m

    timeout http-keep-alive 10s

    timeout check           10s

    maxconn                 3000

listen stats

    mode http

    bind 0.0.0.0:1080

    stats enable

    stats hide-version

    stats uri     /admin

    stats realm   Haproxy Statistics

    stats auth    admin:admin

stats admin if TRUE

frontend web

   bind *:80

   mode http

    logglobal

   option httpclose

   option logasap

   option dontlognull

   capture request  header Host len20

   capture request  header Refererlen 60

   default_backend servers

 

frontend healthcheck

   bind :1099

   mode http

   option httpclose

   option forwardfor

   default_backend servers

 

backend servers

   balance roundrobin

   server websrv1 192.168.5.11:80 check inter 2000 rise 1 fall 2  maxconn 2000

   server websrv2 192.168.5.12:80 check inter 2000 rise 1 fall 2  maxconn 2000

note:backupend需要添加好RealServer的地址就好,其余的参数自己按照需求进行配置即可。

③keepalived的配置

vi /etc/keepalived/keepalived.conf

global_defs {

  notification_email {

       root@localhost     //接受keepalived发送的邮件

   }

 

  notification_email_from keepalived@localhost //定义当keepalived邮件的发送者

  smtp_server 127.0.0.1   //mail-server地址

  smtp_connect_timeout 30

  router_id LVS_DEVEL

}

 

#vrrp_script chk_haproxy {

#  script "/usr/local/haproxy.sh"

#  interval 1                      //这是一个监控的脚本。最后附件说明

#  weight  -10

#  fall 2

#  rise 1

#}

vrrp_script chk_haproxy {

    script "[ -e /etc/keepalived/down ] && exit 1 || exit0"  //这行监测的脚本

    interval 1      //执行的间隔

    weight -10     //当检测到异常之后,优先级减10

    rise 1         //重新上线需要检查一次

    fall 2         //下线需要检查两次

}

vrrp_instanceVI_1 {     //定义vrrp实例

    state MASTER      //vrrp状态,从为BACKUP

    interface eth0      //监听的物理接口

    virtual_router_id 51  //虚拟路由器ID,两边需要一致,不用更改

    priority 101         //优先级,master的优先级高于backup,当发生故障加上监控脚本里面的weight时候需要小于backup的优先级

    advert_int 1        //master和backup之间用于通信的间隔

    authentication {

        auth_type PASS    //认证的方式为pass,为明文,密文为HA认证

        auth_pass 1111    //认证他的密码,两边需要一致

    }

    track_interface {

        eth0             //监控的接口

}

    track_script {

       chk_haproxy      //用于监测的脚本名称

}

    virtual_ipaddress {

        192.168.5.111 dev eth0 label eth0:0   //虚拟的地址VIP

    }

}

virtual_server192.168.5.111 80 {   //提供服务的套接字

}

 

virtual_server192.168.5.111 80 { 

    delay_loop 6      //检查RealServer状态的间隔

    nat_mask 255.255.255.0  //掩码

    #persistence_timeout 50  //一直连接的超时时间。在动态的访问中可用来共享session。

    protocol TCP

 

    real_server 192.168.5.11 80 {   //提供服务器的realserver的套接字

        weight 1

        HTTP_GET {     //利用HTTP_GET的方法获取跟路径的信息,如果状态码为200,则说明RealServer正常。可以获取多个路径,并且status_code可以利用digest来代替。

            url {

              path /      

              status_code 200

            }

            connect_timeout 3    //超时时间

            nb_get_retry 3       //重试的次数

            delay_before_retry 3  //重试的时间间隔

        }

    }

real_server192.168.5.12 80 {

           weight 1

           HTTP_GET {

       url {

           path /

           status_code 200

}

}

}

}

好了配置完成。可以用来启动keepalived了。

note:在vrrp_script中给注释的脚本,在实验的过程中效果不是特别的明显。

#!/bin/bash

#

status1=`psaux|grep haproxy|grep -v grep|grep -v /bin/bash|wc -l`

[ $status1-eq 0 ] && service haproxy  start|| :

status2=`psaux|grep haproxy|grep -v grep|grep -v /bin/bash |wc -l`

[ $status2-eq 0 ] && service haproxy stop|| :

上面是所写的脚本。在haproxy发生故障的过程中,首先要判断haproxy的进程是不是还存在没如果已经不存在了,那么就需要重新启动下。如果重新启动还是启动不起来的话,那么就直接将服务关闭。在本实验中,关闭haproxy之后,想要实现VIP的切换,刚刚stop服务之后,脚本执行,就又启动了服务。所以我们利用一个文件的是否存在的方法来实现。这个我们可以在相应的目录下进行touch和rm操作来实现VIP地址的切换,这样效果更明显。(此方法仅限于实验)

③RealServer需要做的是开启web服务,并且更改配置文件。让配置文件能够记录真实的客户端IP地址就好了。

实验的过程中,要时时刻刻的看日志,查看VIP的漂移过程。作者在实验的过程中,出现了很多问题。比如VIP不能被访问的情况,脚本不生效的情况。但是最终解决掉了,VIP不能被访问后来重启了网卡就好了,到现在都很郁闷,不知道为什么会这样子。另外脚本不生效,在配置keepalived的过程中需要注意的是,keepalived.conf文件的差错能力很弱。它并不像别的配置文件如果出现错误的话会有提示或者启动服务根本启动不起来。但是这个服务却是这个样子的。很烦啊。所以在配置的过程中还有多加用心,不要出现拼写的错误等。好了就到这里了。有什么问题欢迎大家和我交流。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值