Keepalived学习笔记
--LVS+Keepalived
学习LVS,自然会想到解决DR单独故障问题,Heartbeat也能很好实现,不过对于LVS,Keepalived显得更加理想选择。理由:相比Hearbeat ,Keepalived配置更加简单,故障切换速度也最快。Keepalived只想安装DR服务器上,并根据需要进配置即可。
Keealived简介
来自百度本科的简介,我觉得就就很简洁和清楚了。
keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机, 或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务 器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。
Layer3,4&5工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下:
Layer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器
发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激 活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的
典型例子是某台服务器被非法关机。Layer3的方式是以服务器的 IP地址是否有效作为服务器工作正常与否的标准。在本文中将采用这种方式。
Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以 TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。
Layer5:Layer5就是工作在具体的应用层了,比Layer3,Layer4要复杂一 点,在网络上占用的带宽也要大一些。Keepalived将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则 Keepalived将把服务器从服务器群中剔除。
Keealived安装
首先得下载Keealived安装包:http://www.keepalived.org/download.html
后进行解压安装。
# tar –xzvf keepalived-1.2.2.tar.gz
# ./configure
若出现以下错误。
解决办法:# yum install openssl-devel
若出现错误:configure: error: Popt libraries is required
解决办法:yum install libnel-dev
configure时若出现以下结果:
只有一项为yes,因为keepalived没有找到内核目录导致的,解决的方法是在编译的时候:
./configure --sysconf=/etc \\ # 指定配置文件的安装路径。
--with-kernel-dir=/usr/src/kernels/2.6.18-194.el5-i686/
若/usr/src/kernel目录下没有内核目录,则需要安装内核开发包:
用命令uname -a查看内核版本,然后可以在这里查找对应的
http://zid-luxinst.uibk.ac.at/linux/rpm2html/centos/5/os/i386/CentOS/kernel-devel-2.6.18-194.el5.i686.html
不推荐使用yum install -y kernel-devel安装
安装完成后建立一下链接:
ln -s /usr/src/kernels/2.6.18-194.el5-i686/ /usr/src/linux/
上述过程完毕后,在进行configure:
若还是出现no或者make的时候出现:“ error: linux/ip_masq.h: No such file or directory”之类的错误时,在/usr/src/kernels/2.6.18-194.el5-i686/include/linux /version.h中增加声明:
#define UTS_RELEASE \"2.6.18\"
再进行configure就会都是yes了:
接着执行make是若出现“types.h:62: error: conflicting types for ‘dev_t’”错误,需要修改源码目录下的keepalived/libipvs-2.6/ip_vs.h
把#include linux/types.h移到#include sys/types.h 这行的下面
上述错误都解决后make&&make install就可以通过了,然后运行:
# ln –s/usr/local/sbin/keepalived /sbin #启动配置文件链接路径(启动文件依赖)
#否则:启动 keepalived:/bin/bash: keepalived: command not found[失败]
#查看帮助
keepalived -h
#运行 由于keepalived配置文件不是在启动时一次性加载并读取完成的,所以必须是完整路径,可以根据log判断是否加载了正确的配置文件
keepalived –f /usr/local/etc/keepalived/keepalived.conf
运行过程可以查看log:
tail -f /var/log/message
Keealived配置
Keepalived.conf配置文件有3个部分组成,分别为全局定义部分、vrrp实例定义部分以及虚拟服务器定义部分。下面详细介绍这个配置文件中的每个选项的详细含义和用法。
# 全局定义部分
global_defs {
notification_email {
acassen@firewall.loc # 设置邮件相关。可设置多个。
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
# vrrp实例定义部分
vrrp_instance VI_1 {
state MASTER # 设置主服务器,备份服务器为:BACKUP。
interface eth0
virtual_router_id 51 # 虚拟路由标示,这个标示是一个数字,同一个vrrp实例使用唯一标示,即同一个vrrp_instance下,MASTER和BACKUP必须是一致的。
priority 100 # MASTER优先级必须大于BACKUP的优先级。
advert_int 1 #设置MASTER与BACKUP负载平衡器之间同步检查的时间间隔,单位为秒。
authentication {
auth_type PASS #设置验证类型,主要为PASS何AH二种。
auth_pass 1111 #MASTER和BACKUP必须使用相同的验证密码才能正常通行。
}
virtual_ipaddress {
192.168.2.180 #虚拟机IP地址,可以多个每个一行。
192.168.200.17
}
}
# 虚拟服务器定义
virtual_server 192.168.2.180 8080 { # 设置虚拟机服务器IP地址和端口,二者用空格隔开。
delay_loop 3 #设置运行情况检查时间,单位为秒。
lb_algo rr #设置负载平衡调度算法,设置设置为rr,即轮询算法。
lb_kind DR # 设置LVS实现负载平和的机制,有NAT、TUN和DR是个可选模式。
nat_mask 255.255.255.255
persistence_timeout 50 # 会话保持时间,单位为描述。对动态网页非常有用。
protocol TCP
real_server 192.168.2.152 8080 {
weight 1 # 权值:数字越大,权值越高。高性能的服务器可设较高的权值,以分载。
HTTP_GET {
url {
path /testurl/test.jsp
digest 0205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl2/test.jsp
digest 0205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl3/test.jsp
digest 0205b7b0fc66c1ea91c463fac6334d
}
connect_timeout 3 # 表示3秒无响应超时。
nb_get_retry 3 # 表示重试次数。
delay_before_retry 3 # 表示重试间隔。
}
}
# 节点2
real_server 192.168.2.153 8080 {
weight 1
HTTP_GET {
url {
path /testurl/test.jsp
digest 0205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl2/test.jsp
digest 0205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl3/test.jsp
digest 0205b7b0fc66c1ea91c463fac6334d
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
注意: 在配 置Keepalived时,需要特别注意配置文件的语法格式,因为keepalived在启动时并不检测配置文件的正确性,即使没有配置文件,keepalived也照样能够启动,所以一定要保证配置文件的正确。
在默认情况下,keealived在启动时会查找/etc/keealived/keepalived.conf配置文件,如果配置文件放在其他路径下,可以通过“keepalived –f”参数指定配置文件路径即可。
在keealived配置完成后,将此文件复制到备用的DR对应的路径下,然后修改以下二点即可:
将”state MASTER”更改为“state BACKUP”。
将“priority 100”更为一个较小的值,如:priority 80。
在LVS的DR和TUN模式下,在Real Server服务中创建/etc/init.d/lvsrs脚本,以达到NORAP的问题。并修改其权限 # chmod 755 /etc/init.d/lvsrs,然后启动#/etc/init.d/lvsrs start
#!/bin/bash
VIP=192.168.2.180
/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
注意: 启动服务时:
先启动Keepalived服务#/etc/init.d/keepalived start
后启动LVS服务#/etc/init.d/ipvsadm start
否则可能出现VIP地址丢弃情况(重启系统恢复)。至少,我在ESXi5.0+Redhat5.4-32bit环境中遇到此情况。
参考文件:
介绍参考:http://baike.baidu.com/view/4175422.htm
安装参考:http://www.cnblogs.com/wsky/archive/2011/04/12/2013903.html
配置参考:《高性能Linux服务器构建实战》
2012-2-15