Linux学习总结(五十四)LVS nat 模式搭建
本篇主要参考文章为 https://www.cnblogs.com/kevingrace/p/5574486.html
还有微信公众号 码农翻身
一 负载均衡介绍
- 主流开源软件LVS、keepalived、haproxy、nginx等
- 其中LVS属于4层(网络OSI 7层模型),nginx属于7层,haproxy既可以认为是4层,也可以当做7层使用
- keepalived的负载均衡功能其实就是lvs
- lvs这种4层的负载均衡是可以分发除80外的其他端口通信的,比如MySQL的,而nginx仅仅支持http,https,mail,haproxy也支持MySQL这种
- 相比较来说,LVS这种4层的更稳定,能承受更多的请求,而nginx这种7层的更加灵活,能实现更多的个性化需求
二 LVS 介绍
- LVS是由国人章文嵩开发的,linux virtual server的缩写,是一个虚拟的服务器集群系统,可以在unix/linux平台下实现负载均衡集群功能。流行度不亚于apache的httpd,基于TCP/IP做的路由和转发,稳定性和效率很高。
- LVS最新版本基于Linux内核2.6,有好多年不更新了
- LVS有三种常见的模式:NAT、DR、IP Tunnel
- LVS架构中有一个核心角色叫做分发器(Load balance),它用来分发用户的请求,还有诸多处理用户请求的服务器(Real Server,简称rs)
对照上图,我们简单说下lvs 的基本原理
客户端通过网络向负载均衡服务器发送访问请求。负载均衡器接受客户的请求,然后先是根据LVS的调度算法(8种)来决定要将这个请求发送给哪个节点服务器。然后依据自己的工作模式来看应该如何把这些客户的请求发送给节点服务器,节点服务器又应该如何来把响应数据包发回给客户端。
我们再介绍下8种调度算法轮询 Round-Robin rr 加权轮询 Weight Round-Robin wrr 最小连接 Least-Connection lc 加权最小连接 Weight Least-Connection wlc 基于局部性的最小连接 Locality-Based Least Connections lblc 带复制的基于局部性最小连接 Locality-Based Least Connections with Replication lblcr 目标地址散列调度 Destination Hashing dh 源地址散列调度 Source Hashing sh
三 lvs nat 原理
在介绍lvs nat 模式之前,先来熟悉下几个常用名称
DS : directory server 调度器,分发器, LB load banlancer 负载均衡器就属于一种调度器
RS : real server 后端提供访问内容的真实服务器,也叫节点服务器
VIP: 虚拟ip,向外部直接面向用户请求,作为用户请求的目标地址
DIP: dicrectory server ip 调度器上用于和内部主机通信的ip
RIP: real server ip 节点服务器ip
CIP: client ip 客户端的ip地址
这种模式借助iptables的nat表来实现。用户的请求到分发器后,通过预设的iptables规则,把请求的数据包转发到后端的rs上去。rs需要设定网关为分发器的内网ip。用户请求的数据包和返回给用户的数据包全部经过分发器,所以分发器会成为瓶颈。 在nat模式中,只需要分发器有公网ip即可,所以比较节省公网ip资源。
整体架构图如下
具体实现过程为:1)客户端请求数据,目标IP为VIP 2)请求数据到达LB服务器,LB根据调度算法将目的地址修改为RIP地址及对应端口(此RIP地址是根据调度算法得出的。)并在连接HASH表中记录下这个连接。 3)数据包从LB服务器到达RS服务器webserver,然后webserver进行响应。Webserver的网关必须是LB,然后将数据返回给LB服务器。 4)收到RS的返回后的数据,根据连接HASH表修改源地址VIP&目标地址CIP,及对应端口80.然后数据就从LB出发到达客户端。 5)客户端收到的就只能看到VIP\DIP信息。
四 lvs nat 模式搭建
接下来我们结合具体实例 理解整个过程
结构框图如下
LB有两个IP,一个对外(192.168.199.200),一个对内(192.168.226.129)。用户看到的是那个对外的IP。后面真正提供服务的服务器为RS1,RS2,RS3,他们的网关都指向LB。我们做实验只用了两台RS。也就是说这里只用到一个公网ip
192.168.199.200
数据包传递过程如下:
1)客户发出请求到LB服务器
2) LB 收到用户请求,要把请求转发到RS1服务器,就修改目的地址为RS1的ip,端口为R1的端口
3)RS1 处理完请求,把http报文层层封装,返回响应报文给客户端
4) 由于LB是网关,它在半路收到该数据包,做第二次修改,将源地址和源端口替换为自己的,发给客户端。
整个数据的流向为
客户端---> LB ---> RS --->LB ---> 客户端
三台机器具体实验
分发器,也叫调度器(简写为dir)
内网:ens33 192.168.226.129,外网ens37:192.168.199.200(vmware仅主机模式)
rs1
内网:ens33 192.168.226.130,设置网关为192.168.226.129
rs2
内网:ens33 192.168.226.131,设置网关为192.168.226.129
三台机器上都执行执行
systemctl stop firewalld; systemc disable firewalldsystemctl start iptables-services; iptables -F; service iptables save
在dir上安装ipvsadm
yum install -y ipvsdam
在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
#注意区分网卡名字,网卡分别为ens33和ens37
echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects
#director 设置nat防火墙
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 192.168.226.0/24 -j MASQUERADE
#director设置ipvsadm
IPVSADM='/usr/sbin/ipvsadm'
$IPVSADM -C
$IPVSADM -A -t 192.168.199.200:80 -s wrr
$IPVSADM -a -t 192.168.199.200:80 -r 192.168.226.130:80 -m -w 1
$IPVSADM -a -t 192.168.199.200:80 -r 192.168.226.131:80 -m -w 1
运行脚本后测试:
编辑rs1 nginx 默认页 内容为hello, i am from 192.168.226.130
rs2 nginx 默认页内容为hello world ,I'am from 192.168.226.131
用浏览器访问 192.168.199.200
再次刷新结果为
转载于:https://blog.51cto.com/12606610/2119761
Linux学习总结(五十四)LVS nat 模式搭建相关推荐
- Cty的Linux学习笔记(十四)
Linux学习笔记--第十四篇 环境变量配置文件: /etc/profile:预设了几个重要的变量,例如PATH,USER,LOGNAME,MAIL,INPUTRC,HOSTNAME,HISTSIZE ...
- 18.6 负载均衡集群介绍 18.7 LVS介绍 18.8 LVS调度算法 18.9/18.10 LVS NAT模式搭建
2019独角兽企业重金招聘Python工程师标准>>> 18.6 负载均衡集群介绍 实现负载均衡集群的软件有:LVS.Keepalived.Nginx.haproxy等.其中LVS属 ...
- 负载均衡集群介绍LVS介绍LVS调度算法LVS NAT模式搭建
2019独角兽企业重金招聘Python工程师标准>>> 18.6 负载均衡集群介绍 • 主流开源软件LVS.keepalived.haproxy.nginx等 • 其中LVS属于4层 ...
- 负载均衡集群介绍、LVS介绍、LVS调度算法、 LVS NAT模式搭建
负载均衡集群介绍 LVS介绍 lvs的NAT模式介绍 这种模式借助iptables的nat表来实现,用户的请求到分发器后,通过预设的iptables规则,把请求的数据包转发到后端的服务器上去,这些服务 ...
- salesforce 零基础学习(五十四)常见异常友好消息提示
异常或者error code汇总:https://developer.salesforce.com/docs/atlas.en-us.api.meta/api/sforce_api_calls_con ...
- GEE学习笔记 五十四:QGIS展示3D的高程数据
QGIS作为一个开源的非常好用的本地GIS工具,这里不在赘述,这里说它的一个比较有意思的内容.通过DEM数据展示3D地形. 下载DEM(高程数据) 比如从官网下载,或者从别的地方获取,这里就不在赘述. ...
- osg学习(五十四)PNG lib warning : Interlace handling should be turned on when using png_read_image
应打开隔行处理.用PS打开png图片后在保存时,把交错选项勾选"无". PNG lib warning : Interlace handling should be turned ...
- LVS NAT模式搭建
转载:http://blog.51cto.com/10963213/2096100 准备工作 三台机器上都执行执行 systemctl stop firewalld; systemctl disabl ...
- linux lvs公网ip,Linux集群架构(2)LVS介绍、LVS的调度算法、NAT模式搭建、 DR模式、keepalive...
负载均衡集群介绍 LVS介绍 1.LVS NAT模式:(,目标ip转发.适用于小型集群,机器数量不多10台左右) 2.LVS IP Tunnel模式(将目标ip进行更改) (在这个模式下的rs机器都是 ...
最新文章
- 2016搜狗:矩阵元素相乘
- 用字体选择对话框改变字体
- 【Codeforces717F】Heroes of Making Magic III 线段树 + 找规律
- boost::iterator_archetypes用法的测试程序
- 计算机组装与维护预实验报告,计算机组装与维护实验报告.doc
- 【双11狂欢背后】微服务注册中心如何承载大型系统的千万级访问?
- php 原理 阮一峰,全文Feed的终极解决方案
- 如果在Lightning Builder中在标准组件中没有看到Chatter 的情况
- golang怎么判断字符串是否为空
- 二元函数的洛必达法则
- Router的路由表
- Java使用策略模式实现聚石塔接口调用
- java正则表达式判断Email格式
- DEFCON携手百度安全落地中国,打造国际化网络安全交流平台
- Verilog——反相器
- cmd/go: “package ... is not in GOROOT“问题解决办法
- The Devil of Face Recognition is in the Noise
- flex 教程_完整的flex教程
- 政务大数据解决方案之大快DKhadoop
- 信息系统安全实验(七):使用Kerberos实现网络身份认证
热门文章
- tiny core linux 编译,tinycore linux使用
- 新媒体学python有用吗_你真的不学Python吗?学习Python的四大理由!
- b区计算机调剂学校,2021年b区研究生调剂院校有哪些
- 为什么你应该开始习惯使用 pathlib
- awgn信道中的噪声功率谱密度_从OFC2020看高级算法在光通信中的应用
- Leetcode周赛5193. 删除字符使字符串变好
- 笔记-中项案例题-2019年下-人力资源管理和冲突管理
- vue学习:v-text,v-html, v-model, {{}}之间的异同
- Python 为什么不支持 i++ 自增语法,不提供 ++ 操作符
- Three.js中实现点击按钮添加删除旋转立方体