我们计划使用 drbd 同步两台服务器(不同的硬件),以便在主服务器死机时获得高可用性。这些服务器物理上托管在同一个数据中心(德国的 Hetzner),并且它们运行的是 openSUSE。
服务器的主要目的是托管按需打印的内容并呈现或生成 pdf。
我们想要同步“/var/www”文件夹以及当前存储在默认文件夹中的数据库。
我的计划是将这些文件夹移动到 drbd 同步分区,然后通过“ln”将它们链接回原来的位置。或者反过来做更好?或者通过复制同步数据库?
主要问题是,我们在每个服务器上只有 100mbit 上行链路,我不知道这是否足以在 drbd 模式 C 中同步服务器。
也许你们中的一些人有任何建议或经验想与我分享。
附言:我还没有服务器,我只是在计划一切是否能正常运行。
编辑: 我现在正在运行 drbd 同步进程,同步挂载到主节点上的 /srv/drbd 的 /dev/drbd0。我已将包含我的网站的文件夹 /srv/drbd/vhosts 链接(ln)回 /srv/www/,但浏览器中总是出现错误 404。这只是 chown 问题吗?
目前,我正在尝试通过 crm 配置 corosync/pacemaker,但无法让所有原语运行。这是我的配置,也许你们中的某个人可以弄清楚为什么它无法启动。
============
Last updated: Mon Aug 5 16:37:54 2013
Last change: Mon Aug 5 16:37:32 2013 by root via cibadmin on alice
Stack: openais
Current DC: alice - partition with quorum
Version: 1.1.7-61a079313275f3e9d0e85671f62c721d32ce3563
2 Nodes configured, 2 expected votes
5 Resources configured.
============
Online: [ bob alice ]
Master/Slave Set: DRBD_MS [DRBD]
Masters: [ alice ]
Slaves: [ bob ]
Resource Group: APACHE_IP
APACHE (ocf::heartbeat:apache): Started bob
failover-ip (ocf::heartbeat:IPaddr2): Stopped
Failed actions:
failover-ip_start_0 (node=alice, call=57, rc=1, status=complete): unknown error
DRBD_FS_monitor_0 (node=alice, call=60, rc=5, status=complete): not installed
APACHE_monitor_15000 (node=bob, call=49, rc=7, status=complete): not running
failover-ip_start_0 (node=bob, call=57, rc=1, status=complete): unknown error
DRBD_FS_monitor_0 (node=bob, call=59, rc=5, status=complete): not installed
我的 cib.xml 如下所示:
node alice
node bob
primitive APACHE ocf:heartbeat:apache \
params configfile="/etc/apache2/httpd.conf" \
op monitor interval="15s"
primitive DRBD ocf:linbit:drbd \
params drbd_resource="r0" \
op monitor interval="120s"
primitive DRBD_FS ocf:heartbeat:Filesystem \
params device="/dev/drbd0" directory="/srv/drbd" fstype="ext4" \
meta target-role="Started"
primitive failover-ip ocf:heartbeat:IPaddr2 \
params ip="123.456.789.101" nic="net0:0" \
op monitor interval="10s" \
meta is-managed="true" target-role="Started"
group APACHE_IP APACHE failover-ip \
meta target-role="Started"
ms DRBD_MS DRBD \
meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true" target-role="Started"
colocation FS_ON_DRBD inf: DRBD_FS DRBD_MS:Master
order FS_AFTER_DRBD inf: DRBD_MS:promote DRBD_FS:start
property $id="cib-bootstrap-options" \
dc-version="1.1.7-61a079313275f3e9d0e85671f62c721d32ce3563" \
cluster-infrastructure="openais" \
expected-quorum-votes="2" \
stonith-enabled="false" \
no-quorum-policy="ignore" \
last-lrm-refresh="1375713403"
rsc_defaults $id="rsc-options" \
resource-stickiness="100"
答案1
唯一可以在 MySQL 中使用 DRBD 的方法是,如果您的所有数据都是 INNODB !!!为什么?
InnoDB架构
InnoDB 旨在处理崩溃恢复,并在系统表空间的双写缓冲区中缓存所有 16KB 块更改,前提是您配置innodb_flush_method为O_DIRECT
。如果将其安装在 DRBD 上,则任何自动故障转移都不会丢失记录在双写缓冲区中的数据。当您故障转移到 DRBD 辅助服务器并将其提升为新的 DRBD 主服务器时,mysql 将需要崩溃恢复时间。
另一方面,MyISAM 表无法处理由于崩溃而导致的自动故障转移。为什么?MyISAM 表被标记为崩溃只是因为其标头中的文件句柄计数。MyISAM 表应该为零才能正常。服务器或 mysql 崩溃可能会导致任何打开的 MyISAM 表需要修复表操作。虽然可以在 my.cnf 中配置自动表修复,但此类修复后可能会丢失数据(并可能出现数据不一致)。这是非事务性存储引擎的本质。
我为我的雇主提供 MySQL/DRBD 设置支持,并且我始终建议使用全 InnoDB 数据库进行 DRBD 设置。
至于 DRBD 对之间的连接,您不应让 DRBD 流量通过交换机或防火墙。在每台服务器上使用专用 NIC(使用 192.168.1.x 网段)和交叉电缆以缩短 DRBD 通信。警告:磨损的电缆可能会造成数据包丢失。
警告
如果您混合使用 InnoDB 表和任何只读 MyISAM 表,那么在 DRBD 设置中这是可以接受的。在这种情况下,如果您能接受增加的 mysql 启动时间,那么 MyISAM 表上的表修复就不会是太大的问题。
答案2
将 /var/www 与 DRBD 同步应该没问题。这些文件可能不会发生太大变化。
但是,我不建议使用 DRBD 来同步数据库文件。我建议使用 MySQL 的内置复制功能。