LVS详解

LVS详解


LVS(Linux Virtual Server),意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。

  • LVS 是一个工作在四层的负载均衡器,实现和 iptables/netfilter 类似,工作在内核空间的 TCP/IP 协议栈上,LVS 工作在 INPUT Hook Funtion 上,并在 INPUT 设置附加规则,一旦客户端请求的是集群服务,LVS 会强行修改请求报文,将报文发往 POSTROUTING,转发至后端的主机。

LVS的组成:

ipvsadm:管理集群服务的命令行工具,工作于用户空间

ipvs:为lvs提供服务的内核模块,工作于内核空间INPUT链上,所以lvs与iptables在INPUT链不能同时使用。

在linux内核2.4.23之前的内核中模块默认是不存在的,需要自己手动打补丁,然后把此模块编译进内核才可以正常使用。

目标

  • 使用集群技术和Linux操作系统实现一个高性能、高可用的服务器。

  • 很好的可伸缩性

  • 很好的可靠性

  • 很好的可管理性

集群分类:

  • 负载均衡集群LB: Load balancing clusters

    通过一个或者多个前端负载均衡器,将工作负载分发到后端的一组服务器上,从而达到整个系统的高性能和高可用性。

  • 高可用性集群HA: High-availability (HA) clusters

    一般指当集群中某个节点失效时,其上的任务会自动转移到其他正常的节点上。

  • 高性能计算集群HP: High-performance (HPC) clusters

    将计算任务分配到集群的不同计算节点而提高计算能力,因而主要应用在科学计算领域。

集群常用术语:

Director:复制调度集群的主机  
 VIP:Virtual IP,向外提供服务的IP  
 RIP:real IP,内部真实提供服务的主机IP  
 DIP:向内部的IP通信的IP,在Director主机上  
 CIP:客户端IP

LVS工作模型:

  • LVS-NAT:修改请求报文的目标IP

    地址转换类型,主要是做目标地址转换,类似于iptables的DNAT
     LVS 修改请求报文的目标地址为 RIP,转发至后端的 RealServer,并修改后端响应报文的源地址为 VIP,响应至客户端。

    LVS详解

 特性:

  1. 集群节点跟 Director 必须在同一个 IP 网络中,并且其网关需要指向DIP的地址

  2. RIP地址通常为私有地址,仅用于各个集节点之间通信

  3. Director位于client和Real Server之间,处理进出所有报文,大型应用易成为瓶颈。

  4. Real Server必须将网关指向DIP

  5. 支持端口映射

.

  • LVS-DR:操纵封装新的MAC地址;默认类型

    LVS详解

    直接路由,为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;
     每个Real Server上都有两个IP:VIP和RIP,VIP是隐藏的,不会接收请求,用来做请求响应的源IP
     Director上只需要一个网卡利用别名配置两个IP:VIP和DIP

 特性:

  1. 保证前端路由器将目标地址为 VIP 的报文通过 ARP 解析后送往 Director。

    1. 静态绑定:在前端路由将 VIP 对应的目标 MAC 地址静态配置为Director VIP 接口的 MAC 地址。

    2. arptables:在各 Realserver 上,通过 arptables 规则拒绝其响应对 VIP 的 ARP 广播请求

    3. 修改内核参数:在 Realserver 上修改内核参数,限制arp通告及应答级别

  2. 各RIP 必须与 DIP 在同一个物理网络中

  3. RS 的 RIP 可以使用私有地址,也可以使用公网地址,Realserver 不能将网关指向 DIP

  4. Director 仅负责处理入站请求,响应报文由 Realserver 直接发往客户端

  5. 不支持端口映射

.

  • LVS-TUN:在原请求IP报文之外新加一个IP首部;

    LVS详解

    转发方式:在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;
     Real Server接收到请求以后,先拆除第一层封装后拆除第二层封装,然后把响应数据直接传输给Client

 特性:

  1. 集群节点可以跨越Internet

  2. Director的VIP和RIP必须为公网IP

  3. Director仅处理入站请求,响应报文则由Real Server直接发往客户端

  4. Real Server的网关不能指向Director

  5. Real Server 需支持隧道协议

  6. 不支持端口映射

.

  • LVS-FULLNAT:同时修改请求报文的源和目标IP;默认不支持

特点:

  1. RIP,DIP 可以使用私有地址

  2. RIP 和 DIP 可以不再同一网络中,且 RIP 的网关不需要指向 DIP

  3. 支持端口映射

  4. 请求和响应报文都经由 Director


LVS调度算法

静态调度算法:只根据算法进行调度 不考虑后端服务器的实际连接情况和负载情况

  • rr:round robin,轮询,简单在各主机间轮流调度

  • wrr:weighted round robin,加权轮询,根据各主机的权重进行轮询

  • sh:source hash,源地址哈希,对客户端地址进行哈希计算,保存在 Director 的哈希表中,一段时间内,同一个客户端 IP 地址的请求会被调度至相同的 Realserver。实现 session affinity(会话绑定),一定程度上损害了负载均衡的效果。

  • dh:destination hash,和 sh 类似,dh 将请求的目标地址进行哈希,将相同目标 IP 的请求发送至同一主机。当 Realserver 为透明代理缓存服务器时,提高缓存的命中率。

