现在的位置: 首页 > Linux > 正文

Haproxy 服务部署(利用Keepalived实现Haproxy 高可用)

时间:2015年05月27日 | 分类:Linux | 评论:0 条 | 浏览:3,110 次

一、Haproxy 简述:
HAProxy是一个开源的、高性能的,基于TCP(第四层)和HTTP(第7层)应用的负载均衡软件。使用HAProxy可以快速可靠地实现基于TCP和HTTP应用的负载均衡解决方案。
作为一个专业的负载均衡软件,他有如下优点:
1.可靠性和稳定性非常好,可以与硬件级的F5负载均衡设备想媲美
2.最高可以同时维护40000-50000个并发连接,单位时间处理的最大请求数达20000个,最大数据处理能力可达10Gbps。
3.支持多达8种负载均衡算法,同时也支持session保持
4.支持虚拟主机功能,使实现web负载均衡更加灵活
5.从HAProxy 1.3版本后开始支持连接拒绝、全透明代理等功能,这些功能是其他负载均衡器所不具备的。
6.有功能强大的监控页面,通过此页面可以实时了解系统的运行状况。
7.拥有功能强大的ACL支持。
HAProxy是借助操作系统的技术特性来实现性能最大化的,因此要想发挥HAProxy的最大性能需要对操作系统性能进行优化。
HAProxy非常适用于那些并发量特别大且需要持久连接或四层和七层处理机制的web系统,例如门户网站或电子商务网站等。
HAProxy也可以用于MySQL数据库(读操作)的负载均衡。

HAProxy的官方文档地址:

http://cbonte.github.io/haproxy-dconv/

二、Haproxy的部署:
1.Haproxy的下载、安装:
下载地址:http://www.haproxy.org/
# 默认已经下载好了
tar -xf haproxy-1.5.11.tar.gz
cd haproxy-1.5.11
make TARGET=linux26 CPU=x86_64 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy

2.Haproxy 配置文件 修改:[ 配置文件具体含义,参考 linux -- linux 配置文件详解 -- keepalived 配置文件详解 ]
cd /usr/local/haproxy
mkdir etc logs
cp examples/haproxy.cfg /usr/local/haproxy/etc
cd /usr/local/haproxy/etc
vim haproxy.cfg
global
log 127.0.0.1 local0 info
maxconn 4096
chroot /usr/local/haproxy
uid 99
gid 99
daemon
nbproc 1
pidfile /usr/local/haproxy/logs/haproxy.pid

defaults
mode http
option redispatch
option abortonclose
timeout connect 5000ms
timeout client 30000ms
timeout server 3000ms
log 127.0.0.1 local0 err
balance roundrobin

listen admin_stats
bind 0.0.0.0:8888
mode http
option httplog
stats refresh 30s
stats uri /haproxy-status
stats realm Welcome\ login\ Haproxy
stats auth admin:admin
stats hide-version
stats admin if TRUE

listen test1
bind :12345
mode http
server t1 172.16.10.55:80
server t2 172.16.10.56:80

#listen test2 :80
# option httpclose
# option forwardfor
# server s1 192.168.1.101:8080 check weight 1 minconn 1 maxconn 3 check inter 40000
# server s2 192.168.1.102:8080 check weight 1 minconn 1 maxconn 3 check inter 40000

3.编写Haproxy启动脚本:
vim /etc/init.d/haproxy
#!/bin/bash
#chkconfig: 2345 10 90
#description:haproxy
NAME="haproxy"
DESC="Haproxy daemon"
BASE_DIR="/usr/local/haproxy"
CONF=$BASE_DIR/etc/haproxy.cfg
PIDFILE=$BASE_DIR/logs/haproxy.pid
SCRNAME=/etc/init.d/$NAME
ARGV="$@"

start()
{
echo "START HAPoxy SERVERS"
$BASE_DIR/sbin/haproxy -f $CONF
}
stop()
{
echo "STOP HAPoxy Listen"
kill -TTOU $(cat $PIDFILE)
echo "STOP HAPoxy process"
kill -USR1 $(cat $PIDFILE)
}
case $ARGV in
start)
start
ERROR=$?
;;
stop)
stop
ERROR=$?
;;
restart)
stop
start
ERROR=$?
;;
*)
echo "Useage:$SCRNAME [start|restart|stop]"
esac
exit $ERROR

