什么是集群

 简单的说,集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统就是集群的节点(node)。一个理想的集群是,用户从来不会意识到集群系统底层的节点,在他/她们看来,集群是一个系统,而非多个计算机系统。并且集群系统的管理员可以随意增加和删改集群系统的节点。

 

为何需要集群

 服务器拓展类型分为:向上拓展(scale up),当服务器已经无法满足当前应用需求的时候则在硬件上拓展服务器的性能(增加CPU个数与核心数、增大内存数),但是CPU访问内存的带宽并不能随着CPU个数的增加而呈现有效的线行增长,即向上拓展的瓶颈所在。此时,则需要向外拓展(sclae up)即增加多台服务器来同时完成同一任务的计算处理,从而提升性能接受更多的请求并发数及更快速的响应速度,这就是集群技术,集群性能随着CPU个数的增加几乎是线行变化的。


集群特性

 

高拓展性:如上所述;

 高可用性:当一个节点出现故障时,则迅速切换到另一个节点,有效的防止单点故障;

 高性能:允许更多的用户接入,分布式计算实现高吞吐计算;

 高性价比:可以采用稍微廉价的硬件来构造高性能的架构;



集群类别


 1、Load Balance Cluster    负载均衡集群  简称LB

 2、High Availability Cluster      高可用集群    简称HA

 3、High Perfermance Computing  高性能集群   简称HP

 

各类集群介绍


负载均衡集群 LB
#负载均衡系统:集群中所有的节点都处于活动状态,它们分摊系统的工作负载。一般Web服务器集群、数据库集群和应用服务器集群都属于这种类型。
#我们前边做的MySQL主从异步复制、MySQL主从半同步复制、MySQL属主模型等都属于负载均衡,为了分担主服务器的负载。
负载均衡集群功能
#拓展容量,伸缩性技术

 

   

高可用集群 HA
#可用性(availability)是通过系统的可靠性(reliability)和可维护性(maintainability)来度量的。工程上通常用平均无故障时间(MTTF)来度量系统的可靠性,用平均维修时间(MTTR)来度量系统的可维护性
#衡量标准
(1)平均无故障时间/(平均无故障时间+平均修复时间)
#业界根据可用性的衡量标准将服务器进行了分类,即5个9参数

     

     集群基础及LVS详解_第1张图片


     

(2)停机对企业带来损失,当停机时间与money划上等号的时候,高可用性的重要性不言而语
#下边为一些不用类型的企业应用系统停机所带来的损失

   

     集群基础及LVS详解_第2张图片

     

(3)高可用集群HA的功能
#服务可用性:高可用、数据高可用、代码发布高可用等


     

高性能集群 HP
#高性能计算致力于开发超级计算机,研究并行算法和开发相关软件
#高性能计算主要研究的领域
大规模科学问题,象天气预报、地形分析和生物制药等;
存储和处理海量数据,象数据挖掘、图象处理和基因测序;
#由此可见高性能集群就是实现以上的研究,从而也体现出高性能集群强大的计算吞吐能力

 

   

高性能集群 HP功能
#并行处理大数据



各类集群的开源实现方案


 

负载均衡集群 LB
# lvs
# haproxy
# ngix(在应用层做负载均衡,高性能,有缓存功能)
# ats


   

高性能集群 HA
# heartbeat v1,v2,v3
# corosync+ pacemaker
# cman+rgmanager (红帽已废弃)
# cman+pacemaker
# keepalived (redhat6.4自带)
# ultramonkey(超级猴)

   

   

高性能集群 HP
# hadoop
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                



负载均衡集群(LB)的解决方案

  LB的解决方案

     

硬件级别
F5                     BIG-IP
Citrix(思杰)          Netscaler
A10                      A10
Array
Redware
#现在基于硬件级别的服务器集群基本被前三家垄断
软件级别
Linux:LVS (Linux Virtual  Server)


LB之LVS详解

    1、 LVS介绍

LVS :Linux Virtual Server  linux虚拟服务器集群
lvs创始人 章文嵩博士  花名:正明  现任淘宝高级副总裁
#吃水不忘挖井人

           

      LVS=  IPVS + IPVSadm            

       
ipvs :框架 类似于防火墙中的netfilter框架,需要依赖于规则
ipvsadm:实现规则的工具 类似于防火墙中的iptables工具

   

  2、ipvs框架图

        集群基础及LVS详解_第3张图片

     

# 上图:lvs工作在内核空间,通过input链上的socket(套接字)来定义转发给后边哪个特定服务器;我们形象的称呼它为四层路由器或四层交换机

     

   

