目前,我运营着一个(相当低容量的)网络托管服务,使用运行 cPanel/WHM 的 Centos 5.3 服务器。
我希望实现一定程度的冗余,以便在服务器发生故障时,我能够在不到 60 分钟的时间内以最少的努力恢复服务。
我还想设置一个 cPanel 将与之复制的辅助 DNS。我目前的想法是一举两得:
我当前的服务器名为“www1”
- 购买一台带有镜像磁盘的相同服务器(HP DL360 G4)。将此服务器命名为“www2”
- 安装 Centos 5.4(或者我应该安装 5.3 以与 www1 相同)
- 在此服务器上安装 cPanel/WHM 并对其进行完全许可
- 设置 www1 和 www2 cPanel 以相互复制 DNS
- 设置一个夜间复制脚本,执行以下操作:a)将 /home 目录从 www1 rsync 到 www2 b)转储 www1 上的所有 MySQL 数据库,并将它们复制到 www2 上的临时文件夹(仅具有 root 访问权限)c)触发在 www2 上运行的脚本,以恢复 MySQL 转储
因此,每天晚上所有网站和 MySQL 数据库的完整工作副本都会被复制到 www2。
我对 MySQL 复制的了解不够,无法理解它是否能安全透明地与 cPanel 配合使用。因此,由于不知道更好的方法,我建议使用 mysql 转储/复制/恢复!
如果 www1 突然崩溃,我设想我可以登录 www2,将 IP 地址更改为 www1 的 IP 地址,然后网站就可以再次使用了。
这个想法的优点是它相当简单和“低技术”,因此不需要专家系统管理员来设置和监控(我不是专家系统管理员)
这个想法的缺点是,最多一整天的数据更改将会丢失。我认为这对于我目前接待的客户来说是可以接受的。另一个缺点是必须支付完整的 cPanel 许可证费用,但我可以接受这个费用,所以现在我想讨论的只是技术方面的考虑。
这是一个合理的方案吗?
答案1
这种设置对您有用 - 我以前在 cPanel 主机上使用过相同的设置。MySql 备份是一个更大的话题,但您谈论的内容可能可以正常工作。您遗漏了许多重要的小部分,除非您已经这样做过几次,否则您可能不会想到,其中大部分可以在您需要故障转移时直接复制到位:
/etc/中的信息:
- 密码信息:除非您想更改所有用户的密码,否则您将需要关键配置文件,如 /etc/passwd、/etc/shadow 等。对您来说,好处是运行 cpanel 服务器时,您将需要 /etc/proftp/,所有 ftp 密码都存储在其中。(是的,cpanel 现在使用 pure-ftpd - 它只是将所有密码存储在 /etc/proftpd/ 中,原因您最好不要现在就想得头晕目眩)。
- 您的客户的电子邮件转发器 - /etc/valiases/
- /etc/ssl <-ssl 证书 - 客户不喜欢这些证书消失。
- /etc/ 中的其他杂项文件域和 /etc/.ips 从我的脑海里浮现出来。
关键 cPanel 配置文件/模板
- cpanel 配置和服务配置模板数据来自 /var/cpanel/。至少您需要备份 /var/cpanel/,在故障转移情况下将其移至适当位置,然后运行 /scripts/upcp --force。(这将解决许多问题)
- cPanel 使用模板系统来构建配置文件。例如,所有 apache 模板数据都存储在 /var/cpanel/userdata/ 中 - /scripts/rebuildhttpdconf 会使用该数据来实际创建您的 httpd.conf 文件。
- /var/cpanel/easy/apache/profile/ - 这些是 easy apache 用来构建 apache 配置的配置文件,我已经准备好在新服务器上使用它们,而不是尝试即时重建。
DNS:
- 如果你在同一台机器上运行 DNS,则需要备份 /var/named/
- 我假设您要设置 www2 来托管 ns2.yourdomain?如果您想要真正廉价的冗余,您可能需要在某处设置两个小型 VPS 帐户,如果要将其从同一台机器上移走,只需使用 cPanel 的 DNS 群集:(http://www.cpanel.net/products/cpanelwhm/related-server-software.html)。
答案2
当您的两台服务器都在同一个数据中心,并且您的 IP 路由到 vLAN 时,您的这个方案会起作用,但是将两台服务器放在同一个 DC 内几乎违背了冗余的目的,因为这样做只能防止主服务器发生大规模硬件故障,但对于 DC 灾难却无能为力。
通过使用连接到不同 PDU 的双冗余电源以及服务器上的 RAID-10 设置,您可能会获得相同的效果,并且设置第二个电源的麻烦会减少,但是如果您的数据中心出现严重问题,这仍然会让您处于危险之中。