LVS简介
lvs有三种工作模式NAT(地址转换),IP Tunneling(IP隧道)、Direct Routing(直接路由)。 工作效率最低的是NAT模式,但NAT模式可以用于各种系统,各种环境的负载均衡,只需要一个公网ip即可实现 IP Tunneling模式调度器将连接分发到不同的后端real server,然后由real server处理请求直接相应给用户,大大提高了调度器的调度效率,后端real server没有物理位置和逻辑关系的限制,后端real server可以在Lan/Wlan,但是后端real server必须支持IP隧道协议. DR(Direct Routing)是效率最高的,与IP Tunneling类似,都是处理一般连接,将请求给后端real server,然后由real server处理请求直接相应给用户,Direct Routing与IP Tunneling相比,没有IP封装的开销,但由于采用物理层,所以DR模式的调度器和后端realserver必须在一个物理网段里,中间不能过路由器(也就是一个交换机相连).
lvs支持8种不同的调度算法轮叫(rr)、加权轮叫(wrr)、最小连接(lc)、加权最小连接(wlc)、基于局部性最小连接(lblc)、带复制的基于局部性最少链接(lblcr)、目标地址散列(dh)和源地址散列(sh).
Keepalived是运行在lvs 之上,它的主要功能是实现真实机的故障隔离及负载均衡器间的失败 切换,提高系统的可用性
系统平台:Centos6.4
Keepalived版本:keepalived-1.2.4.
LVS版本:ipvsadm-1.2
LVS_Master:192.168.10.51
LVS_Slave:192.168.10.40
Apache1:192.168.10.41
Apache2:192.168.10.49
一、安装apache
1.1我们采用yum安装
#yum –y installhttpd
#/etc/init.d/httpdstart
1.2分别在两台web上建立测试页
# echo "zhangfang111111">/var/www/html/index.html
# echo "zhangfang222222">/var/www/html/index.html
1.3 测试是否正常
Web1
Web2
访问都ok
1.3执行lvs.sh脚本绑定VIP
#catlvs.sh
#!/bin/bash
#description:Config lvs.sh
VIP=192.168.10.180
/etc/rc.d/init.d/functions
case"$1" in
start)
/sbin/ifconfig lo:0 $VIP netmask255.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)
/sbin/ifconfig lo:0 down
/sbin/route del $VIP >/dev/null2>&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
#lvs.sh start
二、安装lvs+keepalievd(两台调度器都安装)
2.1安装之前系统需要安装popt-statickernel-devel make gcc openssl-devel lftp libnl* popt*
2.2 开启路由转发功能
#vim /etc/sysctl.conf
net.ipv4.ip_forward= 1
#sysctl -p
2.3.安装ipvsadm
#wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
2.4做软连接,防止make时出错,找不到kernel文件
#ln -s/usr/src/kernels/2.6.32-504.16.2.el6.x86_64/ /usr/src/linux/
#tar ipvsadm-1.26.tar.gz
#cd ipvsadm
#make &&make install
Ipvsadm安装完成
2.5安装keepalived
#wgethttp://www.keepalived.org/software/keepalived-1.2.4.tar.gz
# tar zxvfkeepalived-1.2.4.tar.gz
#cdkeepalived-1.2.4
# ./configure&& make && make install
三、keepalived做成启动服务,方便管理
# 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/
# servicekeepalived start | stop
3.1修改keepalived配置文件如下
! ConfigurationFile for keepalived
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smpt_connect_timeout 30
router_id zhangfang
}
vrrp_instanceVI_1 {
state MASTER
interface eth0 #指定HA监测网络的接口
virtual_router_id 20 #虚拟路由标示,这是标示是一个数字,同一个vrrp实例使用唯一的标示,即同一vrrp_instance下,MASTER和BACKUP必须是一致的
priority 100 #定义优先级,数字越大,优先级越高
advert_int 1 #设置MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
authentication { #设置验证类型和密码
auth_type PASS #设置认证类型,主要有PASS和AH两种
auth_pass 1111 #设置验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通行
}
virtual_ipaddress {
192.168.10.180
}
}
virtual_server192.168.10.180 80 {
delay_loop 6 #设置运行状况的检查时间
lb_algo rr
lb_kind DR
#persistence_timeout 50 #会话保持时间
protocol TCP #转发协议类型
real_server 192.168.10.41 80 {
weight 3
TCP_CHECK { #realserver的状态检测设置部分
connect_timeout 10 #标示10s无响应超时
nb_get_retry 3 #重试次数
delay_before_retry 3 #重试间隔
connect_port 80
}
}
real_server 192.168.10.49 80 {
weight 3
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
3.2将配置文件同步到LVS_Slave上
#scp /etc/keepalived/keepalived.conf [email protected]:/etc/keepalived/
修改内容如下:
state BACKUP #
状态
priority 100 #
修改优先级
3.3
分别启动两台lvs,我们来查看日志
LVS_Master
注意,从划红线区域看到这台主机绑定了VIR
通过ip addr 查看下VIP是否绑定
LVS_Slave
:日志信息
3.4
我们在LVS_Master上看下群集状态
四、进行测试
在浏览器里面输入http://192.168.10.180
说明按照轮询的算法,分别转后至节点,从而达到负载均衡的效果
五、模拟故障
5.1停掉节点1
#/etc/init.d/httpdstop
5.2查看lvs状态
#ipvsadm -ln
IP VirtualServer version 1.2.1 (size=4096)
ProtLocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.10.180:80 rr
->192.168.10.41:80 Route 3 0 2
注意出现故障的那台机器,已经被踢出了,从而实现了健康检查
测试一下
查看邮件
5.3 关掉MASTER上的keepalived
#/etc/init.d/keepalivedstop
5.4 查看SLAE的状态
已经正常接管过来,
测试一下
访问正常
注意,大家可以看到,经过上面的演示我们实现了LVS的高可用及前端负载均衡的高可用,同时实现对后端realserer监控,也实现后端resalserver宕机时会给管理员发送邮件,但是我们还有几个问题没有解决,问题如下
1. 所以realserver都宕机,怎么处理,是不是用户就没法打开,还是提供一下为何页面
2. 怎么完成为何模式keepalived切换?
3. 如何在keepalived故障时,发送邮件给指定的管理员
六、我们在负载均衡器上提供维护页面,这样比较靠谱,也比较常用
6.1 分别在MASTER和SLAVE安装httpd
#yum –y installhttpd
6.2配置维护页面
#echo"Website is currently under maintenance, please come back later" >/var/www/html/index.html
6.3启动httpd
#/etc/init.d/httpdstart
6.4修改配置文件
!Configuration File for keepalived
global_defs{
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smpt_connect_timeout 30
router_id zhangfang
}
vrrp_instanceVI_1 {
state MASTER
interface eth0 #指定HA监测网络的接口
virtual_router_id 20 #虚拟路由标示,这是标示是一个数字,同一个vrrp实例使用唯一的标示,即同一vrrp_instance下,MASTER和BACKUP必须是一致的
priority 100 #定义优先级,数字越大,优先级越高
advert_int 1 #设置MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
authentication { #设置验证类型和密码
auth_type PASS #设置认证类型,主要有PASS和AH两种
auth_pass 1111 #设置验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通行
}
virtual_ipaddress {
192.168.10.180
}
}
virtual_server192.168.10.180 80 {
delay_loop 6 #设置运行状况的检查时间
lb_algo rr
lb_kind DR
#persistence_timeout 50 #会话保持时间
protocol TCP #转发协议类型
real_server 192.168.10.41 80 {
weight 3
TCP_CHECK { #realserver的状态检测设置部分
connect_timeout 10 #标示10s无响应超时
nb_get_retry 3 #重试次数
delay_before_retry 3 #重试间隔
connect_port 80
}
}
real_server 192.168.10.49 80 {
weight 3
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
sorry_server 127.0.0.1 80
}
增加sorry_server选项
6.5关闭所有的realserver,并重启下MASTER和SLAVE的keepalived
#/etc/init.d/httpdstop
#/etc/init.d/keepalivedrestart
6.6查看lvs
# ipvsadm-ln
IPVirtual Server version 1.2.1 (size=4096)
ProtLocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.10.180:80 rr
->127.0.0.1:80 Local 1 0 0
可以看到所有节点已经被踢出,只有本机提供服务
测试