我有两个CentOS Linux服务器在国家的每个站点上分开的数据中心。 这些Linux机器在Apache后端运行一个小型的网站。 目前他们之间没有VPN连接,他们可以通信的唯一方式是通过公共IP空间。
我的问题是,如果其中一个失败,最好的办法是使他们成为多余的(主/从关系)? 我希望能够用我目前拥有的两台服务器来做到这一点,而无需添加第三台服务器。 我猜我需要在两者之间创build一个VPN,然后使用类似DRDB for MySQL的东西。
你会推荐什么?
MySQL具有内置的复制function – 不需要DRBD。 看到这里 。
这种复制通过普通的MySQL协议在TCP端口3306上进行。本地协议支持TLSencryption,但是鉴于最近的漏洞 ,VPN可能不是一个坏主意。 由你决定!
从那里开始,您只需要使用MySQL的应用程序来以某种方式了解这两个服务器,或者根据您的应用程序制定一些其他types的故障转移机制 – 听起来像您的Web应用程序的本地实例每个位置,所以只是指向每个本地MySQL实例可能会伎俩。
但要小心 – 如果你正在双向复制,你可能不希望两个MySQL服务器同时被写入; 可以对不同的服务器进行相互冲突的修改。
DRDB只能用作故障转移解决scheme。 正如Shane所说,MySQL复制是更为合理的方法。 虽然你可以将它作为主/从设备来实现,但是当你检测到中断时,你会遇到促进从设备的复杂情况。 更好的解决scheme是使用主 – 主复制。
但是这样做的有效性是有限制的 – 复制的写入是通过一个单独的线程来实现的,所以“奴隶”必须比主人员更努力地应用它们。 不可避免地会有一个延迟 – 尽pipe通常情况下这个小小的问题不会成为问题。
Althouh的MySQL支持SSLencryption,它没有提供大量的function来调整访问控制。 设置stud或stunnel来封装SSL中的特定端口是微不足道的。 复制连接保持开放,所以带宽开销非常低。 甚至只是使用iptables将访问MySQL端口限制到远程IP地址。
但是,您仍然必须解决检测故障和屏蔽故障节点的问题。 据推测,您正在跨HTTP服务器进行轮循平衡 – 在这种情况下,客户端将倾向于在会话期间保持在同一台服务器上。 Web服务器将从本地DBMS实例中获得最佳性能,因此只有在检测到本地系统中断时才尝试访问远程系统。 不要担心试图自动恢复 – 只要你可以编写脚本。
仔细阅读MySQL复制 – 如果你做了基础工作,那么冲突的写入应该是非常非常罕见的。
DRBD具有通信不会被encryption的主要缺点。 所以去mySQL复制。
在你的设置中,我不会使用任何自动聚类,因为我看不到任何安全的方法来避免裂脑情况。
但是你可以手动触发一个脚本
另一方面,如果它恢复在线状态,则必须防止启动,而且您需要一个回退策略。