LVS(一)
来源:互联网 发布:阿根廷04男篮名单 数据 编辑:程序博客网 时间:2024/06/06 07:36
一、前言
计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。
集群分三种:
- LB: 负载均衡集群,Load Banlancing
- HA: 高可用集群,High Availability
- HP: 高性能集群,High Performancing
LB集群的实现:
- 硬件:F5 …
- 软件:
- lvs
- haproxy
- nginx
- ats(apache traffic server)
- perlbal
- …
这篇文章主要介绍LB集群中的LVS。
二、什么是LVS
随着网站规模扩大,对用硬件和软件方法实现高可伸缩、高可用网络服务的需求不断增长,这种需求可以归结以下几点:
- 可伸缩性(Scalability),当服务的负载增长时,系统能被扩展来满足需求,且不降低服务质量。
- 高可用性(Availability),尽管部分硬件和软件会发生故障,整个系统的服务必须是每天24小时每星期7天可用的。
- 可管理性(Manageability),整个系统可能在物理上很大,但应该容易管理。
- 价格有效性(Cost-effectiveness),整个系统实现是经济的、易支付的
针对高可伸缩、高可用网络服务的需求,给出了基于IP层和基于内容请求分发的负载平衡调度解决方法,并在Linux内核中实现了这些方法,将一组服务器构成一个实现可伸缩的、高可用网络服务的虚拟服务器(Virtual Server)。由于这种负载调度技术是在Linux内核中实现的,我们称之为Linux虚拟服务器(Linux Virtual Server,LVS)。
以上内容来自 LVS中文文档
LVS是工作于内核中的组件,根据请求报文的目标IP和PORT将其转发至后端主机集群中的某一台真实主机中。
lvs有两个层次,一个工作在用户空间中,能够让用户管理集群,添加规则等操作,一个工作在内核中,真正的工作组件
- ipvsadm: 用户空间的命令,用于管理集群服务
- ipvs:工作内核中netfilter INPUT钩子上
一般的,在CentOS上内核都已经将LVS规则编译到内核中了,使用grep命令查看:
# grep -i -A 10 'IPVS' /boot/config-3.10.0-514.el7.x86_64
三、LVS类型
在介绍LVS类型之前,要先介绍一下在LVS中的一些专业术语:
- Client IP: CIP,客户端IP
- Director:部署LVS的服务器,至少有两块网卡,一块与外网连接,一块与内网连接
- Directory Virtual IP: VIP,与外网连接的网卡IP
- Director IP: DIP,与内网连接的IP
- Real Server IP: RIP,内网中的真正响应用户请求的服务器的IP
LVS实现了这三种IP负载均衡技术:
lvs-nat:
多目标的DNAT(iptables): 它通过修改请求报文的目标IP地址(同时会修改目标端口)至挑选出某RS的RIP地址实现转发
(1) RS应该和DIP应该使用私网地址,且RS的网关要指向DIP
(2) 请求和响应报文都要经由director转发,但是极高负载的场景中,director可能会成为系统瓶颈
(3) 支持端口映射
(4) RS可以使用任意OS
(5) RS的RIP和Director的IP必须在同一IP网络中lvs-dr:direct routing(最重要,大规模场景中应用上的)
它通过修改请求报文的目标MAC地址进行转发
Director:必须绑定VIP以及DIP
RS:必须绑定RIP,VIP
(1) 保证前端路由器将目标IP为VIP的请求报文发送给director
解决方案:
静态绑定
arptables
修改RS主机内核的参数
2) RS的RIP可以使用私有地址,但也可以使用公网地址
(3) RS跟Director必须在同一物理网络中
(4) 请求报文经由Director调度,但响应报文一定不经由Director
(5) 不支持端口映射
(6) RS可以大多数OS
(7) RS的网关不能指向DIPlvs-tun: director与real server可以不在同一个地方
不修改请求报文的IP首部,而是通过在原有的IP首部之外,再封装一个ip首部
(1) RIP, DIP, VIP全是公网地址
(2) RS的网关不能指向DIP
(3) 请求报文必须经由Director调度,但响应报文必须不能经由Director
(4) 不支持端口映射
(5) RS的OS必须支持隧道功能
根据不同的网络情况以及服务器的配置情况,LVS设计了九种不同的调度算法:
RR( Round Robin ) 轮叫
调度器通过”轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载WRR( Weighted Round Robin ) 加权轮叫
调度器通过”加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。LC( Least Connections ) 最少连接
调度器通过”最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用”最小连接”调度算法可以较好地均衡负载。WLC( Weighted Least Connections ) 加权最少链接
在集群系统中的服务器性能差异较大的情况下,调度器采用”加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值LBLC( Locality-Based Least Connections ) 基于局部性的最少链接
“基于局部性的最少链接” 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器 是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用”最少链接”的原则选出一个可用的服务 器,将请求发送到该服务器。LBLCR( Locality-Based Least Connections with Replication ) 带复制的基于局部性最少链接
“带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个 目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务 器组,按”最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按”最小连接”原则从这个集群中选出一 台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的 程度。DH( Destination Hashing ) 目标地址散列
“目标地址散列”调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空SH( Source Hashing ) 源地址散列
“源地址散列”调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。SED( Shortest Expected Delay ) 最短期望延迟
以上算法解释来自于 LVS中文文档
–END–
- LVS(一)
- LVS+Keepalived 一例
- 集群:(一) LVS
- LVS(一)
- LVS源码分析一---为什么是LVS?
- LVS(一)LVS简介及LVS-DR模式配置搭建
- LVS学习笔记(一)
- lvs-nat篇(一)
- LINUX集群--均衡负载 LVS(一) LVS认知
- LVS
- lvs
- lvs
- LVS
- LVS
- LVS
- LVS
- LVS
- LVS
- 理解和使用systrace
- 高精度加法
- CSU 1810 Reverse (组合计数)
- 二级MySQL数据库程序设计考试大纲(2015年版)
- PAT1006. 换个格式输出整数 (15)
- LVS(一)
- maven基础之新建项目
- BAT脚本编写教程
- 【unity学习笔记】unity实现钩子功能
- jvm_方法区溢出(PermGen Space)
- caioj1032:递归2(组合)
- Python 运算符
- Mysql系列——数据库设计(1)——关系型数据库使用情景
- 面向对象中多态和泛型的关系(可以解释为什么说 iterator方法中有多态存在 )