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

来源:互联网 发布:js数组去重的方法 编辑:程序博客网 时间:2024/05/16 03:26

一、简介

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.1globallog 127.0.0.1   local0 #在本机记录日志log 127.0.0.1   local1 notice#log loghost    local0 infomaxconn 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     globallog  127.0.0.1   local3  #日志文件设置mode    http  #运行模式tcp、http、healthoption  httplogoption  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版本信息listenweb_proxy 192.168.10.16:80mode httpbalance   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.htmlerrorfile 403 /etc/haproxy/errorfiles/403.httperrorfile 500 /etc/haproxy/errorfiles/500.httperrorfile 502 /etc/haproxy/errorfiles/502.httperrorfile 503 /etc/haproxy/errorfiles/503.httperrorfile 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 keepalivedglobal_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 keepalivedglobal_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
原创粉丝点击