Chinaunix首页 | 论坛 | 博客
  • 博客访问: 303854
  • 博文数量: 58
  • 博客积分: 2763
  • 博客等级: 少校
  • 技术积分: 731
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-04 19:07
文章分类

全部博文(58)

文章存档

2011年(55)

2009年(1)

2008年(2)

分类: LINUX

2011-09-08 14:15:03

Cluster(集群)

所谓集群就是指将多台计算机按照某种方式组合起来,完成某些特定任务的这样一种架构

 将集群分为三种:

1LBLoad Balancing(负载均衡)LVS

2HAHigh Availability (高可用),保证服务的在线,和可用性。在线性能,99.9%

3HP: High Performance(高性能)提供大量运算的能力 ,主要运用于人口统计,科学勘探,汽车撞车实验,DNA基因图谱的绘制等

 

提高服务器的性能;

scale on:向上扩展,利用高性能的计算机来代替

scale out: 向外扩展,利用多台计算机组合起来。优点:成本低,扩展架构比较简单。

 

(1)       LB:实现分摊负载

 

需要前端的负载均衡器。将按照某种算法分发到后台真正的服务器上。

例如我们所学的DNS就能实现负载,它是通过简单的轮调,但是由于不考虑服务器工作时的状态,所以不能算真正的负载均衡

 

实现负载均衡既可以通过软件实现LVS,也可以通过硬件来实现F5

LVSLinux Virtual Server (开发者:章文嵩)

F5:硬件

LVS的简单模型:


                   图1-1 LVS简单模型

 

LVS特点:

负载均衡,高吞吐能力

能够提供类似高可用性能

适用性:扩展能力非常强,便捷的扩展性

提供冗余

但是LVS也是存在一定的问题的:

你可以想一想:如果LVS当机了,那整个集群服务会怎么样?很显然就无法访问了。因此LVS会成为单点故障

 2)高可用集群,主要保证服务实时在线,而不是实现负载均衡

 

在正常情况下,只有一个节点在工作,所有的访问只访问一台服务器,只有当正在工作的那台服务器当掉之后,另一台服务器才会代替它。例如:A服务器当掉了,B服务器就会把A服务器上的服务拿过来,并把AIp地址也拿过来。

 在高可用集群中,地址和服务称为高可用集群的资源,这些资源可以在各个节点之间流动(float,流动的过程就是故障转移的过程

 因此我们就得考虑如何实现两台服务器上提供的服务相同,说白了,也就是说如何实现文件共享,有以下方式实现:

1.nfssamba

2.rsync:实现检测文件是发生改变,如果改变的进行同步

3.drbd:在内核中基于模块实现的

4.专业级别的共享存储:SAN(存储区域网络)块级别的共享


3)高性能集群

前端也有一个转发节点,此节点是将复杂的运算任务分成N多个小任务,分发出去,处理完之后,前端节点会把各个任务再次整合起来。

   hadoop  雅虎所使用的高性能集群

----------------------------------------------------------------------------------------------------------

各集群中的解决方案(开源的):

LBLVS

haproxy

HA: heartbeat

corosync+openais:RHCS (红帽集群套件)

       ultramokey

       keepalive

HP:bowerful

 

------------------------------------------------------------------------------------------------------------

1LB:负载均衡

LVS:(Linux Virtual Server

虚拟服务器(LVS),接收用户发来的请求,本身不响应用户请求。只是把请求转发到真正的服务器。真正提供服务的节点我们称为realserversLVS应用只需要装在调度节点上

 LVS其实是一个四层交换:

只是简单的判断用户请求的地址和端口,尤其是端口,来判定用户所请求的服务。

 这种转发机制对用户来说是透明的

 工作模式

1)地址转换(net) LVS-NAT

