LVS-NAT模式的配置详解
由于实验室拟态存储的项目需要通过NAT模式来映射NFS服务器已实现负载均衡的目的,通过调研了多种负载均衡机制,笔者最终选择了LVS的NAT模式来实现需求,接下来通过博客来记录一下LVS-NAT模式的配置流程。
1.LVS服务的简介:
LVS是Linux 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模式的配置详解的更多相关文章
- binlog之四:mysql中binlog_format模式与配置详解,binlog的日志格式详解
mysql复制主要有三种方式:基于SQL语句的复制(statement-based replication, SBR),基于行的复制(row-based replication, RBR),混合模式复 ...
- mysql中binlog_format模式与配置详解
mysql复制主要有三种方式:基于SQL语句的复制(statement-based replication, SBR),基于行的复制(row-based replication, RBR),混合模式复 ...
- Vmware在NAT模式下网络配置详解
Vmware在NAT模式下网络配置详解 Linux中的网络配置对于接触Linux不久的小白菜来说,还是小有难度的,可能是不熟悉这种与windows系列迥然不同的命令行操作,也可能是由于对Linux的结 ...
- CentOS下LVS DR模式负载均衡配置详解
一安装LVS准备: 1.准备4台Centos 6.2 x86_64 注:本实验关闭 SELinux和IPtables防火墙. 管理IP地址 角色 备注 192.168.1.101 LVS主调度器(Ma ...
- lvs keepalived 安装配置详解【转】
lvs keepalived 安装配置详解 张映 发表于 2012-06-20 分类目录: 服务器相关 前段时间看了一篇文章,lvs做负载均衡根F5差不多,说实话不怎么相信,因为F5没玩过,也无法比较 ...
- Vmware虚拟机配置LVS/NAT模式遇到的坑。
这两天在研究LVS的负载均衡,先从最简单的LVS/NAT模式开始入手. 最后配置完之后能够相互之间Ping通,并且能够直接访问real服务器提供的web服务,而且防火墙也已经关闭了. 但是通过访问LV ...
- LVS实现负载均衡安装配置详解
=========实践LVS/NAT模式========== 1.实验环境 三台服务器,一台作为 director,两台作为 real server,director 有一个外网网卡(172.16.2 ...
- (转)使用LVS实现负载均衡原理及安装配置详解
使用LVS实现负载均衡原理及安装配置详解 原文:https://www.cnblogs.com/liwei0526vip/p/6370103.html
- keepalived的配置详解(非常详细)
keepalived的配置详解(非常详细) 2017-01-22 15:24 2997人阅读 评论(0) 收藏 举报 分类: 运维学习(25) 转载自:http://blog.csdn.net ...
随机推荐
- phpstudy如何安装景安ssl证书 window下apache服务器网站https访问
1. 下载景安免费证书 https://www.zzidc.com/help/helpDetail?id=555 2.文件解压上传至服务器,位置自己决定 3. 调整apache配置 景安原文链接:ht ...
- [NOIP]2016天天爱跑步
[NOIP]2016天天爱跑步 标签: LCA 树上差分 NOIP Description 小C同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是 ...
- spring core 与 context理解
Spring core是核心层,拥有这BeanFactory这个强大的工厂,是所有bean的管理器: 而spring context是上下文运行环境,基于spring core之上的一个架构, 它之上 ...
- 深入js正则
开题 我们常常有正则的各种需求,普通的正则匹配符虽然够用,但是满足不了我们一些很奇怪的需求,所以我们需要更多的关于正则的知识点. 需求 比如我们有一个这样的需求,匹配出字符串里的第一个div标签:aa ...
- PHP安全、Sql防注入安全汇总
利用Mysqli和PDO 产生原因 主要就是一些数据没有经过严格的验证,然后直接拼接 SQL 去查询.导致漏洞产生,比如: $id = $_GET['id']; $sql = "SELECT ...
- AssetBundle实现服务器下载并从本地读取
废话不多说 直接上代码. 从服务器下载的, 很简单 private IEnumerator Start() { byte[] ab = null; int len = 0; WWW www =nul ...
- POJ - 1456 贪心+并查集
做法一:直接贪心,按照利润排序,然后直接尽量给每个活动安排到最晚的时间即可.时间复杂度O(n * d)当d都为10000时,很容易超时.由于这题数据比较水,所有贪心未超时. AC代码 #include ...
- R语言-时间序列
时间序列:可以用来预测未来的参数, 1.生成时间序列对象 sales <- c(18, 33, 41, 7, 34, 35, 24, 25, 24, 21, 25, 20, 22, 31, 40 ...
- centos7 mongodb 3.4 yum 安装
3.4 vi /etc/yum.repos.d/mongodb-3.4.repo [mongodb-org-3.4] name=MongoDB Repository baseurl=https:/ ...
- SPI知识总结
SPI知识总结 一.定义 SPI(Serial Peripheral Interface--串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息. 优 ...