24.1 架构拓展及集群介绍
架构拓展及集群介绍
前面我们已经介绍了,如何使用 nginx 或 httpd 部署一台 web 服务器,但是受限于单太服务器的资源,一台服务器能提供的响应能力有限。因此从本章开始,我们将从最简单 LAMP/LNMP 出发,不断向其添加组件来扩展我们的 web 服务框架,以提供更快,更稳定的服务。本章我们开始讲解第一个组件,如何使用 LVS 实现一个负载均衡集群,内容包括:
- web 架构拓展和集群简介
- LVS 负载均衡原理
- LVS 的 NAT 模型
- LVS 的 DR 模型
负载均衡集群除了 LVS 之外还有多种其他实现包括 nginx,haproxy,我们会在后面详细介绍。
1. 架构拓展
单台计算受限于本地的存储资源,计算资源等各种资源的额限制,单台服务的响应能力有限。比如我们的单台 nginx 服务最多能并发响应 2 万个用户。当并发请求数超过此限制时,我们有两种优化方式:
- 换一台计算能力更强的计算机,这种方式我们称之为向上扩展(scale up)
- 将并发请求按照特定的调度算法分散到多台计算上,这种方式称为向外扩展(scale out),多台计算的组合就称为集群(cluster)
集群主要分为三类,此处的用于分散用户请求的集群称为负载均衡集群(Loader Balance Cluster)。分散用户请求有一个前提,每个用户请求都是独立可分离的。然后这可能会存在一些问题:
- 难以完全追踪用户状态,因为用户可能会被调度到不同的机器上
- 某用户的写操作会被单台服务器所承载,当对新上传资源的请求被调度到其他服务器,将无法获取此资源
对于第一个问题,web 服务通常使用 cookie 和 session 追踪用户,我们需要想办法让集群内的所有服务器能共享 session 信息,这样就能追踪用户状态。session 共享有三种方式:
- session 绑定,将来自同一用户的请求始终发送同一服务器,这种方式并没有共享 session,当服务器挂机之后 session 可能会丢失,因此需要 session 持久化。用户识别有两种方式,一是 IP,而是用户 cookie,因为 SNAT的存在 cookie 更准确
- session 复制集群,每个服务器都拥有集群上所有服务器的 session 会话,因为 session 会在集群内传输,会极大的占用带宽与内存资源。
- session 服务器,将 session 保存在共享的内存服务器中,每台服务器从session 服务器中获取 session。但此时 session 服务器是单点故障所在(Single Point of Failure, SPoF)
对于第二个问题,我们可以将用户写操作放到共享存储上。通常用户的数据分为三类,我们可以将其分别存放在不同存储介质中
- 结构化数据,通常存放在关系型数据库中
- 半结构化数据,通常存放在 NoSql 中,比如 mongo
- 非结构化数据,比如图片,我们可以存在分布式文件系统之上
用户的请求需要分散到多台服务器上,负责分散用户请求的服务器称为负载均衡器或分发器或调度器。因此我们的 web 服务框架将如下所示。调度器在分发用户请求时,有不同的调度算法,会依据不同的标准分发请求。
此时负载均衡服务器将是最大的单点故障所在,我们需要对其做冗余。我们需要提供另一台备用服务器,当负载均衡服务器迭机之后,能够取代其继续提供服务。这种提供冗余能力的服务器组合我们称为高可用集群(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集群可以划分为
- 传输层: 通用,包括lvs, nginx(stream), haproxy(mode tcp)
- 应用层: 专用,只能应用于特定协议,包括
- 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)
- MTBF: 系统可用时间
- MTTR: 平均修复时间
这个计算公式就是我们通常所说的 3个9(99.9%),4个9(99.99%).
2.3 分布式系统
分布式系统包括分布式存储和分布式计算。对于分布式存储依据存储的是海量小文件还是单个大文件,有不同的实现方式。在后面的高级部分,我们会有专门章节来详细讲解。