[干货]集群基础理论讲解|By黑白子童鞋

背景

随着互联网访问量的急剧增加,单台服务器的能力已严重不能满足需求。则需要从两个方面考虑提高服务能力:1、向上扩展2、向外扩展

向上扩展的缺点:

  • 1、造价高
  • 2、随着性能的提高,会在某个临界点遇到瓶颈,导致性能随后降低。

向外扩展的优点:

  • 1、造价低
  • 2、提供高并发能力和高可用性
  • 3、可扩展性好。

分类

  1. 负载均衡集群(Load Balance)
  2. 高可用集群(High Availability Cluster)
  3. 高性能集群(High performance computing)
    • 负载均衡集群:由于电信运行商dns的原因,所以不能靠dns来做负载均衡,必须通过前端调度器将请求分发至后端的服务器,以提高并发访问量。但随着访问量的提高,调度器和存储等的限制,访问速度会成为瓶颈,所以需对网站进行功能切分,分别做集群,例如门户网站的分类。为了保证后端服务器提供的内容一致性,网页的静态内容使用rsync+inotify的机制做同步。一个web页面包含多个web对象,而目前的浏览器都支持多线程,所以来自客户端的请求,可能并发多个请求,调度器分发至多个后端服务器,可以提高网页的打开速度。而调度器具有health check的能力,能将挂了的主机移除,也能将恢复的主机加进集群。
    • 优点:提高并发处理能力
    • 高可用集群:可以提高服务的在线能力、服务可用性。例如有两台主机提供web服务,A作为正常提供服务的主机,B作为备用的主机,A不断地将自己的心跳信息用组播的方式传递给B,而B也能去检查A的心跳信息。当B不能得到A的心跳后,则会通过电源交换机关闭A的电源,并将A的ip地址夺过来,启动A之前提供的服务,以提高服务的在线能力。若是多台主机的高可用集群,还可以设置备节点的优先级,来响应主节点挂掉后的动作。
    • 高可用集群传递的不只是心跳信息,还有事务信息(优先级等)。而负责协调完成事务的节点叫做DC(节点中的一台),若DC挂了,则其他主机间推选一个即可。

负载均衡集群和高可用集群的主要区别

  • 负载均衡集群提供并发处理能力,提供health check
  • 高可用集群提供服务的始终在线能力,提供heartbeat
  • 高性能集群:利用分布式文件系统将复杂问题分解为小问题并行处理。
  • 由于高可用集群的效率不是很高(备份的主机会造成资源浪费),所以需要提高。例如web服务和邮件服务分别在A、B主机启动,然后它俩互为主备,则可以提高效率。但高可用集群在某一时刻资源只能在一台主机上启动。

脑裂:是因为cluster分裂导致的,cluster集群中节点因为处理器忙或者其他原因暂时停止响应时,其他节点可能误认为该节点“已死”,从而夺取共享磁盘(即资源)的访问权,此时极有可能假死节点重新对共享文件系统产生读写操作,从而导致共享磁盘文件系统损坏。


stonith:爆头,shoot the other node in the head通过电源交换机切断检测不到心跳信息的主机的电源。


隔离:fancing,拒绝某个节点访问某个资源。分为节点隔离(stonith)和资源隔离。

  • 为了防止集群脑裂,集群节点应该为3或3个以上的奇数个。

其他知识:

DAS:直接附加存储。内核直接操作块设备的数据。若不同主机同时访问同一文件,则会造成写错误。但效率高。


NAS:网络附加存储。是文件级别的操作,第一个主机写数据时会施加锁,第二个主机就不能写。性能要比DAS差。

负载均衡集群实现方法

1、硬件方式

  • F5,CITRX,NETSCALER,A10(价格逐渐降低,由于为了防止调度器成为单点故障,所以要配置一台备用设备,所以造价更高了)

2、软件方式

  • 四层:LVS(根据请求的ip和端口来分发),性能好,但对高级特性支持不好。
  • 七层(反向代理):Nginx(http,smtp,pop3,imap),Haproxy(主要是http,tcp(mysql,smtp)),能够精确解码请求的协议,并能做适当修改后向后转发,操作能力强,性能略差于LVS,更适应生产环境。

LVS:Linux virtual server

  • lvs工作于内核的tcp/ip协议栈的input链,不能和iptables同时工作。当调度器上定义一个集群服务后才会向后进行转发,当请求报文经过prerouting到达input时,经过input上定义的集群策略审查,若是集群服务则请求报文会被送至forward并通过postrouting向后转发。
  • Lvs也是两段式:ipvsadm(用户空间)和ipvs(内核的input)

内核2.4.23之前并没有ipvs代码,所以需要打补丁。


相关术语

Lvs的类型:

  • 1、Nat模型
  • 2、DR模型
  • 3、TUN模型

Nat模型:工作机制和DNAT一样

  • 当客户端请求报文到达调度器时ip报文首部是CIP|VIP,从prerouting送至input发现为集群服务后,将报文转发至forward经postrouting向后转发,此时ip首部变为CIP|RIP1,后端realserver发现是目标地址是自己后进行拆解报文、响应报文、封装报文,此时ip首部为RIP1|CIP,然后经过调度器的源地址转换,ip首部变为VIP|CIP,通过路由设备回应给客户端。

