高可用web服务架构及其扩展

高可用web服务架构及其扩展

在业务初期,可以将包括nginx/web服务/数据库服务都配置在一台主机上,随着业务的不断发展,会对web服务提出高可用和可扩展的需求,本文将对高可用和可拓展做简要讨论。

1 web服务高可用

我们将部署在一台主机上的nginx/web服务/数据库服务进行分层部署:

  1. nginx应用层
  2. web服务层
  3. 数据库层

在每一层上,我们分别做高可用:

  1. 在nginx层上, 我们使用keepalived做nginx的高可用,可参考文档《基于keepalived的nginx双机高可用系统》进行配置
  2. 在web服务器层上,我们利用nginx的负载均衡,利用轮训、主备等均衡策略,做web服务高可用,可参考文档《nginx负载均衡介绍》、《nginx后端节点健康状态检查》
  3. 在数据库层上,我们也使用keepalived做数据库的高可用,以mysql为例,可参考文档《基于keepalived的mysql双主高可用系统》

2 分层web服务扩展

2.1 web服务器层扩展

我们使用了Nginx做负载均衡,如果横线扩展,直接增加服务器,修改nginx配置启用均衡即可。

2.2 数据库层扩展

数据库层上,可以使用MYCAT等工具做读写分类和分库分表的方案。

2.3 nginx扩展

web服务和数据库扩展都比较容易理解,如果前端的nginx服务器不够用了,就需要扩展或者替换nginx了。

2.3.1 DNS负载均衡

DNS提供域名解析服务,一般情况下,一个域名映射一个IP地址即可。

同时,DNS是支持多IP映射的。配置完成后,DNS服务器将用户的请求分散到多个nginx服务器上。

我们可以使用 dig 命令查看”baidu”的DNS配置:

dig baidu.com

; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37970
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;baidu.com.                     IN      A

;; ANSWER SECTION:
baidu.com.              352     IN      A       39.156.69.79
baidu.com.              352     IN      A       220.181.38.148

;; Query time: 2 msec
;; SERVER: 61.177.7.1#53(61.177.7.1)
;; WHEN: 二 7月 30 15:04:55 CST 2019
;; MSG SIZE  rcvd: 59

可以看到,baidu域名配置了两条DNS记录。

特性:

  1. DNS记录配置简单,仅需要横向增加nginx服务器,不需要额外投入硬件,门槛很低
  2. DNS记录缓存,导致增加和删除相关记录都不会立刻生效
  3. 增加运维调试复杂,多条记录需要调试时,运维人员也不知道到底映射到了哪台
  4. 无法根据服务器的实时健康情况调整均衡策略(当映射IP无法访问时,也会解析到该IP,导致无法访问),后端的nginx服务器使用keepalived做高可用也还好。

2.3.2 IP负载均衡(LVS-NAT)

nginx服务器工作在HTTP应用层,本身有比较大的开销。我们可以使用LVS-NAT来进行替代nginx,或者在nginx负载均衡前面再加上LVS-NAT服务器。

LVS-NAT服务器工作在传输层,它可以修改发送来的IP数据包,将数据包的目标地址修改为实际服务器地址。

从2.4版本开始,linux内核均支持LVS,要使用LVS,需要安装LVS管理工具 ipvsadm

yum install ipvsadm

具体的原理及配置,请阅读参考资料。

2.3.3 直接路由(LVS-DR)

NAT是工作在网络分层模型的传输层(第四层),而直接路由是工作在数据链路层(第二层)。它通过修改数据包的目标MAC地址(没有修改目标IP),将数据包转发到实际服务器上,不同的是,实际服务器的响应数据包将直接发送给客户端,而不经过调度器。

具体的原理及配置,请阅读参考资料。

采用LVS能够做到负载均衡,但无法做后端节点健康检查,也就是当后端节点出问题时,也会进行转发。我们可以结合keepalived做后端节点监控检查,可阅读参考资料。

参考资料

  1. 六大Web负载均衡原理与实现, https://blog.csdn.net/asqi1/article/details/41478111
  2. 使用LVS实现负载均衡原理及安装配置详解, https://www.cnblogs.com/activecode/p/9435843.html
Table of Contents