lvs基础
lvs类型
lvs-nat: 上下文为masquerade
多目标的DNAT(iptables): 它通过修改请求报文的目标IP地址(同时可能会修改目标端口)至挑选出某RS的RIP地址实现转发;
特性:
(1)RS 应该和DIP使用私网地址,且RS的网关要指向DIP
(2)请求和响应报文都要经由director转发:极高负载的场景中,director可能会成为系统性能瓶颈
(3)支持端口映射
(4)RS可以使用任意OS
(5)RS的RIP和Director的DIP必须在同一IP网络
lvs-dr: direct routing,上下文为gateway
它通过修改请求报文的目标MAC地址进行转发
Director: VIP,DIP RSs: RIP,VIP
特性:
(1)保证前端路由器将目标IP为VIP的请求报文发送给director;
解决办法:
静态绑定
arptables
修改RS主机内核的参数
arp_announce:是否接收别人的通告并记录别人的通告,以及我们是否通告给别人
0:默认值,向每一个接口通告自己所有的地址
1:尽量不向非本网络通告地址
2:只能向网络通告最佳本地地址
arp_ignore: 是否响应别人的请求
0:默认值,只要有请求的地址就响应
1:请求从哪个接口进来就哪个接口响应
(2) RS的RIP可以使用私有地址;但也可以使用公网地址 (3)RS根Director必须在同一物理网络中 (4)请求报文经由Director调度,但响应报文一定不能经由Director; (5)不支持端口映射 (6)RS可以大多数OS (7) RS的网关不能指向DIP
lvs-tun(tunneling): 上下文为ipip
不修改请求 报文的ip首部,而是通过在原有的ip首部(cip <--> vip)之外,再封装一个ip首部(dip <--> rip);
特性:
(1) RIP,DIP,VIP全得是公网地址
(2) RS的网关不能指向DIP
(3) 请求报文必须经由director调度,但响应报文必须不能经由director
(4) 不支持端口映射
(5) RS的OS必须支持隧道功能
lvs-fullnat:(keepalived)
director通过同时修改请求报文的目标地址和源地址进行转发
特性:
(1) VIP是公网地址;RIP和DIP是私网地址,二者无须在同一网络中
(2) RS接收到的请求报文的源地址为DIP,因此要响应给DIP
(3) 请求报文和响应报文都必须经由Director
(4) 支持端口映射机制
(5) RS可以使用任意OS
lvs调度方法
静态方法: 仅根据算法本身进行调度
RR: round robin, 轮调
WRR: weight rr,带权重的RR
SH: source hash, 实现session保持的机制;将来自于同一个IP的请求始终调度至同一RS,内部维护一个hash表,反向代理时为缓存做负载均衡
DH: destination hash,将对同一个目标的请求始终发往同一个RS,正向代理时为缓存做负载均衡
动态方法: 根据算法及各RS的当前负载状态进行调度
LC: Least Connection
Overhead=Active*256+Inactive
WLC: Weight LC
Overhead=(Active*256+Inactive)/weight
SED: Shortest Expection Delay
Overhead=(Active+1)*256/weight
NQ: Never Queue
SED算法的改进
LBLC: Locality-Based LC,即为动态的DH算法
正向代理情形下的cache server调度
LBLCR:Locality-Based Least-Connection with Replication,带复制功能的LBLC算法
lvs-nat和lvs-dr模型演示:
以192.168.1.101 - 105为例,下面以101,102 ... 105做编号
lvs-nat
我们要架构的lvs-nat如下:

准备环境:
我们给101加一块网卡,添加另一块网卡的ip地址192.168.20.1
接着把102和103的ip分别设为20.7和20.8,并且他们各自的默认网关是20.1
20.7启动一个web服务,添加index.html
20.8启动一个web服务,添加index.html
每台主机上都关掉iptables防火墙
打开转发功能: net.ipv4.ip_forward=1
ipvsadm管理命令:
# ipvsadm -A -t 192.168.1.101:80 -s rr
# ipvsadm -a -t 192.168.1.101:80 -r 192.168.20.7 -m
# ipvsadm -a -t 192.168.1.101:80 -r 192.168.20.8 -m
测试: 浏览器可以测试访问:http://192.168.1.101
lvs-dr
我们要架构的lvs-dr如下:

工作特性:
客户端发起请求,到达前端路由器,请求的目标地址是VIP地址,所以路由器要把请求转发给director,也必须是director,
而由于调度器和server都有VIP地址,所以我们要让server不能在ARP解析请求的时候作出相应,
解决方法有三个:
1.配置路由器ARP地址表,明确表示MAC地址是调度器的MAC地址,但是如果director挂了,即使有备用的director,由于MAC地址不一样,所以就不能解决问题了
2.在real server上配置ARP tables规则,明确表示当收到目标地址为VIP的请求时,server不做响应,让请求报文进不来或者响应报文出不去,这种解决方案要确保server支持ARP tables
3.server上,把VIP定义在lo接口的别名上,而不是物理网卡的别名上,还可以配置linux内核参数,使得即便目标地址是VIP,server也不做响应

报文在real server上流向如下图所示,报文经由RIP网卡到VIP所在网卡lo上,lo接口再到用户空间的应用程序上,应用程序构建响应报文后,让报文强行经由lo接口再通过RIP所在物理网卡转发出去。
如上图蓝色箭头所示,响应报文给客户端,源ip是VIP,目标ip是CIP,如果RIP,VIP,DIP在同一个网段,RIP的网关直接指向前端路由器,如果不是在同一个网段,那么RIP指向另一个路由器,然后到达客户端

下面我们来搭建dr模型的架构:
1. RIP, VIP,DIP三者在同一个网段中,架构如下:

