haproxy+keepalived

Haproxy+keepalived

       HAProxy 相比 LVS 的使用要简单很多,功能方面也很丰富。当前,HAProxy 支持两种主要的代理模式:"tcp"也即 4 层(大多用于邮件服务器、内部协议通信服务器等),和 7 层(HTTP)。在 4 层模式 下,HAProxy 仅在客户端和服务器之间转发双向流量。7 层模式下,HAProxy 会分析协议,并且能通过允许、拒绝、交换、增加、修改或者删除请求(request)或者回应(response)里指定内容来控制协议,这种操作要基于特定规则。
HAProxy 主要在于它有以下优点:
一、 免费 开源, 稳定性 也是 非常好 ,这个 可通 过我做 的一 些小项 目可以 看出 来,单Haproxy 也跑得不错,稳定性可以与 LVS 相媲美;
二、HAProxy 可以作为 MySQL、邮件或其它的非 web 的负载均衡,我们常用于它作为MySQL(读)负载均衡;
三、自带强大的监控服务器状态的页面,实际环境中我们结合 Nagios 进行邮件或短信报警;
四、HAProxy 支持虚拟主机。在做反向代理服务器的负载均衡时,我们通常会使用 nginx 的均衡配置。其实,
haproxy 的负载均衡也是属于这一类的。反向代理服务器,支持双机热备支持虚拟主机,但其配置简单,拥有非常不错的服务器健康检查功能,当其代理的后端服务器出现故障, HAProxy会 自 动 将 该 服 务 器 摘 除 , 故 障 恢 复 后 再 自 动 将 该 服 务 器 加 入 。 新 的 1.3 引 入 了frontend,backend;frontend 根据任意 HTTP 请求头内容做规则匹配,然后把请求定向到相关的 backend。


       keepalived 是一个类似于 layer3, 4 & 5 交换机制的软件,也就是我们平时说的第 3 层、第 4 层和第 5 层交换。Keepalived 的作用是检测 web 服务器的状态,如果有一台 web 服务器死机,或工作出现故障,Keepalived 将检测到,并将有故障的 web 服务器从系统中剔除,当 web 服务器工作正常后 Keepalived 自动将 web 服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的 web 服务器。keepalived 可提供 vrrp 以及 health-check 功能,可以只用它提供双机浮动的 vip(vrrp 虚拟路由功能),这样可以简单实现一个双机热备高可用功能。keepalived 是一个类似于layer3, 4 & 5 交换机制的软件,也就是我们平时说的第 3 层、第 4 层和第 5 层交换。Keepalived 的作用是检测 web 服务器的状态。


[root@server1 ~]# tar zxf keepalived-1.3.5.tar.gz
##解压
[root@server1 ~]# cd keepalived-1.3.5
##进入目录
[root@server1 keepalived-1.3.5]# ls
##显示目录中的内容
[root@server1 keepalived-1.3.5]# ./configure --prefix=/usr/local/keepalived
##配置
[root@server1 keepalived-1.3.5]# yum install libnl* -y
##安装依赖包
[root@server1 keepalived-1.3.5]# make && make install
##安装,配置
修改一下/usr/local/keepalived/etc/keepalived/keppalived.conf 这个配置文件就可以用了,以下是我的环境,172.25.80.1 和 172.25.80.4 是两个 VIP,可以在两台服务器之间飘动:


