一、实现LVS-NAT模型

Linux环境下实现LVS-NAT模型和LVS-DR模型_LVSNAT

1、LVS主机yum -y install ipvsadm

防火墙关闭,RS1、RS2安装httpd,添加index.html,路由器添加到达172.20.0.123的路由表

2、各主机配置

RS1

Linux环境下实现LVS-NAT模型和LVS-DR模型_负载均衡_02

并存在

Linux环境下实现LVS-NAT模型和LVS-DR模型_负载均衡_03

RS2

Linux环境下实现LVS-NAT模型和LVS-DR模型_LVS_04

并同时有

Linux环境下实现LVS-NAT模型和LVS-DR模型_LVS_05

router,打开路由转发功能,vim /etc/sysctl.conf

Linux环境下实现LVS-NAT模型和LVS-DR模型_LVS_06

vmnet6端

Linux环境下实现LVS-NAT模型和LVS-DR模型_LVS_07

服务器端

Linux环境下实现LVS-NAT模型和LVS-DR模型_LVSDR_08

因为需要保证访问后VIP和CIP要原路返回,因此路由需要添加路由到客户端的ip

Linux环境下实现LVS-NAT模型和LVS-DR模型_负载均衡_09

LVS,注意LVS-NAT模式也需要打开路由转发,vim /etc/sysctl.conf中添加net.ipv4.ip_forward = 1

Linux环境下实现LVS-NAT模型和LVS-DR模型_负载均衡_10

LVS也需要目标10.0.0.0网段路由表

Linux环境下实现LVS-NAT模型和LVS-DR模型_LVS_11

3、网络配置完成,开始设置LVS

ipvsadm -A -t 172.20.0.123:80 -s rr

ipvsadm -Ln,查询LVS列表,选项必须-Ln,不能-nL

ipvsadm -a -t 172.20.0.123:80 -r 192.168.32.7 -m

ipvsadm -a -t 172.20.0.123:80 -r 192.168.32.17 -m

Linux环境下实现LVS-NAT模型和LVS-DR模型_负载均衡_12

测试结果,rr轮询

Linux环境下实现LVS-NAT模型和LVS-DR模型_LVSDR_13

二、实现LVS-DR模型

Linux环境下实现LVS-NAT模型和LVS-DR模型_负载均衡_14

1、网卡配置

客户机添加路由表

Linux环境下实现LVS-NAT模型和LVS-DR模型_负载均衡_15

route网卡配置:

Linux环境下实现LVS-NAT模型和LVS-DR模型_负载均衡_16

另一端

Linux环境下实现LVS-NAT模型和LVS-DR模型_LVSNAT_17

打开路由转发

LVS网卡配置:vip绑到回环网卡上

Linux环境下实现LVS-NAT模型和LVS-DR模型_LVSDR_18

另一网卡配置

Linux环境下实现LVS-NAT模型和LVS-DR模型_LVSDR_19

完成后加网关route add -net 10.0.0.0/8 gw 192.168.32.200,LVS不加网关将调度失败,网关是个摆设,本实验中在192.168.32.0网段可以随便加为网关

Linux环境下实现LVS-NAT模型和LVS-DR模型_LVSDR_20

RS1配置

Linux环境下实现LVS-NAT模型和LVS-DR模型_LVSNAT_21

R2配置

Linux环境下实现LVS-NAT模型和LVS-DR模型_LVSDR_22

在RS上执行脚本,配置vip,修改内核参数,常保存依然更改/etc/sysctl.conf

Linux环境下实现LVS-NAT模型和LVS-DR模型_LVSDR_23

2、关闭R1和R2的arp响应

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

Linux环境下实现LVS-NAT模型和LVS-DR模型_LVS_24

3、在LVS上执行命令

iptables -F,清空一下防火墙策略以免造成干扰

ipvsadm -A -t 10.0.0.100:80 -s wrr

ipvsadm -a -t 10.0.0.100:80 -r 192.168.32.7 -g -w 1

ipvsadm -a -t 10.0.0.100:80 -r 192.168.32.17 -g -w 1

