我需要在两台服务器上实现Linux-HAconfiguration。 我决定在两台主机上使用DRBD进行块级复制,主要是为了进行MySQL数据复制。
据我所知,DRBDconfiguration总是有一个主服务器,其他的是奴隶(可以有自己的奴隶)。 复制只能从主站传递到从站,而不是相反。
那么会发生什么,如果我有MySQL进程同时在两台服务器上执行写操作,其中一台是主设备,另一台是从设备?
从机可以执行写操作,但是没有数据写入?
假如这个configuration和Heartbeat配合使用,那么Heartbeats的工作就是确保MySQL只在主服务器上运行,但是现在假设Heartbeat由于某种原因失败了。
据我所知,DRBD执行分区级复制。 从站不挂载分区,因此无法写入分区。 当主设备出现问题时,从设备将挂载分区并开始工作。
所以你不能让两台服务器都写同一个数据。
通常使用的configuration,以及我过去使用过的configuration,是有两个节点,它们之间有一些资源。 这些资源是DRBD存储块设备,MySQL守护程序和IP地址。
资源只能在主节点上“启动”。 Heartbeat负责select哪个节点是主节点,并以正确的顺序启动资源 – 告诉DRBD成为主节点,安装BD,启动MySQL并启动IP。 它们按顺序发生,以确保数据的一致性。 您可以通过降级主服务器或提升备用服务器来手动select主节点与辅助节点之间的故障转移。
虽然主要是次要的行动,次要的行动是复制DRBD数据和参加心跳通信说,它是活着的。 在作为辅助的时候,MySQL永远不会运行,您无法使用存储块设备。 资源一次只能在一台机器上使用。
这种设置不同于MySQL的传统“懒惰复制”,在这种情况下,辅助机器运行MySQL并存储自己的数据副本。 两者各有利弊。 根据我的经验,如果HB安装正确并且具有良好的备份策略,那么LinuxHA方法可以提供更好的高可用性。
MySQL HA的更好解决scheme是使用循环MySQL复制。 这篇文章进一步解释,但基本的前提是使每个服务器的另一个奴隶。 您需要在前面设置某种负载平衡器。
有一件事要担心的是,数据库连接可能是长期的,你将需要configuration应用程序重新连接,如果他们死了。
“不能发生”。 DRBD将确保只有一个服务器同时激活块设备。 如果你得到一个“裂脑”,两个DRBD主机认为另一个死了(所以它们都是活动的),它们将不会重新连接,你需要手工解决不一致(通常丢弃一个主或另一个)。
如果您需要“主要”用于MySQL复制的DRBD,也许使用MySQL中内置的复制function更容易?