3 global_defs {

4 notification_email {

5 root@localhost
6}
7 notification_email_from Alexandre.Cassen@firewall.loc
8 smtp_server 127.0.0.1
9 smtp_connect_timeout 30
10 router_id LVS_DEVEL
11 vrrp_skip_check_adv_addr
12 vrrp_strict
13 vrrp_garp_interval 0
14 vrrp_gna_interval 0
15 }
16
17 vrrp_instance VI_1 {
18 state MASTER
19 interface eth0
20 virtual_router_id 51
21 priority 100
22 advert_int 1
23 authentication {
24 auth_type PASS
25 auth_pass 1111
26}
27 virtual_ipaddress {
28 172.25.80.100
29}
30 }
31
32 virtual_server 172.25.80.100 80 {
33 delay_loop 6
34 lb_algo rr
35 lb_kind DR
36 #persistence_timeout 50
37 protocol TCP
38
39 real_server 172.25.80.2 80 {
40 weight 1
41 TCP_CHECK {
42 connect_timeout 3
43 nb_get_retry 3
44 delay_before_retry 3
45}
46}

47

48

49 real_server 172.25.80.3 80{
50 weight 1
51 TCP_CHECK {
52 connect_timeout 3
53 nb_get_retry 3
54 delay_before_retry 3
55 }
56 }
主机和备机的配置文件是一样的,通过启、停 keepalived 这个服务即可观察到 VIP 的飘动。


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

我的环境:
haproxy keepalived 主:172.25.80.1
haproxy keepalived 备:172.25.80.2
vip:172.25.80.100
web:172.25.80.2:80 172.25.80.2:8000


一:安装过程,在 192.168.1.192 上:

keepalived 的安装:
tar zxf keepalived-1.3.5tar.gz                                                                         ##解压
ln -s /usr/src/kernels/2.6.18-128.el5-i686/ /usr/src/linux                           ##做软连接
cd keepalived-1.3.5                                                                                         ##进入目录
./configure                                                                                                                
--prefix=/--with-kernel-dir=/usr/src/kernels/2.6.18-128.el5-i686/              ##配置
make && make install                                                                                     ##安装,编译

cd /usr/local/keepalived/etc/keepalived                                                         ##进入目录 

mv keepalived.conf keepalived.conf.default                                                   ##重命名
vim keepalived.conf                                                                                           ##编辑配置文件


! Configuration File for keepalived

--mandir=/usr/local/share/man/
vrrp_script chk_http_port {
script "/etc/keepalived/check_haproxy.sh"
interval 2
weight 2
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER                                  ##172.25.80.4 上改为 BACKUP
interface eth0

virtual_router_id 51

priority 100                                       ##172.25.80.4 上改为 50                                           

advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port
}
virtual_ipaddress {
172.25.80.100
}
}
}
vim /etc/keepalived/check_haproxy.sh
#!/bin/bash
A=`ps -C haproxy --no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg
sleep 3
if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];then
/etc/init.d/keepalived stop
fi
fi
#chmod 755 /etc/keepalived/check_haproxy.sh


haproxy 的安装(主备都一样):

tar zxf haproxy-1.4.23.tar.gz                             ##解压
cd haproxy-1.4.23                                             ##进入目录
make TARGET=linux26 PREFIX=/usr/local/haproxy install                      ##安装
cd /usr/local/haproxy/                                         ##进入目录
mkdir conf logs                                                 ##创建目录
cd conf                                                               ##进入目录
vim haproxy.cfg                                                 ##编辑配置文件
global
log 127.0.0.1 local3 info
maxconn 4096
user nobody
group nobody
daemon
nbproc 1pidfile /usr/local/haproxy/logs/haproxy.pid
defaults
maxconn 2000
contimeout 5000
clitimeout 30000
srvtimeout 30000
mode http
log global
log 127.0.0.1 local3 info
stats uri /admin?stats
option forwardfor
frontend http_server
bind :80
log global
default_backend info_cache
acl test hdr_dom(host) -i test.domain.com
use_backend cache_test if test
backend info_cache
#balance roundrobin
balance source
option httpchk HEAD /haproxy.txt HTTP/1.1\r\nHost:172.25.80.2
server inst2 172.25.80.2:80 check inter 5000 fall 3
backend cache_test
balance roundrobin
#balance source
option httpchk HEAD /haproxy.txt HTTP/1.1\r\nHost:test.domain.com
server inst1 192.168.1.187:8000 check inter 5000 fall 3


一.安装过程,在 172.25.80.1 上:

keepalived 的安装:
#tar -zxf keepalived-1.1.17.tar.gz
#ln -s /usr/src/kernels/2.6.18-128.el5-i686/ /usr/src/linux
#cd keepalived-1.1.17
#./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.18-128.el5-i686/
#make && make install
#cd /etc/keepalived/
#mv keepalived.conf keepalived.conf.default
#vi keepalived.conf
! Configuration File for keepalived
--mandir=/usr/local/share/man/vrrp_script chk_http_port {
script "/etc/keepalived/check_haproxy.sh"
interval 2
weight 2
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER #192.168.1.193 上改为 BACKUP
interface eth0
virtual_router_id 51
priority 150 #192.168.1.193 上改为 120
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port
}
virtual_ipaddress {
192.168.1.200
}
}
}
#vi /etc/keepalived/check_haproxy.sh
#!/bin/bash
A=`ps -C haproxy --no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg
sleep 3
if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];then
/etc/init.d/keepalived stop
fi
fi
#chmod 755 /etc/keepalived/check_haproxy.sh

 

二:再两台机器上都分别启动:
/etc/init.d/keepalived start (这条命令会自动把 haproxy 启动)


三:测试:

1.再两台机器上分别执行 ip add
主: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:0c:29:98:cd:c0 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.192/24 brd 192.168.1.255 scope global eth0
inet 192.168.1.200/32 scope global eth0
inet6 fe80::20c:29ff:fe98:cdc0/64 scope link
valid_lft forever preferred_lft forever


备: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000

link/ether 00:0c:29:a6:0c:7e brd ff:ff:ff:ff:ff:ff
inet 192.168.1.193/24 brd 255.255.255.254 scope global eth0
inet6 fe80::20c:29ff:fea6:c7e/64 scope link
valid_lft forever preferred_lft forever


2.停掉主上的 haproxy,3 秒后 keepalived 会自动将其再次启动


3.停掉主的 keepalived,备机马上接管服务

备: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:0c:29:a6:0c:7e brd ff:ff:ff:ff:ff:ff
inet 192.168.1.193/24 brd 255.255.255.254 scope global eth0
inet 192.168.1.200/32 scope global eth0
inet6 fe80::20c:29ff:fea6:c7e/64 scope link
valid_lft forever preferred_lft forever


4.更改 hosts

192.168.1.200 test.com
192.168.1.200 test.domain.com


通过 firefox 测试,可以发现

westos.org 的请求发向了 172.25.80.2:80
www.westos.org 的请求发向了 172.25.80.2:8000##172.25.80.4 上改为 BACKUPpriority 100
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值