一.前言
关于LVS的介绍可参考
LVS介绍及原理详解: http://blog.youkuaiyun.com/qq_30256711/article/details/78986510
LVS的应用架构详解: http://blog.youkuaiyun.com/qq_30256711/article/details/78986841
Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。Keepalived是VRRP的完美实现,因此在介绍keepalived之前,先介绍一下VRRP的原理。
VRRP 工作机制
在一个VRRP虚拟路由器中,有多台物理的VRRP路由器,但是这多台的物理的机器并不能同时工作,而是由一台称为MASTER的负责路由工作,其它的都是BACKUP,MASTER并非一成不变,VRRP让每个VRRP路由器参与竞选,最终获胜的就是MASTER。MASTER拥有一些特权,比如,拥有虚拟路由器的IP地址,我们的主机就是用这个IP地址作为静态路由的。拥有特权的MASTER要负责转发发送给网关地址的包和响应ARP请求。
VRRP通过竞选协议来实现虚拟路由器的功能,所有的协议报文都是通过IP多播(multicast)包(多播地址224.0.0.18)形式发送的。虚拟路由器由VRID(范围0-255)和一组IP地址组成,对外表现为一个周知的MAC地址。所以,在一个虚拟路由器中,不管谁是MASTER,对外都是相同的MAC和IP(称之为VIP)。客户端主机并不需要因为MASTER的改变而修改自己的路由配置,对客户端来说,这种主从的切换是透明的。
在一个虚拟路由器中,只有作为MASTER的VRRP路由器会一直发送VRRP通告信息(VRRPAdvertisementmessage),BACKUP不会抢占MASTER,除非它的优先级(priority)更高。当MASTER不可用时(BACKUP收不到通告信息),多台BACKUP中优先级最高的这台会被抢占为MASTER。这种抢占是非常快速的(<1s),以保证服务的连续性。由于安全性考虑,VRRP包使用了加密协议进行加密。
二.环境准备
本次实验用四台Centos6.5虚拟机实现LVS+Keepalived高可用方案,以下是软件版本和IP分配
操作系统:Centos 6.5 2.6.32-431.el6.x86_64
软件版本: httpd.x86_64 0:2.2.15-60.el6.centos.6
keepalived-1.2.24.tar.gz
ipvsadm-1.2.1
机器名 | IP | 用途 |
LB1_MASTER | Eth0 192.168.1.111/24 Eth0:1 192.168.1.109/24 | Eth0用作DIP Eth0:1 用作VIP |
LB2_SLAVER | Eth0 192.168.1.112/24 Eth0:1 192.168.1.109/24 | Eth0用作DIP Eth0:1 用作VIP |
RS1 | Eth0 192.168.1.113/24 Lo:0 192.168.1.109/32 | Eth0 用作RIP Lo:0 用作VIP |
RS2 | Eth0 192.168.1.114/24 Lo:0 192.168.1.109/32 | Eth0 用作RIP Lo:0 用作VIP |
三.LVS+Keepalived实战
1)安装lVS
Ipvsadm:版本选择
ipvsadm-1.24 适合centos5.x
ipvsadm-1.26 适合centos6.x
lsmod|grep ip_vs查看系统是否安装lvs
创建软链接
[root@LVS ~]#ln-s /usr/src/kernels/2.6.32-696.16.1.el6.x86_64/ /usr/src/linux
[root@LVS ~]# ll/usr/src/
total 8
drwxr-xr-x. 2root root 4096 Sep 23 2011 debug
drwxr-xr-x. 3root root 4096 Oct 25 04:25 kernels
lrwxrwxrwx. 1root root 44 Jan 4 18:44 linux ->/usr/src/kernels/2.6.32-696.16.1.el6.x86_64/
*注意:如果没有/usr/src/kernel/2.6.18-194.el5-x86_64路径,很可能是缺少kernel-devel软件包,因此
可通过yum install kernel-devel -y安装
wgethttp://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
tar zxfipvsadm-1.26.tar.gz
cd ipvsadm-1.26
make #如果make 报错:yum install libnl* popt* -y
make install
/sbin/ipvsadm
[root@LB1_MASTER~]# lsmod |grep ip_vs
ip_vs 125220 0
libcrc32c 1246 1 ip_vs
ipv6 317340 280ip_vs,ip6t_REJECT,nf_conntrack_ipv6,nf_defrag_ipv6
也可用yum安装:yum installipvsadm –y
配置VIP:
[root@LB1_MASTER~]# ifconfig eth0:0 10.0.0.10/24 up
[root@LB1_MASTER~]# route add -host 10.0.0.10 dev eth0
配置LVS
[root@LB1_MASTER~]# ipvsadm -C
[root@LB1_MASTER~]# ipvsadm --set 60 5 30
[root@LB1_MASTER~]# ipvsadm -A -t 192.168.1.109 -s wrr -p 20
[root@LB1_MASTER~]# ipvsadm -a -t 192.168.1.110 -r 192.168.1.113 -g -w 1
[root@LB1_MASTER~]# ipvsadm -a -t 192.168.1.110 -r 192.168.1.114 -g -w 2
在LB2_SLAVE 上同样执行以上操作
RS端
[root@mysql ~]#ifconfig lo:0 192.168.1.109/32 up
[root@mysql ~]#route add -host 192.168.1.110 dev lo
抑制RS上的ARP广播
[root@mysql ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@mysql ~]#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@mysql ~]#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@mysql ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
Yum installhttpd -y
service httpdstart
这样LVS就搭建成功了
2)在两台LB上安装配置Keepalived
wgethttp://www.keepalived.org/software/keepalived-1.2.4.tar.gz
ln -s/usr/src/kernels/2.6.32-696.16.1.el6.x86_64/ /usr/src/linux
yum install libnl*popt* -y
./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 -p
cp/usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
cp/usr/local/sbin/keepalived /usr/sbin/
/etc/init.d/keepalivedstart
ps -ef |grepkeepalived
至此,keepalived就安装好了
3)配置keepalived
配置LB1_MASTER keepalived.conf
! ConfigurationFile for keepalived
global_defs {
notification_email {
185604832@qq.com
}
notification_email_fromAlexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_1
}
vrrp_instanceVI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.109
}
}
virtual_server192.168.1.109 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
real_server 192.168.1.113 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 8
}
}
real_server 192.168.1.114 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 8
}
}
}
配置LB2_SLAVE keepalived.conf配置文件
! ConfigurationFile for keepalived
global_defs {
notification_email {
185604832@qq.com
}
notification_email_fromAlexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_1
}
vrrp_instanceVI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.109
}
}
virtual_server192.168.1.109 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
real_server 192.168.1.113 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 8
}
}
real_server 192.168.1.114 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 8
}
}
}
到此,LVS+keepalived高可用就配置完了
四.小结
1.LVS的Real Server 在生产环境中可使用双网卡,并且使用公网IP,将数据直接返回给用户,这里为了演示方便,使用了IP别名的方式
2.Keepalived可使用多个VIP,两台Server互为主备,这样充分利用资源,又提高性能。