Lvs与Keepalived集群

一、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。

bd9746af39d900610da690289c87531d6d2.jpg

1fc1b2547af0fb70008c642ab096d62a8a6.jpg

3)缺少IP地址和网卡配置文件,手动配置一个,先配置桥接模式,配置物理网卡:

4a02404e7b18cdd783c97dd90edd5aae5ba.jpg

4)查看一下无线网卡地址(windows):ipconfig /all

b9af2958173dd7a802ba2ef7604127adc6c.jpg

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

dda084aa22ec35bb3e6727fad4bc083a863.jpg

两个网卡配置成功。

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

8acfe6188e499874bd65d66125453ae0a3a.jpgcd56d3ec8b644c288e3c4e6d7e4aa8efac0.jpg

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)测试访问(可停止其中服务器进行测试):

30978fa6863b3e5f818b9a403e7b9668324.jpg

*注:如果无法连接成功,检查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
396540637b9cafc3f45fdfa06ad1d286736.jpg

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 

de487270ddf03f6ac30b1c7480d8dd3c6b1.jpg

dcc392ed20b99d18ab25f514ade1d83cb57.jpg

*注:如果无法连接成功,检查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

131cc75b9849ac3e357b57b82ee599700e2.jpg

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 

de487270ddf03f6ac30b1c7480d8dd3c6b1.jpg

*注:遇到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
	}
    }
}

两个文件主要不同处:

fc12b672a252d1f5f7b05729f87259b9505.jpg59dfa592c65b30199e42d72d5f2715b7d71.jpg

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

27d0e043aee70e4816c0c662121e65c4b9a.jpg

注意防火墙设置,真实服务器最好关闭防火墙。

参考: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

 

转载于:https://my.oschina.net/u/1253780/blog/2120694

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值