独立数据中心的冗余 Linux 服务器

独立数据中心的冗余 Linux 服务器

我在该国每个站点的独立数据中心都有 2 台 CentOS Linux 服务器。这些 Linux 机器在 Apache 上运行一个小型网站,后端是 MySQL。目前它们之间没有 VPN 连接,它们之间唯一的通信方式是通过公共 IP 空间。

我的问题是,如果其中一个服务器发生故障,另一个服务器将接管(主/从关系),那么最好的方法是什么使它们冗余?我希望能够使用我目前拥有的两台服务器来实现这一点,而无需添加第三台服务器。我猜我需要在两者之间创建一个 VPN,然后使用类似 DRDB for MySQL 的东西。

你会推荐什么?

答案1

MySQL 具有内置的复制功能 - 无需 DRBD。请参阅这里

此复制通过常规 MySQL 协议在 TCP 端口 3306 上进行。本机协议支持 TLS 加密,但考虑到以下因素,使用 VPN 可能也不错:最近的漏洞。 由你决定!

从那里开始,您只需要让使用 MySQL 的应用程序以某种方式了解这两个服务器,或者根据您的应用程序制定其他类型的故障转移机制 - 听起来您在每个位置都有一个 Web 应用程序的本地实例,因此只需将每个实例指向其本地 MySQL 实例就可以了。

但要小心 - 如果您在两个方向上进行复制,您可能不希望同时写入两个 MySQL 服务器;不同的服务器可能会发生冲突的更改。

答案2

DRDB 实际上只能用作故障转移解决方案。正如 Shane 所说,MySQL 复制是更明智的方法。虽然您可以将其实现为主/从,但当您检测到中断时,您会遇到提升从属的复杂性。更好的解决方案是使用主-主复制。

但这种方法的有效性是有限制的——复制写入由单个线程实现——因此“从属”必须比主服务器更努力地应用它们。不可避免地会有延迟——尽管通常延迟很小,不会成为问题。

虽然 mysql 支持 SSL 加密,但它并没有提供大量用于调整访问控制的功能。设置 stud 或 stunnel 以将特定端口包装在 SSL 中很简单。并且复制连接保持打开状态,因此带宽开销非常低。或者甚至只是使用 iptables 将对 MySQL 端口的访问限制为远程 IP 地址。

但您仍然需要解决检测故障和隔离故障节点的问题。假设您正在 HTTP 服务器之间进行循环平衡 - 在这种情况下,客户端将倾向于在会话期间停留在同一台服务器上。Web 服务器将从本地 DBMS 实例获得最佳性能 - 因此只有在检测到本地系统中断时才应尝试访问远程系统。不要担心尝试自动执行恢复 - 只要您可以编写脚本即可。

请仔细阅读有关 MySQL 复制的资料 - 如果您做好了基础工作,那么冲突的写入应该非常非常罕见。

答案3

DRBD 的主要缺点是通信不加密。因此,请使用 mySQL-replication。

在您的设置中,我不会使用任何自动聚类,因为我看不到避免裂脑情况的安全方法。

但你可以手动触发一个脚本

  • 将辅助 MySQL 提升为主
  • 输入用于联系服务的逻辑 IP
  • 在该 IP 上启动你的网络服务器

另一方面,如果它重新上线,您必须阻止启动 - 而且您需要一个后备策略。

相关内容