我需要重新配置生产环境,以便为当前在 Linux 操作系统上的 Apache HTTPD 服务器上运行的用 Perl 编写的数据库驱动的 Web 应用程序提供热故障转移。
该应用并非设计为在集群中运行。因此,如果该应用的两个实例连接到同一个数据库并通过 NLB 向用户公开,则会导致灾难(数据库逻辑损坏)。
我想为安装在第三台机器上的 Apache mod_proxy NLB 下的两个应用程序实例配置不同的数据库凭据。通常,实例 2 将关闭,实例 1 将处理所有负载。当实例 1 出现问题时,我需要一个脚本来向实例 1 发送关闭命令,连接到数据库并禁用实例 1 的数据库凭据,重新启动数据库服务器并最终启动实例 2。如果在这一连串事件中出现任何问题,我很乐意让应用程序对用户保持不可用状态。
问题是我不知道配置这种热故障转移方案的简单方法。我很乐意将 shell 脚本粘贴到 mod_proxy 上,但不知道这是否可行。
是否可以在不配置额外的监控系统来检测问题并触发所需操作的情况下做到这一点?
答案1
为什么要重新设计轮子?有很多非常好的故障转移解决方案,并且具有经过验证的稳定性记录。例如,使用 Pacemaker 控制服务的启动/停止,使用 Heartbeat 检测服务器的健康状况。
如果您只想防止某个 Apache 前端服务器发生故障,那么您可以使用诸如 haproxy 之类的负载平衡器。Haproxy 可以配置为仅使用一台服务器作为主服务器,然后回退到单个 Web 服务器。如下所示:
listen externalwww 10.0.1.186:80
bind 10.0.1.186:443
mode tcp
option persist
option httpchk
default-server inter 5000
server external 33.44.55.66 check port 80 inter 15000 rise 10
server internal 10.0.1.49 check port 80 backup