Haproxy+keepalived实现高可用负载均衡

一、简介

HAProxy简介:

HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上

HAProxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作

Keepalived简介:

KeepAlived 是一个类似于layer3, 4 & 5交换机制的软件, 是一个高可用解决方案,通过虚拟IP地址和心跳检测对方状态来实现高可用功能。Keepalived是由两台服务器分别指定Master与Backup两个角色,而指定Master的优先级比Backup的高;所以默认情况下虚拟IP会绑定到Master服务器上,对外提供服务。而Master、Backup服务器会在一定的时间间隔向对方发送心跳信息来检测对方的存活状态,时间间隔一般为2秒钟可以修改,如果Backup发现Master宕机,那么Backup会发送ARP包到网关,然后把虚拟IP绑定到自己的网卡上,此时Backup对外提供服务,实现了自动化的故障转移,当Master恢复的时会重新接管所有资源


vip:192.168.10.16

主Haproxy:192.168.10.141

主Haproxy:192.168.10.142

real server1:192.168.10.157

realserver2:192.168.10.42


二、haproxy环境搭建

1、关闭SElinux、配置防火墙

vi /etc/selinux/config

#SELINUX=enforcing #注释掉

#SELINUXTYPE=targeted #注释掉

SELINUX=disabled #增加

:wq!  #保存退出

setenforce 0 #使配置立即生效


2、创建HAProxy运行账户和组

groupadd haproxy #添加haproxy组

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


3、下载安装依赖包

yum install gcc gcc-c++ openssl-devel popt-devel

下载安装haproxy 

wget http://pkgs.fedoraproject.org/repo/pkgs/haproxy/haproxy1.4.24.tar.gz/86422620faa9759907563d5e0524b98c/

haproxy-1.4.24.tar.gz

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

tar -xvzf haproxy-1.4.24.tar.gz

cd haproxy-1.4.24

make install

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参数
vi  /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 503  #运行haproxy的用户uid(cat /etc/passwd查看)


gid 503  #运行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版本信息






listen	web_proxy 192.168.10.16:80


mode http


balance   source  #本机测试时此项建议注释掉



#option  httpchk /index.php  #检测服务器此文件是否存在,如果没有,则认为服务器连接异常,此参数可以不设置


server     192.168.10.157  192.168.10.157:8105   check  inter  2000  rise 3  fall  3  weight 100   #inter  2000 心跳检测时间;rise 3 三次连接成功,表示服务器正常;fall  3 三次连接失败,表示服务器异常; weight 100 权重设置


server     192.168.10.42  192.168.10.42:8105   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


#####################################################################
:wq! #保存退出
service haproxy start #启动
service haproxy stop  #关闭
service haproxy restart  #重启


注意:备服务器此配置一样

6、设置HAProxy日志

vi  /etc/syslog.conf  #编辑,在最下边增加

# haproxy.log

local0.*          /var/log/haproxy.log

local3.*          /var/log/haproxy.log

:wq! #保存退出

vi  /etc/sysconfig/syslog   #编辑修改

SYSLOGD_OPTIONS="-r -m 0"   #接收远程服务器日志

:wq! #保存退出

service syslog restart  #重启syslog



 
三、Keepalived 环境搭建
<span class="comment" style="padding: 0px; margin: 0px; color: rgb(153, 153, 136); font-style: italic; background-color: inherit;">yum -y install keepalived</span>
<span class="comment" style="padding: 0px; margin: 0px; color: rgb(153, 153, 136); font-style: italic; background-color: inherit;">vi /etc/keepalived/</span><span style="color: rgb(51, 51, 51); font-size: 13px; letter-spacing: 0.5px; line-height: 23px; font-family: 'Courier New'; background-color: rgb(240, 240, 240);"><em>keepalived.conf</em></span>
配置keepalived.conf:
主:
! Configuration File for keepalived


global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id Haprxoy_Master
}


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


vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 101   #主机的优先级,主机优先级一定要大于备机
    advert_int 1
    unicast_src_ip  192.168.10.141  #使用单播发送vrrp心跳,本地ip地址
    unicast_peer {
                  192.168.10.142   #(对端IP地址)
                       }
    authentication {
        auth_type PASS
        auth_pass 1111
    }


    track_script {
     check_haproxy
    }
    virtual_ipaddress {
        192.168.10.16/24 broadcast 192.168.10.255 dev eth0 label eth0:vip
    }
    notify_master "/etc/keepalived/clean_arp.sh  192.168.10.16"  #更新虚拟服务器(VIP)地址的arp记录到网关
}



备:
! Configuration File for keepalived


global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id Haprxoy_Master
}


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


vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    advert_int 1
    unicast_src_ip  192.168.10.142  #使用单播发送vrrp心跳,本地ip地址
    unicast_peer {
                  192.168.10.141   #(对端IP地址)
                       }
    authentication {        auth_type PASS        auth_pass 1111    }    track_script {     check_haproxy    }    virtual_ipaddress {       192.168.10.16/24 broadcast 192.168.10.255 dev eth0 label eth0:vip    }    notify_master "/etc/keepalived/clean_arp.sh  192.168.10.16"  #更新虚拟服务器(VIP)地址的arp记录到网关}

设置HAproxy服务监控脚本

vi  /etc/keepalived/check_haproxy.sh #编辑,添加以下代码

#########################################################

#!/bin/bash

A=`ps -C haproxy --no-header | wc -l`

if [ $A -eq 0 ]

then service haproxy start

sleep 3

if [ `ps -C haproxy --no-header | wc -l ` -eq 0 ]

then service keepalived stop

fi

fi

#########################################################

:wq! #保存退出

chmod +x /etc/keepalived/check_haproxy.sh   #添加执行权限

设置更新虚拟服务器(VIP)地址的arp记录到网关脚本

vi  /etc/keepalived/clean_arp.sh  #编辑,添加以下代码

#!/bin/sh

VIP=$1

GATEWAY=192.168.21.2 #网关地址

/sbin/arping -I eth0 -c 5 -s $VIP $GATEWAY &>/dev/null

:wq!  #保存退出

chmod +x /etc/keepalived/clean_arp.sh  #添加脚本执行权限

service keepalived start #启动

service keepalived stop  #关闭

service keepalived restart  #重启

测试HAProxy+Keepalived是否正常运行

进入 http://192.168.10.16/haproxy-status

输入用户名,密码

admin

123456

在192.168.10.141上:
 
 

发现VIP:192.168.10.16指向192.168.10.141

service keepalived stop 后


在192.168.10.142上:
 
 

发现VIP:192.168.10.16指向192.168.10.142

 
说明keepalived主备生效了!!!
 
转载自:http://blog.csdn.net/dandan2zhuzhu/article/details/51141760

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值