# 以上结构极类似于netfilter框架结构,如果对框架不熟悉的请参阅我的博客
http://jungege.blog.51cto.com/4102814/1384236 iptables详解

   

   

   3、LVS工作原理图


    集群基础及LVS详解_第4张图片


       

VIP:虚拟IP的简称,我们也成为流动IP。
#VIP用途:实现高可用,当调度器宕机时,VIP会自动切换到另一台备用服务器上,该备用服务器迅速的接替主服务器的任务,从而有效的防止业务的终止。
DIP:Director IP
#Director:调度器
RIP: Real Server IP
#Real Server 集群中的应用服务器
CIP:Client IP
#即客户端IP
以上IP我们后边会频繁的用到,请理解并牢记


   4、一个简单的LVS架构图


   集群基础及LVS详解_第5张图片


       

  5、LVS类型


       

NAT
#基于动态NAT(DNAT)技术
DR
#基于直连路由技术 direct routing
TUN
#基于隧道技术 ip tunnl
FULLNAT
#基于NAT技术(同时转换源IP和目的IP)

    5.1  LVS类型NAT、DR、TUN、FULLNAT详解


   (一)NAT

     

     

LVS-NAT的特性:
# 1、RS应该使用私有地址:(real server使用私有地址)
# 2、RS的网关必须指向DIP (directer ip)
# 3、RIP和DIP必须在同一个网段内
# 4、请求和相应的报文都得经过Director:在高负载场景中,Director很可能成为系统性能瓶颈
# 5、支持端口映射;
# 6、Real Server可以使用任意支持集群服务的OS(操作系统)


   (二)DR


   

LVS-DR 类型
                                                                                                                                                                                                                                                                                                                                             
# 让前段路由器请求发往VIP时,只能是Dirctor上的VIP;
# 解决方案:
  (1)静态地址绑定
       弊端:未必有路由器的配置权限
             Director调用时静态地址绑定将难以使用
                                                                                                                                                                                                                                                                                                                                                 
  (2)arptables
       弊端:必须做arp规则
  (3)修改linux内核参数,将RS上的VIP配置为lo接口的别名,限制Linux仅对对应接口的ARP请求做响应;
#方案(1)(2)存在严重的弊端;我们经常在用的是方案(3)修改内核参数

 

   

LVS-DR 特性
#1、RS可以使用私有地址;但也可以使用公网地址,此时可以直接通过互联网连入RS以实现配置、监控等;
#2、RS的网关一定不能指向DIP;
#3、RS跟Dircter要在同一物理网络内(不能由路由器分隔);
#4、请求报文经过Director,但响应报文一定不经过Director
#5、不支持端口映射;--即不支持在RS上做端口映射,比如http://172.16.100.7:80 不能将80映射为8080
#6、RS可以使用大多数的操作系统,比如unix、linux、win

   

 

LVS-DR 模型
 (1)Director两个地址:VIP, DIP
 (2)RS有两个地址:VIP, RIP
                                                                                                                                                           
 (3)禁止RS响应对VIP的ARP广播请求:
#方案1、在前端路由上实现静态MAC地址VIP的绑定;
#                前提:得有路由器的配置权限;
#                缺点:Directory故障转时,无法更新此绑定;
#方案2、arptables
#                前提:在各RS在安装arptables程序,并编写arptables规则
#                缺点:依赖于独特功能的应用程序
#方案3、修改Linux内核参数
#                前提:RS必须是Linux;
 #               缺点:适用性差;
                                                                                                                                                           
 (4)两个必配参数
#   arp_announce:定义通告模式   2  ---------------主动模式,RS自身不向外通告lo:0上的VIP
#   arp_ignore:定义收到arp请求时响应模式  1 ------------被动模式,当arp请求的ip地址来时,如果不是通过自己的接口过来的,则不予回复;
                                                                                                                #配置专用路由,以使得响应报文首先通过vip所配置的lo上的别名接口
                                                                                                                                                                                                    
注意:Linux的工作特性---IP地址是属于主机(即内核),而非某特定网卡;

 

   (三)TUN

LVS-TUN 特性
#类似于LVS-TUN特性,只是当CIP|VIP(源ip地址|目的ip地址)数据包传输到Dirctor以后,Director会在数据包外层封装一层DIP|RIP,从而让交换机将数据包发往至Real server上

   

   (四)FULLNAT

   

LVS-FULLNAT 特性
#将目标IP地址和源IP地址同时转换


   

   5.2 LVS的十种调度算法及Session机制


      集群基础及LVS详解_第6张图片

     

