LVS_DR+Keepalived负载均衡配置
2011.05.24 TsengYia#126.com http://tsengyia.blog.chinaunix.net/
#################################################################
系统环境:
RHEL 5.5 [2.6.18-194.el5]
平台结构:
2台负载均衡器 ——
LVS01: 192.168.7.11
LVS02: 192.168.7.12
群集地址(VIP,漂移地址)——
192.168.7.10
群集节点(RIP,真实服务器)——
RIP01: 192.168.7.21
RIP02: 192.168.7.22
……
RIPn: ……
群集类型: DR(直接路由)
软件环境:
—— RHEL5光盘自带的RPM软件包
./Cluster/ipvsadm-1.24-10.i386.rpm
./Server/kernel-devel-2.6.18-194.el5.i386.rpm
./Server/openssl-devel-0.9.8e-12.el5_4.6.i386.rpm
./Server/popt-1.10.2.3-18.el5.i386.rpm
—— 从下载的软件包
keepalived-1.2.2.tar.gz
#################################################################
一、安装并配置ipvsadm(LVS01、LVS02)
ipvsadm是一个用户态的工具,主要用来手动创建和管理LVS负载均衡群集,包括创建负载分配器、指定群集节点,查看并调度节点状态、连接情况等。安装ipvsadm工具,可以用来手动管理群集节点、察看群集状态等。
[root@localhost ~]# rpm -ivh /media/cdrom/Cluster/ipvsadm-1.24-10.i386.rpm
[root@localhost ~]# man ipvsadm
二、安装keepalived(LVS01、LVS02)
1. 编译安装keepalived
[root@localhost ~]# tar zxf keepalived-1.2.2.tar.gz
[root@localhost ~]# cd keepalived-1.2.2/
[root@localhost keepalived-1.2.2]# ./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.18-194.el5-i686
……
Keepalived configuration
-------------------
Keepalived version :1.2.2
Compiler :gcc
Compiler flags :-g -O2 -DETHERTYPE_IPV6=0x86dd
Extra Lib :-lpopt -lssl -lcrypto
Use IPVS Framework :Yes
IPS sync daemon support :Yes
IPVS use libnl :No
Use VRRP Framework :Yes
Use Debug flags :No
[root@localhost keepalived-1.2.2]# make && make install
—— 注意1:make步骤中若出现fd_set、blkcnt_t类型冲突之类的错误,可以修改./keepalived/libipvs-2.6/ip_vs.h文件,将#include linux/types.h行移到#include sys/types.h行之后,然后重新执行make进行编译即可。
[root@localhost keepalived-1.2.2]# vi keepalived/libipvs-2.6/ip_vs.h
……
#include sys/types.h
#include linux/types.h
……
[root@localhost keepalived-1.2.2]# make && make install
2. 确认安装情况
(1) 添加keepalived服务
[root@localhost ~]# ls /etc/init.d/keepalived
/etc/init.d/keepalived
[root@localhost ~]# chkconfig --add keepalived
[root@localhost ~]# chkconfig keepalived on
(2) 确认keepalived的配置文件
[root@localhost ~]# ls -F /etc/keepalived/
keepalived.conf samples/
三、配置keepalived(LVS01、LVS02)
LVS01作为MASTER、LVS02作为BACKUP,基于DR方式实现HTTP服务的负载均衡分配。
1. LVS01的keepalived配置
[root@localhost ~]# vi /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_TEST
}
vrrp_instance VI_1 {
state MASTER #//负载均衡器的角色
interface eth0 #//承载VIP地址的物理接口
virtual_router_id 1 #//虚拟路由器的ID号,每个热备组保持相同
priority 100 #//竞选优先级,数字越大优先级越高
advert_int 3 #//通告间隔秒数(心跳频率)
authentication { #//本VRRP组的认证信息
auth_type PASS
auth_pass 123456
}
virtual_ipaddress { #//热备所针对的虚拟地址(VIP),可以有多行
192.168.7.10
}
}
virtual_server 192.168.7.10 80 { #//虚拟服务器的IP地址、端口
delay_loop 15 #//健康检查的间隔时间
lb_algo rr #//负载调度算法(rr为轮询,其他参见ipvsadm手册)
lb_kind DR #//负载均衡类型,常用的为DR、NAT方式
! persistence 60 #//连接保持时间,适用于动态Web站点、FTP站点等情况
protocol TCP #//协议类型
real_server 192.168.7.21 80 { #//真实服务器的IP地址、端口
weight 1 #//节点权重
TCP_CHECK {
connect_port 80 #//检查的目标端口
connect_timeout 3 #//连接超时
nb_get_retry 3 #//重试次数
delay_before_retry 2 #//重试间隔
}
}
real_server 192.168.7.22 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 2
}
}
}
[root@localhost ~]# /etc/init.d/keepalived start
2. LVS02的keepalived配置
与LVS01中的配置文件基本相同,只需将state改为BACKUP、将priority改为较小的数值(如99)即可。
3. keepalived的邮件发送设置(可选)
(1) 使用无认证的SMTP服务器
[root@localhost ~]# vi /etc/keepalived/keepalived.conf
global_defs {
notification_email { #//收件人地址
kadmin@tsengyia.com
alert@tsengyia.com
}
notification_email_from kadmin@tsengyia.com #//发件人地址
smtp_server 192.168.7.254 #//SMTP服务器地址
smtp_connect_timeout 30 #//连接超时
……
}
vrrp_instance VI_1 {
smtp_alert #//允许发送告警邮件
……
}
……
[root@localhost ~]# /etc/init.d/keepalived restart
(2) 使用有认证的SMTP服务器
使用mutt、msmtp,编写Shell脚本来外发邮件,参见另篇《使用mutt+msmtp通过外部邮箱发送邮件》:http://blogold.chinaunix.net/u1/40349/showart_2543437.html。
[root@localhost ~]# vi /etc/keepalived/keepalived.conf
……
vrrp_instance VI_1 {
……
notify_master "/usr/sbin/kalert.sh master" #//状态变为MASTER时的操作
notify_backup "/usr/sbin/kalert.sh backup" #//状态变为BACKUP时的操作
notify_fault "/usr/sbin/kalert.sh fault" #//状态变为FAULT时的操作
}
……
[root@localhost ~]# /etc/init.d/keepalived restart
四、Web节点的配置
1. 启用httpd服务,并添加用于测试的网页文件
测试期间,为了便于观看效果,建议为不同节点准备不同的网页文件。
2. 设置VIP接口、调整ARP响应参数等
[root@localhost ~]# vi /etc/init.d/lvsreal
#!/bin/bash
# chkconfig: 35 99 10
# description: tune lo:0 interface and arp response for lvs-real servers.
VIP="192.168.7.10"
VIP_MASK="255.255.255.255"
VIF="lo:0"
case "$1" in
start)
echo "Start lvsreal server for $VIP"
/sbin/ifconfig $VIF $VIP netmask $VIP_MASK up
/sbin/route add -host $VIP dev $VIF
/sbin/sysctl -w net.ipv4.conf.lo.arp_ignore=1 &> /dev/null
/sbin/sysctl -w net.ipv4.conf.lo.arp_announce=2 &> /dev/null
/sbin/sysctl -w net.ipv4.conf.all.arp_ignore=1 &> /dev/null
/sbin/sysctl -w net.ipv4.conf.all.arp_announce=2 &> /dev/null
;;
stop)
echo "Stop lvsreal server for $VIP"
/sbin/ifconfig $VIF down
/sbin/route del -host $VIP
/sbin/sysctl -w net.ipv4.conf.lo.arp_ignore=0 &> /dev/null
/sbin/sysctl -w net.ipv4.conf.lo.arp_announce=0 &> /dev/null
/sbin/sysctl -w net.ipv4.conf.all.arp_ignore=0 &> /dev/null
/sbin/sysctl -w net.ipv4.conf.all.arp_announce=0 &> /dev/null
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
[root@localhost ~]# chmod +x /etc/init.d/lvsreal
[root@localhost ~]# chkconfig --add lvsreal
[root@localhost ~]# /etc/init.d/lvsreal start
五、功能测试
1. 测试群集节点的负载分配
使用浏览器访问虚拟地址VIP(192.168.7.10),多次刷新页面,可轮流看到RIP01、RIP02等节点的网页文档。
-->关闭RIP01主机的httpd服务,稍后刷新网页,可以看到RIP02等其他主机的网页文档。
2. 测试LVS01、LVS02的故障切换
使用浏览器访问虚拟地址VIP(192.168.7.10),可以正常查看网页文档。
-->禁用LVS01的eth0网卡,数秒后刷新页面,仍能够正常查看网页。
-->重新启用LVS01的eth0网卡。
-->查看LVS01、LVS02的/var/log/messages日志文件,跟踪keepalived的状态变化。
#################################################################
阅读(2103) | 评论(0) | 转发(0) |