xg-scale

diff drbd.tex @ 1:6f6e0f706b86

Added tag v0.1 for changeset 4730a0d07d88
author Igor Chubin <igor@chub.in>
date Tue Jul 01 16:28:00 2008 +0300 (2008-07-01)
parents
children
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/drbd.tex	Tue Jul 01 16:28:00 2008 +0300
     1.3 @@ -0,0 +1,413 @@
     1.4 +\section{Реплицируемое блочное устройство DRBD}
     1.5 +
     1.6 +
     1.7 +Здесь детально рассматривается процедура
     1.8 +подготовки двух систем для синхронизации одного
     1.9 +из своих дисковых разделов с помощью DRBD.
    1.10 +
    1.11 +Может применяться для организации отказоустойчивых систем
    1.12 +хранения данных и отказоустойчивых кластерных систем.
    1.13 +
    1.14 +\subsection{Что такое DRBD?}
    1.15 +\textbf{DRBD} (англ. \textit{Distributed Replicated Block Device}, распределённое реплицируемое блочное устройство) --- это блочное устройство, 
    1.16 +предназначенное для построения отказоустойчивых кластерных систем на операционной системе Linux. DRBD занимается полным отражением (mirroring) по сети всех операций с блочным устройством. Можно считать, что DRBD это сетевой RAID-1.
    1.17 +
    1.18 +DRBD берёт данные, записывает их на локальный диск и пересылает на другой хост.
    1.19 +На другом хосте они тоже записываются на диск.
    1.20 +
    1.21 +Помимо DRBD в кластере должно быть ещё два важных компонента:
    1.22 +\begin{enumerate}
    1.23 +\item  Служба кластера (Cluster membership service), (в качестве которого чаще всего выступает \textit{heartbeat};
    1.24 +\item  Приложение, работающее поверх распределённого блочного устройства.
    1.25 +\end{enumerate}
    1.26 +
    1.27 +Примеры приложений:
    1.28 +\begin{itemize}
    1.29 +\item  Файловая система c fsck;
    1.30 +\item  Журналируемая файловая система;
    1.31 +\item  СУБД;
    1.32 +\item  домен Xen.
    1.33 +\end{itemize}
    1.34 +
    1.35 +\subsection{Как работает DRBD?}
    1.36 +Каждое DRBD-устройство (а DRBD-устройств одновременно может быть много)
    1.37 +находится в одном из двух состояний:
    1.38 +\begin{itemize}
    1.39 +\item  primary — главном (первичном);
    1.40 +\item  secondary — резервном (вторичном).
    1.41 +\end{itemize}
    1.42 +На узле, на котором DRBD-устройство находится в основном состоянии,
    1.43 +операционная система или процессы могут работать
    1.44 +с DRBD-устройством (оно доступно через файл-устройства \texttt{/dev/drbdX}).
    1.45 +
    1.46 +Каждое обращение на запись к DRBD-устройству
    1.47 +отправляется локальном к нижележащему устройству
    1.48 +и на узел, на котором находится реплика устройства.
    1.49 +Резервное устройство, получившее запрос, выполняет запись.
    1.50 +
    1.51 +Чтение выполняется всегда только локально.
    1.52 +
    1.53 +\begin{center} \resizebox{10cm}{!}{\includegraphics{/var/lib/mediawiki/images/d/da/Drbd.png}}\\ \textit{}\end{center}
    1.54 +
    1.55 +\begin{verbatim}
    1.56 +
    1.57 +\end{verbatim}
    1.58 +Если основной узел падает, heartbeat  переключает запасной узел в
    1.59 +состояние ведущего и запускает приложения на нём
    1.60 +(если используется нежурналируемая файловая система,
    1.61 +кроме всего прочего ещё выполнится fsck).
    1.62 +
    1.63 +Когда сбойный узел поднимается, DRBD-устройство на нём находится в состоянии
    1.64 +второстепенного (secondary), и оно начинается синхронизироваться с основным устройством.
    1.65 +Конечно же, это происходит в фоне, без нарушения работы системы.
    1.66 +
    1.67 +Синхронизируются только те части устройства,
    1.68 +которые подверглись изменению.
    1.69 +DRBD старается выполнять ресинхронизацию максимально эффективным способом.
    1.70 +Начиная с DRBD-0.7 существует возможность
    1.71 +создания так называемых \textit{активных множеств} (active set)
    1.72 +определённого размера.
    1.73 +Что позволяет выполнять ресинхронизацию на 1—3 минуты, независимо от размера устройства (сегодня до 4TB) даже после падения активного узла.
    1.74 +
    1.75 +\subsubsection{Какое отношение DRBD имеет к HA-кластерам?}
    1.76 +Сегодня HA-кластеры (отказоуйстойчивые кластеры) используют в своей работе внешние хранилища, которые подключаюся сразу к нескольким узлам.
    1.77 +Обычно это делается с помощью шин SCSI или Fibre Channel (но не обязательно).
    1.78 +
    1.79 +DRBD позволяет делать похожие вещи, только оно не использует никакого специального оборудования, а работает поверх обычных IP-сетей.
    1.80 +
    1.81 +\subsubsection{DRBD и кластерные файловые системы}
    1.82 +Как уже говорилось, обычно
    1.83 +DRBD-устройство работает на одном из узлов в режиме главного (primary role),
    1.84 +а на других — в режиме второстепенного или резервного (secondary role).
    1.85 +Запись идёт на устройство, которое находится в режиме главного,
    1.86 +а на остальные просто выполняется репликация.
    1.87 +Такой режим применим для классических отказоустойчивых кластеров,
    1.88 +его следует использовать, если на DRBD-устройстве непосредственно
    1.89 +находятся традиционные, не кластерные файловые системы (ext3, XFS, JFS и т.д.).
    1.90 +
    1.91 +Начиная с DRBD-8.0.08 можно заставить работать оба узла в режиме primary.
    1.92 +Это даёт возможность монтировать кластерную ФС сразу на двух узлах
    1.93 +одновременно. Примеры таких кластерных файловых систем: \textit{GFS}, \textit{OCFS2}.
    1.94 +
    1.95 +Кроме того, эта возможность DRBD позволяет выполнять живую миграцию
    1.96 +доменов Xen, которые используют эти устройства.
    1.97 +В этом случае использование кластерных систем в домене Xen
    1.98 +не является обязательным, можно обойтись традиционными системами,
    1.99 +такими как \textit{ext3}, \textit{XFS}, \textit{JFS}.
   1.100 +
   1.101 +\subsection{DRBD: подготовка модуля ядра Linux}
   1.102 +Процедуры подготовки DRBD
   1.103 +для различных дистрибутивов Linux описаны здесь \htmladdnormallinkfoot{Howto Build and Install DRBD}{http://www.linux-ha.org/DRBD/HowTo/Install} (англ.).
   1.104 +
   1.105 +В Debian GNU/Linux подготовка выполняется очень просто:
   1.106 +
   1.107 +1) Найти пакет с модулем ядра:
   1.108 +\begin{verbatim}
   1.109 +    %# apt-cache search drbd
   1.110 +    drbd0.7-module-source - RAID 1 over tcp/ip for Linux module source
   1.111 +    drbd0.7-utils - RAID 1 over tcp/ip for Linux utilities
   1.112 +    drbd8-module-source - RAID 1 over tcp/ip for Linux module source
   1.113 +    drbd8-utils - RAID 1 over tcp/ip for Linux utilities
   1.114 +    drbdlinks - Manages symlinks into a shared DRBD partition
   1.115 +\end{verbatim}
   1.116 +
   1.117 +2) Установить этот пакет:
   1.118 +\begin{verbatim}
   1.119 +    %# apt-get install drbd8-module-source
   1.120 +\end{verbatim}
   1.121 +
   1.122 +3) Собрать и загрузить модуль ядра:
   1.123 +\begin{verbatim}
   1.124 +    %# module-assistant auto-install drbd8
   1.125 +\end{verbatim}
   1.126 +
   1.127 +\subsection{Настройка DRBD}
   1.128 +Если инсталляция выполняется из архива исходных текстов,
   1.129 +нужно прочитать \texttt{README}, \texttt{INSTALL}
   1.130 +и \htmladdnormallinkfoot{DRBD/HowTo/Install}{http://www.linux-ha.org/DRBD/HowTo/Install}.
   1.131 +Нужно также ознакомится с файлами \texttt{upgrade\(\ast{}\).txt}
   1.132 +в каталоге \texttt{src/} drbd или непосредственно в репозитории проекта.
   1.133 +
   1.134 +В дистрибутив входит хорошо прокомментированный конфигурационный файл-пример.
   1.135 +В архиве исходных текстов он находится в \texttt{./scripts/drbd.conf};
   1.136 +в пакетах может быть в одном из каталогов:
   1.137 +\texttt{/usr/\{shared/,\}doc/packages/drbd}.
   1.138 +
   1.139 +Нужно отредактировать этот файл в соответствии с вашими требованиями,
   1.140 +а потом скопировать его на оба узла. Затем убедиться, что meta-disk\rq{}и
   1.141 +находятся в правильных местах.
   1.142 +Если вы настраиваете синхронизацию нескольких ресурсов,
   1.143 +убедитесь, что в файле \texttt{/etc/drbd.conf}
   1.144 +указаны разные порты (или разные IP) для этих ресурсов.
   1.145 +
   1.146 +Пример фрагмента конфигурационного файла:
   1.147 +\begin{verbatim}
   1.148 +resource dns {
   1.149 +    protocol C;
   1.150 +    net {
   1.151 +        allow-two-primaries;
   1.152 +        after-sb-0pri discard-least-changes;
   1.153 +        after-sb-1pri call-pri-lost-after-sb;
   1.154 +        after-sb-2pri call-pri-lost-after-sb;
   1.155 +    }
   1.156 +    syncer {
   1.157 +        rate 5M;
   1.158 +    }
   1.159 +    on dom0
   1.160 +    {
   1.161 +        device /dev/drbd1;
   1.162 +        disk /dev/XEN/dns;
   1.163 +        address 192.168.1.190:7792;
   1.164 +        meta-disk /dev/XEN/meta[1];
   1.165 +    }
   1.166 +    on dom0m
   1.167 +    {
   1.168 +        device /dev/drbd1;
   1.169 +        disk /dev/XEN/dns;
   1.170 +        address 192.168.1.191:7792;
   1.171 +        meta-disk /dev/XEN/meta[1];
   1.172 +    }
   1.173 +}
   1.174 +\end{verbatim}
   1.175 +
   1.176 +
   1.177 +Нужно обратить особое внимание на местоположение метадиска.
   1.178 +Если DRBD не найдёт метаданных там, где он их ождиает, он создаст новые.
   1.179 +Если вы укажите на неверное место, будут переписаны несколько килобайтов
   1.180 +или даже несколько мегабайтов возможно полезных данных!
   1.181 +Если использовать внутренний метадиск (\texttt{meta-disk=internal}),
   1.182 +нужно обязательно уменьшить файловую систему раздела (если она там есть).
   1.183 +
   1.184 +В настоящий момент метаданные DRBD забирают 128M,
   1.185 +независимо от настоящего размера физических данных.
   1.186 +В связи с этим маскимальный размер одного хранилища DRBD
   1.187 +не может превышать ~4TB.
   1.188 +
   1.189 +Скопируйте \texttt{drbd.conf} в \texttt{/etc/drbd.conf}
   1.190 +на обоих узлах.
   1.191 +После этого на обоих узлах выполните команду:
   1.192 +\begin{verbatim}
   1.193 +   %# drbdadm up all
   1.194 +\end{verbatim}
   1.195 +Узлы должны подняться и перейти в состояние \textit{Secondary} и \textit{Inconsistent}.
   1.196 +
   1.197 +Последнее связано с тем, что хранилища на нижнем уровне не синхронизированы между собой, 
   1.198 +и DRBD не знает откуда куда выполнять синхронизацию.
   1.199 +Источник и, соответственно, направлени синхронизации нужно указать явным образом указать.
   1.200 +Если данных нет, не имеет значения в какую сторону синхронизировать.
   1.201 +Если есть файловая система, которая должна быть скопирована,
   1.202 +указание неправильного направления приведёт к тому, что файловая система будет утеряна.
   1.203 +
   1.204 +Выберите, какой из узлов будет \textit{primary} (если есть данные, то это должен
   1.205 +быть узел, на котором они уже есть).
   1.206 +После этого выполните:
   1.207 +\begin{verbatim}
   1.208 +  %# drbdsetup /dev/drbd1 primary -o
   1.209 +\end{verbatim}
   1.210 +или (для более старых версий)
   1.211 +\begin{verbatim}
   1.212 +   %# drbdadm -- --do-what-I-say primary all
   1.213 +\end{verbatim}
   1.214 +Команда установит одно из устройств /dev/drbd1 в основной режим (если быть точным, 
   1.215 +то это будет устройство на той машине, где вызывалась команда).
   1.216 +После этого должна выполниться полная синхронизация нижележащих устройств.
   1.217 +
   1.218 +Устройство готово к использованию. Если у вас ещё нет файловой системы на нём,
   1.219 +можно её создать прямо сейчас.
   1.220 +
   1.221 +Теперь:
   1.222 +\begin{itemize}
   1.223 +\item  Смонтируйте DRBD-устройство на том узле, который находится в состоянии \textit{primary};
   1.224 +\item  Отредактируйте какие-нибудь файлы;
   1.225 +\item  Размонтируйте DRBD;
   1.226 +\item  Переведите этот узел \textit{secondary}, а второй — \textit{primary};
   1.227 +\item  Смонитруйте DRBD на новом узле;
   1.228 +\item  Посмотрите изменения в файлах, которые вы сделали -- они должны были отразиться на втором узле.
   1.229 +\end{itemize}
   1.230 +
   1.231 +Устройство настроено и готово к использованию.
   1.232 +
   1.233 +\subsection{Пример настройки}
   1.234 +В этом примере используются устройства \texttt{/dev/drbdX}.
   1.235 +Раньше использовались \texttt{/dev/nbX}.
   1.236 +Исторически так сложилось что DRBD хищнечиски захватил
   1.237 +мажорный номер NBD (43) и узлы устройств.
   1.238 +Сейчас официально DRBD может использовать свой номер (147).
   1.239 +В связи с этим начиная с версии 0.7.1
   1.240 +по умолчанию используются свои номера устройств и названия файлов устройств.
   1.241 +
   1.242 +Если система ничего не знает о \texttt{/dev/drbdX},
   1.243 +нужно создать их командой наподобие такой:
   1.244 +\begin{verbatim}
   1.245 +  %# for i in $(seq 0 15) ; do mknod /dev/drbd$i b 147 $i ; done
   1.246 +\end{verbatim}
   1.247 +Подробнее можно почитать в файлах \texttt{upgrade\(\ast{}\).txt},
   1.248 +упоминавшихся выше.
   1.249 +
   1.250 +\begin{verbatim}
   1.251 +    # administration ips of the nodes:
   1.252 +    left=10.0.0.1
   1.253 +    right=10.0.0.2
   1.254 +
   1.255 +    vi drbd.conf
   1.256 +    # double check.
   1.257 +    scp drbd.conf $left:/etc/drbd.conf
   1.258 +    scp drbd.conf $right:/etc/drbd.conf
   1.259 +
   1.260 +    cmd='modprobe drbd; drbdadm up all; dmesg | tail; cat /proc/drbd'
   1.261 +    ssh root@$left -- "$cmd"
   1.262 +    ssh root@$right -- "$cmd"
   1.263 +\end{verbatim}
   1.264 +
   1.265 +Фрагмент из dmesg (или syslog) должен выглядеть так
   1.266 +(в примере хранилище размером 5М).
   1.267 +\begin{verbatim}
   1.268 +    drbd: initialised. Version: 0.7.0 svn $Rev: 1442 $ (api:74/proto:74)
   1.269 +    drbd: registered as block device major 147
   1.270 +
   1.271 +    nb: to have it register as 43 (NBD) you can say
   1.272 +    modprobe drbd use_nbd_major
   1.273 +
   1.274 +    drbd0: Creating state block
   1.275 +    drbd0: resync bitmap: bits=1250 words=40
   1.276 +    drbd0: size = 5000 KB
   1.277 +    drbd0: Assuming that all blocks are out of sync (aka FullSync)
   1.278 +    drbd0: 5000 KB now marked out-of-sync by on disk bit-map.
   1.279 +    drbd0: Handshake successful: DRBD Network Protocol version 74
   1.280 +    drbd0: Connection established.
   1.281 +    drbd0: I am inconsistent, but there is no sync? BOTH nodes inconsistent!
   1.282 +    drbd0: Secondary/Unknown --> Secondary/Secondary
   1.283 +\end{verbatim}
   1.284 +
   1.285 +Файл /proc/drbd должен выглядеть так:
   1.286 +\begin{verbatim}
   1.287 +    %# cat /proc/drbd
   1.288 +    version: 0.7.0 svn $Rev: 1442 $ (api:74/proto:74)
   1.289 +
   1.290 +    0: cs:Connected st:Secondary/Secondary ld:Inconsistent
   1.291 +        ns:0 nr:0 dw:0 dr:0 al:0 bm:1 lo:0 pe:0 ua:0 ap:0
   1.292 +\end{verbatim}
   1.293 +
   1.294 +Пусть \texttt{\$left} будет \textit{primary}:
   1.295 +\begin{verbatim}
   1.296 +    %# ssh root@$left -- "drbdadm primary all"
   1.297 +    ioctl(,SET_STATE,) failed: Input/output error
   1.298 +    Local replica is inconsistent (--do-what-I-say ?)
   1.299 +    Command line was '/sbin/drbdsetup /dev/drbd0 primary'
   1.300 +    drbdsetup exited with code 21
   1.301 +\end{verbatim}
   1.302 +
   1.303 +Замечание: Это приведёт к перезагрузке системы (!)
   1.304 +
   1.305 +В действительности drbdadm просто выполняет команду \dq{}incon-degr-cmd\dq{}.
   1.306 +Поскольку в примере был \dq{}halt -f\dq{},
   1.307 +вы сами попросили о перезапуске.
   1.308 +Возможно, лучше указать что-то менее жётское.
   1.309 +Это можно сделать, указав в файле \texttt{drbd.conf}:
   1.310 +
   1.311 +\begin{verbatim}
   1.312 +incon-degr-cmd "echo 'DRBD: primary requested but inconsistent!' \
   1.313 +  | wall; sleep 300000";
   1.314 +\end{verbatim}
   1.315 +
   1.316 +Ещё одна хорошая команда:
   1.317 +
   1.318 +\begin{verbatim}
   1.319 +killall -9 heartbeat ipfail ccm
   1.320 +\end{verbatim}
   1.321 +
   1.322 +Продолжаем.
   1.323 +
   1.324 +\begin{verbatim}
   1.325 +# ok, this was expected.
   1.326 +# so double check that $left is the correct node.
   1.327 +# then force it:
   1.328 +ssh root@$left -- "drbdadm -- --do-what-I-say primary all"
   1.329 +# which will succeed silently.
   1.330 +
   1.331 +## Bryce Porter suggests that:
   1.332 +## At this point, you need to connect the resource(s)
   1.333 +# ssh root@$left -- "drbdadm -- connect all"
   1.334 +#
   1.335 +## well, they should have been connected all along, see /proc/drbd excerpt above,
   1.336 +## so if this was neccessary, something "unexpected" happend already...
   1.337 +##     -- lge
   1.338 +
   1.339 +ssh $left -- 'dmesg | tail ; cat /proc/drbd'
   1.340 +# output is:
   1.341 +drbd0: Resync started as SyncSource (need to sync 5000 KB [1250 bits set]).
   1.342 +
   1.343 +version: 0.7.0 svn $Rev: 1442 $ (api:74/proto:74)
   1.344 +
   1.345 + 0: cs:SyncSource st:Primary/Secondary ld:Consistent
   1.346 +    ns:9276 nr:0 dw:0 dr:9404 al:0 bm:2 lo:0 pe:915 ua:32 ap:0
   1.347 +        [=========>..........] sync'ed: 50.0% (4380/5000)K
   1.348 +        finish: 0:00:05 speed: 620 (620) K/sec
   1.349 +
   1.350 +# or, to give an example from a larger device:
   1.351 + 0: cs:SyncSource st:Primary/Secondary ld:Consistent
   1.352 +    ns:12940824 nr:0 dw:87492 dr:13690591 al:109 bm:1668 lo:1000 pe:1876 ua:1000 ap:0
   1.353 +        [========>...........] sync'ed: 44.4% (15858/28487)M
   1.354 +        finish: 0:09:20 speed: 28,933 (25,160) K/sec
   1.355 +
   1.356 +# whereas on the other node:
   1.357 +ssh $right -- 'dmesg | tail ; cat /proc/drbd'
   1.358 +drbd0: Resync started as SyncTarget (need to sync 5000 KB [1250 bits set]).
   1.359 +
   1.360 +version: 0.7.0 svn $Rev: 1442 $ (api:74/proto:74)
   1.361 +
   1.362 + 0: cs:SyncTarget st:Secondary/Primary ld:Inconsistent
   1.363 +    ns:0 nr:15000 dw:15000 dr:0 al:0 bm:6 lo:0 pe:0 ua:0 ap:0
   1.364 +        [=========>..........] sync'ed: 50.0% (5000/5000)K
   1.365 +        finish: 0:00:12 speed: 5 (5) K/sec
   1.366 +
   1.367 +# or, to give an example from a larger device:
   1.368 + 0: cs:SyncTarget st:Secondary/Primary ld:Inconsistent
   1.369 +    ns:0 nr:27311780 dw:27311780 dr:0 al:0 bm:3447 lo:134 pe:493 ua:134 ap:0
   1.370 +        [==================>.] sync'ed: 93.7% (1818/28487)M
   1.371 +        finish: 0:01:07 speed: 27,482 (25,008) K/sec
   1.372 +\end{verbatim}
   1.373 +
   1.374 +Убедимся, что всё работает:
   1.375 +
   1.376 +\begin{verbatim}
   1.377 +# if you have no file system yet, create one
   1.378 +# ssh root@$left -- 'mkreiserfs /dev/drbd0'
   1.379 +
   1.380 +ssh root@$left -- \
   1.381 + 'mkdir -p /mnt/ha0; mount /dev/drbd0 /mnt/ha0 && touch /mnt/ha0/been_there'
   1.382 +
   1.383 +# 'switch over'
   1.384 +ssh root@$left -- \
   1.385 + 'umount /mnt/ha0 && drbdadm secondary all'
   1.386 +# even during sync!
   1.387 +ssh root@$right -- \
   1.388 + 'drbdadm primary all'
   1.389 +ssh root@$right -- \
   1.390 + 'mkdir -p /mnt/ha0; mount /dev/drbd0 /mnt/ha0 && ls -l /mnt/ha0/been_there'
   1.391 +\end{verbatim}
   1.392 +
   1.393 +Обратите внимание, что хотя ошибки и не будет, но лучше так не делать:
   1.394 +\textit{SyncTarget} можно сделать \textit{primary}, но в случае проблем с сетью будет паника из-за отсутствия доступа к правильным данным.
   1.395 +Поэтому лучше так не делать никогда.
   1.396 +
   1.397 +\subsection{Дополнительная информация}
   1.398 +\begin{itemize}
   1.399 +\item \htmladdnormallinkfoot{DRBD}{http://xgu.ru/wiki/DRBD} (рус.)
   1.400 +\item \htmladdnormallinkfoot{DRBD}{http://www.drbd.org/} (англ.) — домашняя страница проекта DRBD
   1.401 +\item \htmladdnormallinkfoot{DRBD FAQ}{http://www.linux-ha.org/DRBD/FAQ} (англ.)
   1.402 +\item \htmladdnormallinkfoot{Howto Build and Install DRBD}{http://www.linux-ha.org/DRBD/HowTo/Install} (англ.) — процедура подготовки DRBD, в частности модуля ядра Linux
   1.403 +\item \htmladdnormallinkfoot{Data Redundancy with DRBD}{http://www.drbd.org/drbd-article.html} (англ.) — статья о DRBD 0.6
   1.404 +\item \htmladdnormallinkfoot{DRBD How To in the IBB Wiki}{https://services.ibb.gatech.edu/wiki/index.php/Howto:Software:DRBD} (англ.) — специфичное для RedHat (Fedora, RHEL, CentOS и других RedHat-based) описание процедуры поднятия DRBD
   1.405 +\item \htmladdnormallinkfoot{Xen with DRBD, GNBD and OCFS2 HOWTO}{http://xenamo.sourceforge.net/index.html} (англ.) 
   1.406 +\item \htmladdnormallinkfoot{CLVM Project Page}{http://sources.redhat.com/cluster/clvm/} (англ.) - кластерный LVM
   1.407 +\item \htmladdnormallinkfoot{(openvz-wiki) HA cluster with DRBD and Heartbeat}{http://wiki.openvz.org/HA\_cluster\_with\_DRBD\_and\_Heartbeat} HA cluster with DRBD and Heartbeat (англ.) 
   1.408 +\item \htmladdnormallinkfoot{DRBD, Xen und Heartbeat}{http://www.pro-linux.de/work/virtual-ha/virtual-ha5.html} (нем.)
   1.409 +\item http://te.to/~ts1/xen\_cluster.html (англ.)
   1.410 +
   1.411 +\subsubsection{Обсуждения}
   1.412 +\item \htmladdnormallinkfoot{Sensible maximum number of drbd devices}{http://www.gossamer-threads.com/lists/drbd/users/10007} (англ.) - вопросы использования Xen и DRBD
   1.413 +\item \htmladdnormallinkfoot{(DRBD-user) DRBD 8.0, how to manage a split-brain on Master-Master}{http://lists.linbit.com/pipermail/drbd-user/2005-September/003779.html} (англ.) 
   1.414 +\item \htmladdnormallinkfoot{(Xen-devel) Debian, Xen and DRBD: Enabling true server redundancy}{http://lists.xensource.com/archives/html/xen-devel/2005-06/msg00544.html} (англ.) 
   1.415 +\end{itemize}
   1.416 +