Haproxy+KeepAlived 负载均衡

标签: haproxy keepalived 负载均衡 | 发表时间:2013-04-18 13:30 | 作者:zmj_88888888
出处:http://blog.csdn.net

软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现。LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载。还可以使用nginx来实现,不过nginx只工作在7层网络之上。详细请参考 抚琴煮酒写的“ 软件级负载均衡器(LVS/HAProxy/Nginx)的特点简介和对比”这篇文章,简单很详细,很好。

HAProxy相比LVS的使用要简单很多,功能方面也很丰富。当 前,HAProxy支持两种主要的代理模式:"tcp"也即4层(大多用于邮件服务器、内部协议通信服务器等),和7层(HTTP)。在4层模式 下,HAProxy仅在客户端和服务器之间转发双向流量。7层模式下,HAProxy会分析协议,并且能通过允许、拒绝、交换、增加、修改或者删除请求 (request)或者回应(response)里指定内容来控制协议,这种操作要基于特定规则。

我现在用HAProxy主要在于它有以下优点,这里我总结下:

一、免费开源,稳定性也是非常好,这个可通过我做的一些小项目可以看出来,单Haproxy也跑得不错,稳定性可以与LVS相媲美;

二、根据官方文档,HAProxy可以跑满10Gbps-New benchmark of HAProxy at 10 Gbps using Myricom's 10GbE NICs (Myri-10G PCI-Express),这个作为软件级负载均衡,也是比较惊人的;

三、HAProxy可以作为MySQL、邮件或其它的非web的负载均衡,我们常用于它作为MySQL(读)负载均衡;

自带强大的监控服务器状态的页面,实际环境中我们结合Nagios进行邮件或短信报警,这个也是我非常喜欢它的原因之一;

HAProxy支持虚拟主机。


1.实验环境

系统版本:CentOS release 5.9 (Final) x86 32位
HAProxy版本:1.4.8
Keepalived版本:1.2.4
 

MASTER_IP:192.168.207.130  
BACKUP_IP:192.168.207.131 
 
VIP:192.168.207.141  
WEB_1:192.168.207.129 80端口  
WEB_2:192.168.207.130 8080端口
WEB_3:192.168.207.131 8080端口

iptables和selinux都关掉

2.Haproxy安装

cd /usr/local/src
mkdir haproxy
cd haproxy
wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.8.tar.gz
tar xf haproxy-1.4.8.tar.gz
cd haproxy-1.4.8
make TARGET=linux26;make install
#这里你也可以这样写make TARGET=linux26 --prefix=/usr/local/haproxy,给haproxy安装添加个路径

写haproxy的配置文件,主从都一样的,都用这个配置文件
useradd haproxy
vi /etc/haproxy.cfg

内容如下:

global
            log 127.0.0.1   local0       #这个是日志
            maxconn 65535  
            user haproxy
            group haproxy
            daemon                      #以后台进程的方式打开
            nbproc 8                    #haproxy的进程数
            pidfile /tmp/haproxy.pid

defaults
             log     127.0.0.1       local3
             mode   http
             option httplog
             option httpclose
             option dontlognull
             option forwardfor
             option redispatch
             retries 2
             maxconn 65535
             balance roundrobin                         #为了更好的观察出结果,这里就用roundrobin简单轮训,source算法了
             stats   uri     /web-status                #这个是管理的url地址,配好后,只要输入http://ip或者VIP/web-status就可以访问了
             contimeout      5000
             clitimeout      50000
             srvtimeout      50000

listen  web_vip 0.0.0.0:80              #这里也要注意千万不要绑定VIP地址,keepalived主服务器还可以,但是备份服务器是不行的,因为只有keepalived是主的时候,才会在此服务器上设定VIP,所以咯,就用0.0.0.0吧
            mode http
            option httplog
            log global
            option httpchk HEAD /index.html HTTP/1.0        #这里呢,你得在三台web服务器上分别建立个index.html页面,可以添加不同的内容,给待会测试用,内容分别填写129:80,130:8080,131:8080好了,如果没有,haproxy会认为对应的web服务器挂掉了。
            server web1  192.168.207.129:80   weight 5  check inter 2000 rise 2 fall 3
            server web2  192.168.207.130:8080 weight 5  check inter 2000 rise 2 fall 3
            server web3  192.168.207.131:8080 weight 5  check inter 2000 rise 2 fall 3

这个说一下啊,如果不懂haproxy的配置参数呢,可以到 http://cbonte.github.io/haproxy-dconv/configuration-1.4.html这里

搜索一下关键词,就有解释了,挺方便的,不过是英文,嗯,你自己看着办吧

这里还说一下啊,HAProxy的算法现在也越来越多了,具体有如下8种:
①roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;
②static-rr,表示根据权重,建议关注;
③leastconn,表示最少连接者先处理,建议关注;
④source,表示根据请求源IP,这个跟Nginx的IP_hash机制类似,我们用其作为解决session问题的一种方法,建议关注;
⑤ri,表示根据请求的URI;
⑥rl_param,表示根据请求的URl参数'balance url_param' requires an URL parameter name;
⑦hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
⑧rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。

