欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

LVS-NAT模式的配置详解

程序员文章站 2022-09-26 17:33:23
由于实验室拟态存储的项目需要通过NAT模式来映射NFS服务器已实现负载均衡的目的,通过调研了多种负载均衡机制,笔者最终选择了 LVS的NAT模式 来实现需求,接下来通过博客来记录一下LVS NAT模式的配置流程。 1.LVS服务的简介: LVS 是 Linux Virtual Server 的简写, ......

由于实验室拟态存储的项目需要通过NAT模式来映射NFS服务器已实现负载均衡的目的,通过调研了多种负载均衡机制,笔者最终选择了LVS的NAT模式来实现需求,接下来通过博客来记录一下LVS-NAT模式的配置流程。

1.LVS服务的简介:

LVSLinux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统,在1998年5月由章文嵩先生主导开发。LVS集群实现了IP负载均衡技术和基于内容请求分发技术。调度器通过将请求均衡地转移到不同的服务器上执行,且可以屏蔽掉后台故障的服务器,从而将一组服务器构成一个高性能的、高可用的服务器集群,而这样的结构对客户端来说是完全透明的,所以无需修改客户端和服务器端的程序。

LVS服务器可以让客户端将LVS服务器作为一个连接的单点,仅仅通过连接LVS服务器便可以得到后端一整个服务器集群的处理与存储能力,这样能够大大提高系统的扩展性与可用性,同时也能够提供服务的安全性,单一入侵一台服务器并不会破坏其他与该服务器隔离的服务。

LVS的模式

LVS可以支持如下三种模式:

  • Virtual Server via Network Address Translation(VS/NAT)
    通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。

  • Virtual Server via IP Tunneling(VS/TUN)
    采用NAT技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报 文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用 VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。

  • Virtual Server via Direct Routing(VS/DR)
    VS/DR通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同VS/TUN技术一样,VS/DR技术可极大地 提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连 在同一物理网段上。

鉴于ip安全的需求,这里我们需要分割LVS服务器与后端负载集群的ip地址,并且对于负载均衡集群的数目没有太大的需求,所以笔者选用了Virtual Server via Network Address Translation(VS/NAT) 模式。

2.系统环境:

如下图所示,这是LVS-NAT模式下的系统结构图:
LVS-NAT模式的配置详解

系统平台:Ubuntu 16.04 LTS

Load Balancer: 双网卡

  • 外网地址:219.223.199.164
  • 内网地址:192.168.1.30

Real Server:

  • 一共有五台机器,ip地址分别为192.168.1.21~25。这里笔者由于需要挂载NFS服务器并且串联CephFS集群,所以本身Real Server上已经运行着NFS的服务端,关于NFS服务器的搭建可以参考我之前的博文

3.Load Balancer服务器的配置:

Load Balancer服务器的配置相对来说较为复杂,我们按部就班的走下这个流程:

  • ipvsadm
    LVS依赖于ipvsadm来进行配置,所以我们首先先安装ipvsadm:

    sudo apt-get install ipvsadm

  • NAT模式下的ip转发
    之后我们需要配置NAT模式下的ip转发,让通过Load Balancer的ip包能够转发到真正提供服务的Real Server之上进行处理:

    echo 1 >> /proc/sys/net/ipv4/ip_forward //在ipv4环境下可以进行ip转发
    sudo iptables -t nat -F //清除之前的iptable的规则
    sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ens160 -j MASQUERADE
    //这里的网卡需要选择外网ip,也就是219.223.199.164对应的ip地址

  • LVS-NAT模式的配置
    这里我们采取全盘转发的机制,也就是不指定端口的方式,这种用法可能相对比较少见,但由于NFS服务依赖与rpcbind选择端口,所以提供的端口是随机的,为了简单起见,我们采取全盘转发的模式。

    sudo ipvsadm -A -t 219.223.199.164 -s wrr -p 30 //转发对应的ip,并且采取权重轮询的策略
    sudo ipvsadm -a -t 219.223.199.164 -r 192.168.1.21 -m -w 1
    sudo ipvsadm -a -t 219.223.199.164 -r 192.168.1.22 -m -w 1
    sudo ipvsadm -a -t 219.223.199.164 -r 192.168.1.23 -m -w 1
    sudo ipvsadm -a -t 219.223.199.164 -r 192.168.1.24 -m -w 1
    sudo ipvsadm -a -t 219.223.199.164 -r 192.168.1.25 -m -w 1 //依次添加对应的Real Server服务器

下图是通过ipvsadm配置好的转发机制:
LVS-NAT模式的配置详解

4.Real Server服务器的配置:

Real Server这里需要配置路由,将默认的网关改为Load Balancer 服务器的内网ip地址,来实现路由转发的效果。(笔者这里多提一句:这里如果采用双网卡机制很容易出现,TCP连接问题,也就是syn消息收不到ack响应,所以尽量将无关的网卡警用,以免路由配置的复杂。

route命令的配置

    sudo route add -net 0.0.0.0 gw 192.168.1.30

这个命令需要在每台Real Server之上执行,否则其他Real Server没有办法接受到转发的ip数据包,会被Load Balance屏蔽,从而没有办法实现我们期待的负载均衡的结果。下图所示的是Real Server服务器路由转发配置的结果:
LVS-NAT模式的配置详解

5.LVS-NAT模式的测试:

由于实现了LVS全盘的ip地址转发,所以任何基于TCP的网络服务都可以通过Load Balancer转发给后端的Real Server来提供对外的服务,由于笔者主要是测试NFS服务的,所以我们先在Real Server之上启动对应的NFS服务:

为了使NFS服务器能正常工作,需要启动rpcbind和nfs-kernel-server两个服务,并且rpcbind一定要先于nfs-kernel-server启动。

  sudo service rpcbind start
  sudo service nfs-kernel-server start

之后我们便可以执行NFS客户端的挂载工作了,过载工作很简单,先建立一个挂载目录,然后通过mount命令挂载Load Balancer的外网ip:

  sudo mkdir /mnt/ceph
  sudo mount -t nfs 219.223.199.164:/mnt/cephfs /mnt/ceph

之后客户端对应的文件目录便挂载上对应Real Server上的文件系统了。(这里的NFS服务是笔者预先搭建好的,读者可以自行搭建自己所需的网络服务。
如下图所示,我们挂载了远端219.223.199.164的NFS服务器,而实际的服务是由后端的Real Server来提供的:
LVS-NAT模式的配置详解

小结:梳理了一下在LVS-NAT模式之下的安装与配置。RedHat系列的发行版也是大同小异。这里调试一定需要有足够的耐心和毅力,需要去细致的排查,否则很容易出现问题。若有疏漏,望各位指点斧正。