一、LVS安装
1、[root@localhost ~]# yum install -y ipvsadm
2、[root@localhost ~]# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
执行如下命令来应用:
[root@localhost ~]# sysctl -p
[root@localhost ~]# sysctl -w net.ipv4.ip_forward=1
二、LVS配置(三种模型配置)
Lvs有3种模型,分别是NAT(Virtual Server via NAT)、DR(Virtual Server via Direct Routing)、Tun(Virtual Server via IP Tunneling)模型。
术语:
1. DS:Director Server。指的是前端负载均衡器节点。
2. RS:Real Server。后端真实的工作服务器。
3. VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。
4. DIP:Director Server IP,主要用于和内部主机通讯的IP地址。
5. RIP:Real Server IP,后端服务器的IP地址。
6. CIP:Client IP,访问客户端的IP地址。
(一)NAT模式(网络地址转换)
通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分发给后端的真实服务器,真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回到客户端,完成整个调度的过程。
优点:支持所有操作系统及私有网络,且只需一个公网 IP 地址
缺点:用户请求和响应报文都必须经过dr地址重写,当用户请求越来越多时,调度器的处理能力将成为瓶颈。
IP准备:VIP: 192.168.0.106, RSIP:192.168.22.153、192.168.22.154
1、配置网络环境
1)NAT模式下需要,负载均衡调度器(Director Server)需要两个网卡,增加网卡(需要添加HWADDR不同的网卡,两个网卡模式分别要属于不同的链接模式分别为桥接和NAT)。
2)生成完成后,查看虚拟机linux网卡配置情况,成本网卡名为ens37。
3)缺少IP地址和网卡配置文件,手动配置一个,先配置桥接模式,配置物理网卡:
4)查看一下无线网卡地址(windows):ipconfig /all
5)生成完成后,配置虚拟机linux网卡静态IP地址
[root@localhost network-scripts]# cp ifcfg-eno16777736 ifcfg-ens37
[root@localhost network-scripts]# vi ifcfg-ens37
TYPE=Ethernet
#BOOTPROTO=dhcp
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=ens37
#UUID=115a7ee2-4721-4358-92e9-b6bd1068e062
DEVICE=ens37
ONBOOT=yes
IPADDR=192.168.0.106
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DNS1=8.8.8.8
6)[root@localhost network-scripts]# systemctl restart network //增加后重启。
[root@localhost network-scripts]# ifconfig
[root@localhost network-scripts]# ifconfig
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.22.153 netmask 255.255.255.0 broadcast 192.168.22.255
inet6 fe80::20c:29ff:fe7e:c6f5 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:7e:c6:f5 txqueuelen 1000 (Ethernet)
RX packets 991 bytes 88247 (86.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 683 bytes 99544 (97.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.106 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::20c:29ff:fe7e:c6ff prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:7e:c6:ff txqueuelen 1000 (Ethernet)
RX packets 65 bytes 10234 (9.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 15 bytes 1688 (1.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 0 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
两个网卡配置成功。
2、服务器配置
为了测试用使用docker生成两个tomcat服务器用于测试,在当前目录创建两个目录
1)[root@localhost ~]# mkdir ~/tomcat ~/tomcat/8081 ~/tomcat/8082
[root@localhost 8081]# docker run --name tomcat1 -p 8081:8080 -v $PWD/data:/usr/local/tomcat/webapps/data -d tomcat:latest
[root@localhost 8082]# docker run --name tomcat2 -p 8082:8080 -v $PWD/data:/usr/local/tomcat/webapps/data -d tomcat:latest
[root@localhost 8081]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d2b6e4f2ac3d tomcat:latest "catalina.sh run" 4 seconds ago Up 3 seconds 0.0.0.0:8081->8080/tcp tomcat1
8e4e995fd60b tomcat:latest "catalina.sh run" 31 seconds ago Up 30 seconds 0.0.0.0:8082->8080/tcp tomcat2
把153、154三个网关设置进行调整:
2)[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eno16777736
3)ipvsadm配置
查看当前系统上网卡名称,把上述桥连方式生成网卡IP地址做为VIP(192.168.0.106)使用
[root@localhost network-scripts]# cd /proc/sys/net/ipv4/conf
[root@localhost conf]# ls
all default docker0 eno16777736 ens37 lo
创建lvs_nat.sh文件(touch lvs_nat.sh),填写下列内容:
#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eno16777736/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
IPVSADM='/sbin/ipvsadm'
$IPVSADM -C
$IPVSADM -A -t 192.168.0.106:8080 -s rr
$IPVSADM -a -t 192.168.0.106:8080 -r 192.168.22.153:8081 -m -w 1
$IPVSADM -a -t 192.168.0.106:8080 -r 192.168.22.153:8082 -m -w 1
$IPVSADM -a -t 192.168.0.106:8080 -r 192.168.22.154:8080 -m -w 1
参数说明:
-A:增加一个虚拟服务
-a:增加real server
-r:指定real server 的 IP地址
-t:表示TCP服务
-s:指定调度算法 rr:轮询算法
-m –masquerading 指定LVS 的工作模式为NAT 模式
4)[root@localhost ~]# ./lvs_nat.sh //执行lvs_nat.sh文件 ,随系统自动启动,可放入/usr/local/sbin/目录下
5)测试安装配置情况:
[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.106:8080 rr
-> 192.168.22.153:8081 Masq 1 0 0
-> 192.168.22.153:8082 Masq 1 0 0
-> 192.168.22.154:8080 Masq 1 0 0
[root@localhost ~]# ipvsadm -ln --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 192.168.0.106:8080 12 326 94 31294 681861
-> 192.168.22.153:8081 4 285 74 27223 652737
-> 192.168.22.153:8082 4 29 20 3447 29124
-> 192.168.22.154:8080 4 12 0 624 0
[root@localhost ~]# ipvsadm -ln --rate
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS
-> RemoteAddress:Port
TCP 192.168.0.106:8080 0 0 0 0 0
-> 192.168.22.153:8081 0 0 0 0 0
-> 192.168.22.153:8082 0 0 0 0 0
-> 192.168.22.154:8080 0 0 0 0 0
6)测试访问(可停止其中服务器进行测试):
*注:如果无法连接成功,检查DS服务器防火墙是否关了(使用此命令解决:iptables -F;setenforce 0,重启防火墙)
3、配置还原:
(1)ipvsadm -C 清空规则,ipvsadm -ln 确认
(2)iptables -t nat -F: 清空iptables的nat规则
(3)master和slave把网卡所对应的网关(GATEWAY)改回来,vi /etc/sysconfig/network-scripts/ifcfg-eno16777736,重启网卡
systemctl restart network
(4)dr用不到ens37这个网卡(192.168.0.106),在虚拟机上删除桥连网卡,执行:ifdown ens37,在/etc/sysconfig/network-scripts/目录下删除ifcfg-ens37文件,重启网卡:systemctl restart network
上一方案在实际生产中较少使用。
(二)、DR模式(直接路由模式)
通过改写请求报文的MAC地址,将请求发送到真是服务器,真实服务器将响应直接返回给用户,直接路由模式可以极大的提高集群系统的伸缩性,这种方法没有IP隧道的开销,集群中真实的服务器也没有必要必须支持IP隧道协议,只是需要调度器与真实服务器有一块网卡连在同一物理网段上。
1、环境配置
IP准备:
Director节点: (ens33 192.168.22.153 vip ens33:0 192.168.158)
Real server1: (ens33 192.168.22.154 vip lo:0 192.168.158)
Real server2: (ens33 192.168.22.155 vip lo:0 192.168.158)
2、服务器配置
1)DS转发服务器配置,在/usr/local/sbin/目录下建建lvs_dr.sh文件
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/sbin/ipvsadm
vip=192.168.22.158
rs1=192.168.22.154
rs2=192.168.22.155
#删除一个虚拟IP
#ifconfig ens33:0 down
#增加一个虚拟IP
ifconfig ens33:0 $vip broadcast $vip netmask 255.255.255.255 up
#增加一条路由
route add -host $vip dev ens33:0
$ipv -C
$ipv -A -t $vip:8080 -s wrr
$ipv -a -t $vip:8080 -r $rs1:8080 -g -w 1
$ipv -a -t $vip:8080 -r $rs2:8080 -g -w 3
说明:ifconfig ens33:0 192.168.22.158 broadcast 192.168.22.158 netmask 255.255.255.255 up ,表示在现有网卡上创建虚拟IP 192.168.22.158,其实现原理主要是靠TCP/IP的ARP协议。
参数说明:
-g –gatewaying 指定LVS 的工作模式为dr(直接路由模式)(也是LVS 默认的模式)
-r –real-server server-address 真实的服务器[Real-Server:port]
2)[root@localhost ~]# ./lvs_dr.sh
3)真实服务器配置,在两台rs1,rs2都写入配置脚本
[root@localhost ~]# touch lvs_rs.sh
[root@localhost ~]# vi /usr/local/sbin/lvs_rs.sh
#!/bin/bash
vip=192.168.22.158
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip 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
[root@localhost ~]# chmod -R 755 lvs_rs.sh //要授权才能执行
4)[root@localhost ~]# ./lvs_rs.sh
(1)调整arp内核参数的意义:
(1) ARP广播会产生的问题
当客户端发起访问VIP 对应的域名的请求(curl 192.168.22.158)时,根据网络通信原理会产生ARP 广播,因为负载均衡器dir和真实的服务器rs在同一网络并且VIP设置在集群中的每个节点上,此时集群内的真实服务器会尝试回答来自客户端计算机的查找VIP的ARP广播,这就会产生问题,大家都说我是"VIP"。
(b)为了达到负载均衡的目的,必须想法办让真实服务器忽略来自客户端计算机的ARP广播请求 ——》 调整arp内核参数
参考:http://www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html
http://blog.chinaunix.net/uid-13423994-id-5146098.html
(2)问题:lvs有vip,real server也有vip,但client请求只访问lvs的vip?
在所有real server上要关闭所有arp请求,导致不能响应client发出的arp请求(相当于哑巴),只有lvs可以响应,这样请求就会传到lvs的vip中,这就是为什么要禁止real server 的 arp请求和响应
5)测试:
直接访问192.168.22.158
*注:如果无法连接成功,检查DS服务器防火墙是否关了(使用此命令解决:iptables -F)
3、配置还原(可做为停机脚本)
(1) director服务器
[root@localhost ~]# /sbin/ipvsadm -C
[root@localhost ~]# ip addr del 192.168.22.158 dev ens33
(2)real server服务器
[root@localhost ~]# ip addr del 192.168.22.158 dev lo
[root@localhost ~]# echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@localhost ~]# echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@localhost ~]# echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@localhost ~]# echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
为方便使用,真实服务器可编写启停脚本,lvs_rs.sh
#!/bin/bash
#description : start realserver
VIP=192.168.22.158
/etc/rc.d/init.d/functions
case "$1" in
start)
echo " start LVS of 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)
/sbin/ifconfig lo:0 down
echo "close LVS Directorserver"
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
(二)、TUN模式(IP隧道模式)
调度器将请求的报文通过IP隧道转发至真实服务器,而真实的服务器直接将结果返回给用户,调度器只处理请求报文,由于一般网路服务的应答大于请求,采用IP隧道模式,集群系统的最大吞吐量可以提高10倍。
1、环境配置
IP准备:
Director节点: (ens33 192.168.22.153 vip ens33:0 192.168.158)
Real server1: (ens33 192.168.22.154 vip lo:0 192.168.158)
Real server2: (ens33 192.168.22.155 vip lo:0 192.168.158)
1) /etc/sysctl.conf
把 net.ipv4.conf.all.rp_filter和 net.ipv4.conf.default.rp_filter设为0即可
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
系统启动后,会自动加载这个配置文件,内核会使用这个变量
2)命令行
显示一个内核变量 sysctl net.ipv4.conf.all.rp_filter
设置一个内核变量 sysctl -w net.ipv4.conf.all.rp_filter=0
设置完后,会更新内核(实时的内存)中的变量的值,但不会修改sysctl.conf的值
2、服务器配置
1)DS转发服务器配置,在/usr/local/sbin/目录下建建lvs_tun.sh文件
#!/bin/bash
ipv=/sbin/ipvsadm
vip=192.168.22.158
ifconfig tunl0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev tunl0
##添加转发规则
$ipv -C
$ipv -A -t 192.168.22.158:8080 -s rr
$ipv -a -t 192.168.22.158:8080 -r 192.168.22.154:8080 -i
$ipv -a -t 192.168.22.158:8080 -r 192.168.22.155:8080 -i
参数说明:
-i –ipip 指定LVS 的工作模式为隧道模式
[root@localhost ~]# chmod -R 775 lvs_tun.sh
[root@localhost ~]# ./lvs_tun.sh
2)真实服务器配置,在两台rs1,rs2都写入配置脚本
[root@localhost ~]# touch lvs_rs.sh
[root@localhost ~]# vi /usr/local/sbin/lvs_rs.sh
#!/bin/bash
vip=192.168.22.158
ifconfig tunl0 $vip broadcast $vip netmask 255.255.255.255 up
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
echo "0" > /proc/sys/net/ipv4/conf/tunl0/rp_filter
echo "0" > /proc/sys/net/ipv4/conf/all/rp_filter
[root@localhost ~]# chmod -R 755 lvs_rs.sh //要授权才能执行
3)[root@localhost ~]# ./lvs_rs.sh
如果无错误表示配置成功.
4)测试:
直接访问192.168.22.158
*注:遇到IP可通,但加端口不通的情况,可检查DS服务器防火墙是否关了(使用此命令解决:iptables -F),再关闭RS服务防火墙。
3、为方便使用,真实服务器可编写启停脚本,lvs_rs.sh
#!/bin/bash
#description : start realserver
VIP=192.168.22.158
/etc/rc.d/init.d/functions
case "$1" in
start)
echo " start LVS of REALServer"
modprobe ipip
/sbin/ifconfig tunl0 $VIP netmask 255.255.255.255 broadcast $VIP up
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
echo "0" > /proc/sys/net/ipv4/conf/tunl0/rp_filter
echo "0" > /proc/sys/net/ipv4/conf/all/rp_filter
;;
stop)
/sbin/ifconfig tunl0 down
echo "close LVS Directorserver"
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 "1" > /proc/sys/net/ipv4/conf/tunl0/rp_filter
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
三、LVS与Keepalived配置(基于DR模型)
1、环境配置
1)IP准备:
Director节点: (ens33 192.168.22.153 vip ens33:0 192.168.158)
Director节点: (ens33 192.168.22.154 vip ens33:0 192.168.158)
Real server1: (ens33 192.168.22.155 vip lo:0 192.168.158)
Real server2: (ens33 192.168.22.156 vip lo:0 192.168.158)
2)程序准备:
[root@localhost ~]# yum install ipvsadm
[root@localhost ~]# yum install keepalived
3)配置系统日志(方便监控运行情况),修改keepalived的日志输入(因为keepalived的日志输出在/var/log/message里面,不好查看,可进行修改)
[root@localhost ~]# vi /etc/sysconfig/keepalived
把KEEPALIVED_OPTIONS="-D" 修改为KEEPALIVED_OPTIONS="-D -d -S 0"
[root@localhost ~]# vi /etc/rsyslog.conf
最后添加:
# keepalived -S 0
local0.* /var/log/keepalived.log
重新启动日志
[root@localhost log]# systemctl restart rsyslog
[root@localhost log]# systemctl restart keepalived
[root@localhost log]# tail keepalived.log
Sep 8 20:51:58 localhost Keepalived_healthcheckers[39423]: Activating healthchecker for service [10.10.10.3]:1358
2、服务器配置
1)keepalived服务器配置
Master端192.168.22.153机器的配置:
[root@localhost ~]# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.22.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.22.158
}
}
virtual_server 192.168.22.158 8080 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 50
protocol TCP
#sorry_server 192.168.200.200 1358
real_server 192.168.22.155 8080 {
weight 2
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 8080
}
}
real_server 192.168.22.156 8080 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 8080
}
}
}
Backup端的192.168.22.154机器配置:
[root@localhost ~]# scp root@192.168.22.153:/etc/keepalived/keepalived.conf /etc/keepalived/
[root@localhost ~]# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.22.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.22.158
}
}
virtual_server 192.168.22.158 8080 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 50
protocol TCP
#sorry_server 192.168.200.200 1358
real_server 192.168.22.155 8080 {
weight 2
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 8080
}
}
real_server 192.168.22.156 8080 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 8080
}
}
}
两个文件主要不同处:
3)真实服务器配置
两台真实服务器rs1、rs2分别创建lvs_dr.sh文件,内容如下
#!/bin/bash
#description: Config realserver
VIP=192.168.22.158
/etc/rc.d/init.d/functions
case "$1" in
start)
/sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP up
/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/null 2>&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
[root@localhost ~]# chmod -R 755 lvs_dr.sh
[root@localhost ~]# sh lvs_dr.sh start
真实服务器的Tomcat服务器,在webapp下放ROOT文件夹,里面放index.html,内容为 :
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
Master Post: 8080.
</body>
</html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
Backup Post: 8080.
</body>
</html>
3)测试
直接访问如下192.168.22.158:8080
注意防火墙设置,真实服务器最好关闭防火墙。
参考:http://blog.51cto.com/jinlong/1956187
https://blog.csdn.net/Ki8Qzvka6Gz4n450m/article/details/79119665
https://blog.csdn.net/huaishu/article/details/17023061/
http://blog.51cto.com/wgkgood/1102870