LVS简介
LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org。现在LVS已经是 Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。
LVS自从1998年开始,发展到现在已经是一个比较成熟的技术项目了。可以利用LVS技术实现高可伸缩的、高可用的网络服务,例如WWW服务、Cache服务、DNS服务、FTP服务、MAIL服务、视频/音频点播服务等等,有许多比较著名网站和组织都在使用LVS架设的集群系统,例如:Linux的门户网站(www.linux.com)、向RealPlayer提供音频视频服务而闻名的Real公司(www.real.com)、全球最大的开源网站(sourceforge.net)等。
使用LVS技术要达到的目标是:通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。
LVS结构
使用LVS架设的服务器集群系统又三个部分组成: 最前端的负载均衡层,用 Load Balancer 表示; 中间的服务器群组层,用Server Array 表示; 最底端的数据共享存储层,用Shared Storage表示;在用户看来,所有的内部应用都是透明的,用户只是使用了一个虚拟服务器Virtual Server提供的高性能服务。
各层的详细介绍:
Load Balancer 层:位于整个集群系统的最前端,又一台或者多台负载调度器 Director Server 组成,LVS模块就安装在 Director上,而其主要作用类似与一个路由器,它含有完成LVS功能所设定的路由表,通过这些路由表把用户的请求分发给Server Array 层的应用服务器Real server上。 同时,在Director 上还要安装对Real Server 服务的监控模块Ldirectored,此模块用于监测各个Real Server服务的健康状况。 在Real Server不可用时把它从LVS路由表中剔除,恢复时重新加入。
Server Array层:由一组实际运行应用服务的机器组成,Real Server可以时Web、Mail、Ftp、Dns、等一个或多个,每个Real Server 之间通过高速的LAN或分布在各地的WAN相连接。 在实际的应用中,Director Server也可以同时兼任Real Server角色。
Shared Storage层:是为所有Real Server提供共享存储空间和内容一致性的存储区域,在物理上,一般由磁盘阵列设备组成,为了提供内容的一致性,一般可以通过NFS网络文件系统共享数据,但是NFS在繁忙的业务系统中,性能并不是很好,此时可以采用集群文件系统,例如Redhat的GFS文件系统,oracle提供的OCFS2文件系统。
从整个LVS结构可以看出Director Server是整个LVS的核心,目前,用于Director 的操作系统只能是Linux、Freebsd。对于Real Server 几乎可以是所有系统平台都很好的支持。
LVS内核模型
当客户端的请求到达负载均衡器的内核空间时,首先会到达PREROUTING链。
当内核发现请求数据包的目的地址时本机时,将数据包送往INPUT链
LVS由用户空间的ipvsadm和内核空间的IPVS组成,ipvsadm用来定义规则,IPVS利用ipvsadm定义的规则工作,IPVS工作在INPUT链上,当数据包到达INPUT链时,首先会被IPVS检查,如果数据包里面的目的地址及端口没有在规则里面,那么这条数据包将被放行至用户空间。
如果数据包里面的目的地址及端口在规则里面,那么这条数据报文将被修改目的地址为事先定义好的后端服务器,并送往POSTROUTING链。
最后经过POSTROUTING链发往后端服务器。
IP负载均衡技术
LVS的IP负载均衡技术是通过IPVS模块来实现的,IPVS是LVS集群系统的核心软件,它的主要作用是:安装在Director Server上,同时在Director上虚拟出一个IP地址,用户必须通过这个虚拟的IP地址访问服务。 这个虚拟IP一般被称为LVS的VIP,即Virtual IP。 访问的请求首先经过VIP到达负载调度器,然后由负载调度器从Real Server列表中选取一个服务节点响应用户的请求。实现此机制由三种,分别是NAT、DR、TUN,详述如下:
VS/NAT:即 Virtual Server Via Network Address Translation,也就是网络地址翻译技术实现虚拟服务器,当用户请求到达调度器时,调度器将请求的报文的目标地址VIP改写成选定的Real Server地址,同时报文的目标端口也改成选定的Real Serve的相应端口,最后将报文请求发送到选定的Real Server。在服务器端得到数据后,Real Server 返回数据给用户时,需要再次经过负载调度器将报文的源地址和源端口改成VIP地址的相应端口,然后发送给用户,完成整个过程。
①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP(客户端IP),后面统称为CIP),目标地址为VIP(负载均衡器前端地址,后面统称为VIP)。
②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的目标地址改为了后端服务器的RIP地址并将报文根据算法发送出去。
③.报文送到Real Server后,由于报文的目标地址是自己,所以会响应该请求,并将响应报文返还给LVS。
④.然后lvs将此报文的源地址修改为本机并发送给客户端。
注意: 在NAT模式中,Real Server的网关必须指向LVS,否则报文无法送达客户端。
VS/TUN:Virtual Server via IP Tunneling,也就是IP隧道技术实现虚拟服务器。 它的连接调度管理与其他一样,它的报文转发方法不同。其调度器采用IP隧道技术将用户请求转发到某个Real Server,而Real 将直接相应用户的请求,不再经过前端调度器,此外,Real Server的地域位置没有要求,可以再Director Server位与同一网段,也可以时独立的一个网络。再TUN方式中,调度器将只处理用户的报文请求,集群系统的吞吐量大大提高。
①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。
②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS。
③.RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己lo接口上的VIP,所以会处理次请求报文,并将响应报文通过lo接口送给eth0网卡直接发送给客户端。
注意:需要设置lo接口的VIP不能再公网上出现VS/DR:Virtual Server via Direct Routing,用直接路由技术实现虚拟服务器。连接调度和管理与其他的一样,但是报文转发方法又有不同,它通过改写请求的报文的MAC地址,将请求发送到Real Server,而后Real 将响应直接返回给用户。这中方式时三种负载调度机制中性能最高的,但 必须要求Director Server与Real Server都有一块网卡连结再统一物理网段上。
①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。
②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的源MAC地址改为自己DIP的MAC地址,目标MAC改为了RIP的MAC地址,并将此包发送给RS。
③.RS发现请求报文中的目的MAC是自己,就会将次报文接收下来,处理完请求报文后,将响应报文通过lo接口送给eth0网卡直接发送给客户端。
注意:需要设置lo接口的VIP不能相应本地网络内arp请求。
负载调度算法
LVS的调度算法分为静态与动态两类。
1静态算法(4种):至根据算法进行调度而不考虑后端服务器的实际连接情况和负载情况。
①.RR:轮叫调度(Round Robin)常用
轮叫调度也叫1:1调度,调度器通过轮叫调度算法将外部请求按顺序轮流分配到集群中的每台Real Server,它均等对待每一台服务器,而不管服务器上实际的连接数和系统负载。
②.WRR:加权轮叫(Weight RR)常用
加权轮叫调度算法时根据Real Server 的不同处理能力来调度访问请求。可以对每台Real Server设置不同的调度权值,对性能好的设置较高的权责,处理能力弱的设置较低权值,保证处理能力强的服务器处理更多的访问流量。充分合理的利用服务器资源,同时,调度器还可可以自动查询Real Server的负载情况,并动态的调整其权值。
③.DH:目标地址散列调度(Destination Hash )
根据请求的目标IP地址,作为散列键(HashKey)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
④.SH:源地址 hash(Source Hash)
源地址散列”调度算法根据请求的源IP地址,作为散列键(HashKey)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
2动态算法(6种):前端的调度器会根据后端真实服务器的实际连接情况来分配请求。
①.LC:最少链接(Least Connections)常用
调度器通过”最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用”最小连接”调度算法可以较好地均衡负载。
②.WLC:加权最少连接(默认采用的就是这种)(Weighted Least Connections)常用
在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
③.SED:最短延迟调度(Shortest Expected Delay )
在WLC基础上改进,Overhead = (ACTIVE+1)*256/加权,不再考虑非活动状态,把当前处于活动状态的数目+1来实现,数目最小的,接受下次请求,+1的目的是为了考虑加权的时候,非活动连接过多缺陷:当权限过大的时候,会倒置空闲服务器一直处于无连接状态。
④.NQ永不排队/最少队列调度(Never Queue Scheduling NQ)
无需队列。如果有台 realserver的连接数=0就直接分配过去,不需要再进行sed运算,保证不会有一个主机很空间。在SED基础上无论+几,第二次一定给下一个,保证不会有一个主机不会很空闲着,不考虑非活动连接,才用NQ,SED要考虑活动状态连接,对于DNS的UDP不需要考虑非活动连接,而httpd的处于保持状态的服务就需要考虑非活动连接给服务器的压力。
⑤.LBLC:基于局部性的最少链接(locality-Based Least Connections)
基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。
⑥. LBLCR:带复制的基于局部性最少连接(Locality-Based Least Connections with Replication)
带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按”最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
软件安装配置
1.从官方网站下载ipvsadm、keepalive:
下载地址:http://www.linuxvirtualserver.org/software/kernel-2.6/
下载ipvsadm-1.24.tar.gz,因为最新版ipvsadm-1.25这个版本只支持2.6.28以上的内核,RHEL 5.4内核版本达不到要求,所以选择安装前一个版本。
下载地址:http://www.keepalived.org/download.html
下载keepalived-1.1.20.tar.gz
2、安装ipvsadm(master backup)
(1)创建一个连接文件,其命令为:
[root@master ~]# ln -s/usr/src/kernels/2.6.18-238.el5-i686 /usr/src/linux
注意一定要与当前的运行的内核相一致,因为/usr/src/kernels目录下可能有多个目录。如果不创建这个连接文件,在编译时会出错,从而不能继续进行安装。
[root@master ~]# ll
总计 336
-rw------- 1 root root 1666 08-23 19:08 anaconda-ks.cfg
-rw-r--r-- 1 root root 29211 08-23 19:08 install.log
-rw-r--r-- 1 root root 4582 08-23 19:07 install.log.syslog
-rw-r--r-- 1 root root 36598 08-26 13:43 ipvsadm-1.24.tar.gz
-rw-r--r-- 1 root root 233002 08-26 13:44keepalived-1.1.20.tar.gz
[root@master ruanjian]# tar -zxvfipvsadm-1.24.tar.gz
[root@master ruanjian]# cd ipvsadm-1.24
[root@master ipvsadm-1.24]# make
[root@master ipvsadm-1.24]# make install
(2)检验ipvsadm是否被正确安装
(1)执行ipvsadm,看是否有如下输出。
[root@master ipvsadm-1.24]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
(2)检查当前加载的内核模块,看是否存在ip_vs模块。
[root@master ipvsadm-1.24]# lsmod | grepip_vs
ip_vs 78081 0
注1:只有执行ipvsadm以后,才会在内核加载ip_vs模块。
注2:不能以查进程的方式判断ipvs是否运行。
注3:如果下载最新的ipvsadm-1.25.tar.gz这个版本,在创建连接文件/usr/src/linux后,执行编译时,可能需要修改/boot/grub/grub.conf启动内核名称。一旦当前运行内核与连接文件所代表的内核名不一致时,将出现找不到*.h这样的错误,从而导致安装不能正常进行。
3、安装keepalived.
在负载均衡服务器master和backup上执行
1、解压
[root@master ~]# tar -zxvf keepalived-1.1.20.tar.gz
[root@master ~]# cd keepalived-1.1.20
[root@master keepalived-1.1.20]#./configure --prefix=/usr/local/keepalived
[root@master keepalived-1.1.20]# make
[root@master keepalived-1.1.20]# makeinstall
[root@master keepalived-1.1.20]# cp/usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
[root@master keepalived-1.1.20]# chmod +x/etc/init.d/keepalived
[[email protected]]# cp /usr/local/keepalived/etc/sysconfig/keepalived
/etc/sysconfig/
[root@master keepalived-1.1.20]# mkdir/etc/keepalived
[root@master keepalived-1.1.20]# cp/usr/local/keepalived/etc/keepalived/keepalived.conf
/etc/keepalived/
[root@master keepalived-1.1.20]# cp/usr/local/keepalived/sbin/keepalived /usr/sbin/
[root@master keepalived-1.1.20]# servicekeepalived start
启动 keepalived: [确定]
4、开启负载服务器路由机制(master和backup)
[root@master keepalived-1.1.20]# echo"1" > /proc/sys/net/ipv4/ip_forward
[root@master keepalived-1.1.20]# sysctl –p 使配置生效 显示下面信息
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route =0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 4294967295
kernel.shmall = 268435456
5、建立负载服务器启动脚本(master和backup)
#vi /sbin/lvsdr.sh
#!/bin/bash
VIP=192.168.4.185
RIP1=192.168.4.183
RIP2=192.168.4.184
/sbin/rc.d/init.d/functions
case "$1" in
start)
echo "start LVS of DirectorServer"
#Set the Virtual IP Address
/sbin/ifconfig eth0:1 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev eth0:1
#Clear IPVS Table
/sbin/ipvsadm -C
#Set Lvs
/sbin/ipvsadm -A -t $VIP:80 -s wrr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
#Run Lvs
/sbin/ipvsadm
;;
stop)
echo "Close LVS Directorserver"
/sbin/ifconfig eth0:1 down
/sbin/ipvsadm -C
;;
*)
echo "Usage0{start|stop}"
exit 1
esac
6、分配权限(master 和backup)
[root@master keepalived-1.1.20]# chmod 755 /sbin/lvsdr.sh
7、执行测试(master 和backup)
[root@master keepalived-1.1.20]# /sbin/lvsdr.sh start
start LVS of Director Server
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
->RemoteAddress:Port ForwardWeight ActiveConn InActConn
TCP 192.168.4.185:http wrr
-> 192.168.4.184:http Route 1 0 0
-> 192.168.4.183:http Route 1 0 0
查看ifconfig是否有ifcfg-eth0:0(有就对了)
[root@master keepalived-1.1.20]# ifconfig
eth0 Link encap:Ethernet HWaddr00:0C:29:A1:73:5E
inet addr:192.168.4.181 Bcast:192.168.4.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7001 errors:0 dropped:0overruns:0 frame:0
TX packets:7851 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3747687 (3.5 MiB) TXbytes:786537 (768.1 KiB)
Interrupt:59 Base address:0x2000
eth0:0 Link encap:Ethernet HWaddr00:0C:29:A1:73:5E
inet addr:192.168.4.185 Bcast:192.168.4.185 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:59 Base address:0x2000
查看route -n 路由表是否多了eth0:0路由(有就对了)
[root@master keepalived-1.1.20]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.4.185 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
192.168.4.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 192.168.4.1 0.0.0.0 UG 0 0 0 eth0
# /sbin/lvsdr.sh stop
查看ifconfig是否有ifcfg-eth0:0 (无就对了)
查看route -n 路由表是否多了eth0:0路由(无就对了)
# /sbin/lvsdr.sh adsa
是否提示参数错误,只能使用{start|stop}
8、配置后端WEB服务器
在192.168.4.183和192.168.4.184上分别建立如下脚本。
[root@WEB_A ~]# vim /sbin/realdr.sh
#!/bin/bash
VIP=192.168.4.185
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
echo "1">/proc/sys/net/ipv4/conf/default/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/default/arp_announce
echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
sysctl –p
9、配置权限
[root@WEB_A ~]# chmod 755 /sbin/realdr.sh
10、在两台web服务器上分别执行其指命。
/sbin/realdr.sh start
11、在master和backup上面
[root@WEB_A ~]# vim /etc/keepalived/keepalived.conf
文件内容
! Configuration File for keepalived
global_defs {
notification_email {
}
notification_email_from [email protected]
smtp_server www.mail.com
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER //备份服务器设置为backup
interface eth0
virtual_router_id 51
priority 100 ////备份服务器设置小于100
advert_int 3
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.4.185
}
}
virtual_server 192.168.4.185 80 {
delay_loop 6 //隔6秒查询
lb_algo wrr //lvs算法
lb_kind DR //(Direct Route)
persistence_timeout 60 //同一IP的连接60秒内被分配到同一台realserver
inhibit_on_failure //当web挂掉的时候,前面请求的用户,可以继续打开网页,但是后面的请求不会调度到挂掉的web上面。
protocol TCP //用TCP协议检查realserver状态
real_server 192.168.4.183 80 {
weight 3 //权重
TCP_CHECK {
connect_timeout 10 //10秒无响应超时
nb_get_retry 3
connect_port 80
delay_before_retry 3
}
}
real_server 192.168.4.184 80 {
weight 3
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
connect_port 80
delay_before_retry 3
}
}
}
在backup上面
! Configuration File for keepalived
global_defs {
notification_email {
}
notification_email_from [email protected]
smtp_server www.mail.com
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP //备份服务器设置为backup
interface eth0
virtual_router_id 51
priority 80 ////备份服务器设置小于100
advert_int 3
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.4.185
}
}
virtual_server 192.168.4.185 80 {
delay_loop 6 //隔6秒查询
lb_algo wrr //lvs算法
lb_kind DR //(Direct Route)
persistence_timeout 60 //同一IP的连接60秒内被分配到同一台realserver
inhibit_on_failure //当web挂掉的时候,前面请求的用户,可以继续打开网页,但是后面的请求不会调度到挂掉的web上面。
protocol TCP //用TCP协议检查realserver状态
real_server 192.168.4.183 80 {
weight 3 //权重
TCP_CHECK {
connect_timeout 10 //10秒无响应超时
nb_get_retry 3
connect_port 80
delay_before_retry 3
}
}
real_server 192.168.4.184 80 {
weight 3
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
connect_port 80
delay_before_retry 3
}
}
}
12,启动keepalived
[root@master keepalived-1.1.20]# /etc/init.d/keepalived start
13:设置成自启动
[root@master keepalived-1.1.20]# vim /etc/rc.local //里面添加
/etc/init.d/keepalived restart
/etc/lvsdr.sh start
一、 装配置基于隧道模式Lvs集群:
1、 安装ipvsadmin:
和上面一样,在此略过
2、 创建LVS TUN模式启动脚本(master和backup)
[root@linux-centos ~]# vim/etc/init.d/lvsdstun
#!/bin/bash
VIP=192.168.4.185
RIP1=192.168.4.183
RIP2=192.168.4.184
/etc/rc.d/init.d/functions
case "$1" in
start)
echo "start LVS of DirectorServer Tun"
/sbin/ifconfig tunl0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev tunl0
/sbin/ipvsadm -C
/sbin/ipvsadm -A -t $VIP:80 -s rr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -i
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -i
/sbin/ipvsadm
;;
stop)
echo "stop LVS of DirectorServer Tun"
/sbin/ifconfig tunl0 down
/sbin/ipvsadm -C
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
[root@linux-centos ~]# chmod +x/etc/init.d/lvsdstun
[root@linux-centos ~]# /etc/init.d/lvsdstunstart
start LVS of DirectorServer Tun
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.4.185:http rr
-> 192.168.4.184:http Tunnel 1 0 0
-> 192.168.4.183:http Tunnel 1 0 0
[root@linux-centos ~]# ifconfig
eth0 Link encap:Ethernet HWaddr00:0C:29:AF:F0:E8
inet addr:192.168.4.182 Bcast:192.168.4.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2832 errors:0 dropped:0 overruns:0 frame:0
TX packets:1040 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:242958 (237.2 KiB) TXbytes:105068 (102.6 KiB)
Interrupt:59 Base address:0x2000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:32 errors:0 dropped:0 overruns:0 frame:0
TX packets:32 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:5821 (5.6 KiB) TXbytes:5821 (5.6 KiB)
tunl0 Link encap:IPIP Tunnel HWaddr
inet addr:192.168.4.185 Mask:255.255.255.255
UP RUNNING NOARP MTU:1480 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0(0.0 b)
3、 安装keepalived (master 和backup)
和上面一样,在此略过
4、 在WEB_A和 WEB_B上创建启动脚本
[root@linux-centos ~]# vim/etc/init.d/lvsrstun
#!/bin/bash
VIP=192.168.4.185
/etc/rc.d/init.d/functions
case "$1" in
start)
echo "start LVS of RealServer Tun"
/sbin/ifconfig tunl0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev tunl0
echo "1" >/proc/sys/net/ipv4/conf/tunl0/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/tunl0/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
;;
stop)
echo "close LVS of RealServer Tun"
/sbin/ifconfig tunl0 down
echo "0" >/proc/sys/net/ipv4/conf/tunl0/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/tunl0/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
exit 0
[root@linux-centos ~]# chmod +x/etc/init.d/lvsrstun
[root@linux-centos ~]# /etc/init.d/lvsrstunstart