我在该国每个站点的独立数据中心都有 2 台 CentOS Linux 服务器。这些 Linux 机器在 Apache 上运行一个小型网站,后端是 MySQL。目前它们之间没有 VPN 连接,它们之间唯一的通信方式是通过公共 IP 空间。
我的问题是,如果其中一个服务器发生故障,另一个服务器将接管(主/从关系),那么最好的方法是什么使它们冗余?我希望能够使用我目前拥有的两台服务器来实现这一点,而无需添加第三台服务器。我猜我需要在两者之间创建一个 VPN,然后使用类似 DRDB for MySQL 的东西。
你会推荐什么?
答案1
答案2
DRDB 实际上只能用作故障转移解决方案。正如 Shane 所说,MySQL 复制是更明智的方法。虽然您可以将其实现为主/从,但当您检测到中断时,您会遇到提升从属的复杂性。更好的解决方案是使用主-主复制。
但这种方法的有效性是有限制的——复制写入由单个线程实现——因此“从属”必须比主服务器更努力地应用它们。不可避免地会有延迟——尽管通常延迟很小,不会成为问题。
虽然 mysql 支持 SSL 加密,但它并没有提供大量用于调整访问控制的功能。设置 stud 或 stunnel 以将特定端口包装在 SSL 中很简单。并且复制连接保持打开状态,因此带宽开销非常低。或者甚至只是使用 iptables 将对 MySQL 端口的访问限制为远程 IP 地址。
但您仍然需要解决检测故障和隔离故障节点的问题。假设您正在 HTTP 服务器之间进行循环平衡 - 在这种情况下,客户端将倾向于在会话期间停留在同一台服务器上。Web 服务器将从本地 DBMS 实例获得最佳性能 - 因此只有在检测到本地系统中断时才应尝试访问远程系统。不要担心尝试自动执行恢复 - 只要您可以编写脚本即可。
请仔细阅读有关 MySQL 复制的资料 - 如果您做好了基础工作,那么冲突的写入应该非常非常罕见。
答案3
DRBD 的主要缺点是通信不加密。因此,请使用 mySQL-replication。
在您的设置中,我不会使用任何自动聚类,因为我看不到避免裂脑情况的安全方法。
但你可以手动触发一个脚本
- 将辅助 MySQL 提升为主
- 输入用于联系服务的逻辑 IP
- 在该 IP 上启动你的网络服务器
另一方面,如果它重新上线,您必须阻止启动 - 而且您需要一个后备策略。