一、Linux集群类型、系统扩展方式及调度方法

1.概念

Linux cluster,Linux集群系统是一种计算机系统, 它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。一个集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统就是集群的节点(node)。一个理想的集群,用户是不会意识到集群系统底层的节点的。在他们看来,集群是一个系统,而非多个计算机系统。并且集群系统的管理员可以随意增加和删改集群系统的节点。
Linux 集群系统的优点在于:
(1)高扩展性,管理员可自行增加或删除集群系统中的节点。
(2)高可用性,当集群中某一个节点失效时,其负责的任务可以传递给其他节点,因此能够有效防止单点失效。
(3)高性能,负载均衡的集群系统能够同时接入更多的用户。
(4)高性价比,可以使用廉价的硬件构造出高性能的系统。

2. Linux Cluster类型

(1)LB:Load Balancing,负载均衡;
提供和节点个数成正比的负载能力,这种集群很适合提供大访问量的Web服务。负载均衡集群往往也具有一定的高可用性特点。Turbolinux Cluster Server、Linux Virtual Server都属于负载均衡集群。主流架构Nginx+Keepalived(利于动静分离)、LVS+Keepalived。

(2)HA:High Availiablity,高可用集群;

  一般是指当集群中有某个节点失效的情况下,其上的任务会自动转移到其他正常的节点上。还指可以将集群中的某节点进行离线维护再上线,该过程并不影响整个集群的运行。计思想就是要最大限度地减少服务中断时间。这类集群中比较著名的有Turbolinux TurboHA、Heartbeat、Kimberlite等。

  高可用集群一般是通过系统的可靠性(reliability)和系统 的可维护性(maintainability)来衡量的。通常用平均无故障时间(MTTF)来衡量系统的可靠性,用平均维护 时间(MTTR)来衡量系统的可维护性。因此,一个高可用集群服务可以这样来定义:

  A=MTBF平均故障间隔时间/(MTBF平均故障间隔时间+MTTR平均恢复时间)

(0,1):90%, 95%, 99%, 99.5%, 99.9%, 99.99%, 99.999%, 99.9999%
一般高可用集群的标准有如下几种:
99%:表示 一年不在线时间不超过87小时
99.9% :表示一年不在线时间不超过8.7小时
99.99%: 表示一年不在线时间不超过1小时
99.999% :表示一年不在线时间不超过3-5分钟

(3)HP:High Performance,高性能集群;
HPCC高性能计算集群也称为DAS(数据分析超级计算机)

(4)分布式系统集群:
分布式存储:分布式存储是一种数据存储技术,通过网络使用企业中的每台机器上的磁盘空间,在元数据服务器做索引,并将这些分散的存储资源构成一个虚拟的存储设备,数据分散的存储在企业的各个角落。

分布式计算:分布式计算是一种计算方法,和集中式计算是相对的。随着计算技术的发展,有些应用需要非常巨大的计算能力才能完成,如果采用集中式计算,需要耗费相当长的时间来完成。分布式计算将该应用分解成许多小的部分,分配给多台计算机进行处理。这样可以节约整体计算时间,大大提高计算效率。

3. 系统扩展类型

常见的系统扩展类型有:

  • scale up(向上扩展):利用现有的硬件资源,通过增加硬件资源来满足日益增长的性能消耗的需求,但是此方式通常来说能提升的性能有限。

  • scale out(向外扩展):通过硬件或软件的方式,将以往由单一服务器负责的业务需求分配到其他节点的服务器上进行处理,但是从用户的视角来看,这些服务器是单一的系统。而lvs集群的扩展方式正是属于scale out。

4. 负载均衡集群实现:

4.1、硬件设备实现负载均衡:

  • F5公司的 Big-IP产品: 性能好价格高
  • Citrix公司的 Netscaler产品
  • A10 公司的A10产品

4.2、软件实现负载均衡:

  • lvs:Linux Virtual Server虚拟服务,不处理服务,而是转到其他地方处理
  • nginx伪四层调度
  • haproxy
  • ats:apache traffic server 雅虎公司的开源项目
  • perlbal
  • pound

4.3、基于工作的协议层次划分:
(1)四层负载均衡:传输层调度器(通用):(DPORT)

  • lvs:基于udp、tcp调度
  • nginx:stream模块用来模拟四层调度
  • haproxy:mode tcp模块用来模拟四层调度

(2)七层负载均衡:应用层调度器(专用):(自定义的请求模型分类)
proxy server:

  • http:nginx(使用http的模块), httpd, haproxy(使用http的模块)
  • fastcgi:nginx, httpd, ...
  • mysql:ProxySQL, ...

4.4、集群的站点指标:

  • PV:Page View页面浏览量
  • UV:Unique Vistor单独浏览者

4.5、集群的会话保持问题:
为了对访问用户的追踪

  • (1) session sticky会话绑定
    Source IP-----基于原ip识别原用户
    Cookie----基于原Cookie识别原用户

  • (2) session replication;复制集群
    session cluster会话集群

  • (3) session server指定一台专门储存会话的服务器

