LVS-NAT模式的配置详解

由于实验室拟态存储的项目需要通过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配置好的转发机制:

ipvsadm的配置

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服务器路由转发配置的结果:

Real Server的路由表

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来提供的:

挂载了远端的NFS服务器

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏公有云大数据平台弹性 MapReduce

Presto内存调优及原理(基础篇)

Presto是一个开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节。

1.7K8
来自专栏张善友的专栏

TCPView for Windows

TCPView是一个用来显示系统中所有的TCP和UDP端点(endpoint)列表的Windows程序,包括本地和远程的网络地址,以及TCP连接的状态。在Win...

2247
来自专栏黑白安全

简述URL并分别说明各部分含义

转自:http://blog.csdn.net/dzhj11/article/details/9194999

1922
来自专栏同步博客

会话劫持

  在现实生活中,比如你去市场买菜,在交完钱后你要求先去干一些别的事情,稍候再来拿菜;如果这个时候某个陌生人要求把菜拿走,卖菜的人会把菜给陌生人吗?!当然,这只...

1073
来自专栏代码永生,思想不朽

TCP流量复制工具,另一个tcpcopy

很多年以前,网易推了一个tcp流量复制工具叫tcpcopy。2013年07月我入职新公司,大概10月份接触到tcpcopy,为tcpcopy修了两个bug,一个...

1.7K7
来自专栏IT技术精选文摘

解Bug之路-记一次JVM堆外内存泄露Bug的查找

1393
来自专栏黑白安全

Nmap的使用

精细扫描,可以查看更详细的信息,如包含服务版本,操作系统类型,甚至还有traceroute..

1743
来自专栏人工智能LeadAI

这几个问题答不对,就别说精通TCP

网络协议那么多,为什么面试喜欢问TCP?原因无外乎两个:1、TCP协议直接与进程打交道,写网络程序要用;2、TCP协议设计十分精巧,在一个不可靠的IP网络上实现...

4108
来自专栏智能大石头

如何使用网络库实现应用级消息收发

网络客户端ISocketClient和网络会话ISocketSession都继承了ISocketRemoteISocketRemote表示远程通信,核心就是收发...

620
来自专栏FreeBuf

DNS Tunneling及相关实现

*本文原创作者:novsec,本文属FreeBuf原创奖励计划,未经许可禁止转载 ? DNS Tunneling,是隐蔽信道的一种,通过将其他协议封装在DNS协...

6867

扫码关注云+社区

领取腾讯云代金券