本文Centos6.0
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代 理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
这里是两台Haproxy负责后台的控制;使用keepalived实现热备;下面就是正题了:
角色; 主机名; ip;
Haproxy1; node1 192.168.244.147
Haproxy2; node2 192.168.244.148
S1(web1); lv1 192.168.244.149
S2(web2); lv2 192.168.244.150
Haproxy的两台服务器提供的Vip:192.168.244.200
1、首先在lv1、lv2上部署httpd
1
|
[root@lv1 ~]# yum install -y httpd
|
1
|
[root@lv2 ~]# yum install -y httpd
|
将这两台的Index.html全部标记;
分别显示lv1、lv2
访问测试是否正常
2、分别在node1、node2上部署haproxy、keepalived
1
|
[root@node1 ~]# yum install -y keepalived haproxy
|
1
|
[root@node2 ~]# yum install -y keepalived haproxy
|
接下来配置haproxy
node1:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
####################全局配置信息########################
global
log
127.0
.
0.1
local0 #[err warning info debug]
chroot /
var
/lib/haproxy #chroot运行的路径
pidfile /
var
/run/haproxy.pid
#haproxy的pid存放路径,启动进程的用户必须有权限访问此文件
maxconn
4000
#默认最大连接数
user haproxy #所属运行的用户
group haproxy #所属运行的用户组
nbproc
1
#进程数量(可以设置多个进程提高性能)
daemon #以后台形式运行haproxy
#####################默认的全局设置######################
##这些参数可以被利用配置到frontend,backend,listen组件##
defaults
mode http #所处理的类别 (#
7
层 http;
4
层tcp )
log global
option httplog #日志类别http日志格式
option dontlognull #不记录健康检查的日志信息
option httpclose #每次请求完毕后主动关闭http通道
option forwardfor
#如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip
option redispatch #serverId对应的服务器挂掉后,强制定向到其他健康的服务器
retries
3
#
3
次连接失败就认为服务不可用,也可以通过后面设置
stats refresh
20
#统计页面刷新间隔
timeout connect 10s #连接超时
timeout client
5000
#客户端超时
timeout server
50000
#服务器超时
maxconn
3000
balance roundrobin #默认的负载均衡的方式,轮询方式
stats uri /haproxy-stats #监控页面的url
listen proxy *:
8080
option httpchk HEAD /index.html #心跳检测的文件
server server1
192.168
.
244.149
:
80
cookie server1 check inter
1500
rise
3
fall
3
#服务器定义,cookie
1
表示serverid为web1,check inter
1500
是检测心跳频率rise
3
是
3
次正确认为服务器可用
#fall
3
是
3
次失败认为服务器不可用,weight代表权重
server server2
192.168
.
244.150
:
80
cookie server2 check inter
1500
rise
3
fall
3
|
node2的haproxy配置是一样的,copy过去就可以了
3、在node1、node2上配置keepalived
node1:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
! Configuration File
for
keepalived
global_defs {
notification_email {
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server
192.168
.
200.1
smtp_connect_timeout
30
router_id LVS_DEVEL
}
vrrp_script chk_http_port {
script
"/etc/keepalived/check_haproxy.sh"
interval
2
#脚本执行间隔
weight -
20
#脚本结果导致的优先级变更:
20
表示优先级+
20
;-
20
则表示优先级-
20
}
vrrp_instance VI_1 {
state MASTER
interface
eth0
virtual_router_id
51
priority
100
advert_int
1
authentication {
auth_type PASS
auth_pass
1111
}
track_script {
chk_http_port
}
virtual_ipaddress {
192.168
.
244.200
}
}
|
编辑脚本:
1
2
3
4
5
6
7
8
9
10
11
12
|
[root@node1 ~]# cat /etc/keepalived/check_haproxy.sh
#!/bin/bash
A=`ps -C haproxy --no-header |wc -l`
if
[ $A -eq
0
];then
/etc/init.d/haproxy restart
echo
"启动haproxy"
&> /dev/
null
sleep
3
if
[ `ps -C haproxy --no-header |wc -l` -eq
0
];then
/etc/init.d/keepalived stop
echo
"关闭keepalived"
&> /dev/
null
fi
fi
|
node2和上面的一样,只是将priority
改成 90;
state 改成 BACKUP;
4、分别启动keepalived和haproxy
1
2
3
4
|
[root@node1 ~]# /etc/init.d/haproxy start
正在启动 haproxy:
[root@node1 ~]# /etc/init.d/keepalived start
正在启动 keepalived: [确定]
|
5、测试
node2:
1
|
[root@node2 ~]# tcpdump vrrp
|
说明现在的vip是node1是提供服务
当你在node1上stop掉keepalived后,你会发现
node2进行了顶替
现在进行测试web
现在打开http://192.168.244.200:8080/haproxy-stats
当你在lv1上将httpd停掉后:
1
2
|
[root@lv1 ~]# /etc/init.d/httpd stop
停止 httpd: [确定]
|
你会发现:
haproxy进行了自动剔除,当你恢复后,就自动顶上了;
简单应用就写到这里了~~欢迎大家拍砖,建议~~
本文转自 西索oO 51CTO博客,原文链接:http://blog.51cto.com/lansgg/1212859