LVS实际操作与调度方法

LVS概念、类型、调度方法、命令操作与实际配置

字数2134 阅读4 评论0 

LVS实际操作与调度方法

LVS

(一)LVS概念

LVS( Linux Virtual Server)是一种负载均衡(LB,Laod Balance)技术,采用IP负载均衡技术和基于内容请求分发技术。具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行。LVS是一套组件(ipvs与ipvsadm),类似与iptables,ipvs相当于netfilter,是能将用户请求转发的框架,需要依赖以规则完成转发,工作于内核中的INPUT链上,并依赖于规则进行转发,而ipvsadm是用来定义规则的工具。LVS工作在TCP/UDP协议的四层,能根据用户请求的IP与PROT进行转发,即LVS能实现四层交换、四层路由。

LVS组成
Director:负载均衡器
RS:服务器池(RealServer)
CIP:客户端IP(Client IP)
VIP: Client所请求的,提供虚拟服务的IP,可以用Keepalive做高可用
DIP:在Director实现与RS通信的IP
RIP:RealServer IP


(二)LVS类型

LVS类型有四种:NAT、DR、TUN、FULLNAT

2.1 LVS/NAT

多目标IP的DNAT,通过将请求报文中的目标地址和目标端口改为某挑出的RS的RIP和PORT实现转发

模型:

LVS实际操作与调度方法

NAT

LVS NAT的特性
1.RS应该使用私有地址
2.RS的网关必须指向DIP
3.RIP和DIP必须在同一网段内
4.请求和响应的报文都得经过Director,在高负载场景中,Director很可能成为性能瓶颈
5.支持端口映射
6.RS可以使用任意支持集群服务的OS

2.2 LVS/DR

通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变,请求报文经过Dirctor但响应报文不再经过Dirctor

模型

LVS实际操作与调度方法

DR

LVS实际操作与调度方法

IP说明

DR类型工作流程
如上图所示:当客户端请求VIP时,通过互联网到达前端路由Route1,再通过交换机到达Dirctor上;而Dirctor在收到请求报文后,通过定义在ipvs规则中的各rip去获得各RS的MAC地址,并在此报文外再封装一个MAC地址,源MAC为Dirctor的dip端口的MAC而目标MAC改为其中一个RS的MAC,但该报文的目标ip(VIP)不变,最后通过dip接口发送给RS;为了RS能接收Dirctor发来的报文,需要在各RS上也配置VIP,但RS上的VIP是需要隔离前端arp广播的,所以需要将各RS上的VIP隐藏(通常配置到lo网卡接口的别名上,并配合修改linux内核参数来实现);而RS封装响应报文时,源IP为VIP,目标ip为CIP,并通过RIP的网络接口直接向外发送响应,不再经过Dirctor。
需要注意的是:因为Route1的A点的IP和Dirctor的VIP在同一网段内,VIP通常是公网IP;而DIP、RIP通常是私有IP,且这两个IP通常也应在同一物理网络内;假设RIP响应时指向的网关为Route1的A点,这就意味着RIP与A点不在同一网段内,因此将无法响应给客户端,所以需要另加一个路由route2,Route2能够通过D接口访问互联网,且Route2的C点的IP需要与RIP在同一网段内,此时RIP响应的报文就通过Route2发送。

上文黑色斜体部分的实现及确保前端路由器将目标IP为VIP的请求报文发往Director,方法c是最佳的选择:
(a) 在前端网关即Dirctor做静态绑定
(b) 在RS上使用arptables
(c) 在RS上修改内核参数以限制arp通告及应答级别:

arp_announce 定义arp通告级别
arp_ignore 定义arp应答级别

Linux kernel从2.4.26与2.6.4以后引入了两个设备标识,即上面提到的arp_announce arp_ignore来调整arp模式
arp_announce:0:默认的,通告时告之本机所使用的所有地址、配置、接口1: 尽量只通告接入的网络一端的接口地址(不绝对保证)2: 必需避免向非本机网络通告    # DR模式需要   地址/proc/sys/net/ipv4/conf/enoXXX/arp_announcearp_ingore: 
0: 默认的,响应本机接口上配置的所有的目标IP地址1:  只响应入栈报文的那个接口     # DR模式需要  地址同上描述