5、lvs

  LVS:Linux virtual server
  VS:Virtual Server
  RS: Real Server

  l4:四层交换机,四层路由器。

    VS:根据请求报文的目标IP和目标协议及端口将其调度转发至某RealServer,根据调度算法来挑选RS。

  iptables/netfilter:

    iptables:用户控件的管理工具

    netfilter:内核空间上的框架

      流入:PREROUTING--->  INPUT

      流出:OUTPUT---> POSTROUTING;

      转发:PREOUTING---> FORWARD---> POSTROUTING

    DNAT:目标地址转换;PREROUTING;

    SNAT:源地址转换;POSTROUTING;

  lvs:ipvsadm/ipvs

    ipvsadm:用户空间的命令行工具,规则管理器,用于管理集群服务及相关的RealServer;

    ipvs:工作与内核空间的netfilter的INPUT钩子之上的框架。

6、讲解lvs

   

    CIP:所有的客户端都成为CIP

    VIP:接收客户端的请求称之为VIP。

    DIP:与后端主机通信的称之为DIP。

    RIP:后端主机对应的ip称之为RIP。

LVS的工作原理:

  1. ()当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间
  2. ()PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT
  3. ()IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING
  4. ()POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器

LVS 由2部分程序组成,包括 ipvs 和 ipvsadm。

    1. ipvs(ip virtual server):一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码。
    1. ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)

7、lvs集群类型中的术语

    

8、lvs集群的类型:

    lvs-nat:修改请求报文的目标IP;多目标IP的DNAT

    lvs-dr:操纵封装新的MAC地址;

    lvs-tun:IP隧道。在原请求IP报文之外新加一个IP首部

    lvs-fullnat:修改请求报文的源IP和目标IP。

  1)lvs-nat讲解:

  

  

  1. 多目标IPDNAT,通过将请求报文中的目标地址和目标端口来实现调度(通常修改为某挑出的RSRIPPORT实现转发);
  2. ()RIPDIP必须在同一个IP网络,且应该使用私网地址;RS的网关要指向DIP
  3. ()请求报文和响应报文都必须经由Director转发;Director易于成为系统瓶颈;
  4. ()支持端口映射,可修改请求报文的目标PORT
  5. ()vs必须是Linux系统,rs可以是任意系统;

  扩展问题:所有的应答再次转向VS调度器,这样子造成VS的压力过大。可以优化的方向是RS远端服务器直接向用户客户端发送响应报文。

  2)lvs-dr:

  

  1. Direct Routing,直接路由;
  2. 通过为请求报文重新封装一个MAC首部进行转发,源MACDIP所在的接口的MAC,目标MAC是某挑选出的RSRIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变;
  3. Director和各RS都得配置使用VIP;
  4. 1 确保前段路由器将目标ipVIP的请求报文发往Director,有以下三种方式:
  5.     在前端网关做静态绑定。这种方法不适用。
  6.     RS上使用arptables
  7.     RS上修改内核参数以限制arp通告及应答级别;修改两处
          arp_announce
          arp_ignore
  8. 2 RSRIP可以使用私网地址,也可以使用公网地址;RIPDIP在同一个ip网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director
  9. 3 RSDirector要在同一个物理网络;
  10. 4 请求报文要经由Director,但响应报文不能经由Director,而是由RS直接发往Client
  11. 5 不支持端口映射

  3)lvs-tun

  

  

  

  1.     转发方式:不修改请求报文的IP首部(源IPCIP,目标IPVIP),而是在原IP报文之外再封装一个IP首部(源IPDIP,目标IPRIP),将报文发往挑选出的目标RSRS直接响应给客户端(源IPVIP,目标IPCIP);
  2.     1 DIP VIP RIP 都应该是公网地址;
  3.     2 RS的网关不能,也不可能指向DIP;
  4.     3 请求报文要经由Director,但响应不能经由Director
  5.     4 不支持端口映射
  6.     5 RSOS得支持隧道功能;
  7.  
  8.       使用场景:广域网负载;

  4)lvs-fullnat

  

  1.   通过同时修改请求报文的源IP地址和目标IP地址进行转发
  2.       CIP< - - > DIP
  3.       VIP< - - > RIP
  4.   1 VIP是公网地址,RIPDIP是私网地址,且通常不在同一个IP网络;因此,RIP的网关一般不会指向DIP
  5.   2 RS收到的请求报文源地址是DIP,因此,只能响应给DIP;但是Director还要将其发往Client
  6.   3 请求和响应报文都经由DirectorDirector的压力会比较大。
  7.   4 支持端口映射;
        注意:此类型默认不支持。

总结:

  lvs-nat,lvs-fullnat:请求和响应报文都经由Director;

    lvs-nat:RIP的网关要指向DIP;

    lvs-fullnat:RIP和DIP未必在同一IP网络,但要能通信。

  lvs-dr,lvs-tun:请求报文要经由Director,但响应报文有RS直接发往Client;

    lvs-dr:通过封装新的MAC首部实现,通过MAC进行网络转发

    lvs-tun:通过在原IP报文之外封装新的IP首部实现转发,支持远距离通信;

