天天看点

服务器集群

一:集群概念: 

1. 两大关键特性 

集群是一组协同工作的服务实体,用以提供比单一服务实体更具扩展性与可用性的服务平台。在客户端看来,一个集群就象是一个服务实体,但事实上集群由一组服务实体组成。与单一服务实体相比较,集群提供了以下两个关键特性: 

可扩展性--集群的性能不限于单一的服务实体,新的服务实体可以动态地加入到集群,从而增强集群的性能。 

高可用性--在集群中,同样的服务可以由多个服务实体提供。如果一个服务实体失败了,另一个服务实体会接管失败的服务实体。集群提供的从一个出错的服务实体恢复到另一个服务实体的功能增强了应用的可用性。

在所以集群种类中,在Linux上面实现集群的种类是最为广泛的。几乎所有的集群种类都可以在它上面实现。下面就列举一下在Linux上面实现的集群技术。

二:集群分类: 

Linux集群主要分成三大类: 

负载均衡集群(Load Balance Cluster) 

高可用集群( High Availability Cluster)

高性能集群(High Perfermance)

具体区别如下: 

负载均衡集群(Load Balance Cluster)   简称:LB                               

当服务器接受大容量的并发请求时,通过分发器讲访问请求分摊给后台的服务器集群节点,这样就可以缓解单个服务器的访问压力。常用在网页服务器。后台的服务器是处于同等位置上的,各成员服务器不检测相邻接点的状态。此时的瓶颈就是分发器。如果分发器宕机,客户端就访问不到后台所有的服务器。容易造成单点故障。

一般应用与大型网络公司的门户网站等非交互式服务器。

高可用集群( High Availability Cluster) 简称:HA                                      

保证服务器的服务不中断,可以持续接受访问。当一台服务器突然宕机时,另外一台服务器立即接管所有服务,响应客户端的数据请求。

常见的集群是由2个节点做成的高可用集群。这两台服务器之间有主次关系,备用分发器会时时监听主分发器的心跳信息heart-beat(即每隔一段时间向主分发器发送询问信息,探测主分发器是否在线)。如果发生资源争用brain-split(主分发器忙于转发客户端的信息而来不及回应备用分发器,那么备用分发器就会认为主分发器已经宕机,下一步就是接管主分发器的所有转发任务)。此时,主分发器就会通过启动stonith设备,来关闭备用分发器。

高性能集群 (High Perfermance):简称HP

也可称为科学计算集群。这类集群致力于提供单个计算机所不能提供的强大的计算能力。 

让多台计算机结合起来共同个完成某个大型的数据计算。例如,模拟核爆炸的实验。

大致过称是通过分发器将一个大的科学计算任务划分成片,然后分发给后台的每个服务器,当后台的数据计算任务完成后,分发器就会将这些数据收集合并到一起。

LB的一个经典类型就是LVS。基于linux基础搭建的负载均衡集群就叫做linux虚拟服务(Linux Virtual Server)。

LVS是由ipvs和ipvsadm构成的。(ipvs是由中国的章文嵩在1998年开发出来的,起初是作为一个模块来被linux使用。自Redhatlinux内核版本2.4.23以后,被编译进内核并随之被广泛使用)

LVS中的IP地址命名规则:

VIP(Virtual IP)别名地址,服务器提供服务的Ip地址

DIP(Director’s IP)给后台RealServer通信的IP地址

CIP(Client’s IP)客户端IP地址

RIP(RealServer’s IP)后台RealServer的IP地址

<a href="http://linuxtro.blog.51cto.com/attachment/201003/16/1239505_126872371662AE.jpg"></a>

根据LVS的转发方式,可以分为以下三种常见类型:

LVS-NAT

LVS-DR 在企业中应用比较广泛;

LVS-TUN

LVS-NAT的基本属性为:

<a href="http://linuxtro.blog.51cto.com/attachment/201003/16/1239505_1268723717hAZx.jpg"></a>

1、所有RealServer必须在同一网段内;

2、RealServer主机的服务器IP必须为私有IP;

3、Director负责调度客户端与RealServer之间的所有进程;

4、RealServer把DIP作为默认网关;

5、Director可以做端口映射;

6、RealServer可以由任何操作系统来充当;

7、Director有可能成为单点故障;

LVS-DR的基本属性为:

<a href="http://linuxtro.blog.51cto.com/attachment/201003/16/1239505_12687237198USb.jpg"></a>

1、 所有RealServer服务器必须在同一网段;

2、 RIP不必要是私有地址;

3、 Director只调度进入集群的数据链接,不调用出去集群的数据链接;

4、 RealServer的网关不指向DIP地址;

5、 Director不能做端口映射;

6、 大多数操作系统(一块网卡支持多个IP地址)可以做RealServer;

LVS-TUN的基本属性为:

<a href="http://linuxtro.blog.51cto.com/attachment/201003/16/1239505_1268723721WQnF.jpg"></a>

1、 RIP与DIP不必要在同一个网络内;

2、 RIP为公网地址;

6、 仅支持IP隧道的操作系统才可以作为RealServer;

7、 允许异地提供服务;

调度算法:

调度算法(schedule methods)分为静态(Fixed schedule)和动态(Dynamic schedule)两种。

静态调度算法(Fixed schedule)包括:

1、轮叫算法(Round-Robin): 简称RR

