linux集群分析

 

 

 

 

Cluster集群 ,群集
分为三种      LB load-balancing 负载均衡
                     HA high availability 高可用
                     HP high performancing 高性能 科学计算用
 
一般负载均衡做真正存放数据的地方,高可用提供前台数据分发!高性能是把一个大的任务由一个分发器,分发到各PC上完成,当个PC完成以后,再发到分发器上汇总,实际工程不常用!
大家学习集群时间,一定要从头到位的理解冗余的概念,也正是由于这种概念才能提供集群的,高可用性!这样你看他好多问题迎刃而解!
集群概念在linux里边是通过用LVS 实现的,具体一点就是利用filter机制中增加的过滤机制,形成的。名字叫做ipvs,管理工具叫做ipvsadm  

linux集群分析_第1张图片

   
通过上图,我门先大致了解一下所谓的集群,首先,他没有那么神秘,其实也就是是一群计算机在一起有序的工作组合,达到更高的性能!
首相在两台Director上边有两种IP :VIP(virtual IP)和DIP(director IP)
前者用给网络用户看的,网络上的用户并不了解你真实的计算机内部结构,对他们来说只需要知道想看网页时需要什么网址就行了,别的细节对他们来说是透明的。
Dip是集群内部使用的IP,供集群内部之间提供通信!
后边是真正的提供服务的机器,但往往他们是没有可路由的IP的,他们ip叫做RIP(real server IP)。大多数情况提供集群内部件相互通信使用!
上边大概说下了,集群的原理,但是细想一下就会发现,其实只做到这样是远远不够称为一组有序的计算机集合的。所以如果想实现,必须要各种算法的支持和各种转发数据实现方法来帮助集群有序工作。
首先,根据转发数据包的方式分为三种情况
LVS-NAT(LINUX VIRTUAL SERVER NETWORH ADDRESS TRANSLATION)网络地址转换。这种需要 real server 需要把网管设为DIP
 
把本来要访问VIP的数据转换为RIP,这个转换不是普通意义的转换,它是一种四层的路由,不仅可以转化IP 还可以转化端口。当响应的数据包也要通过把RIP 转换为VIP 。共做了两次NAT转化。
     
 
下边通过一个图例和大家说下内核里边是怎么实现的,
 
这里边可以解释为什么ipvs相当于四层路由,因为他是基于IP+端口的机制,再input链实现。
LVS-DR(direct routing)由于上述过程所有数据包都要经过分发组件两次,容易造成瓶颈,导致realserver 不超过10到20台设备。造成性能不是很高,所以这种机制应运而生,可以达到100台以上的realserver。关键实现技术在realserver上怎么把数据包直接响应给客户端,只能在realserver上边实现VIP,但是这也造成当客户端请求ARP时,导致混乱,因此这种VIP一般需要隐藏,配置在realserver的lo接口上边。下边先通过示意图,让大家了解一下
 
 
LVS-TUN(ip tunneling)这种使用隧道技术实现的,也就是可以跨越不同网段,但是平时工程中不是很常用,仅作介绍,有兴趣的可以自己查找资料,一下为示意图
 
最后也就是说,集群上边大多数工作重心在分发上边,也就是上图的Director上边。因此Director上算法好坏决定了,集群的效率。因为你后边real server就算性能再好,但是由于,你前台的分发算法太糟糕,导致把所有工作分到一台 real sever上边了,即使再好的集群,所发挥的性能,也就是一台real server 的作用!
根据算法的不同分为 FIXED 和DYNAMIC
FIXED算法又分为:
RR(Round-robin)轮叫:就是任务来时按 A->B->C->A 这样调度!!
WRR(Weighted round-robin)带权重的轮叫。对RR算法的加强吧 当轮叫时间,并不知道那个后端real server 负载怎么样。所以加一个参数来判断一下,比如说基于后台主机性能,负载情况,这个参数就叫权重。
DH(Destination Hashing)当主机IP来自同一个时,这种算法总把请求分给同一个后台服务器,这样可以实现当网络抖动时,造成用户TCP连接断掉时,重连时用户浏览器的cookies还能够使用。避免因为掉线,导致用户比如上购物网站时,购物车里边东西全都不见了!!
有可能当你用squid做反向代理时,提高你的命中率。但是有个缺点,比如当有一千个用户通过NAT来访问你的网站时,由于他们IP地址全一样,导致你一台server,特别繁忙,其他的待机!(这就是为什么有动态算法了,现在暂且不作说明,后便会提到)
SH(Source hashing)当你的集群体系前边有2台以上的防火墙,比如A,B。当数据通过A->Dirctor->Real server 到达real server 上时可能响应的数据包会从B防火墙出,这时你再A上可能做得有状态追踪,但是数据包是从B上出的,B上没有对应规则可能拒绝你出去,这时,就要采用SH算法了
下边给大家介绍一下动态算法,根据real server负载状况,来动态决定具体分到哪个real server 上边。但是他要探测real server 负载状况,需要提供额外花销的。
LC(least connect)采用比较优先级C=已建立的连接数a*256+非活动链接数b 然后比较C值分给最小的,当C相等时按ipvs里边排序。这里边a要乘以256得活动链接耗得资源比非活动要大得多
WLC(Weighted least-connect)LC算法的扩展 改进是用权重代表服务器性能等指标。用上述C值除以权重。决定规则同上。这个算法是LINUX里边集群默认算法。
SED(Shorest Expected Delay)只用活动的连接计算优先级,优先级C=(已建立的连接数a+1)/权重 .c值最小,优先级最高!
LBLC(locality-Based Least-connection)来源于同一个目标地址的,都分到同一个地址,可以做轮叫 (DH里边由于没权重,不会轮叫)
LBLCR(locality-Based Least-connection with replication)建立一个服务器组,让本来只分配到一个服务器上连接分到服务器组里边
NQ(never quence)
通过上边的讲解大家已经对集群有了一个初步l了解了 下边通过一个实例来加深大家的理解。
先分析 这是一个负载均衡简单示意图,图中 Director必须是LINUX,但后边的realserver不作要求,只要能提供服务就行。其次realserver的rip必须和dip再同一个网段,并且realserver的rip的网关必须指向DIP
现在我们先进入 Director里边进行设置
1.       开启路由功能
 
