目的要求:
访问vip时,调度器ipvs可以轮调realserver,实现负载均衡。
keepalived使调度器(ipvs)实现master和backup,如果master挂掉,backup可以补上,保持高可用,keepalived在lvs的作用参考http://www.linuxvirtualserver.org/docs/ha/keepalived.html。
安装要求:
调度器,安装ipvsadm+keepalived
192.168.9.205 lvs+keepalived master
192.168.9.204 lvs+keepalived slave
Realserver安装web服务
192.168.9.203
192.168.9.201
vip
192.168.9.206
所有机器都在一个交换机,并且在一个网段。使用LVS VS/DR模式,即直接路由实现虚拟服务器。
在master和backup上要安装ipvsadm和keepalived
下载软件包
在http://www.linuxvirtualserver.org/ 下载lvs的软件包
在http://www.keepalived.org/ 下载keepalived软件包
先编译安装lvs,再安装keepalived,安装lvs需要内核源码
下载lvs源码的时候,一定要选择你内核版本对应的源码包。
yum install kernel-devel -y
ln -s /usr/src/kernels/2.6.32-358.23.2.el6.x86_64/ /usr/src/linux
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
tar zxvf ipvsadm-1.26.tar.gz
cd ipvsadm-1.26
make && make install
到这里ipvs调度器已经安装完毕,使用ipvsadm命令查看ipvs的状态
使用lsmod | grep ip_vs可以查看已经加载的模块以及调度算法,如下显示使e用的算法是rr
ip_vs_rr 1420 1
ip_vs 115643 3 ip_vs_rr
libcrc32c 1246 1 ip_vs
ipv6 321422 16 ip_vs,ip6t_REJECT,nf_conntrack_ipv6,nf_defrag_ipv6
接下来安装keepalived
wget http://www.keepalived.org/software/keepalived-1.2.9.tar.gz
tar vxzf keepalived-1.2.9.tar.gz
cd keepalived-1.2.9
./configure的时候,检查以下几行
Use IPVS Framework : Yes
IPVS sync daemon support : Yes
代表检测到了lvs,接下来运行make && make install安装即可。
对keepalived目录结构进行调整
mkdir -p /etc/keepalived
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
在安装好lvs和keepalived之后,即修改/etc/keepalived/keepalived.conf配置文件,以下是MASTER的配置
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.9.206
}
}
virtual_server 192.168.9.206 80 {
delay_loop 6
lb_algo rr
lb_kind DR
# persistence_timeout 5
protocol TCP
real_server 192.168.9.203 80 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.9.201 80 {
weight 3
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
在BACKUP将上面的state MASTER替换为state BACKUP即可
在realserver上的配置:
根据lvs的官方文档,DR模式需要在realserver上添加本地回环的vip,并且是Non-ARP,对外不可见,这样使响应报文的源地址也是vip。参见:http://zh.linuxvirtualserver.org/node/28
为方便使用,创建realserver-vip.sh,添加
#!/bin/bash
#description:start realserver
vip=192.168.9.206
source /etc/rc.d/init.d/functions
case $1 in
start)
echo "Start Realserver"
/sbin/ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
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
;;
stop)
echo "Stop Realserver"
/sbin/ifconfig lo:0 down
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 "Usage: $0 (start | stop)"
exit 1
esac
执行bash realserver-vip.sh start,添加lo:0
使用ip addr list命令可查看当前机器的vip是否生效。
接下来测试,模拟MASTER挂掉和恢复,realserver挂掉及恢复,服务是否高可用运转即可。