LVS DR类型的特性
1.RS可以使用私有地址,也可以使用公网地址,此时可以直接通过互联网连入RS,以实现配置、监控等
2.RS的网关一定不能指向DIP
3.RS跟Dirctory要在同一物理网络内(不能有路由器分隔)
4.请求报文必须经过Dirctory,但响应报文不能经过Director而是由RS直接发往Client以释放Directory的压力。
5.不支持端口映射(因为响应报文不经过Drictor)
6.RS可以使用大多数的操作系统
7.Dirctor的VIP对外可见,RS的VIP对外不可见

2.3 LVS/TUN

模型:

LVS实际操作与调度方法

TUN

TUN类型工作流程

LVS TUN类型特性
1.RIP,DIP,VIP都得是公网地址
2.RS的网关不会指向也不可能指向DIP
3.请求报文经过Directory,但响应报文一定不经过Director
4.不支持端口映射
5.RS的OS必须得支持隧道功能 ??

2.4 LVS/FULLNAT (LVS默认不支持此类型)

通过同时修改请求报文的源IP地址和目标IP地址进行转发
CIP–>DIP
VIP–>RIP

特点

  1. VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络,因此,RIP的网关一般不会指向DIP

  2. RS收到的请求报文源地址是DIP,因此只需响应给DIP, 但Dirctor还要将其发往Client

  3. 请求和响应报文都经由Dirctor

  4. 支持端口映射.


(三)LVS调度方法(Scheduler)

LVS的调度方法分为两类(静态算法、动态算法),共10种

静态方法:仅根据算法本身进行调度(注重起点公平)
① rr:Round Robin 轮询,按顺序轮流分配到集群中的RS服务器上,不支持权重。
② wrr:Weighted RR 权重轮询,根据RS的不同处理能力来调度访问请求。可保证处理能力强的服务器能处理更多的访问流量。

③ sh:source hashing 源地址hash,对请求的客户端IP进行hash计算,可实现session绑定,但可能会破坏负载均衡。Director在本地维护一张hash表,此表保存有每一个源IP及其第一次调度哪一个Server,每一条记录都有默认时长
④ dh:destination hashing 目标地址hash,请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。Director在本地维护一张散列表,此表保存有每一次请求的目标IP及其对应调度的目标服务器(RS) 。将发往同一个目标地址的请求始终转发至第一次挑中的RS。

动态方法:根据算法及RS当前的负载状态(注重结果公平)
⑤ lc:Least Connection 最少连接,计算当前的负载Overhead=Active*256+Inactive来实现,采用计算值最小的RS,不支持权重。

⑥ wlc: Weighted LC 权重最少连接,具有较高权重的服务器将承受较大比例的活动连接负载计算方法:Overhead=(Active*256+Inactive)/weight

⑦ sed:Shortest Expect Delay 最短期望延迟,wlc的改进算法,先选择权重较大的服务器计算方法:Overhead=(Active+1)*256/weight

⑧ nq:Nerver Queus: sed算法的改进,永不排队
⑨ lblc:Locality-based least connection 基于本地的最少连接,相当于dh+lc
⑩ lblcr:基于复制的基于本地的最少连接 Replicated and Locality-based least connection


(四)ipvsadm命令

grep -i -C "ipvs" /boot/config-3.10.0-327.el7.x86_64查看ipvs支持的协议与调度方法

① 对集群的操作

  1. 首先要确定好需要使用哪种拓扑类型(NAT DR TUN)的集群

-A -t|u|f  service-address [-s scheduler] [-p [timeout]]
    -A:添加一个集群服务     # Add
    -E:修改一个集群服务     # Edit
    -D:删除集群服务        # Delete    ipvsadm -D -t 10.1.0.5:80
    -t:tcp协议服务
    -u:udp协议服务
    -f:firewall make通常应用于将两个或以上的服务绑定为一个服务进行处理时使用  
        示例:ipvsadm -A -f 11 -s wrr     
        # 这个11为通过iptables xxxx -j MARK --set-mark 11 得到

    service-address   # 即LVS服务器的IP地址加之前选项指明的协议类型端口
        -t IP:port   # tcp协议
        -u ip:port   # udp协议
        -f firewall_mark  # 后接一个标记数字,将多个端口组织成一个集群进行统一调度

    -s 调度算法,默认为wlc
    -p: persistence     # LVS的持久连接功能,没有接数字则默认为300秒

