ipvsadm+keepalived 实现高可用负载均衡
一.使用系统RedHatEnterpriseLinuxServerrelease5.4
二.安装环境
1.说明
realserver:192.168.1.11
realserver:192.168.1.12
lvs控制机MASTER:192.168.1.100
BACKUP:192.168.1.101
虚拟VIP:192.168.1.200
其中:realserver上只需要简单的安装apache即可
lvs控制机需要安装:ipvsadm,keepalived
2.lvs控制机安装,主备机分别安装ipvsadm
实现LVS/DR最重要的两个东西是ipvs内核模块和ipvsadm工具包,现在的系统已经包含ip_vs模块
1)检查内核模块,看一下ip_vs是否被加载
#lsmod|grepip_vs
ip_vs350090
如果没有显示,则说明没有加载,执行命令modprobeip_vs就可以把ip_vs模块加载到内核
#modprobeip_vs
2)安装ipvsadm
先把目录/usr/src/kernels/2.6.18-164.el5-x86_64链接为/usr/src/linux,命令如下
ln–s/usr/src/kernels/2.6.18-164.el5-x86_64/usr/src/linux
解压ipvsadm-1.24.tar.gz,执行"make;makeinstall”完成安装。
3)lvs/dr脚本,在主备机上备份部署
vilvsdr
#!/bin/bash
RIP1=192.168.1.11
RIP2=192.168.1.12
VIP1=192.168.1.200
/etc/rc.d/init.d/functions
case"$1"in
start)
echo"startLVSofDirectorServer"
#settheVirtualIPAddressandsysctlparameter
/sbin/ifconfigeth0:0$VIP1broadcast$VIP1netmask255.255.255.255up
#/sbin/ifconfigeth0:1$VIP2broadcast$VIP2netmask255.255.255.255up
/sbin/routeadd-host$VIP1deveth0:0
#/sbin/routeadd-host$VIP2deveth0:1
echo"1">/proc/sys/net/ipv4/ip_forward
#ClearIPVStable
/sbin/ipvsadm-C
#setLVS
#WebApache
/sbin/ipvsadm-A-t$VIP1:80-srr-p120
/sbin/ipvsadm-a-t$VIP1:80-r$RIP1:80-g
/sbin/ipvsadm-a-t$VIP1:80-r$RIP2:80-g
#RunLVS
/sbin/ipvsadm
;;
stop)
echo"closeLVSDirectorserver"
echo"0">/proc/sys/net/ipv4/ip_forward
/sbin/ipvsadm-C
/sbin/ifconfigeth0:0down
;;
*)
echo"Usage:$0{start|stop}"
exit1
esac
4)主备机上分别安装keepalived
tarzxfkeepalived-1.1.17.tar.gz
cdkeepalived-1.1.17
./configure--prefix=/usr/local/keepalive-with-kernel-dir=/usr/src/kernels/path
make&&makeinstall
mkdir-p/etc/keepalived/
vikeepalived.conf以下配置文件
!ConfigurationFileforkeepalived
global_defs{
router_idLVS_DEVEL
}
vrrp_instanceVI_1{
stateMASTER#备份服务器上将MASTER改为BACKUP
interfaceeth0#HA监测网络接口
virtual_router_id51#主、备机的virtual_router_id必须相同
priority90#主、备机取不同的优先级,主机值较大,备份机值较小
advert_int1#VRRPMulticast广播周期秒数
authentication{
auth_typePASS#VRRP认证方式
auth_pass1111#VRRP口令字
}
virtual_ipaddress{
192.168.1.200#LVS虚拟地址
}
}
virtual_server192.168.1.20080{
delay_loop2
lb_algorr
lb_kindDR
protocolTCP
real_server192.168.1.1180{
weight1
TCP_CHECK{
connect_timeout3
nb_get_retry3
delay_before_retry3
}
}
real_server192.168.1.1280{
weight1
TCP_CHECK{
connect_timeout3
nb_get_retry3
delay_before_retry3
}
}
}
三.分别启动主备机上的lvs脚本和keepalived
shlvsdrstart
/usr/local/keepalived/sbin/keepalived-D
四.测试
停掉主机ipvsadmn和keepalived,从机立即接管服务。
启动主机服务,主机负载均衡生效。
这里采用了“rr:轮叫(RoundRobin)”算法,容易看出实际效果,对它的解释如下:
调度器通过”轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载.