www.moko.cc ----李俊
QQ:5161155
最近学习了lvs+keepalived的高可用,个人觉得比heartbeat+ldirectord+lvs要简单很多,下午没什么工作。
总结一下学习心得吧,大牛、老鸟们可以路过了 ·嘿嘿
至于什么是lvs 什么是heartbeat 什么是keepalived ,如果不懂请GOOGLE一下,这里就不多做说明了。
先做个两者对比吧,仅LVS应用高可用模式进行两者之间对比,纯属个人意见,如有不同观点,请留言指点我,先谢谢了,呵呵
heartbeat+ldirectord+lvs
优点:可用rpm或yum方式直接安装,尤其是ipvsadm不用以tarball方式安装,我用的2.6.18 kernel直接用YUM安装
不用单独为ipvsadm写脚本,直接在ldirectord.cf中设置即可。
缺点:安装设置比lvs+keepalived复杂,需要配置authkeys、ha.cf、haresources、ldirectord.cf 四个配置文件。新手上手比较生疏
检测后端realserver需要在后端的站点中,单独制作一个页面,目的是为了ldirectord检测realserver的状态用。
lvs+keepalived
优点:配置文件只有一个keepalived.conf就搞定了,配置语法风格通俗易懂,新手上手快。当然,也利于维护。
检测realserver的方式是基于端口状态检测,无需在realserver的站点中单独制作页面(像Squid或Nginx堆后端的话,这点就比HA要好)
缺点:安装需要以tarball的方式,因为keepalived是基于2.4.X kernel的,所以安装的时候,要先安装kelnel source源码包(rpm,tarball都可以)
需要为ipvsadm单独写脚本,ipvsadm 启用并工作后,keepalived才会接管控制ipvsadm。做到检测realserver,同时LVS1和LVS2之间会相互检测(个人见解)
理解也就这么多了,呵呵,比较浅陋。
好了,废话不说了。接下来讲讲lvs+keepalived的安装过程及设置吧。
系统环境:
CentOS 5.2 (2.6.18-53.el5)
Nginx 使用80端口
Squid 使用80端口
软件包:
kernel-2.6.18-53.el5.src.rpm *** 内核源码包 ***
ipvsadm-1.24.tar.gz *** ipvsadm的tarball ***
keepalived-1.1.15.tar.gz *** keepalived的tarball ***
openssl-devel *** openssl的开发包 ***
kernel-devel *** 内核的开发包 ***
说明:测试机器共六台
VIP1:192.168.2.130 *** 虚拟地址1 ***
VIP2:192.168.2.140 *** 虚拟地址2 ***
LVS1:192.168.2.131 *** 主LVS ***
LVS2:192.168.2.132 *** 备用LVS ***
RIP1:192.168.2.133 *** Nginx1 ***
RIP2:192.168.2.134 *** Nginx2 ***
RIP3:192.168.2.135 *** Squid1 ***
RIP4:192.168.2.136 *** Squid2 ***
登陆主lvs后,开始安装软件包
1.1 安装内核源码包
# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5 *修正rpm包安装key警告*
# useradd mockbuild ***建立内核源码包安装所需用户***
# rpm -ivh kernel-2.6.18-53.el5.src.rpm
# cd /usr/src/redhat/SPECS
# rpmbuild -bp --target=i686 kernel-2.6.spec
#ln -s /usr/src/kernels/2.6.18-53.el5-i686 /usr/src/linux ***为内核源码包做链接***
# cd /usr/src/linux
# vi Makefile
修改 EXTRAVERSION = -prep
该成 EXTRAVERSION = -53.el5
# uname -r ***保持跟uname -r 的版本一致 检测一下***
2.6.18-53.el5
# head -n4 Makefile ***看到一致了***
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 18
EXTRAVERSION = -53.el5
OK,内核源码包安装完了。
1.2 安装ipvsadm
#yum install openssl-devel *** 安装openssl开发包***
#yum install kernel-devel *** 安装kernel开发包***
#tar zxvf ipvsadm-1.24.tar.gz
#cd ipvsadm-1.24
#make && make install
1.3 安装keepalived
#tar zxvf keepalived-1.1.15.tar.gz
#cd keepalived-1.1.15
.#/configure –sysconf=/etc/
#make && make install
如果刚才你配置的时候没加 --sysconf=/etc/ ,那么就执行以下命令,把配置文件和执行文件拷贝到相应的目录里。
#cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
#cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
#mkdir /etc/keepalived
#cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
#cp /usr/local/sbin/keepalived /usr/sbin/
1.4 配置ipvsadm,编写启动脚本
#vi dlvs
输入以下代码
#!/bin/bash
#2009-06-02 by Minyoni http://adidas.blog.51cto.com
#Nginx Realserver ipaddress
RIP1=192.168.2.133
RIP2=192.168.2.134
#Squid Realserver ipaddress
RIP3=192.168.2.135
RIP4=192.168.2.136
#Virtual ipaddress
VIP1=192.168.2.130
VIP2=192.168.2.140
/etc/rc.d/init.d/functions
case "$1" in
start)
echo " start LVS of DirectorServer"
# set the Virtual IP Address and sysctl parameter
/sbin/ifconfig eth0:0 $VIP1 broadcast $VIP1 netmask 255.255.255.255 up
/sbin/ifconfig eth0:1 $VIP2 broadcast $VIP2 netmask 255.255.255.255 up
/sbin/route add -host $VIP1 dev eth0:0
/sbin/route add -host $VIP2 dev eth0:1
echo "1" >/proc/sys/net/ipv4/ip_forward
#Clear IPVS table
/sbin/ipvsadm -C
#set LVS
#Nginx Realserver
/sbin/ipvsadm -A -t $VIP1:80 -s wrr -p 600
/sbin/ipvsadm -a -t $VIP1:80 -r $RIP1:80 -g
/sbin/ipvsadm -a -t $VIP1:80 -r $RIP2:80 -g
#Squid Realserver
/sbin/ipvsadm -A -t $VIP2:80 -s wrr -p 600
/sbin/ipvsadm -a -t $VIP2:80 -r $RIP3:80 -g
/sbin/ipvsadm -a -t $VIP2:80 -r $RIP4:80 -g
#Run LVS
/sbin/ipvsadm
;;
stop)
echo "close LVS Directorserver"
echo "0" >/proc/sys/net/ipv4/ip_forward
/sbin/ipvsadm -C
/sbin/ifconfig eth0:0 down
/sbin/ifconfig eth0:1 down
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
好,:wq 保存退出。
这样LVS的ipvsadm启动脚本就写好了,接着
#chmod 755 dlvs *** 赋予可执行权限***
1.5 配置keepalived
#mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.old
#vi /etc/keepalived/keepalived.conf
输入以下代码
! Configuration File for keepalived
global_defs {
notification_email {
[email protected] #如果本机没有SMTP服务,报警信还是发不出去,汗
}
notification_email_from root@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER #备份服务器上将MASTER改为BACKUP
interface eth0 #HA监测网络接口
virtual_router_id 51 #主、备机的virtual_router_id一定要相同,必须相同!!!
priority 100 #主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1 #VRRP Multicast广播周期秒数
authentication {
auth_type PASS #VRRP认证方式
auth_pass 1111 #VRRP口令字
}
virtual_ipaddress {
192.168.2.130 #LVS虚拟地址,可写多个VIP,一行一个VIP
192.168.2.140
}
}
virtual_server 192.168.2.130 80 {
delay_loop 2 #延时等待时间
lb_algo wrr #轮询算法
lb_kind DR #传输模式
persistence_timeout 600 #单一链接重连保持时间,这里设置600秒
protocol TCP
real_server 192.168.2.133 80 {
weight 1 #权重
TCP_CHECK { #realserve的状态检测设置部分,单位是秒
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.2.134 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
virtual_server 192.168.2.140 80 {
delay_loop 2
lb_algo wrr
lb_kind DR
persistence_timeout 600
protocol TCP
real_server 192.168.2.135 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.2.136 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
好,:wq保存退出。
1.5 配置sysctl.conf并使其新配置生效
#vi /etc/sysctl.conf
输入以下代码
net.ipv4.ip_forward=0
net.ipv4.conf.all.send_redirects=1
net.ipv4.conf.default.send_redirects=1
net.ipv4.conf.eth0.send_redirects=1
好,:wq保存退出。
#sysctl -p ***新配置生效了***
到这里,主LVS的安装和设置工作就完成了。
备用LVS的安装和设置,和主LVS一样,不同的是配置keepalived的时候,只要把主LVS的配置文件/etc/keepalived/keepalived.conf ,拷贝到备用LVS的对应位置/etc/keepalived/keepalived.conf。
然后更改以下两项,其他安装和配置和主LVS一样。
1.
state MASTER #备份服务器上将MASTER改为BACKUP,因为备用LVS一定要
用BACKUP
更改完后就是这样的
state BACKUP
2.
priority 100 #主、备机取不同的优先级,主机值较大,备份机值较小,所以备
用LVS我取90
更改完后就是这样的
priority 90
OK,这样,就可以了。主,备LVS,都已经安装配置完了
现在我们设置realserver就可以了
2.1 配置realserver,编写启动脚本
我们先来配置Nginx应用的realserver。
登陆RIP1:192.168.2.133 (Nginx1)
#vi rs
输入以下代码
#!/bin/bash
#2009-06-02 by Minyoni http://adidas.blog.51cto.com
VIP=192.168.2.130
/etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $VIP >/dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
好,:wq保存退出
#chmod 755 rs ***赋予可执行权限***
登陆RIP3:192.168.2.134 (Nginx2)
重复刚才的工作。
2.2 现在我们来配置Squid应用的realserver。
登陆RIP1:192.168.2.135 (Squid1)
#vi rs
输入以下代码
#!/bin/bash
#2009-06-02 by Minyoni http://adidas.blog.51cto.com
VIP=192.168.2.140
/etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $VIP >/dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
好,:wq保存退出
#chmod 755 rs ***赋予可执行权限***
登陆RIP4:192.168.2.136 (Squid2)
重复刚才的工作。
3.1 启动keepalived+lvs
到此为止,所有的安装配置工作全部都做完了。我们来启动keepalived+lvs,让其工作
首先登陆
RIP1:192.168.2.133 *** Nginx1 ***
RIP2:192.168.2.134 *** Nginx2 ***
RIP3:192.168.2.135 *** Squid1 ***
RIP4:192.168.2.136 *** Squid2 ***
启动相应的应用程序Nginx和Squid
然后在这4台服务器上都执行rs脚本, 千万要记得你的rs脚本保存在哪里了
rs脚本的用法
#./rs start ***启动realserver的虚拟IP***
#./rs stop ***停止realserver的虚拟IP***
我们现在启动realserver的虚拟IP
#./rs start
RealServer Start OK ***提示启动虚拟IP成功***
接着查看一下
#ifconfig lo:0 ***查看虚拟IP信息,你会看到信息***
然后把其余3台都执行一次
#./rs star
现在登录
LVS1:192.168.2.131 *** LVS1 ( 主)***
LVS2:192.168.2.132 *** LVS2 备用)***
先在 LVS1:192.168.2.131 主LVS上执行dlvs脚本,用法
#./dlvs start ***启动ipvsadm***
#./dlvs stop ***停止ipvsadm***
执行
#./dlvs start ***现在ipvsadm已经启动了***
执行
#service keepalived start ***启动keepalived进入LVS的高可用模式***
在 LVS2:192.168.2.132 备用LVS上执行
#./dlvs start ***现在ipvsadm已经启动了***
#service keepalived start ***启动keepalived进入LVS的高可用模式***
现在LVS已经运行在高可用模式了
回到主LVS上查看ipvsadm 运行情况
#watch ipvsadm -ln
停掉RIP1:192.168.2.133 (Nginx1) 的 WEB服务
192.168.2.133 不在列表中了
启动RIP1:192.168.2.133 (Nginx1) 的 WEB服务
192.168.2.133 恢复到列表中了
以上说明了keepalived会自动接管ipvsadm,自动检测realserver的状态
现在来测试主LVS和备用LVS之间的相互检测
停掉主LVS
#./dlvs stop
#service keepalived stop
查看备用LVS的运行状态
先查看下messages
#tail -f /var/log/messages
备用LVS已经接管了工作,状态为MASTER STATE
备用LVS上查看ipvsadm 运行情况
一切还是正常的,接管了工作
如果这时候启动主LVS
#./dlvs start
#service keepalived start
查看messages日志
#tail -f /var/log/messages
主LVS又主动接管了工作,状态为MASTER STATE
这个时候,备用LVS的状态一定是BACKUP STATE
测试到此就结束了,以上就是我对keepalived+lvs学习的一些总结。过程也许不够好,有错误的地方,希望大家多指点我,我一定虚心受教,先谢谢了。
注:文中脚本和配置文件,我打包了。
下载附件即可更改使用