在web服务器都打开的情况下,运行

haproxy -f /etc/haproxy.cfg

这是后已经是个haproxy+3个web的负载均衡模式了

可以再浏览器上输入http://haproxy_ip地址 来感受一下haproxy的运行方式

在url加上/web-status就可以访问管理界面了

3.安装keepalived

wget http://www.keepalived.org/software/keepalived-1.2.4.tar.gz
tar -zxvf keepalived-1.2.4.tar.gz
cd keepalived-1.2.4
./configure --prefix=/usr/local/keepalived
make && make install

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/keepalived
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
mkdir -p /etc/keepalived/
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf 
chmod +x /etc/init.d/keepalived

写keepalived的配置文件

vi /etc/keepalived/keepalived.conf

内容如下:

# Configuration File for keepalived  

global_defs {
   router_id LVS_DEVEL
}


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

vrrp_instance VI_1 {
    state MASTER                #从keepalived这里改成BACKUP
    interface eth0
    virtual_router_id 51
    priority 104                #从keepalived这里改成100吧,只要从比主小就行,数字是从0~255,数字越大权重越大
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
        chk_http_port
    }
    virtual_ipaddress {
        192.168.207.141
    }
} 

几个注意点:

1. /etc/keepalived/checkHaproxy.sh 一定要加上可执行权限,例如chmod +x /etc/keepalived/checkHaproxy.sh

2. 配置文件写正规些吧,大括号{},要与前面的关键字留有一个空格

写/etc/keepalived/checkHaproxy.sh脚本,如下:
#!/bin/bash
A=`ps -C haproxy --no-header | wc -l`
if [ $A -eq 0 ];then
        /usr/local/sbin/haproxy -f /etc/haproxy.cfg
        echo "Haproxy start"
        sleep 3
        if [ `ps -C haproxy --no-header | wc -l` -eq 0 ];then
                /etc/init.d/keepalived stop
                echo "keepalived stop"
        fi
fi

意思就是先检查haproxy是否启动,如果没有先启动haproxy进程,启动不了则关闭keepalived进程,那边从keepalived,将立马编程主进程,继续工作

这个脚本可以自己写啦,还是挺简单的

4.打开服务,验证


其实就是把3个web服务打开

让后在打开两个主从keepalived服务器,而且keepalived会自动打开haproxy服务的,因为有/etc/keepalived/checkHaproxy.sh吗,哈哈

都打开后,访问http://192.168.207.141就可以轮回访问3个web服务器的内容啦

所以服务打开后,可以在主keepalived上运行

ip addr

将会看到eth0多了个VIP的虚拟地址


为了了解keepalived的作用呢

先把主服务器的keepalived给关掉

/etc/init.d/keepalived stop

查看从keepalived的/var/log/messages日志,可以看到
Apr 18 12:20:23 localhost Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE
Apr 18 12:20:24 localhost Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE
Apr 18 12:20:24 localhost Keepalived_vrrp: VRRP_Instance(VI_1) setting protocol VIPs.
Apr 18 12:20:24 localhost Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.207.141
Apr 18 12:20:24 localhost Keepalived_vrrp: Netlink reflector reports IP 192.168.207.141 added
Apr 18 12:20:24 localhost Keepalived_healthcheckers: Netlink reflector reports IP 192.168.207.141 added
Apr 18 12:20:24 localhost avahi-daemon[4208]: Registering new address record for 192.168.207.141 on eth0.

是的吧,访问http://192.168.207.141呢,还是正常访问,

在把主keepalived服务打开,就可以看到

Apr 18 12:20:29 localhost Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.207.141
Apr 18 12:21:07 localhost Keepalived_vrrp: VRRP_Instance(VI_1) Received higher prio advert
Apr 18 12:21:07 localhost Keepalived_vrrp: VRRP_Instance(VI_1) Entering BACKUP STATE
Apr 18 12:21:07 localhost Keepalived_vrrp: VRRP_Instance(VI_1) removing protocol VIPs.
Apr 18 12:21:07 localhost Keepalived_vrrp: Netlink reflector reports IP 192.168.207.141 removed
Apr 18 12:21:07 localhost Keepalived_healthcheckers: Netlink reflector reports IP 192.168.207.141 removed
Apr 18 12:21:07 localhost avahi-daemon[4208]: Withdrawing address record for 192.168.207.141 on eth0.


这里附上haproxy管理页面的图片,以及一个小实验

访问http://192.168.207.141/web-status,可以看到如下画面

可以看到后端的3个web服务器都是好的,

这时候呢,我把web3的web服务给关了,因为我用的是apache,所以直接运行service httpd stop

然后可以看到


