设为首页 收藏本站
查看: 1696|回复: 0

[经验分享] HAproxy结合keepalived实现httpd的高可用服务

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-4-8 08:51:18 | 显示全部楼层 |阅读模式

实验前提:

1、本次实验实验的是RHEL6.4(64bit)的系统

2、确保每台服务器时间同步

3、本次实验共有4台服务器,其相关的地址为:

haproxy1:192.168.108.230

haproxy2:192.168.108.231

web1:192.168.108.199

web2:192.168.108.201

VIP:192.168.108.111

实验拓扑结构为:

wKioL1UjldKjH03KAAC0AE8Zq6I588.jpg

一、编译安装keepalived

1、在两台haproxy(1和2上)上编译安装keepalived

# tar xf keepalived-1.2.13.tar.gz

# cd keepalived-1.2.13

# ./configure –prefix=/

# make && make install

# chkconfig  --add keepalived

# chkconfig keepalived on

2、在haproxy1修改配置文件/etc/keepalived/keepalived.conf内容为如下:

! Configuration File for keepalived

global_defs {

   notification_email {

        xsl@localhost

   }

   notification_email_from root@localhost

   smtp_server 127.0.0.1

   smtp_connect_timeout 120

   router_id haproxy1

}

vrrp_instance web {

    state MASTER                    #haproxy1这台服务器为MASTER

    interface eth0

    virtual_router_id 200

    priority 100                      #优先级为100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.108.111         #虚拟ip地址为192.168.108.111

    }

}

3、将haproxy1上的配置文件/etc/keepalived/keepalived.conf复制给haproxy2

# scp /etc/keepalived/keepalived.conf  192.168.108.231:/etc/keepalived/

复制完成后,还需要在haproxy2修改这个配置文件的如下参数:

router_id haproxy2

state BACKUP

priority 90

4、修改完成后再haproxy1和haproxy2启动keepalived服务

# service keepalived start

5、观察haproxy上是否有VIP地址

# ip addr show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

    inet6 ::1/128 scope host

       valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 00:0c:29:5f:a5:e3 brd ff:ff:ff:ff:ff:ff

    inet 192.168.108.230/24 brd 192.168.108.255 scope global eth0

    inet 192.168.108.111/32 scope global eth0     #VIP地址已经有了

    inet6 fe80::20c:29ff:fe5f:a5e3/64 scope link

       valid_lft forever preferred_lft forever

至此,keepalived的核心配置已经完成了。

二、配置安装haproxy

由于在RHEL6.4系统平台上自带了haproxy的RPM包。因此,在这里我就使用RPM包的方式来安装haproxy。

说明:以下步骤需要在两台服务器都完成的

1、安装haproxy软件包

# yum –y install haproxy

# chkconfig haproxy on

2、修改器配置文件/etc/haproxy/haproxy.cfg为如下内容:

global

    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

frontend healthcheck

        bind 192.168.108.111:80

        mode http

        option httpclose

        option forwardfor

        default_backend webserver

backend webserver

    balance     roundrobin

    server      web1 192.168.108.199:80 inter 1000 rise 1 fall 2  check  maxconn 2000

    server      web2 192.168.108.201:80 inter 1000 rise 1 fall 2  check  maxconn 2000

3、添加日志文件

编辑/etc/sysconfig/rsyslog,修改SYSLOGD_OPTIONS="-c 5"为SYSLOGD_OPTIONS="-c 2"

然后再编辑/etc/rsyslog.conf,添加如下行信息:

local2.*                                                /var/log/haproxy.log

最后,重启2台服务器上的rsyslog服务

# service  rsyslog restart

三、配置安装后端web服务器

说明:以下步骤需要在两台web服务器上都完成

1、安装httpd

# yum –y install httpd

2、修改站点根目录下的默认文件index.html的内容为如下:

hello <h1>web1</h1> My ip is 192.168.108.199   

注意:这是web1上的index.html文件的内容

hello <h1>web2</h1> My ip is 192.168.108.201   

注意:这是web2上的index.html文件的内容

四、测试

说明:在测试时,请关闭所有服务器上的防火墙(执行iptables –F即可)和关闭selinux(执行getenforce 0即可)

在浏览器上输入:http://192.168.108.111/,显示结果如下:

wKioL1UjljWiN2-hAAEJu_sQaGY967.jpg

然后再执行刷新操作,显示结果如下:

wKioL1UjlkawXZTQAAEEsLUzid8491.jpg

默认haproxy采用的调度算法为加权轮调,因此,客户端的请求会均分的发送给后端的服务器进行处理。

五、为haproxy提供基于web界面的统计报告功能

需要在两台haproxy服务器的配置文件添加如下信息:

listen stats

        mode http

        bind 0.0.0.0:8080         

        stats enable

        stats hide-version

        stats uri  /haproxyadmin?stats   #访问时指定的uri

        stats realm  "hello\ haproxy"

        stats auth  xsl:xsl

        stats admin if TRUE

然后创建用户xsl

# useradd xsl

# passwd xsl

测试,访问http://192.168.108.111:8080/ haproxyadmin?stats,显示结果如下:

wKiom1UjlUHAGx5uAAdoYA11D7Q983.jpg

通过以上步骤,基于keepalived+haproxy实现httpd的高可用服务已经成功实现

六、通过检测脚本来实现MASTER/BACKUP的切换(可选部分)

需要在两台haproxy服务器上编辑/etc/keepalived/keepalived.conf,添加如下内容:

vrrp_script  chk_haproxy {

“[[ -f /etc/keepalived/down ]] && exit 1 || exit 0”  

interval 2         表示每隔2秒检测一次

weight 20      如果/etc/keepalived/down文件存在,则这台服务器的优先级降低20

fall 2      如果检测2次该服务器都不在是MASTER的话,则认为该服务器不在是MASTER

rise 1           如果检测到一次该服务器成为MASTER,则认为该服务器成为MASTER

}

track_script {      #这一段的配置需要配置在实例中

      chk_haproxy

}

测试,在作为MASTER的服务器上(此处为haproxy1)创建文件/etc/keepalived/down,观察VIP是否飘移到haproxy上了。

#  touch /etc/keepalived/down

# ip addr show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

    inet6 ::1/128 scope host

       valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 00:0c:29:5f:a5:e3 brd ff:ff:ff:ff:ff:ff

    inet 192.168.108.230/24 brd 192.168.108.255 scope global eth0

    inet6 fe80::20c:29ff:fe5f:a5e3/64 scope link

       valid_lft forever preferred_lft forever

上述结果可以看出,VIP已经不在haproxy1上了,此时haproxy不在作为MASTER服务器。

在haproxy2上观察是否有VIP,需要执行如下命令即可观察VIP是否已经存在:

# ip addr show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

    inet6 ::1/128 scope host

       valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 00:0c:29:70:89:f4 brd ff:ff:ff:ff:ff:ff

    inet 192.168.108.231/24 brd 192.168.108.255 scope global eth0

    inet 192.168.108.111/32 scope global eth0

    inet6 fe80::20c:29ff:fe70:89f4/64 scope link

       valid_lft forever preferred_lft forever

由此可以看出,haproxy2上已经有了VIP,此时haproxy将作为MASTER服务器来接受和转发请求。

通过上述步骤,就可以实现手动完成MASTER/BACKUP的切换了,这样就不需要使用停止keepalived服务的方式来进行切换。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-54836-1-1.html 上篇帖子: HAProxy构建虚拟域名负载 下篇帖子: HAproxy简介及其配置文件详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表