LVS+NAT模式

Posted 年年哎

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LVS+NAT模式相关的知识,希望对你有一定的参考价值。

搭建负载均衡集群:

就是让多台服务器均衡地去承载压力。实现负载均衡集群的开源软件LVS、keepalived、haproxy、Nginx

LVS根据实现方式的不同,主要分为三种类型:NAT模式、IPTunnel(IP隧道)模式、DR模式

NAT模式

这种模式的实现原理很简单,调度器会把用户的请求通过预设的iptables规则转发给后端的真实服务器。其中调度器有两个IP,一个是公网IP,一个是内网IP,而真实服务器只有内网IP。用户访问的时候请求的是调度器的公网IP,它会把用户的请求转发到真实服务器的内网IP上。这种模式的好处是节省公网IP,但是调度器会成为一个瓶颈。NAT模式架构如下图所示:

 

也需要安装nginx,可参考上一篇博客

 一 NAT模式LVS搭建

NET模式下,调度器需要有两个IP,一个公网IP一个内网IP,真实服务器只需要内网IP。此架构需要准备三台虚拟机。三台虚拟机的IP分配如下:

调度器dir:192.168.200.95(内网IP,vmware为NAT模式),192.168.100.139(公网IP,vmware仅主机模式)。

真实服务器rs1:192.168.200.56(内网IP)

真实服务器rs2:192.168.200.53(内网IP)

首先,真实服务器rs1(192.168.200.56)和rs2(192.168.200.53)上要把内网的网关设置为dir的内网IP(192.168.200.95),否则实验无法成功。然后,把三台服务器上的iptables规则清空并保存,命令如下:

# iptables -F; iptables -t nat -F; service iptables save         //三台机器上都要执行

在dir上安装ipvsadm,这是实现LVS的核心工具:

[root@dir ~]# yum install -y ipvsadm

继续在dir上编写一个脚本

[root@dir ~]# vim /usr/local/sbin/lvs_nat.sh
#! /bin/bash
# director 服务器上开启路由转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
# 关闭icmp的重定向
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/ens33/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/ens34/send_redirects
# director 设置nat防火墙
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 192.168.200.0/24  -j MASQUERADE
# director设置ipvsadm
IPVSADM=\'/usr/sbin/ipvsadm\'
$IPVSADM -C
$IPVSADM -A -t 192.168.100.139:80 -s wlc -p 300
$IPVSADM -a -t 192.168.100.139:80 -r 192.168.200.131:80 -m -w 1
$IPVSADM -a -t 192.168.100.139:80 -r 192.168.200.132:80 -m -w 1

脚本编写完成后,直接执行,命令如下:

[root@dir ~]# bash /usr/local/sbin/lvs_nat.sh

下面测试LVS的效果,如果dir上有Nginx服务器,需要先把它关闭,否则会影响实验效果:

[root@dir ~]# killall nginx

为了更容易方便区分,分别需要给56、53设置一个默认主页,命令如下:

[root@rs1 ~]# echo "rs1" > /usr/share/nginx/html/index.html    //56上执行
[root@rs2 ~]# echo "rs2" > /usr/local/nginx/html/index.html    //53上执行

在dir上分别访问两个rs,如下所示:

 [root@dir ~]# curl 192.168.200.56 rs1

[root@dir ~]# curl 192.168.200.53 rs2 

这样就区分rs1和rs2,然后直接在dir上访问dir的外网(192.168.100.139),结果如下:

[root@dir ~]# curl 192.168.100.139
rs2
[root@dir ~]# curl 192.168.100.139
rs2
[root@dir ~]# curl 192.168.100.139
rs2
[root@dir ~]# curl 192.168.100.139
rs2
[root@dir ~]# curl 192.168.100.139
rs2
[root@dir ~]# curl 192.168.100.139
rs2
[root@dir ~]# curl 192.168.100.139
rs2

连续多次访问,一直请求在rs2上,是因为脚本中有设置-p参数,理论上在300秒内会一直请求在rs2上。重新编辑/usr/local/sbin/lvs_nat.sh脚本把-p参数删除,然后再次测试,结果如下:

[root@dir ~]# curl 192.168.100.139
rs2
[root@dir ~]# curl 192.168.100.139
rs1
[root@dir ~]# curl 192.168.100.139
rs2
[root@dir ~]# curl 192.168.100.139
rs1
[root@dir ~]# curl 192.168.100.139
rs2
[root@dir ~]# curl 192.168.100.139
rs1

这样就做到了均衡访问。

以上是关于LVS+NAT模式的主要内容,如果未能解决你的问题,请参考以下文章

18.6 负载均衡集群介绍;18.7 LVS介绍;18.9 LVS NAT模式搭建(上);18.10 LVS NAT模式搭建(下)

LVS负载均衡之NAT模式原理及配置详细流程

负载均衡集群介绍 LVS介绍 LVS调度算法 LVS NAT模式搭建

LVS负载均衡NAT模式

负载均衡集群相关LVS介绍LVS调度算法LVS NAT模式搭建

负载均衡集群介绍LVS介绍LVS NAT模式搭建