2)直接路由(direct routingLVS-DR

3)隧道(IP tunnelingLVS-TUN

                                图1-2 LVS工作模型

我再画一个简易的图来演示一下:

                            图1-3 LVS中的IP种类

lvsip地址的种类

VIP :virtual IP address (虚拟ip地址) 对外用户能够看到的ip(类似于DNAT

RIP :real ip address 真正的ip,类似于地址转换中的私有ip

DIP :director's ip address

CIP :client computer's ip address

 

(1)       地址转换 LVS-NAT

                                           图1-4  LVS-NAT模型

 其工作原理:类似于目的地址转换。将访问Director的VIP转换为真正服务器的ip地址。

在Director上指定将VIP转换为RIP

注意:

1.Dip和各Rip只能在同一个子网中

2.Rip的地址可以是私有地址

3.director 面临的压力比较大

4.RIP的网关必须指向Dip

5.net可以做端口映射,不仅做地址转换,而且也做端口转换

6.realserver后台的操作系统没有要求

7.director节点会成为整个集群的瓶颈

 

--------

 

2)直接路由 LVS-DR

 

                             图1-5 LVS-DR模型

只有进来的请求才会通过Director

Rip的网关是指向其他路由器的,此时并不指向Director

只允许director响应Arp,而realserver则将其arp响应禁掉,使用arptables

 我画一个图来说明一下原理:

   

                                          图1-6   LVS-DR工作原理图

原理:

来自客户端的请求,经过路由发送给director director上就只有一块网卡,此网卡上既有Vip,又有Dipdirector接收到请求后,只负责转发,首先修改目标mac地址为Realservermac地址,并将请求转发给RealserverRealserver上的主机同样具有两个ipVipRip。不过Vip是配置在lo0上。当Realserver响应时,通过路由器,此时显示的源ip会是RealserverRip,这样肯定不行。因此我们需要通过添加一条主机路由,使源地址成为Vip,这样发给路由器时,显示的源地址就是Vip的地址了。

 可能上面的原理你有许多迷惑,那我就先介绍一下数据在网络传输的流程。

首先,我来稍微对网络知识进行一下补充:

Tcp/ip协议栈:    应用层

                            传输层 负责端到端的传输

                            网络层 负责网络路由

                            数据链路层 负责主机到主机的传输

                            物理层  转化为二进制,在通信线路上传输

 物理层属于第一层,依次往上。

 数据从上往下进行层层封装。如下图:

                                                        图1-7   传输封装图

 我再简化一步,只是帮助你理解。

                                                        图1-8

-----------------------------------

                                                  图1-9    网络拓扑图

如上图所示,我们和对方通信时,通过ip地址通信。1.1.1.1这台主机要和3.3.3.2通行,源端口(随即),目的端口(80),源ip1.1.1.1),目的ip3.3.3.2)。接下来该封装MAC地址了,1.1.1.1一看目的主机和自己不是同一个网段,因此它首先要通过本地网关,也就是说它的目的MAC应该为1.1.1.2MAC地址,此时,它就通过ARP协议发送ARP广播,来获取1.1.1.2MAC地址。之后就可以封装完成,发送出去了。路由器是3层设备,所以只需要经过物理层,数据链路层和网络层的处理。并且我们给路由器配置的路由,因此他可以选择发送路径。路由器是隔离广播的。路由器与路由器之间,完成通信也是通过ARP广播来获得对方的MAC地址的。之后的过程同前面差不多,我这里就不赘述了。

 ------------------------------------------------------------------------------

特点:

1. 集群和director节点必须在同一物理子网

2. Rip可以使用公网地址

3. director仅处理用户发来的请求,相应的信息则不经过director

4. 集群节点的网关不能指向dip

5. 不支持端口转换

6. 绝大多数操作系统都可以使用realserver

7. 能够比net模型的带动更多的realserver

 

(3) 隧道 LVS-TUN

 

                                                    图1-10 LVS-TUN模型

VPN :虚拟专用网络

GRE:通用路由封装

二层的;

PPTP

L2Tp

三层的:

ipsec

五层的:

sslvpn  经过改进了的,可以经过互联网实现

特点:

1.集群节点和director节点不必在同一个物理网络里

2.rip必须是公网地址

3.只处理进来的请求

4.响应请求一定不会经过director节点

5. director不能做端口映射

6.只能使用那些支持ip隧道协议的系统作realserver

 

-------------------------------

lvs的调度方法

1)静态调度方法

2)动态调度方法

 

静态是不考虑realserver当前的连接状态,动态是考虑realserver当前的连接状态

(一) 静态算法:

1)轮询Round-robinRR

2)加权轮调(weigthted Round-robin

根据服务器响应的能力不同,设置权限,权限越大,处理的越多。例如权重比:400:200:100

3)目标地址hashingDH

对目标地址的请求作固定定向转发

主要应用场景:director之后为缓存服务器,将来自同一个用户的请求转发到同一个服务器

,目的是提高缓存利用率

4)源地址hashingSH

将来自内网同一个用户的请求转发到同一个RouterFirewall

 主要实现平均内网负载。

 *** 静态算法的缺陷:

静态是不考虑后台realserver当前的连接状态,因此就要用到动态调度算法

(二)动态调度算法:                 

基于两种标准来考量连接状态:                   

1)当前处于活动状态的连接 ESTABLISHED)             
2)非活动状态:还处于连接状态,非断开的连接 (非FIN之前的状态)

 算法:

1 LCLeast-connection)同时检查处于活动状态的连接数和非活动状态的连接数。当前连接数最少的,作为下一个连接

选择原理:

【处于活动状态的*256+非活动连接】 计算结果作为当前连接数overhead,谁的overhead小,就作为下次请求。

 2WLCWeighted Least-Connect加权最小连接数 【最常用的算法】

 【(处于活动状态的*256+非活动连接)/权重】 作为overhead。谁的overhead小,就作为下一次连接

3Shortest Expected Delay(SED)

不再考虑非活动状态连接数,在计算overhead之前,要把活动连接状态数+1,主要目的是提高权重大的响应能力,overhead小的作为下一次请求

(活动连接数+1)*256/权重】

4Never Queue (NQ)

不考虑非活动状态连接数,无论权重多大,只要它是空闲的,就作为下一次请求

 (5) Locality-Based Least-connection(LBLC) 基于本地的最少连接算法

DH 算法相似

支持权重

6Locality-Based Least-connection with Replication Scheduling (LBLCR)

能够在LBLC基础上,实现负载均衡

DH算法相似

阅读(1566) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~