各位朋友,今天咱们来聊聊生产环境中不得不考虑的 Nginx 高可用问题。作为系统网关,Nginx 一直扮演着重要角色,比如流量入口、分发拦截、反向代理等等。但很多时候,大家可能会忽略 Nginx 的高可用,因为觉得它比较能扛,理论上能支持 5 万的并发连接,一般系统根本达不到这个量。然而,就像上次遇到的短信验证码攻击一样,黑天鹅事件难以预料,所以还是建议对像 Nginx 这样关键的组件做加固,考虑其高可用性。
Nginx 高可用的实现方式其实比较简单。传统方案是采用 Nginx 加 Keepalive,主服挂掉时,Keepalive 会停掉主服,把备用的 Nginx 顶上来作为主服对外提供服务。这种主从模式目前用得较多,Nginx 高可用基本都这么做。但不好的地方在于,没故障时备用的会一直闲置。所以现在也有基于 Keepalive 加 Nginx 做主主模式,两台互为主备,这种方式也可行,采用的也不少。
再来说说 Nginx 集群,如果单台 Nginx 达到瓶颈,想让更多用户进来就得进行网关扩容。对于 Nginx 的主从,可以扩展到 4 到 5 台。但这时就有问题了,谁来做这些 Nginx 的路由负载和请求分发呢?毕竟扩容的 Nginx 是相对独立的,每一个都有独立的 IP。这时可以考虑并发更高的 LVS,它是一个虚拟的负载均衡系统,工作在传输层,转化效率高,理论上能支持几十万的并发请求,用来代理 Nginx 集群是可行的。
如果是云主机,可以用原厂商的负载均衡,像福报厂的 SLB,能支持 100 万甚至上亿的转化请求,也是不错的选择。但要注意,云服务器貌似不支持虚拟 IP,如果想用 Keepalive 在云服务器上实现高可用且使用虚拟 IP,这个方案不大现实,大家选择方案时要特别注意。再往上,如果有条件可以上硬件负载,常见的如 F5,但价格不便宜,有条件可以考虑,没条件了解一下就行。