LVS负载均衡基础总结

提高服务器响应能力的方法:

scale on  在原有服务器的基础上进行升级或者直接换一台新的性能更高的服务器。
scale out  横向扩展,将多台服务器并发向外响应客户端的请求。优点:成本低,扩展架构比较简单。
 
集群(Cluster),通俗地讲就是按照某种组织方式将几台电脑组织起来完成某种特定任务的这样一种架构。
 
集群技术主要分为三大类:

1、高可用性HA(High Available Cluster)
 
利用集群管理软件,当主服务器故障时,备份服务器能够自动接管主服务器的工作,并及时切换过去,以实现对用户的不间断服务。

2、负载均衡LB(Load balancing Cluster)
负载均衡其实就是一个乐队的指挥,指挥下面的乐队

即把负载压力根据某种算法合理分配到集群中的每一台计算机上,以减轻主服务器的压力,降低对主服务器的硬件和软件要求。 

可以扩展服务容量;常用的有LVS

3、高性能计算HP(High Performance Computing)

即充分利用集群中的每一台计算机的资源,实现复杂运算的并行处理,通常用于科学计算领域,比如基因分析,化学分析等。
 
 
LB Cluster:负载均衡集群

 
Director:负载均衡器,也叫调度器;
负责接收客户端请求,并将请求按照某种算法分发到后台真正提供服务的服务器上。
调度器在调度时要考虑后端服务器的状态;还能够对后端服务器的健康状态进行检测
 
Shared Storage(共享存储):
在负载均衡中后端的real server需要对数据进行共享;
Shared Storage为所有Real Server提供共享存储空间和一致的数据内容。
 
共享存储分为:
DAS:直接附加存储
      直接连到主机总线那去的;;靠主板芯片通电
      在块级别;连接线的长度很短
NAS:网络附加存储
        文件共享是在文件级别的;不能格式化,用于共享文件
         通过NFS/Samba实现
      
SAN:存储区域网络
      基于块级别的,可以分区,格式化,需要锁管理
SAN又分为:
     FC SAN :光纤
     IP SAN:以太网

 
能够提供负载均衡的方案:
Hardware
1、F5 :BIG IP  1000w并发请求
2、Citix:netscler  思捷 500w并发请求
3、IBM的A10   600w

Software:

4、lvs:能够达到400w;
5、 haproxy:
 
LVS : Linux虚拟服务

LVS是一个开源软件
体系结构:
LVS由前端的负载均衡器(Load Balancer,LB)和后端的真实服务器(Real Server,RS)群组成。RS间可通过局域网或广域网连接。
LVS的这种结构对用户是透明的,用户只能看见一台作为LB的虚拟服务器(Virtual Server),而看不到提供服务的RS群。

类似于iptables的架构,在内核中有一段代码用于实时监听数据包来源的请求,当数据包到达端口时做一次重定向。这一系列的工作必须在内核中实现。在内核中实现数据包请求处理的代码叫做ipvs。ipvs仅仅提供了功能框架不识别服务,ipvs和iptables一样,要想真正工作起来要靠规则;写规则的工具是工作在用户空间的ipvsadm。


Director是一种四层交换;tcp/udp的协议都可以通过lvs向后端做负载均衡的;是工作在四层的一个软件,
用户的请求应该是一个特定协议的特定请求;如tcp/80是web服务,

常见的名称称呼:
VIP--Virtual IP address:虚拟IP地址,并不提供服务,而是将用户的请求转发至后方
RIP--Real IP address:后台真正提供服务的服务器的IP地址
DIP--Director IP address:调度IP地址,通常是和RIP相连的LVS的IP地址
CIP--Client IP address:客户端IP。

LVS的类型:
NAT:地址类型
DR:直接路由
TUN:隧道

一、NAT:目标地址转换 所有客户端的请求都被Director根据访问请求和调度算法被定向到后台的Real Server上。

NAT方式下前端的DR与RS是一托N的,DR可以带动n个服务器工作的,所有的服务器的进出请求都要经过DR的;这样Director的压力就比较大。当服务器规模增大到一定程度时,DR会称为整个系统的瓶颈的。
NAT适用于规模不大的集群的

NAT模型和DNAT(目标地址转换)基本相似,只是比后者多了负载均衡的用法

 

 数据包地址转换过程:
S:CIP D:VIP--->Director--->S:CIP D:RIP--->Real Server--->
--->S:RIP  D:CIP--->Director--->S:VIP  D:CIP 

特征:

1、集群节点与DR在同一网络中
    real server 和director在同一网络中
2、RIP是私有Ip,仅用于通信
3、DR工作在clients和RS中间,负责处理进出的全部报文
4、RS网关要指向DIP
5、可以实现端口转换(或映射)
6、RS可以是任何操作系统
7、DR可能会成为系统瓶颈,不适合在较大规模中应用

二、DR:直接路由

由于在NAT模式下当服务器数量达到一定规模是会成为整个系统的瓶颈,影响集群性能的发挥,为了解决这个问题,引入了一种类似旁路的方式,即DR只负责处理请求的报文,服务器端响应请求时直接到达客户端,不在经过DR,请求与响应分离,这样DR就相当于处理了一半的业务量,DR的性能就大大的释放出来了,也避免了Director称为单点故障了;

 

1、客户请求经过Director,而Real Server在响应的时候直接回应给客户端

2、但每一个real server必须隐藏自己的VIP,不能响应前段的请求;
每一个real server都不能告诉用户自己的mac地址;如果用户直接能够找到
real server的mac地址,那么就绕过了Director了,这样负载均衡的意义也就不存在了。

3、DR收到报文后根据算法选择后台相应的real server
并将目标mac变成选择的real server的mac地址