动态调度算法:根据各RS当前负载状态及调度算法进行调度

  • lc:least connted,最少连接,根据 overhead = active*256 + inactive 计算负载状态,每次选择 overhead 最小的服务器

  • wlc:weighted lc,默认,加权最少连接,根据 overhead = (active*256+inactive)/weight 来计算负载,每次选择 overhead 最小的服务器,

  • sed:shortest expected delay,最短期望延迟,不对 inactive 状态的连接进行计算,根据 overhead = (active+1)*256/weight 计算负载,选择 overhead 最小的服务器进行调度

  • nq:never queue,当有空闲服务器时,直接调度至空闲服务器,所有服务器都繁忙时,使用 SED 算法进行调度

  • LBLC:locality based least connection,基于本地的最少连接,相当于 dh + wlc,正常请求下使用 dh 算法进行调度,如果服务器超载,则使用 wlc 算法调度至其他服务器

  • LBLCR:locality based least connection with replication,基于本地的带复制功能的LBLC,判断后端连接数,当A的连接很多,而B的很空闲,会将A的部分连接分配到B上,避免大范围不公平。主要用于Cache 集群系统


ipvsadm/ipvs

  • 集群服务管理:

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]

-A|E VIP添加修改服务地址

-D -t|u|f VIP 删除集群

-t|u|f类型: tcp | udp | 防火墙标记

-s scheduler指定集群调度算法,默认wlc

  • RS管理:

ipvsadm -a|e -t|u|f VIP -r RIP [-g|i|m] [-w weight] 添加修改RS

-g|i|m lvs模型: DR | TUN | NAT 默认DR

-w weight 指定权重

清空定义:
ipvsadm -C

查看:
ipvsadm -ln

保存和重载:
ipvsadm -S = ipvsadm-save
ipvsadm -R = ipvsadm-restore

示例:

ipvsadm -A -t 10.1.235.55:80 -s wrr
ipvsadm -a -t 10.1.235.55:80 -r 10.1.235.6 -g -w 2
ipvsadm -a -t 10.1.235.55:80 -r 10.1.235.7 -g -w 3

原创文章,作者:Jasper,如若转载,请注明出处:http://www.178linux.com/56672

赞 (0)
JasperJasper
上一篇 2016-11-11 08:41
下一篇 2016-11-11 08:41

相关推荐

  • 加密解密基础、PKI以及自建私有CA

    加密解密基础、PKI以及自建私有CA 加密是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。 解密就是加密的逆向操作,将加密过的不可读的数据经过处理,能够是之前不可读的信息还原成可读信息。 PKI是Public Key Infrastructure的首字母缩写,翻译过来就是公钥基础设施;…

    Linux干货 2016-12-07
  • 磁盘管理

      磁盘管理是一项计算机使用时的常规任务,它是以一组磁盘管理应用程序的形式提供给用户的,它们位于"计算机管理"控制台中.它包括查错程序和磁盘碎片整理程序以及磁盘整理程序。   一磁盘分区     1为什么要分区?     •优化I…

    Linux干货 2016-09-02
  • Linux Services and Security–part2

    一、请描述一次完整的http请求处理过程 (1).建立或处理连接:接收请求或拒绝请求; (2).接收请求:接收来自于网络上的主机请求报文中对某特定资源的一次请求的过程; 接收请求的模型: 并发访问响应模型: 单进程I/O模型:启动一个进程处理用户请求;这意味着,一次只能处理一个请求,多个请求被串行响应; 多进程I/O结构:并行启动多个进程,每个进程响应一个请…

    Linux干货 2017-11-13
  • httpd配置

    httpd配置 修改监听的IP和端口(port) 持久连接 MPM DSO(Dynamic Shared Object) main server的文档页面路径 站点访问控制 定义站点主页面 定义路径别名 设定默认字符集 日志 基于用户的访问控制 虚拟主机 httpd状态页面 使用压缩模块mod_daflate优化速度 基于IP 为每个虚拟主机至少准备一个IP…

    Linux干货 2016-12-21
  • 磁盘管理(二)Raid与LVM逻辑卷

    概述:本章主要讲解raid和逻辑卷 什么是RAID RAID:Redundant Arrays of Inexpensive(Independent) Disks 1988年由加利福尼亚大学伯克利分校( University ofCalifornia-Berkeley) “ A Case for RedundantArrays of Inexpensive …

    Linux干货 2016-09-05
  • man的用法

    man的使用 man命令是Linux下的帮助指令,通过man指令可以查看Linux中的指令帮助、配置文件帮助和编程帮助等信息。 语法 man(选项)(参数) 选项 -a:在所有的man帮助手册中搜索; -f:等价于whatis指令,显示给定关键字的简短描述信息; -P:指定内容时使用分页程序; -M:指定man手册搜索的路径。 参数 数字:指定从哪本man手…

    Linux干货 2018-03-04