Linux环境下实现LVS-NAT模型和LVS-DR模型_LVSDR_25

4、测试结果

Linux环境下实现LVS-NAT模型和LVS-DR模型_负载均衡_26

附1:RS的配置脚本

#!/bin/bash

vip=10.0.0.100

mask='255.255.255.255‘

dev=lo:1

case $1 in

start)

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

ifconfig $dev $vip netmask $mask #broadcast $vip up

#route add -host $vip dev $dev

;;

stop)

ifconfig $dev down

echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore

echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce

echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce

;;

*)

echo "Usage: $(basename $0) start|stop"

exit 1

;;

esac

附2:VS的配置脚本

#!/bin/bash

vip='10.0.0.100'

iface=‘lo:1'

mask='255.255.255.255'

port='80'

rs1='192.168.0.101'

rs2='192.168.0.102'

scheduler='wrr'

type='-g'

case $1 in

start)

ifconfig $iface $vip netmask $mask #broadcast $vip up

iptables -F

ipvsadm -A -t ${vip}:${port} -s $scheduler

ipvsadm -a -t ${vip}:${port} -r ${rs1} $type -w 1

ipvsadm -a -t ${vip}:${port} -r ${rs2} $type -w 1

;;

stop)

ipvsadm -C

ifconfig $iface down

;;

*)

echo "Usage $(basename $0) start|stop“

exit 1

esac

5、给80、443端口添加标签

给RS1、RS2安装mod_ssl,有简单的自签名证书,形成https协议,重启httpd服务后生成443端口

Linux环境下实现LVS-NAT模型和LVS-DR模型_LVSNAT_27

此时80、443端口对应的lvs策略已经生成

贴防火墙标签,使得访问10.0.0.100端口80和443的,都将贴上标签10端口

iptables -t mangle -A PREROUTING -d 10.0.0.100 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 10

添加后iptables规则便生成

Linux环境下实现LVS-NAT模型和LVS-DR模型_负载均衡_28

ipvsadm -Ln

Linux环境下实现LVS-NAT模型和LVS-DR模型_负载均衡_29

ipvsadm -A -f 10 -s rr

ipvsadm -a -f 10 -r 192.168.32.7 -g

ipvsadm -a -f 10 -r 192.168.32.17 -g

此时80和443已经合成了一个标签,可以进行统一调度

测试

Linux环境下实现LVS-NAT模型和LVS-DR模型_LVS_30

6、持久连接,会话绑定,加-p即可实现

ipvsadm -E -f 10 -s rr -p,-p不指定时间默认360秒

测试,连接绑定了RS1服务器

Linux环境下实现LVS-NAT模型和LVS-DR模型_负载均衡_31

7、LVS高可用性

在LVS服务器输入命令,curl http://192.168.32.17 &> /dev/null || ipvsadm -d -f 10 -r 192.168.32.17,当检测到该RS服务器down掉时会自动删除指向该主机的lvs策略,使LVS不用再指向down掉的服务器

不过我们也可以用ldirectord工具实现

当所有RS服务器down时,我们看到界面

Linux环境下实现LVS-NAT模型和LVS-DR模型_LVSNAT_32

此时应该做一个sorry sever,我们可以用LVS服务器当sorry server,给lvs安装httpd,开启httpd服务,echo 'Sorry Server' > /var/www/html/index.thml

之后LVS服务器安装包ldirectord

cp /usr/share/doc/ldirectord-3.9.6/ldirectord.cf /etc/ha.d/

vim /etc/ha.d/ldirectord-3.9.6/ldirectord.cf

Linux环境下实现LVS-NAT模型和LVS-DR模型_LVSNAT_33

设置好后systemctl start ldirectord.service

当R1或者R2宕机时,会自动curl到正常的服务器,当RS全部宕机时,会显示

Linux环境下实现LVS-NAT模型和LVS-DR模型_负载均衡_34

随便上线一个便恢复正常

Linux环境下实现LVS-NAT模型和LVS-DR模型_LVS_35