高可用web服务架构及其扩展
高可用web服务架构及其扩展
在业务初期,可以将包括nginx/web服务/数据库服务都配置在一台主机上,随着业务的不断发展,会对web服务提出高可用和可扩展的需求,本文将对高可用和可拓展做简要讨论。
1 web服务高可用
我们将部署在一台主机上的nginx/web服务/数据库服务进行分层部署:
- nginx应用层
- web服务层
- 数据库层
在每一层上,我们分别做高可用:
- 在nginx层上, 我们使用keepalived做nginx的高可用,可参考文档《基于keepalived的nginx双机高可用系统》进行配置
- 在web服务器层上,我们利用nginx的负载均衡,利用轮训、主备等均衡策略,做web服务高可用,可参考文档《nginx负载均衡介绍》、《nginx后端节点健康状态检查》
- 在数据库层上,我们也使用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记录。
特性:
- DNS记录配置简单,仅需要横向增加nginx服务器,不需要额外投入硬件,门槛很低
- DNS记录缓存,导致增加和删除相关记录都不会立刻生效
- 增加运维调试复杂,多条记录需要调试时,运维人员也不知道到底映射到了哪台
- 无法根据服务器的实时健康情况调整均衡策略(当映射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做后端节点监控检查,可阅读参考资料。
参考资料
- 六大Web负载均衡原理与实现, https://blog.csdn.net/asqi1/article/details/41478111
- 使用LVS实现负载均衡原理及安装配置详解, https://www.cnblogs.com/activecode/p/9435843.html