红圈处改为 1
 
然后执行 sysctl –p 就立即生效了
2.    ipvsadm工具
3.
 
具体的配置结果 这里调度算法是 rr 用的是 lvs-nat方式实现的。
4.相同的命令把另外一个 realserver加进来就行,当然你可以换个算法,看下效果,加深理解算法的意义!!
5.验证 由于网页不同 结果也不同,笔者就不在罗列了!!、
以上给大家演示了以下lvc-nat 配置方式,现在我们再看一种比较常见的,而且效率极高的集群机制,那就是lvs-dr,下边是一个示意图
 
 
这个实现难度在于 realserver1和realserver2里边回应client时源地址要必须为vip。由于dr和realserver在同一个局域网里边。因此一般在realserver中rip一般配在lo接口上,并且要屏蔽arp请求。这样才能实现由dr进行分发的功能。
详细实现是在realserver里边使用这4条屏蔽arp请求。
Echo 1 > /proc/sys/ipv4/conf/lo/arp_igron
Echo 1 > /proc/sys/ipv4/conf/all/arp_igron
Echo 2 > /proc/sys/ipv4/conf/lo/arp_announce
Echo 2 > /proc/sys/ipv4/conf/lo/arp_ announce
当然最重要的是必须用一条静态路由指明数据来时怎么处理
Route add –host vip dev lo:0
上边讲解一下大概原理下边看详细实现
DR:
1.       eth0:1 192.168.0.210 netmask 255.255.255.255 broadcast 192.168.0.210 up
2.       route add –host 192.168.0.210 dev eth0:1
3.       iptables - L
4.       iptables –F
5.       ipvsadm –L
6.       ipvsadm –C
7.       ipvsadm –A –t 192.168.0.210:80 –s wlc
8.       ipvsadmin –a –t 192.168.0.210:80 –r 192.168.0.221:80 –w 1 –g
9.       ipvsadmin –a –t 192.168.0.210:80 –r 192.168.0.221:80 –w 3 –g
RS1
       1     .Echo 1 > /proc/sys/ipv4/conf/lo/arp_igron
Echo 1 > /proc/sys/ipv4/conf/all/arp_igron
Echo 2 > /proc/sys/ipv4/conf/lo/arp_announce
Echo 2 > /proc/sys/ipv4/conf/lo/arp_ announce
2.ifconfig lo:0 192.168.0.210 netmask 255.255.255.255 broadcast 192.168.0.210
3. route add -host 192.168.0.210 dev lo:0
4.开启http服务就不在这里说明了。
RS2
       1     .Echo 1 > /proc/sys/ipv4/conf/lo/arp_igron
Echo 1 > /proc/sys/ipv4/conf/all/arp_igron
Echo 2 > /proc/sys/ipv4/conf/lo/arp_announce
Echo 2 > /proc/sys/ipv4/conf/lo/arp_ announce
2.ifconfig lo:0 192.168.0.210 netmask 255.255.255.255 broadcast 192.168.0.210
3. route add -host 192.168.0.210 dev lo:0
4.开启http服务就不在这里说明了。
以上就是实现LVS-DR的大致原理以及步骤!!!

 

 

你可能感兴趣的:(linux,职场,休闲,linux集群深入浅出分析)