静态方法:仅单纯根据算法本身进行调度 (不会考虑后台的real server的性能)
 (1) rr:Round Robin       
# 轮询只能使用session绑定和复制
 (2)wrr: Weighted RR
# 与rr相比,wrr可以给服务器加权重
 (3) sh:soruce hashing  
# 实现session绑定:将一个特定的源ip地址的会话,绑定到一个特定的real server 上
 (4)dh:destination hashing
# 前段有多个防火墙时,从一个防火墙进来,还要从这个防火墙出去,该算法几乎不使用

 

 

动态方法:根据算法及RS当前的负载情况而调度
(5)lc:Least Connection
# 不考虑权重  最小连接
# Overhead=Active*256+Inactive
# 小者胜出,如果都相同则轮询即可
(6)wlc:Weighted LC  
# 考虑权重   最小连接+权重
# Overhead=(Active*256+Inactive)/weight
# 小者胜出,如果相同,则从real server列表从上而下轮询
(7)sed:Shortest Expect Delay
(8)nq:Nerver Queue
(9)lblc:Locality-based Lest Connection 
# 基于本地的最少连接                 
(10)lblcr:Replicated and Locality-based Least Connection
# 应用的在rs后的cache服务器,增加缓存命中率

 

   

session持久机制:
#1、session绑定:始终将同一个请求者的连接定向至同一个RS (第一次请求时仍由调度方法调用)  ---没有容错能力
#2、session复制:在real server 之间同步session,因此,每个RS持有集群中所有的session-----对于大规模集群不适合(每个rs保存的session太多)
#3、建立session服务器:利用单独部署的服务器来统一管理session---必须要对该服务器做高可用,不然出现单点故障

   


  5.4 LVS的集群服务

       
工作层:四层交换,四层路由
根据请求目标套接字(包括端口的协议类型tcp, udp)来实现转发
#例如:172.16.100.7:80
实现转发的框架及规则工具:ipvs/ipvsadm
     

  5.5 ipvsadm工具详解

   

   

ipvsadm创建规则格式:
#ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask]
#ipvsadm -D -t|u|f service-address
#ipvsadm -C
#ipvsadm -R
#ipvsadm -S [-n]
#ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]
#ipvsadm -d -t|u|f service-address -r server-address
#ipvsadm -L|l [options]
#ipvsadm -Z [-t|u|f service-address]
与集群服务相关
# -A: 添加一个集群服务
#    -t: tcp
#    -u: udp
#    -f: firewall mark通常用于将两个或以上的服务绑定为一个服务进行处理时使用;
                                                                                                                              
#        service-address:
#           -t IP:port
#           -u ip:port
#           -f firewall_mark
                                                                                                                              
#           -s 调度方法,默认为wlc
                                                                                                                              
#           -p timeout: persistent connection, 持久连接
                                                                                                                              
# -E:修改定义过的集群服务
                                                                                                                              
# -D -t|u|f service-address:删除指定的集群服务
与RS(Real server)应用服务器相关
# -a:向指定的CS中添加RS
#    -t|-u|-f service-address:指明将RS添加至哪个Cluster Service中
                                                                                                                        
# -r: 指定RS,可包含{IP[:port]},只有支持端口映射的LVS类型才允许此处使用跟集群服务中不同的端口
                                                                                                                        
#          LVS类型:
#                -g: Gateway, DR
#                -i: ipip, TUN
#                -m: masquerade, NAT
                                                                                                                        
#          指定RS权重:
                -w
                                                                                                                        
#  -e: 修改指定的RS属性
                                                                                                                        
#  -d:删除指定的RS
#   -t|u|f service-address -r server-address:从指定的集群服务中删除某RS
                                                                                                                        
清空所有的集群服务:
#ipvsadm -C
保存规则:(使用输出重定向)
#ipvsadm-save
#ipvsadm -S
                                                                                                                        
载入指定的规则:(使用输入重定向)
# ipvsadm-restore
# ipvsadm -R
                                                                                                                        
查看ipvs规则
#     -L [options]:查看规则
#        -n: 数字格式显示IP地址
#        -c: 显示连接数相关信息
#        --stats: 显示统计数据
#        --rate: 速率
#        --exact:显示统计数据的精确值
                                                                                                                        
#    -Z: 计数器清零;



   

总结:以上为集群的基础与负载均衡集群之一LVS的详解


   PS:水平有限,后继会继续丰富,如有错误请指出。关于LVS-NAT、LVS-DR架构的实现马上推出,敬请期待!