4、Director怎么知道real server的mac地址?
Director和RS必须要处于同一个物理网络中,在一个局域网中,实行广播,让Director知道其内的每一个RS的mac地址,这样Director可以将请求发至选择的RS中

5、除了上述说的real server需要mac地址;每个real server还要有自己的RIP

 
需解决两个问题:
1、如何避免real server对客户端发来的请求的直接响应;达到隐藏real server的RIP?
解决方法:修改内核的两个参数:

        echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
        echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

1)arp_announce 当ARP请求通过某个端口进来是否利用这个接口来回应。
012用于定义通告级别的
0,是默认级别,控制本机至外地的所有通告
1,避免使用跟目标网络不在同一网络内的地址进行通告
2,只使用最佳本地网络地址通告给目标地址

2)arp_ignore:当ARP请求发过来后发现自己正是请求的地址是否响应
0、不论请求从哪个目标地址来的,只要本机上有,就给予响应
1,只有你的请求报文从这个网络接口进来,才予以响应

##对linux来说IP地址属于系统而不属于某个接口。

2、当Real Server内网网卡响应客户端请求时,要以VIP作为源地址,不能以RIP作为源地址。
解决方法:
添加一条路由 如:route add -host 192.168.0.127(VIP) dev lo:0使客户端访问VIP,就让VIP来响应客户端。这样避免了使用RIP作为源地址。

DIP来完成与RIP彼此间实现arp解析,并将客户端的请求转发给Real Server。
VIP作用是响应客户端请求;

 
DR模式:DR模式是这样工作的,当CIP访问VIP后,VIP把数据包通过DIP转交给RIP,RIP在收到数据包后通过网卡别名欺骗(节点的网卡配置别名,IP为VIP),直接用别名的VIP响应客户端,从而加快了回应速度,也避免了Director成为地址转换的单点故障.目前主要应用的为DR模式的负载均衡.

特征:
1、集群节点和Director必须在同一物理网络中,中间不能隔路由网关的
2、RIP可以是公网地址
3、Director仅处理入站请求(仅处理请求报文);而real server直接响应请求给用户
4、RS的网关不能指向DIP;而是以公网上的某台路由器作为网关;
5、不能使用端口映射
6、大多数操作系统都可以用作RS;windows除外
7、DR模型的Director能够处理比NAT更海量的请求


三、隧道模型:
与DR的网络结构一样,但Director和Real Server可以在不同的网络当中,可以实现异地容灾的功能。DIP----->VIP 基于隧道来传输,在数据包外层额外封装了S:DIP D :RIP 的地址。

LVS-TUN可实现基于网络的集群;这样就脱离了DR模型中的real server之间距离的限制 

特征:
1、集群节点不必在同一物理网络中
2、RIP一定不能使用私有地址
3、Director仅处理请求报文
4、real server的响应报文不能经过Director
5、基于隧道模型不能使用端口映射
6、仅允许支持隧道协议的操作系统用于RS

 
调度方法:十种

分为动态方法和静态(固定)
静态仅根据算法本身调度,不考虑real server的当前连接状况,

动态要将RS的链接状态记入调度考量标准的

四种静态调度方法:
1、rr:Round-robin 轮询,将用户请求平均分配给后端real server
2、wrr:Weighted round-robin 加权轮询
        给每台Real Server分配一个权重,权重越大,性能越好,分到的请求越多。     
3、DH:目标地址hash;Destination hashing 
        来自于同一个IP地址的请求都被重定向到同一台Real Server上;主要为了提高缓存利用率         
4、SH: 源地址hash;       
         Director必须确保响应的数据包必须通过请求数据包所经过的路由器或者防火墙(保证原地址不变)。

六种动态调度方法:
1、LC:least  connection 最少链接
      哪一个Real Server上的连接数少就将下一个连接请求定向到那台Real Server上去。
     算法:Overhead=active*256+inactive
2、WLC:加权最少链接;Weight Least-Connection
    在最少连接的基础上给每台Real Server分配一个权重。
    算法:Override=(active*256+inactice)/weight
3、SED:最短延迟;不再考虑非活动连接数
     Override=(active+1*256)/weight
      缺点:当权重差别大,值又相等时,会造成性能强的服务器连接了几个,而性能弱的会一直处于等待状态;
4、NQ:不用排队;在sed基础上改进,先会为每一个分配一个请求
              
5、LBLC: 基于本地状态的最少连接,Locality-Based Least-Connection
        该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,如果一个用户曾经链接过的话,分配到原先分配的RS上;新连接会考虑到后方RS服务器的链接状态
 6、LBLCR:带复制功能的基于本地的最少链接         
        它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。

较常用的是WLC,LBLC


定义集群服务:

ipvsadm -A|E -t|u|f service-address [-s scheduler]
-A:添加
-E:修改

-t:tcp服务
-u:udpfw
-f:防火墙标记;后加标记号

-s scheduler:调度算法

删除:
ipvsadm -D -t|u|f service-address

管理集群服务中的RS:

ipvsadm -a|e -t|u|f service-address -r server-addr -g|i|m  [-w weight]

-a:增加
-e:修改

-g,  --gatewaying     DR模式 
-i,   --ipip               TUN模式
-m,  --masquerading   NAT模式   

删除:
ipvsadm -d -t|u|f service-addr -r server-addr

查看定义的服务及RS:

ipvsadm -L|l:
          -n:输出IP和端口的数字形式
          -c:显示当前的链接状态
          --stats:显示统计信息
          --rate:显示速率信息
          -Z --zero:置零

ipvsadm -C 清空所有的定义
ipvsadm -R = ipvsadm-restore 存储
ipvsadm -S = ipvsadm-save 保存

 

你可能感兴趣的:(LVS,负载均衡;集群)