分类: LINUX
2010-07-21 15:14:49
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。目前有三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR)
本文主要介绍DR模式运用
DR模式是什么?撇开lvs调度算法部分,DR模式的原理就是,将报文直接路由给目标服务器(Direct Routing),其实这里没有routing啥事情,叫做Direct Select更准确一些,为什么这么说呢?因为他直接不修改数据包,他直接把数据包打包成以太网的数据帧,只是这个数据帧里的目标MAC地址是最终的真实服务器的MAC地址,所以DR模式要求在同一个物理网段,不能跨路由。
当目标服务器收到这个数据帧的时候,把它解包,当服务器发现数据包的目标地址(也就是VIP)是在本地的网络设备上(一般都是在真实服务器的lo:0上绑定一个vip地址),服务器处理这个数据包,然后根据本地路由表将响应报文直接返回给客户。
具体的流程如图:
TUN模式又是什么呢?lvs上的说明是 virtual server via IP Tunneling,其实更准确一些应该叫,virtual server via
IP Half Tunneling,因为通道只是半边的,通道只在真实服务器上建立。你需要在真实的服务器上开设一个tunnel,并且绑定vip到这个tunnel上,撇开lvs的调度算法不谈,当他选择了一台服务器的时候,他就会把发送到vip服务器的数据包,封装成目标地址是选择的服务器ip的数据包,发送到真实的服务器,真实的服务器上因为有tunnel,会对这个ip包进行解包操作,同时发现解包后的数据包的目标ip正好是自己的tunnel上绑定的ip,然后他就收下这个数据包自己处理,然后根据本地路由把数据返回到用户端,整个过程不需要在lvs上建立通道,通道只是在真实服务器上建立,建立的目的是为了解包。
具体的流程如图:
2.1 keepalived
这里是用keepalived来进行lvs的建立和服务器和vip的健康检查,其实keepalived就像一个shell,他自动的给你做lvs+vrrp。
keepalived本身来做真实服务器的健康检查,vrrp来做vip的冗余。
2.2 安装
安装环境:
VIP:192.168.11.219
Loadbalance:192.168.11.217 192.168.11.218
Realserver: 192.168.11.215 192.168.11.216
所需软件:keepalived
Ipvsadm(主要是管理查看作用)
# ln -s /usr/src/kernels/2.6.18-92.el5-i686
/usr/src/linux
# tar -zxvf
ipvsadm-1.24.tar.gz
# cd ipvsadm-1.24
# make && make install
# tar -zxvf keepalived-1.1.15.tar.gz
# cd keepalived-1.1.15
# ./configure
# make && make install
cp /usr/local/etc/rc.d//init.d/keepalived
/etc/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/
#vi keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
# acassen@firewall.loc
# failover@firewall.loc
# sysadmin@firewall.loc
}
#notification_email_from Alexandre.Cassen@firewall.loc
#smtp_server
192.168.200.1
#smtp_connect_timeout 30
router_id
LVS_DEVEL
}
vrrp_sync_group me {
group
{
VI_1
}
}
vrrp_instance VI_1 {
state
MASTER
interface
eth0
lvs_sync_daemon_inteface
eth0 #负载均衡器之间的监控接口,类似于HA HeartBeat的心跳线。但它的机制优于Heartbeat,因为它没有“裂脑”这个问题,它是以优先级这个机制来规避这个麻烦的。在DR模式 中,lvs_sync_daemon_inteface 与服务接口interface 使用同一个网络接口
virtual_router_id 51 #虚拟路由标识,这个标识是一个数字,并且同一个vrrp实例使用唯一的标识。即同一个vrrp_stance,MASTER和BACKUP的virtual_router_id是一致的,同时在整个vrrp内是唯一的
mcast_src_ip 192.168.11.217
#mcast_src_ip #多播的源ip,设置为这台lvs的ip 好像不用也行
priority
100 #路由的优先级别,主lvs要设置的比从lvs要高
advert_int 1
authentication {
auth_type PASS #同一vrrp实例MASTER与BACKUP 使用相同的密码才能正常通信
auth_pass 1111
}
virtual_ipaddress {
192.168.11.219 #虚拟ip,也就是vip地址。可以设置很多组vip
}
}
virtual_server 192.168.11.219 80 {
delay_loop
3 #健康检查的间隔
lb_algo wlc #lvs的调度算法
lb_kind DR #lvs的调度模式
persistence_timeout 50 #连接保持的超时时间,保证一个用户的连接总是导向到同一个服务器,当用户第一次访问的时候,他的访问请求被负载均衡器转给某个真实服务器,这样他看到一个登陆页面,第一次访问完毕;接着他在登陆框填写用户名和密码,然后提交;这时候,问题就可能出现了—登陆不能成功。因为没有会话保持,负载均衡器可能会把第2次的请求转发到其他的服务器
#用ipvsadm -Lcn 观察是否生效
protocol TCP
ha_suspend #禁止,vip失效的时候对真实服务器进行健康检查(也就是说备用服务器不会去做真实服务器的健康检查)
real_server
192.168.11.215 80 {
weight
3 #权重,给这台服务器多少的压力
TCP_CHECK
{
connect_timeout
3 #服务器健康检查的方式,以及timeout的时间。#健康检查的方式还有获取http内容等。
}
}
}
更多的配置可以参考
keepalived.conf 默认是在/etc/keepalived/keepalived.conf
备用lvs的keepalived.conf和主的唯一区别就是MASTER改成BACKUP, priority的数值要比主lvs小。
2.4 realserver 操作
主要是关闭arp响应
写个脚本执行一下
#!/bin/bash
#
description: Config realserver lo and apply noarp
SNS_VIP=192.168.11.219
BROADCAST=192.168.11.255
.
/etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $SNS_VIP netmask
255.255.255.255 broadcast $BROADCAST up
#
/sbin/route add -host $SNS_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
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
2.6 启动 keepalived
/etc/init.d/keepalived start
经过以上步骤就可以测试lvs具体功能了
参考文章:
IP负载均衡技术
Manuals and
internal documents http://www.linuxvirtualserver.org/Documents.html