# 给予脚本执行权限:
chmod +x /etc/init.d/haproxy
# 脚本添加开机启动:
chkconfig -add haproxy
# 注:
如果报如下错:
service haproxy does not support chkconfig
解决方法:
在/etc/init.d/haproxy 中添加下面两句到 #!/bin/bash之后,添加如下内容:
# chkconfig: 2345 10 90
# description:haproxy
----其中2345是默认启动级别,级别有0-6共7个级别。
----等级0表示:表示关机
----等级1表示:单用户模式
----等级2表示:无网络连接的多用户命令行模式
----等级3表示:有网络连接的多用户命令行模式
----等级4表示:不可用
----等级5表示:带图形界面的多用户模式
----等级6表示:重新启动
----10是启动优先级,90是停机优先级,优先级范围是0-100,数字越大,优先级越低。

4.日志支持功能添加
# vim /etc/rsyslog.conf
在最下边增加
local0.* /usr/local/haproxy/logs/haproxy.log
# 重启日志服务
/etc/init.d/rsyslog restart

5.haproxy测试:
(1).10.55/10.56默认web服务已经部署好,默认80 端口;
(2).启动haproxy:
/etc/init.d/haproxy start
(3).登录haproxy监控页面:

http://172.16.10.54:8888/haproxy-status

(4).登录haproxy测试负载均衡:[ 不断刷新,观察变化 ]

http://172.16.10.54:12345/

三、keepalived 部署:
1.10.53/10.54安装keepalived
keepalived 的安装,请参照keepalived服务部署一篇,下面主要讲解相关配置

2.修改keepalived配置文件:vim /etc/keepalived/keepalived.conf [ 没有就创建 ]
global_defs {
notification_email
{
13501960667@139.com # 收件邮箱
}
notification_email_from mysql_lab@localhost # 发件邮箱
smtp_server localhost # 发件服务器
smtp_connect_timeout 30 # 超时时间
router_id HAOWU_55
}
vrrp_script chk_haproxy {
script "/usr/local/keepalived/chk_haproxy.sh"
# interval 2
# weight 2
}
vrrp_sync_group VG1 {
group
{
VI_1
}
}
vrrp_instance VI_1 {
# state MASTER
state BACKUP
nopreempt
interface eth0
virtual_router_id 96
priority 110
advert_int 1
authentication
{
auth_type PASS
auth_pass Pa$$w0rd
}
track_script {
chk_haproxy # 监测haproxy进程状态
}
virtual_ipaddress
{
172.16.10.251
}
}

# 蓝色部分: 是相对其它脚本需要添加的内容;
# 红色部分:是必须要注释掉的部分。如果,不注释掉,keepalived将无法调用脚本;
# 至于master 和backup 配置文件的异同和要修改的部分,请参考keepalived服务部署一篇.

3.编写haproxy 检测脚本:
vim /usr/local/keepalived/chk_proxy.sh
#!/bin/bash
A=`ps -C haproxy --no-header |wc -l`
# 当检测到haproxy宕机后,试图重新启动haproxy,如果是测试,建议先注释掉所有红色部分代码
if [ $A -eq 0 ];then
/etc/init.d/haproxy start
sleep 3
if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];then
/etc/init.d/keepalived stop
fi
fi

4.给予检测脚本执行权限:
chmod +x /usr/local/keepalived/chk_proxy.sh

5.官网建议的内存优化配置:
echo 1024 60999 > /proc/sys/net/ipv4/ip_local_port_range
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
echo 4096 > /proc/sys/net/ipv4/tcp_max_syn_backlog
echo 262144 > /proc/sys/net/ipv4/tcp_max_tw_buckets
echo 262144 > /proc/sys/net/ipv4/tcp_max_orphans
echo 300 > /proc/sys/net/ipv4/tcp_keepalive_time
echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle
echo 0 > /proc/sys/net/ipv4/tcp_timestamps
echo 0 > /proc/sys/net/ipv4/tcp_ecn
echo 1 > /proc/sys/net/ipv4/tcp_sack
echo 0 > /proc/sys/net/ipv4/tcp_dsack

四、下面就可以进行测试了
1.启动所有服务:
先启动haproxy,再启动keepalived,再启动 55 56上的web
2.输入 172.16.10.251:12345 测试
期间停止haproxy,看vip是否漂移
网站是否能正常打开

×