Linux Cluster的更多相关文章

  1. Linux Cluster 基础之LVS调度算法与集群类型

    Linux Cluster 基础之LVS调度算法与集群类型 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.LB Cluster 1>.什么是LB LB 集群是 load ...

  2. Linux Cluster环境下批量分发执行补丁

    转自:http://blog.csdn.net/napolunyishi/article/details/18219867 这两天做了一个需求,因为上一个版本的/tmp空间默认只分配了5G,而升级程序 ...

  3. Configure Red Hat Enterprise Linux shared disk cluster for SQL Server——RHEL上的“类”SQL Server Cluster功能

    下面一步一步介绍一下如何在Red Hat Enterprise Linux系统上为SQL Server配置共享磁盘集群(Shared Disk Cluster)及其相关使用(仅供测试学习之用,基础篇) ...

  4. Configure Red Hat Enterprise Linux shared disk cluster for SQL Server

    下面一步一步介绍一下如何在Red Hat Enterprise Linux系统上为SQL Server配置共享磁盘集群(Shared Disk Cluster)及其相关使用(仅供测试学习之用,基础篇) ...

  5. Linux基础3(用户/组管理,rpm,yum,源码安装软件)

    用户管理 与用户相关的配置文件 /etc/passwd /etc/shadow /etc/skel /etc/defalut/useradd /etc/login.defs useradd userm ...

  6. Greenplum 在Linux下的安装

    1.实验环境 1.1.硬件环境 Oracle VM VirtualBox虚拟机软件:三台Linux虚拟机:Centos 6.5:数据库:greenplum-db-4.3.9.1-build-1-rhe ...

  7. 基于Linux的集群系统(八)--转

    引用位置:http://www.ibm.com/developerworks/cn/linux/cluster/linux_cluster/part8/index.html OSI参考模型及TCP/I ...

  8. Configure Always On Availability Group for SQL Server on RHEL——Red Hat Enterprise Linux上配置SQL Server Always On Availability Group

    下面简单介绍一下如何在Red Hat Enterprise Linux上一步一步创建一个SQL Server AG(Always On Availability Group),以及配置过程中遇到的坑的 ...

  9. 1、HA Cluster基础原理

    Linux Cluster  -->  linux集群类型分三种: LB:负载均衡,LoadBalance HA:双机集群系统,指高可用性集群,High Available HP:Hadoop ...

随机推荐

  1. 深度学习论文翻译解析(四):Faster R-CNN: Down the rabbit hole of modern object detection

    论文标题:Faster R-CNN: Down the rabbit hole of modern object detection 论文作者:Zhi Tian , Weilin Huang, Ton ...

  2. 开发php的扩展模块(centos环境下)

    首先下载一份PHP的源码,并上传到centos服务器上 源码下载地址:https://github.com/php/php-src   然后在命令行进入到源码路径下的ext目录 然后创建扩展项目 [r ...

  3. 简要描述 JavaScript 中定义函数的几种方式

    JavaScript 中,有三种定义函数的方式: 1.函数语句:即使用 function 关键字显式定义函数.如: function f(x){ return x+1; }  2.函数定义表达式:也称 ...

  4. vue生命周期、钩子函数

    https://segmentfault.com/a/1190000011381906    详解生命周期和钩子函数 每个vue实例再被创建之前都要经过一系列的初始化过程,这个过程就是vue的生命周期 ...

  5. Select2插件的隐藏、设置宽度

    <select id="selPrinvice" class="Select2 select2-hidden-accessible" style=&quo ...

  6. sort、sorted高级排序-Python3.7 And 算法<七>

    1.sort(*, key=None, reverse=False) sort()接受两个参数,这两个参数只能通过关键字(关键字参数)传递. 参数key:带一个参数的函数(排序时,会依次传入列表的每一 ...

  7. 一款非常好用的万能本地离线激活工具,支持Office2016、Office2015、Win7、Win8/8.1/10、Win2008/2012/R2系统,全自动安装且无需联网状态即可全部激活,它由国外网友heldigard制作,小巧、简单,只需运行而不用去管它自动激活,能自动激活为180天无限循环,欢迎大家下载使用

    office2016激活工具(KMS)是一款非常好用的万能本地离线激活工具,支持Office2016.Office2015.Win7.Win8/8.1/10.Win2008/2012/R2系统,全自动 ...

  8. SSL连接并非完全问题解决

    教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步>>> (原文)SSL 连接并非完全安全问题解决. 更多讨论或者错误提交,也请移步. 最近拿到了 TrustAsia ...

  9. 解决升级Spark2.0之后,DataFrame map操作报错

    当我们在使用spark1.6的时候,当我们创建SQLContext读取一个文件之后,返回DataFrame类型的变量可以直接.map操作,不会报错.但是升级之后会包一个错误,如下: 报错:No imp ...

  10. Flask 中的 CBV 与上传文件

    from flask import Flask, views, render_template, request app = Flask(__name__) app.config['DEBUG'] = ...