明白了,然后访问http://192.168.207.141也不会出现web的index.html页面了

ok,搞定了,实践亲测,祝君成功


作者:zmj_88888888 发表于2013-4-18 13:30:37 原文链接
阅读:63 评论:0 查看评论

相关 [haproxy keepalived 负载均衡] 推荐:

Haproxy+KeepAlived 负载均衡

- - CSDN博客系统运维推荐文章
软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现. LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载. 还可以使用nginx来实现,不过nginx只工作在7层网络之上. 详细请参考 抚琴煮酒写的“ 软件级负载均衡器(LVS/HAProxy/Nginx)的特点简介和对比”这篇文章,简单很详细,很好.

haproxy负载均衡 xtracluster

- - x-marker的博客
上一篇为xtracluster的安装(http://xmarker.blog.163.com/blog/static/226484057201472610520306/),本篇将记录下使用haproxy在三个数据节点做负载均衡,haproxy可以安装在数据节点,也可以安装在别的节点,如果安装在数据节点,需要注意端口号不能和mysql的3306冲突.

RabblitMQ Cluster + HAProxy(负载均衡)

- - 飞翔的荷兰人
        在本节中,我们主要来学习软件负载均衡器HAProxy在RabbitMQ集群中的使用.         软件负载均衡器HAProxy.         HAProxy的特点是:.         1、HAProxy是支持虚拟主机的,,并能支持上万级别的连接;.         2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作;.

lvs+keepalived 负载均衡

- - CSDN博客系统运维推荐文章
LVS是一个开源的软件,可以实现LINUX平台下的简单负载均衡. LVS是Linux Virtual Server的缩写,意思是Linux虚拟服务器. 目前有三种IP负 载均衡技术(VS/NAT、VS/TUN和VS/DR);八种调度算法(rr,wrr,lc,wlc,lblc,lblcr,dh,sh).

使用HAProxy对MySQL进行负载均衡和状态监控

- Kevin - Michael`s blog
转载请保留原文内容,并声明转载地址:http://www.toplee.com/blog/1284.html. 乐搜(lesoo.com)使用HAProxy已经很久了,但主要用在前端web请求的负载均衡和状态监控上,对于后端的Memcached以及MySQL却一直没有应用,最近对系统架构进行了小规模的整理,把MySQL也收编到了HAProxy下,经过一段时间的使用,体验还是不错的.

使用haproxy做TCP协议负载均衡

- - 行业应用 - ITeye博客
之前有使用过Nginx进行tcp负载均衡,但后来发现nginx总是会跟服务端进行断开连接、断开连接的操作,所以选择一下别的代理进行处理. 写这个的时候,我也只是把haproxy运行成功,而且简单测试了一下,具体适不适合自己的系统还有待测试. 1.下载haproxy:. 从主页下载,我使用的是最新版本,haproxy-1.4.24.tar.gz.

常见分布式负载均衡工具介绍nginx lighttpd haproxy

- - 互联网 - ITeye博客
       在架构系统的时候,通常会涉及到分布式,而处分布式里面最前端的是负载均衡器(当然还有cdn). 在网上搜寻一份,对目前常见的负载均衡器做一些介绍和常见组合,不涉及具体配置. 第一种是常见的硬件有比较昂贵的NetScaler、F5、Radware和Array等商用的负载均衡器,它的优点就是有专业的维护团队来对这些服务进行维护、缺点就是花销太大,所以对于规模较小的网络服务来说暂时还没有需要使用;.

基于域名负载均衡的Haproxy配置

- - 互联网 - ITeye博客
log 127.0.0.1 local0 info #[err warning info debug] //日志位置. daemon #设置成后台运行. nbproc 1 #进程数量. option httplog #http日志格式. retries 3 #三次失败后认为服务器不可用. option redispatch #如果cookie写入了serverId而客户端不会刷新cookie,当serverId对应的服务器挂掉后,强制定向到其他健康的服务器.

Nginx+keepalived做双机热备加tomcat负载均衡

- - 开心平淡对待每一天。热爱生活
   Nginx+keepalived做双机热备加tomcat负载均衡. 一.Nginx配置. 1.安装Nginx所需pcre库. 2.安装Nginx. ./configure: error: SSL modules require the OpenSSL library.Centos需要安装openssl-devel Ubuntu则需要安装:sudo apt-get install libssl-dev.

Nginx+keepalived实现负载均衡和高可用性 in ubuntu

- - ITeye博客
使用Nginx已经有很长一段时间,但是最近才去实践利用Nginx做负载均衡和高可用性. 大致思路:根据keepalived的特性,通过一个虚拟ip来实现主从服务器的切换,如果一台服务器宕机,可以自动切换到另一台备份服务器,从而不影响用户的访问. 以下是我的安装配置步骤,请大家参考指正. 准备两台ubuntu虚拟主机服务器,对应的IP分别是 192.168.1.100   192.168.1.200.