全部博文(151)
分类: LINUX
2009-11-23 17:16:17
程序因为他的配置简单,维护容易而广为各位linuxer使用,蚊子自然也不会放过这么好的一款软件了,关于keepalived的做高可用的文章已经满google都是了,蚊子自然就不在这里赘述了。蚊子这篇文章讲述的是如何只使用两台机器使用keepalived搭建web服务的和。
之前在蚊子的《》一篇文章中,介绍了使用,和squid来搭建高可用负载均衡的上网服务器,有兴趣的朋友可以对比一下现在这篇和上篇。
一、试验环境
vmware6.0
linux01 192.168.211.128 CentOS release 5.3 (Final)
linux02 192.168.211.129 CentOS release 5.3 (Final)
web:httpd-2.2.3-31.el5.centos
keepalived版本:keepalived-1.1.19.tar.gz
二、安装程序
1、keepalived的安装
首先到下载最新的keepalived程序
# tar zxvf keepalived-1.1.19.tar.gz
# cd keepalived-1.1.19
# ./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.18-128.el5-i686
# make
# make install# cp keepalived/etc/init.d/keepalived.rh.init /etc/init.d/keepalived
# chmod +x /etc/init.d/keepalived
# cp keepalived/etc/init.d/keepalived.sysconfig /etc/sysconfig/keepalived
2、web的安装
因为蚊子只是为了实现功能,所以只使用了centos自己的apache,如果默认系统没有按照httpd,使用
# yum –y install httpd
3、ipvsadm的安装
ipvsadm的安装也很简单,如果系统默认没有,则使用
# yum –y install ipvsadm
以上两个步骤在两台机器上是一样的。
三、 配置部分
1、linux01上的配置
1.1、keepalived的配置
编辑/etc/keepalived/keepalived.conf
# vi /etc/keepalived/keepalived.conf ,添加如下内容
! Configuration File for keepalived
global_defs {
notification_email {
admin@example.com
}
notification_email_from admin@example.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id linux01
}vrrp_instance VI_1 { #定义一个实例
state BACKUP #设置为backup,然后通过priority控制哪台提升为主
interface eth0
virtual_router_id 51
priority 100
nopreempt #在priority高的这台设置这个参数,方便当主恢复后
advert_int 1 #可以自动接管
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.211.110 dev eth0 label eth0:0 #这里使用label标签启用eth0:0
}
}virtual_server 192.168.211.110 80 { #这里往下是定义LVS
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
protocol TCPreal_server 127.0.0.1 80 { #其中一台是本地web服务
weight 1
TCP_CHECK {
connect_timeout 3
}
}
real_server 192.168.211.129 80 { #另一台的web服务
weight 1
TCP_CHECK {
connect_timeout 3
}
}
}
1.2、web配置
web使用apache默认的配置,唯一修改的就是添加了自己的index.html文件,为了方便之后的测试
# echo “linux01”>/var/www/html/index.html
1.3、关于本机启动回环地址
众所周知,要是用lvs的dr模式,必须在realserver上启动回环地址,所以,搭建两台机器的负载均衡,当然就得在本机也启动相应的回环地址,才能实现所要的功能,脚本如下
# vi /usr/local/bin/startlo
#!/bin/sh
VIP=192.168.211.110
case "$1" in
stop)
# close lo:0 interfaceecho $"Close lo:0 interface"
/sbin/route del -host $VIP dev lo:0
/sbin/ifconfig lo:0 down
echo "0">/proc/sys/net/ipv4/conf/all/arp_announce
echo "0">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0">/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0">/proc/sys/net/ipv4/conf/lo/arp_ignore
;;
start)
# start lo:0 interfaceecho $"Start lo:0 interface"
/sbin/ifconfig lo:0 $VIP/32 broadcast $VIP up
/sbin/route add -host $VIP dev lo:0
echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore
;;
*)
echo $"Usage: $0 (start|stop)"
exit 1
;;
esac
但由于keepalived不像里有ldirectord来控制回环地址的启动和停止,所以我们需要人为的判断应该在哪台机器上启动回环地址,所以蚊子就写了下面的一个脚本,
# vi /usr/local/bin/check_interface
#!/bin/bash
#
#作者:蚊子
#
#脚本说明:
#本脚本用于判断当前server是否是master
#如果当前server不是master,则启动回环地址
#否则停止回环地址
#
#VIP_interface请根据自己的情况自行设定,这个是VIP接口
#lo_interface请根据自己的情况自行设定,是回环地址接口VIP_interface="eth0:0"
lo_interface="lo:0"i=10
while [ $i != 0 ]
do
/sbin/ifconfig |grep $VIP_interface &>/dev/null
retval=$?
if [ ! $retval -eq 0 ];then
/sbin/ifconfig |grep $lo_interface &>/dev/null
retval=$?
if [ ! $retval -eq 0 ];then
/usr/local/bin/startlo start
fi
else
/sbin/ifconfig |grep $lo_interface &>/dev/null
retval=$?
if [ $retval -eq 0 ];then
/usr/local/bin/startlo stop
fi
fi
i=10
sleep 10
done
2、linux02上的配置
2.1、keepalived的配置
具体的配置这里就不给出了,请参考linux01上的配置,唯一的区别
A、priority的值小于linux01上值,蚊子设置为50
B、在vrrp_instance VI_1的配置中不用设置nopreempt
C、修改realserver部分的ip为本机和另外一台server的ip地址
2.2、web的配置
apache的配置和linux01一样使用默认配置,同意是编辑默认的index.html文件
# echo “linux02”>/var/www/html/index.html
2.3、本地回环地址的设置
这部分内容和linux01上的一样,相关脚本可以拷贝过来直接使用
四、启动测试
到此,一切准备就绪就可以测试了
首先将所有需要的脚本设置可执行权限。依次启动相应的服务
A、# /etc/init.d/httpd start
B、# /usr/local/bin/check_interface &
C、# /etc/init.d/keepalived start
如果没有任何报错,说明服务已经启动,keepalived的日志存放在/var/log/messages中,如果有错误,请自行查看
测试1:当前状态下测试负载均衡情况
方法:打开ie浏览器,输入,然后不断用ctrl+F5强制刷新,可以看到网页内容在linux01和linux02中切换
测试2:停止linux01的keepalive,测试负载均衡情况
方法:
A、/etc/init.d/keepalived stop
然后等待几秒可以看到linux01上的lo:0地址已经启动,而linux02上的lo:0已经停止B、打开ie浏览器,输入,然后不断用ctrl+F5强制刷新,可以看到网页内容在linux01和linux02中切换
测试3:开启linux01上的keepalived,观察linux01是否切换回master
方法:启动keepalived程序,使用ifconfig观察linux01上已经启动了eth0:0接口,同时lo:0接口停止,linux02上eth0;0接口停止,同时lo:0接口启动
原文