我管理一些服务器,为了回答这个问题,我们来考虑以下三个服务器:
- nginx 服务器:它仅运行 nginx 并提供静态文件、磁盘缓存的响应或将请求传递给 API 服务器
- API 服务器:返回数据并连接数据库服务器
- 数据库服务器:它托管数据库、Redis 和一些其他内容
这种设置使我们能够在零停机时间内进行维护。升级也是如此。如果我们想向数据库服务器添加更多内存,我们只需启动一个新实例,物理克隆数据库,然后销毁旧服务器。
API 服务器可以做大致相同的事情。但是,迟早我们需要升级 nginx 服务器。如果升级需要关闭,我们如何在不停机的情况下完成升级?nginx 实例必须有一个固定 IP 才能从外部世界访问。
答案1
一种可能性是安装第二个 nginx 服务器并设置保持活跃对它们两者。
每台服务器都有自己独特的 IP 地址。此外,keepalived 还允许您定义一个由两台服务器共享的浮动 IP 地址。该浮动地址在任何时候都只能在一台服务器上处于活动状态。通过关闭活动服务器上的 keepalived,浮动 IP 地址会自动在另一台服务器上变为活动状态。如果服务器关闭或因任何原因崩溃,也会发生同样的情况。
这使得您可以在不中断服务的情况下对网络服务器进行维护。
只需关注 keepalived 的 VRRP 部分,不要让自己分心于负载平衡和其他花哨的功能,因为此时您可能不需要它们。也许您还需要一个通知脚本,如果添加或删除了浮动 IP 地址,该脚本将被调用,以便您可以重新加载 nginx 以确保它监听新的 IP 地址。