目录

24.1 架构拓展及集群介绍

架构拓展及集群介绍

/images/linux_mt/linux_slb.jpg

前面我们已经介绍了,如何使用 nginx 或 httpd 部署一台 web 服务器,但是受限于单太服务器的资源,一台服务器能提供的响应能力有限。因此从本章开始,我们将从最简单 LAMP/LNMP 出发,不断向其添加组件来扩展我们的 web 服务框架,以提供更快,更稳定的服务。本章我们开始讲解第一个组件,如何使用 LVS 实现一个负载均衡集群,内容包括:

  1. web 架构拓展和集群简介
  2. LVS 负载均衡原理
  3. LVS 的 NAT 模型
  4. LVS 的 DR 模型

负载均衡集群除了 LVS 之外还有多种其他实现包括 nginx,haproxy,我们会在后面详细介绍。

1. 架构拓展

单台计算受限于本地的存储资源,计算资源等各种资源的额限制,单台服务的响应能力有限。比如我们的单台 nginx 服务最多能并发响应 2 万个用户。当并发请求数超过此限制时,我们有两种优化方式:

  1. 换一台计算能力更强的计算机,这种方式我们称之为向上扩展(scale up)
  2. 将并发请求按照特定的调度算法分散到多台计算上,这种方式称为向外扩展(scale out),多台计算的组合就称为集群(cluster)

集群主要分为三类,此处的用于分散用户请求的集群称为负载均衡集群(Loader Balance Cluster)。分散用户请求有一个前提,每个用户请求都是独立可分离的。然后这可能会存在一些问题:

  1. 难以完全追踪用户状态,因为用户可能会被调度到不同的机器上
  2. 某用户的写操作会被单台服务器所承载,当对新上传资源的请求被调度到其他服务器,将无法获取此资源

对于第一个问题,web 服务通常使用 cookie 和 session 追踪用户,我们需要想办法让集群内的所有服务器能共享 session 信息,这样就能追踪用户状态。session 共享有三种方式:

  1. session 绑定,将来自同一用户的请求始终发送同一服务器,这种方式并没有共享 session,当服务器挂机之后 session 可能会丢失,因此需要 session 持久化。用户识别有两种方式,一是 IP,而是用户 cookie,因为 SNAT的存在 cookie 更准确
  2. session 复制集群,每个服务器都拥有集群上所有服务器的 session 会话,因为 session 会在集群内传输,会极大的占用带宽与内存资源。
  3. session 服务器,将 session 保存在共享的内存服务器中,每台服务器从session 服务器中获取 session。但此时 session 服务器是单点故障所在(Single Point of Failure, SPoF)

对于第二个问题,我们可以将用户写操作放到共享存储上。通常用户的数据分为三类,我们可以将其分别存放在不同存储介质中

  1. 结构化数据,通常存放在关系型数据库中
  2. 半结构化数据,通常存放在 NoSql 中,比如 mongo
  3. 非结构化数据,比如图片,我们可以存在分布式文件系统之上

用户的请求需要分散到多台服务器上,负责分散用户请求的服务器称为负载均衡器或分发器或调度器。因此我们的 web 服务框架将如下所示。调度器在分发用户请求时,有不同的调度算法,会依据不同的标准分发请求。

/images/linux_mt/web_frame.jpg

此时负载均衡服务器将是最大的单点故障所在,我们需要对其做冗余。我们需要提供另一台备用服务器,当负载均衡服务器迭机之后,能够取代其继续提供服务。这种提供冗余能力的服务器组合我们称为高可用集群(High Availability)。

2. 集群介绍

前面我们提到了两类集群,集群(Cluster) 总共可分为三类:

  • LB:负载均衡集群 Load Balancing
  • HA:高可用集群,High Availability,实现包括
  • HP:高性能集群 High Performance,

HP 集群作用在于集合 CPU,以提供更高的计算能力,最典型应用就是现在的超级计算机。当前企业面临情景主要是海量数据,以及由海量数据引发的大数据计算,HP 只能提供高的计算能力,并没有拓宽计算机的存储能力,所以 HP 集群再企业中应用很少(我是这么理解的)。企业对大数据的计算是通过分布式系统进行的。

2.1 LB 集群

LB 有多种实现,包括软件实现和硬件实现:

  • 软件实现有:
    • lvs, haproxy(mode tcp) (传输层)
    • haproxy, nginx (应用层)
    • ats(apache traffic server)
  • 硬件实现有:
    • F5 BIG-IP
    • Citrix Netscaler
    • A10 A10
    • Array
    • Redware

不同实现工作不同的协议层次上,按照工作的协议层次 LB集群可以划分为

  1. 传输层: 通用,包括lvs, nginx(stream), haproxy(mode tcp)
  2. 应用层: 专用,只能应用于特定协议,包括
    • http: nginx(http), httd, haproxy(mode http)
    • fastcgi: nginx, httpd
    • mysql: ProxySQL

2.2 HA 集群

HA:高可用集群,常见实现包括

  • heartbeat
  • corosync + pacemaker
  • RHCS: cman + rgmanager
  • cman + pacemaker
  • keepalived

HA 集群主要是提供系统稳定性,衡量系统稳定性有一个评价标准:

A=MTBF/(MTBF + MTTR)

  1. MTBF: 系统可用时间
  2. MTTR: 平均修复时间

这个计算公式就是我们通常所说的 3个9(99.9%),4个9(99.99%).

2.3 分布式系统

分布式系统包括分布式存储和分布式计算。对于分布式存储依据存储的是海量小文件还是单个大文件,有不同的实现方式。在后面的高级部分,我们会有专门章节来详细讲解。