keepalived+haproxy
做前说明:
1、MASTER和BACKUP主机各有2个ip,eth1为外网ip,但外网ip地址只用1个即可
2、先把BACKUP主机的haproxy服务启动(可以先把外网ip给它),启动后再把外网ip给MASTER主机
3、MASTER主机宕后又正常使用前应先把haproxy服务给启动,可以先不联网启动,启动后再联网
4、最好给BACKUP主机的eth1设个ip,随意设,不用在同一网段,瞎写都行,因为没有ip的话,MASTER宕后再启动后2台机子将都会那个外网ip,会产生混乱
先在主机上搭好keepalived,目的是建一个能访问的外网ip,然后再搭haproxy,借助这个外网ip来访问,就可以实现热备份或者说主、备切换同时负载均衡的效果
Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,让没问题的服务器顶上,当web服务器工作正常后再接过去原来的服务
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案
http://www.keepalived.org/software/keepalived-1.1.19.tar.gz
http://haproxy.1wt.eu/download/1.3/src/haproxy-1.3.20.tar.gz
MASTER主机:
1、搭建keepalived服务
# tar zxf keepalived-1.1.19.tar.gz
# cd keepalived-1.1.19
# ./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.18-164.el5-i686/
# make && make intall
# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
# mkdir /etc/keepalived
# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
[email protected] (当IP发生迁移等事件的时候发送邮件到指定邮箱)
}
notification_email_from [email protected] (邮件发送方)
smtp_server 127.0.0.1 (邮件外发服务器地址)
smtp_connect_timeout 30 (邮件超时时间为30秒)
router_id LVS_DEVEL (一个实例的标识)
}
vrrp_instance VI_1 {
State BACKUP (设置服务器模式,注要大写)
interface eth1 (实例网卡,也就是提供服务的网卡)
virtual_router_id 51
priority 100 (设定权值为100 主备之间的权值差最好大于50 权值范围为0~255)
advert_int 1 (检查时间为1秒)
authentication { (认证方式为密码认证)
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
200.200.200.1 (外网ip)
}
}
后面的内容不用改
:wq
启动keepalived
# service keepalived start
开机自启动
# chkconfig --add keepalived
# chkconfig --level 35 keepalived on
# ip a
3: eth1: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:01:11:2a brd ff:ff:ff:ff:ff:ff
inet 200.200.200.1/32 scope global eth0
inet6 fe80::20c:29ff:fe01:112a/64 scope link
其它主机ping200.200.200.1是可以ping通的,访问页面也是可以的
2、搭建haproxy服务
# tar zcvf haproxy-1.3.20.tar.gz
# cd haproxy-1.3.20
# vi Makefile
PREFIX = /usr/local/haproxy (原为PREFIX = /usr/local)
:wq
# make TARGET=linux26
# make install
haproxy应用时有2种方式,linsten方式和frontend+backend方式
方式一(listen):
# vi /usr/local/haproxy/haproxy.cfg
global
log 127.0.0.1 local0
maxconn 4096
chroot /usr/local/haproxy
uid 99
gid 99
daemon
nbproc 1
pidfile /usr/local/haproxy/haproxy.pid
defaults
log global
log 127.0.0.1 local3
option httplog
option httpclose
option dontlognull
option forwardfor
option redispatch
retries 2
maxconn 2000
mode http
stats uri /haproxy-stats
stats auth ming:123456
stats refresh 30s
monitor-uri /site_status
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen web 200.200.200.1:1080
balance roundrobin
server s1 192.168.1.10:80 weight 3 check
server s2 192.168.1.12:80 weight 3 check
:wq
方式二(frontend+backend):
# vi /usr/local/haproxy/haproxy.cfg
global
log 127.0.0.1 local0
maxconn 4096
chroot /usr/local/haproxy
uid 99
gid 99
daemon
nbproc 1
pidfile /usr/local/haproxy/haproxy.pid
defaults
log global
log 127.0.0.1 local3
option httplog
option httpclose
option dontlognull
option forwardfor
option redispatch
retries 2
maxconn 2000
mode http
stats uri /haproxy-stats
stats auth ming:123456
stats refresh 30s
monitor-uri /site_status
contimeout 5000
clitimeout 50000
srvtimeout 50000
frontend web 200.200.200.1:1080
default_backend aa
backend aa
balance roundrobin
server yang 192.168.1.10:80 weight 5 check
server ming 192.168.1.12:80 weight 3 check
:wq
启动haproxy
# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg
开机自启动:
# vi /etc/rc.local
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg
:wq
查看haproxy页面:
http://200.200.200.1:1080/haproxy-status
用户名:ming 密码:123456
验证效果:
在2主机上分别建2个页面1.html 内容写各自主机ip
http://200.200.200.1:1080/1.html
第一次会显示192.168.1.10
第二次会显示192.168.1.12
注:
1、1080是haproxy的端口号,是随意写的,可改
2、电脑重启后/etc/init.d/httpd 会被改为/etc/init.d/httpd.rpmorig ,要自己改回来,chkconfig开机启动命令也要再重写一遍,原因不详
BACKUP主机:
其步骤和MASTER主机步骤一样,只需把MASTER改成BACKUP 及 priority 100 改为50即可,haproxy步骤和MASTER主机一样,一点不用变
验证:
1、用http://200.200.200.1:1080/1.html来访问,能实现负载均衡
2、在MASTER主机宕后,BACKUP主机会自动接过来haproxy服务,并且保证了客户访问不会受影响(还是用外网ip200.200.200.1:1080访问)
3、当MASTER主机正常后,200.200.200.1又会回到MASTER主机上,haproxy服务也就自然接了回去