NAT模型遵循的法则:

  • 1、集群节点和调度器必须在一个网络中
  • 2、RIP地址为私有地址,仅用于集群节点间的通信
  • 3、调度器位于客户端和realserver之间,复制处理进出的所有通信
  • 4、realserver网关必须指向DIP
  • 5、调度器支持端口映射
  • 6、realserver可以支持使用任何操作系统

较大规模场景中,调度器容易成为瓶颈,理想状况下后端能带10台主机。生产环境一般不用这种模型。

DR模型:(常用)

  • 调度器和realserver都连接在交换机上,并且调度器和RS都配置了VIP,只是RS的VIP被隐藏起来了,不用做通信,只是在响应时修改源地址而已。调度器的VIP配置在网卡上,而DIP配置在网卡别名上,RS的RIP配置在网卡上,VIP配置在网卡别名上。因为在一个网络中,所以调度器和RS的mac地址会通过arp解析得到其他人的mac地址。当请求报文发送至集群网络时ip报文首部为CIP|VIP,这时因为RS的VIP被隐藏起来了,所以只有调度器响应,而位于input链的策略发现是集群服务时,它不会拆解ip首部,而是把mac首部拆了,封装mac(源mac改为调度器的mac,目标mac改为调度器挑选的RS的mac),并向RS转发,报文传至RS时,RS发现目标地址是自己,然后进行响应,封装报文,源地址修改为VIP,目标地址为CIP,然后直接通过路由设备将报文发给客户端。

DR模型遵循的法则:

  • 1、集群节点必须和调度器在同一物理网络中
  • 2、RIP不用为私有地址了,实现了便捷的远程管理和监控
  • 3、调度器只负责进站请求,响应保卫有RS直接发往客户端
  • 4、集群节点不能将网关指向DIP
  • 5、调度器不支持端口映射
  • 6、大多数操作系统能支持RS,因为RS要求隐藏VIP

TUN模型:为了实现异地灾备(不常用)

  • 工作机制和DR模型近似。RS有两个IP:RIP、VIP(隐藏的),且RIP是公网地址,RS和调度器不再同一网络,RS可直接将响应报文发送给客户端。调度器也有两个ip:VIP、DIP(别名)。当请求报文发送到调度器时,ip报文首部为CIP|VIP,调度器发现是集群服务想外转发时在CIP|VIP前面封装一层首部DIP|RIP,RS接受报文并且拆分外面的首部后发现目标地址的确为自己,便开始响应并直接经过路由设备回传给客户端,不需要经过调度器。这种模型需要调度器和RS支持隧道机制。

TUN模型遵循的法则:

  • 1、各集群节点可跨越互联网
  • 2、RIP必须为公网地址
  • 3、调度器仅处理入站请求,响应报文则由RS直接发往客户端
  • 4、RS网关不能指向调度器
  • 5、只有支持隧道功能的os才能用于RS
  • 6、不支持端口映射

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2015-12-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT技术精选文摘

LVS集群中的IP负载均衡技术

1.前言 在已有的IP负载均衡技术中,主要有通过网络地址转换(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟...

46980
来自专栏用户2442861的专栏

网关和路由器的区别

  顾名思义,网关(Gateway)就是一个网络连接到另一个网络的“关口”。            按照不同的分类标准,网关也有很多种。TCP/...

3.2K20
来自专栏小特工作室

WinForm中ClickOnce发布至广域网

  ClickOnce智能客户端,是微软提供比较早的一项技术,用于实现WinForm开发的应用程序能够自动更新,省去给每台客户端升级带来的困扰。   从网上的贴...

29370
来自专栏北京马哥教育

测一测你的linux基础能力合格吗?

“努力,让日子更从容、更愉悦、更优雅一些。”——马哥 运维人员想要生活更从容、更愉悦、更优雅必须有更扎实的linux技术支撑才可以。 我们学了这么就的linux...

45190
来自专栏散尽浮华

linux负载均衡总结性说明(四层负载/七层负载)

在常规运维工作中,经常会运用到负载均衡服务。负载均衡分为四层负载和七层负载,那么这两者之间有什么不同? 废话不多说,详解如下: 一,什么是负载均衡 1)负载均衡...

1.1K80
来自专栏Python中文社区

Python写TCP端口扫描工具之IP协议的讲解

專 欄 ❈exploit,Python中文社区专栏作者,入坑Python一年。希望与作者交流或者对文章有任何疑问的可以与作者联系: QQ:1585173691...

43660
来自专栏高性能服务器开发

3 游戏后端开发需要掌握的知识

18120
来自专栏FreeBuf

【漏洞预警】Linux内核ipv4/udp.c 远程任意代码执行(CVE-2016-10229)

? 漏洞描述 Linux kernel是美国Linux基金会发布的操作系统Linux所使用的内核。Linux kernel 4.5之前的版本中的udp.c文件...

21760
来自专栏SDNLAB

OpenFlow的伴侣协议:OF-CONFIG

1 简介 在OpenFlow协议的规范中,控制器需要和配置好的交换机进行通信。而交换机在正常工作之前需要对其特性以及资源进行配置,才能正常工作。而这些配置超出了...

38950
来自专栏DT乱“码”

转 LVS 负载均衡

35420

扫码关注云+社区

领取腾讯云代金券