LVS技术浅析-配置管理

本文将介绍部署LVS一个最简单的流程;
LVS本身是一个内核模块:ip_vs,位于内核目录net/netfilter/ipvs/下,官方网址:http://www.linuxvirtualserver.org/
从2.4内核开始,linuxkernel已经集成了ipvs模块;因此,当前我们的系统kernel都是支持LVS功能的,无需额外下载;
那么,我们如何操作内核模块ipvs呢?
LVS官方提供了一个应用程序ipvsadm,可用通过ipvsadm的一系列命令和内核ipvs打交道。
1.ipvsadm
ipvsadm程序可以从官网http://www.linuxvirtualserver.org/software/ipvs.html下载,最新版本为[url=http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz]ipvsadm-1.26[/url];
编译过程中,可能会遇到error,官网已经提供了解决方法:http://kb.linuxvirtualserver.org/wiki/Compiling_ipvsadm_on_different_Linux_distributions#Red_Hat_Enterprise_Linux_6
ipvsadm安装完毕后,简单地配置一个LVS:
vip为10.220.1.8,端口80,调度算法为RR(round-robin);
2台realserver192.168.1.10/11,转发模式为DR;
LVS服务器上配置:[list]
[*]添加1个vip
[/list] ipvsadm -A -t 10.220.1.8:80 -s rr

[list]
[]添加2台rs
[/list] ipvsadm -a -t 10.220.1.8:80 -r 192.168.1.10:80 -g
ipvsadm -a -t 10.220.1.8:80 -r 192.168.1.11:80 -g
[list]
[
]查看配置
[/list] ipvsadm -ln
[list]
[*]绑定vip到接口网卡eth0

[/list] ip addr add 10.220.1.8/32 dev eth0

RS服务器上配置:
[list]
[*]绑定vip到lo网络接口

[/list] ip addr add 10.220.1.8/32 dev lo
配置完毕,用ip addr list查看;
[list]
[*]防止vipmac冲突

[/list] echo “1”>/proc/sys/net/ipv4/conf/all/arp_ignore

 echo "2">/proc/sys/net/ipv4/conf/all/arp_announce

ipvsadm虽然可以完成LVS的所有配置,但要线上应用,还有一些不足;

[list]
[*]LVS down了怎么办?
[/list] LVS一旦down了,则所有流量都会损失;因此,我们需要做好LVS冗余;

[list]
[]RS down了怎么办?
[/list] RS down掉后,LVS调度到该RS的流量就会损失;因此,我们需要对RS进行健康监测;
LVS管理软件-keepalived-很好的解决了上述问题,
[list]
[
]LVS down?-采用VRRP心跳协议,实现LVS主备冗余;
[*]RS down? - 提供4/7层健康检测;

[/list]我们线上都采用该软件进行LVS配置管理;
keepalived官网:http://www.keepalived.org/,最新版本为1.2.7;
2.keepalived
keepalived主要以配置文件的方式来管理LVS;
默认配置文件为/etc/keepalived/keepalived.conf;
启动方式: keepalived -d -f/etc/keepalived/keepalived.conf;
接下来,我们详细介绍一下keepalived.conf的常用配置选项;
global_defs {
#这个一般不配置,用途不大
}

#下面配置LVS主备冗余
#主备冗余采用VRRP协议,是支持一主多从的协议;

#参见http://en.wikipedia.org/wiki/Virtual_Router_Redundancy_Protocol

vrrp_instance VI_1 {#主LVS配置
stateMASTER #该LVS配置为主
interfaceeth0 #VRRP心跳包从哪块网卡发出
virtual_router_id 100 #相同VRID的LVS属于同一组,根据优先级选举出一个主
priority150 #VRRP优先级,值越大优先级越高,最大为255
advert_int1 #VRRP心跳包的发送周期,单位为s
authentication{ #认证信息
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #VRRP心跳内容,VIP地址
10.2.1.18
10.2.1.19
}
}
vrrp_instance VI_2 { #从LVS配置
stateBACKUP #该LVS配置为从
interfaceeth0 #VRRP心跳包从哪块网卡发出
virtual_router_id 100 #同主
preempt_delay180 #主从切换的延时时间
priority100 #优先级值必须小于主
advert_int1 #同主
authentication{ #同主
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #同主
10.2.1.18
10.2.1.19
}
}

#下面配置内核ip_vs信息和健康监测参数
#如果几个vip对应相同的RS,则建议采用本group配置;这样可以减少健康检查次数virtual_server_groupwww {
10.2.1.1880 #vip和vport
10.2.1.1980
}
virtual_server group www {
delay_loop 3 #RS健康监测周期,单位为s
lb_algo wrr #负载均衡调度算法
lb_kindDR #转发模式
protocolTCP #传输层协议

real_server192.168.10.10 80 { #rs ip和port
weight100 #rs权值,可以根据权值分配rs间流量比例
TCP_CHECK{ #4层健康监测,即TCP
connect_timeout 7 #4层连接超时时间,单位为s
}
}
real_server192.168.10.11 80 { #rs ip和port
weight100 #rs权值
inhibit_on_failure #rs down时,不删除,而是将weight置为0
HTTP_GET{ #7层健康监测,即HTTP
url{
path/status.html #http uri
status_code200 #正确http响应的code
}
connect_timeout 7 #4层连接超时时间,单位为s
nb_get_retry2 #http请求重试次数
delay_before_retry5 #http重试时间间隔,单位为s
}
}
}