当客户端请求数据进来时,Director直接按顺序将请求分配给后台服务器节点。这种情况并没有考虑各个服务器节点之间性能的优劣。

2、加权轮叫算法(Weighted Round-Robert):简称WRR

当请求数据进来时,Director会根据各服务器节点之间的权重不同而将访问请求不均等分配给后台服务器。

3、目标地址哈希算法(Diestination Hashing):简称DH

只要数据来源请求来源是同一个IP,则Director将分配给后台同一个RealServer。其缺陷是当同一IP(客户端IP是由NAT转发而来)发出大量访问时,可能会导致后台某个RealServer非常繁忙,而其他RealServer却无事可做的局面,这显然不是我们想看到的结果。

4、源地址哈希算法(Source hashing):简称SH

此时集群出口处至少有两台防火墙,数据访问来源由这个防火墙进入,就必须有这个防火墙出去,这种固定来源地址进出集群的算法就是源地址哈希算法。常应用于防火墙链接追踪。

动态调度算法(Dynamic schedule):

应用动态调度算法时,Director要做数据链接追踪,将链接分为活动链接和非活动链接。(活动链接:tcp链接打开,即链路处于ESTABLISHED状态;非活动链接:当tcp链接断开或者FIN=0时,LVS继续保持链接状态。)然后根据当前RealServer的状态(即繁忙程度)来进行访问请求的分配。

1、最少活动链接算法(Least-connection):简称LC

适用于后台各个RealServer的负载相同的情况下,当发生新的数据链接请求时,Director先检测后台各个RealServer的活动非活动连接数,然后通过算法计算得出各个RealServer的负载数,然后将访问请求转发到负载数小的RealServer上。

求负载数算法公式为:负载数=活动连接数X256+非活动连接数

2、加权最少活动链接算法(Weight Least-connection):简称WLC

适用于后台各个RealServer的负载不同的情况下,当发生新的数据链接请求时,Director先检测后台各个RealServer的活动非活动连接数,然后通过算法计算得出各个RealServer的负载数,然后将访问请求转发到负载数小的RealServer上。只是求负载数的算法有所不同。

求负载数算法公式为:负载数=(活动连接数X256+非活动连接数)/权重

3、最少期望延迟算法(shortest Expected Delay):简称SED

不计算非活动连接数,只计算活动连接数

4、无队列算法(Never Queue):简称NQ

是对WLC的改进算法。

5、基于局部最少活动链接算法(Locality-Based Least-Connection):简称LBLC

根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务器,将请求发送到该服务器。

6、基于局部最少活动链接复制算法(Locality-Based Least-Connection with Replication

):简称WLBLC

当有大量同一目标访问集群后台同一个RealServer时,会造成此RealServer过于繁忙,如果将多台机器组合在一起作为一个RealServer接受客户端访问,则会减轻单个RealServer的访问压力。

常用的定义ipvsadm的语法参数:

--t –tcp-server service-address

--u –udp-server service-aaddress

-f    防火墙标记

-s -schedule-service 启用的调度算法

-p 设置持久链接的数值,默认为360s

-r –realserver server-address RealServer的IP地址

-g 使用LVS-DR转发方式,redhat 的默认规则

-i 使用LVS-TUN转发方式

-m 使用LVS-NAT转发方式

ipvsadm -A|E -t|u|f virutal-service-address:port [-s scheduler] [-p [timeout]] [-M netmask] 在内核的虚拟服务器表中添加一条新的虚拟服务器记录,也就是增加一台新的虚拟服务器||编辑内核虚拟服务器表中的一条虚拟服务器记录

ipvsadm -D -t|u|f virtual-service-address删除内核虚拟服务器表中的一条虚拟服务器记录

ipvsadm -E 修改服务

ipvsadm -C清除内核虚拟服务器表中的所有记录

ipvsadm -R恢复虚拟服务器规则

ipvsadm -S [-n] 保存虚拟服务器规则,输出为-R 选项可读的格式

ipvsadm -a|e -t|u|f service-address:port -r real-server-address:port[-g|i|m] [-w weight]在内核虚拟服务器表的一条记录里添加一条新的RealServer服务器记录,也就是在一个虚拟服务器中增加一台新的RealServer服务器||编辑一条虚拟服务器记录中的某条RealServer服务器记录

ipvsadm -d -t|u|f service-address -r server-address删除一条虚拟服务器记录中的某条RealServer记录

ipvsadm -L|l [options] 显示内核虚拟服务器表

ipvsadm -Z [-t|u|f service-address] 虚拟服务表计数器清零(清空当前的连接数量等)

ipvsadm --set tcp tcpfin udp设置连接超时值

ipvsadm --start-daemon state [--mcast-interface interface] 启动同步守护进程

ipvsadm --stop-daemon停止同步守护进程

ipvsadm -h显示帮助信息 

-w --weight weight   RealServer服务器的权值

-c --connection 显示LVS 目前的连接 如:ipvsadm -L -c

--timeout 显示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout

--daemon 显示同步守护进程状态

--status 显示统计信息

--rate 显示速率信息

--sort 对虚拟服务器和RealServer服务器排序输出

--numeric -n 输出IP 地址和端口的数字形式 

本文转自 linuxtro 51CTO博客,原文链接:http://blog.51cto.com/linuxtro/284318,如需转载请自行联系原作者

继续阅读