一、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的工作原理:

()当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间
()PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链
()IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链
()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讲解:

  

  

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

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

  2)lvs-dr:

  

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

  3)lvs-tun

  

  

  

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

  4)lvs-fullnat

  

  通过同时修改请求报文的源IP地址和目标IP地址进行转发
      CIP< - - > DIP
      VIP< - - > RIP
  1、 VIP是公网地址,RIP和DIP是私网地址,且通常不在同一个IP网络;因此,RIP的网关一般不会指向DIP
  2、 RS收到的请求报文源地址是DIP,因此,只能响应给DIP;但是Director还要将其发往Client;
  3、 请求和响应报文都经由Director;Director的压力会比较大。
  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. 边缘化搭建 DotNet Core 2.1 自动化构建和部署环境(上)

    写在前面 写这篇文章的缘由是由于笔者的对新兴技术方向有所追求,但个人资产有限,只能容许购买一台阿里云低配1核2G服务器.服务器上搭建了 Centos7 & Docker & Jenki ...

  2. 火热的线上APP的源码分享,开箱即用

    这篇文章是写给iOS的程序员或产品经理的,同样,对于入门学习iOS开发的人,也是一个很好的实战演练,因为这里分享的是一个已经上架的.拿了源码就能正常运行起来的项目. 在介绍这个项目的源码分享之前,小编 ...

  3. Java并发编程笔记之FutureTask源码分析

    FutureTask可用于异步获取执行结果或取消执行任务的场景.通过传入Runnable或者Callable的任务给FutureTask,直接调用其run方法或者放入线程池执行,之后可以在外部通过Fu ...

  4. C语言第九讲,结构体

    C语言第九讲,结构体 一丶结构体的定义 在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据.结构体的定义形式为: struct 结构体名{ 结构体所包含的变量或数组 }; 结构体是一种 ...

  5. XSS漏洞扫描工具:BruteXSS

    下载Brute,一个xss漏洞扫描工具:https://codeload.github.com/shawarkhanethicalhacker/BruteXSS/legacy.zip/master 我 ...

  6. 图像边缘检测——几种图像边缘检测算子的学习及python 实现

    本文学习利用python学习边缘检测的滤波器,首先读入的图片代码如下: import cv2 from pylab import * saber = cv2.imread("construc ...

  7. CentOS 7 开启 SNMP 实现服务器性能监控

    1.检测是否有 SNMP 服务 service snmpd status 2.若没有则安装 yum install -y net-snmp 3.编辑 SNMP 的配置文件,设置安全的验证方式 vi / ...

  8. SQL 行转列示例

    --油表 select (select SUM(XiaoHaoLiang)as'油表消耗总值' FROM dbo.NengHaoYouBiao WHERE CaiJiRiQi between '201 ...

  9. Redis基础认识及常用命令使用(一)--转载

    Redis简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset(有序集 ...

  10. R0~R16寄存器作用

    R0-R3     用作传入函数参数,传出函数返回值.在子程序调用之间,可以将 r0-r3 用于任何用途. 被调用函数在返回之前不必恢复 r0-r3.如果调用函数需要再次使用 r0-r3 的内容,则它 ...