相关配置:
director:
配置网卡:
# ifconfig eth0:0 192.168.1.111/32 broadcast 192.168.1.111 up
# route add -host 192.168.1.111 dev eth0:0 RS:
添加两个内核参数:arp_ignore,arp_announce
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
配置lo接口
# ifconfig lo:0 192.168.1.111/32 broadcast 192.168.1.111 up
# route add -host 192.168.1.111 dev lo:0 director写ipvsadm管理命令:
# ipvsadm -A -t 192.168.1.111:80 -s rr
# ipvsadm -a -t 192.168.1.111:80 -r 192.168.1.102 -g
# ipvsadm -a -t 192.168.1.111:80 -r 192.168.1.103 -g
测试: 浏览器访问:http://192.168.1.111
lvs基础的更多相关文章
- 【Services】【Web】【LVS】lvs基础概念
1.简介 1.1. 作者:张文嵩,就职于阿里 1.2. LVS是基础四层路由.四层交换的软件,他根据请求报文的目标IP和目标PORT将其调度转发至后端的某主机: 1.3. IPTABLES的请求转发路 ...
- lvs基础及部署
LVS简介 LVS--Linux Vritual Server 即linux虚拟服务器,1998年5月由章文嵩博士开发并开源,目前全球多个国家的企业单位都在使用LVS构建集群服务. LVS可实 ...
- LVS基础知识
LVS介绍(Linux Virtual Server) 负载调度器,已经集成到内核 工作原理:VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS iptables/ ...
- LVS入门篇(二)之LVS基础
1. LVS介绍 LVS是Linux虚拟服务器(LinuxVirtualServers),使用负载均衡技术将多台服务器组成一个虚拟服务器.它为适应快速增长的网络访问需求提供了一个负载能力易于扩展,而价 ...
- LVS+keepalived实现负载均衡
背景: 随着你的网站业务量的增长你网站的服务器压力越来越大?需要负载均衡方案!商业的硬件如F5又太贵,你们又是创业型互联公司如何有效节约成本,节省不必要 的浪费?同时实现商业硬件一样的 ...
- 【面试虐菜】—— LVS负载均衡
Load Balancer(负载均衡器): Load Balancer是整个集群系统的前端,负责把客户请求转发到Real Server上.Load Balancer通过Ldirectord监测各Rea ...
- LVS+Keepalived实现高可用集群
LVS+Keepalived实现高可用集群来源: ChinaUnix博客 日期: 2009.07.21 14:49 (共有条评论) 我要评论 操作系统平台:CentOS5.2软件:LVS+keepal ...
- LVS概述
LVS原理概述: lvs是一个开源软件,是Linux virtual server的简写,即linux虚拟服务器,是一个虚拟的服务器集群系统,lvs集群采用ip负载均衡技术和基于内容的请求分发技术.将 ...
- LVS+Keepalived实现DBProxy的高可用
背景 在上一篇文章美团点评DBProxy读写分离使用说明实现了读写分离,但在最后提了二个问题:一是代理不管MySQL主从的复制状态,二是DBProxy本身是一个单点的存在.对于第一个可以通过自己定义的 ...
随机推荐
- JavaScript 与 Java 有什么不同?
JavaScript 编程语言是由 Netscape,Inc. 开发的,它并不是 Java 平台的一部分. JavaScript 不会创建小应用程序或独立应用程序.在最常见的形式中,JavaScrip ...
- Go语言实现:【剑指offer】二叉搜索树与双向链表
该题目来源于牛客网<剑指offer>专题. 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. Go语言实现: type T ...
- Qt 中QPainter 使用中出现的问题
这两天在使用QPainter的过程中出现了一些问题,记录一下. 测试程序很简单,写一个继承自QWidget的类,重载其paintEvent函数进行绘图. case1: 在paintEvent函数中使用 ...
- Ubuntu 18.04下用户的创建、修改权限及删除用户的方法
1. 创建用户 2. 修改用户权限 3. 删除用户 1. 创建用户useradd命令 //命令一:这种命令会在登录界面显示用户名sudo useradd -m XXX -d /home/XXX -s ...
- [Effective Java 读书笔记] 第7章 方法
第39条 必要时进行保护性拷贝 对于可变类,如果作为参数传入到自己的类里,并作为自己类的数据使用存储时,需要进行保护性拷贝,比如Date是可变的,如果传入一个Date类,最好做一个保护性拷贝,以免在调 ...
- VFP获取 SQL Server 的数据表、触发器、存储过程、视图等脚本
本文代码转载自红雨先生 *-----------------------------------------------* SqlServer 相关函数*----------------------- ...
- Transformer 和 Transformer-XL——从基础框架理解BERT与XLNet
目录写在前面1. Transformer1.1 从哪里来?1.2 有什么不同?1.2.1 Scaled Dot-Product Attention1.2.2 Multi-Head Attention1 ...
- 使用FIO工具测试块存储性能
Linux实例和Windows实例都推荐使用FIO工具测试块存储性能. 说明 您也可以使用其他工具测试块存储性能,但不同工具测试出来的硬盘基准性能会有差异,如dd.sysbench.iometer ...
- Django框架的初使用-2
目录 Django框架的初使用-1 1 Django MVT回顾 2 模型M 2.1 ORM框架 2.2 模型设计 3 视图V 3.1 定义视图函数 3.2 配置URLconf 3.3 视图-匹配过程 ...
- 直接使用汇编编写 .NET Standard 库
前言 Common Language Runtime(CLR)是一个很强大的运行时,它接收 Common Intermediate Language(CIL) 的输入并最终产生机器代码并执行.CIL ...