② 对RS的操作

-a -t|u|f service-address -r server-address -[g|i|m] [-w weight]  # LVS的类型在这里定义
    -a:添加RS    -e:修改    -d:删除
    -r: 后接 RS的ip[:port]
    -g:gateway,  DR默认DR模型
    -m:masquerade, NAT模型
    -i:ipip, TUN模型
    -w:权重

③ 查看、清空、保存、导入规则

-L|l:显示规则
    -n, --numeric: 不反解析IP地址和端口,数值格式显示主机地址和端口号
    --exact: 显示精确值
    --stats: 统计数据
    --rate: 速率
    --timeout: 显示tcp、tcpfin和udp的会话超时时长
    --sort: 显示当前的ipvs连接状况
    -c, --connection: 查看连接数清空规则
    ipvsadm -C     # Clear
保存规则(一般都保存在/etc/sysconfig/ipvsadm)
    * service ipvsadm save 
    * ipvsadm -S 重定向至其他文件中 
    * ipvsadm-save 重定向到标准输出
    * systemctl stop ipvsadm.service   # 停止时会自动保存
导入规则
    ipvsadm -R < /save_file

(五)LVS实际配置

5.1 配置一个NAT类型(2台RS)的集群

LVS: if1=10.1.252.206 if2=172.16.50.129/24
RS1: 172.16.50.130/24
RS2: 172.16.50.131/24

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

(2)
sjfbjssjfbjs
上一篇 2016-10-30
下一篇 2016-10-30

相关推荐

  • Linux中的网络功能概念介绍(一)

      在操作系统中,进程之间的通信是用ipc(内存基本通信)以及内存共享shm来实现本地的通信,那么如果跨主机间通信或者说是不同之间的主机用rpc(远程过程调用)以及socket套接字,用一个主机在socket中写数据,另一个主机在socket之间读数据,以实现进程通信的最终目的。   在网络功能出现之前,基本都是用电话…

    Linux干货 2016-11-23
  • 正则表达式简述

    正则表达式简述 什么是正则表达式: 正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。 正则表达式分类: 标准正…

    Linux干货 2016-04-05
  • shell脚本基础

    shell脚本基础 基本介绍 Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高。换一种说法也就是,shell script是利用shell的功能所写的一个程序,这个程序是使用…

    2017-07-01
  • 初学Linux

       已经学习了Linux一周了,从原来的设计网页、动画影视制作、3D模型到现在的黑白界面虚拟世界,从原来吃睡由我到现在重回高三生活,说实话,一开始还是不太能适应的,尤其是眼睛,酸胀痛。不过,越努力越幸运,也觉得linux其实很有意思。。以下是我第一篇微博的内容,也是我学习linux一周所总结的知识。 首先,学习一门知识就要先了解他的历史…

    Linux干货 2017-07-15
  • Linux基础小模块

    1.基础知识小块:shell 由shell程序的自带命令:即为内置命令(builtin) 独立的可执行程序文件、文件名 :即为外部命令  [root@localhost~]#ls      ~用户当前所在目录  #:命令提示符(管理员帐号root)  $:普通用户   &nbsp…

    Linux干货 2016-08-05
  • 学习的第二周

    硬链接不能跨分区,硬链接不支持对目录的创建, 硬链接的本质是一个文件N个节点  ls |xargs rm 解决参数太长 无法正常删除的问题。   软连接 依赖于原始文件 删除就没了软连接可以跨分区,可以根据目录创建软连接,而且还可以针对文件夹 软连接依赖于原始文件。原始文件删了软连接就打不开了  相对路径一般相对当前工作目录,但…

    Linux干货 2017-05-30