由于实验室拟态存储的项目需要通过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模式下的系统结构图:

系统平台: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配置好的转发机制:

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

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

LVS-NAT模式的配置详解的更多相关文章

  1. binlog之四:mysql中binlog_format模式与配置详解,binlog的日志格式详解

    mysql复制主要有三种方式:基于SQL语句的复制(statement-based replication, SBR),基于行的复制(row-based replication, RBR),混合模式复 ...

  2. mysql中binlog_format模式与配置详解

    mysql复制主要有三种方式:基于SQL语句的复制(statement-based replication, SBR),基于行的复制(row-based replication, RBR),混合模式复 ...

  3. Vmware在NAT模式下网络配置详解

    Vmware在NAT模式下网络配置详解 Linux中的网络配置对于接触Linux不久的小白菜来说,还是小有难度的,可能是不熟悉这种与windows系列迥然不同的命令行操作,也可能是由于对Linux的结 ...

  4. CentOS下LVS DR模式负载均衡配置详解

    一安装LVS准备: 1.准备4台Centos 6.2 x86_64 注:本实验关闭 SELinux和IPtables防火墙. 管理IP地址 角色 备注 192.168.1.101 LVS主调度器(Ma ...

  5. lvs keepalived 安装配置详解【转】

    lvs keepalived 安装配置详解 张映 发表于 2012-06-20 分类目录: 服务器相关 前段时间看了一篇文章,lvs做负载均衡根F5差不多,说实话不怎么相信,因为F5没玩过,也无法比较 ...

  6. Vmware虚拟机配置LVS/NAT模式遇到的坑。

    这两天在研究LVS的负载均衡,先从最简单的LVS/NAT模式开始入手. 最后配置完之后能够相互之间Ping通,并且能够直接访问real服务器提供的web服务,而且防火墙也已经关闭了. 但是通过访问LV ...

  7. LVS实现负载均衡安装配置详解

    =========实践LVS/NAT模式========== 1.实验环境 三台服务器,一台作为 director,两台作为 real server,director 有一个外网网卡(172.16.2 ...

  8. (转)使用LVS实现负载均衡原理及安装配置详解

    使用LVS实现负载均衡原理及安装配置详解 原文:https://www.cnblogs.com/liwei0526vip/p/6370103.html

  9. keepalived的配置详解(非常详细)

    keepalived的配置详解(非常详细) 2017-01-22 15:24 2997人阅读 评论(0) 收藏 举报  分类: 运维学习(25)    转载自:http://blog.csdn.net ...

随机推荐

  1. grep命令的-P选项

    man grep的时候有一个-P,文档上的英文: -P, --perl-regexp Interpret PATTERN as a Perl regular expression.  This is ...

  2. css实现隐藏多余溢出文字并显示省略号

    <meta charset="utf-8" /> <style> .txt{ width:200px; border:1px solid #ddd; ove ...

  3. 大型互联网公司Java开发岗位面试题归类!

    ​一.Java基础 1. String类为什么是final的. 2. HashMap的源码,实现原理,底层结构. 3. 说说你知道的几个Java集合类:list.set.queue.map实现类咯.. ...

  4. spring,property not found on type

    刚开始学spring mvc ,遇到这个报错. jsp页面 user 实体类 public class User { private String name; private int age; pri ...

  5. sqlsever 科学计数法 转标准值

    一.解决方案 2e-005 转成 0.00002 update 表名 set 列名=cast(列名 as float) as decimal(19,5)) where 列名 like  '%e%' 如 ...

  6. js使用defineProperty的一些坑

    var p2={ }; Object.defineProperty(p2,"gs",{ get:function () { return this.gs; }, set:funct ...

  7. 浙江省赛 C What Kind of Friends Are You?

    思路:一开始考虑n个朋友可以有c种可能,根据回答的问题,如果是yes那么可以确定一些朋友的范围,将原本不在这个范围内的删除即可:如果是"no",说明这些朋友都应该被删除,那么最后看 ...

  8. filebeat.yml(中文配置详解)

    ################### Filebeat Configuration Example ######################### ####################### ...

  9. H3C路由交换常用命令

    1.查看Linux下查看端口状态 root@root:~# netstat -an|grep -E "6002|6003" 2.H3C交换机显示当前配置 [H3C]display ...

  10. RTlinux3.2安装

    ( 1 ).前言 2003 年以后, fmslabs 的 RTLinux Free 版本为 3.2Pre ,和以前的 RTLinux 3.1 比较,不再需要必须从 2.4.4 的内核上安装. RTLi ...