Nginx的高可用方案
目录
当你了解会搭建nginx负载均衡后,需要考虑nginx这台服务器的安全性啦,如果只有一台,这台nginx一出问题,web就会无法访问的情况,所以为了应对这种情况,就需要两台nginx做主备服务器。
架构图 #
两台主备机器通过keepalived,虚拟一个IP,也就是VIP,不是贵宾的意思,是Virtual IP的意思。VIP开始为主机器所有,备份机为空闲状态,同时在两台keepalived之间通信相当于有一条心跳线,通过心跳线互相通信,只要主机器监控(通过脚本)到nginx服务停止,则主机器自己停止keepalived,将VIP交给备份机器处理web请求,直至主机器再次恢复正常,将VIP返还给主机器。
两种模式 #
主备模式:
主主模式:
Keepalived #
Keepalived一个基于VRRP 协议来实现的 LVS 服务高可用方案,可以利用其来解决单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP
,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候, 备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。
Keepalived 原理与实战 - 知乎 (zhihu.com)
为什么配置虚拟IP #
可以试想一下,如果没有虚拟IP的话,一旦某台服务器挂掉了,那么nginx的IP地址必然会发生改变,如果使用虚拟IP,备用服务器可以接替主服务器,继续为虚拟IP提供服务。
单一服务的情况下,把另一台 Nginx 服务器的 IP 发给用户,让用户访问这个 IP。
- 只有内部系统用户才可能接受这种做法。面向外部用户的时候,外部用户不会接受。
使用虚 IP(Virtual IP Address,以下称为 VIPA)。域名固定解析到这个 IP,当 VIPA 所在服务器故障时,让 VIPA 自动漂移到另一台服务器。
- 不需要修改 DNS 解析,秒级别的生效延迟。
- 用户无感知。
带来了什么问题?
- 多了一个故障点,即使得 VIPA 自动漂移的那个程序,如 Keepalived。
- 需要额外申请一个 IP 作为 VIPA 。
- 涉及存储的时候,由于切换速度很快,可能会导致数据不一致。