xg-scale
annotate drbd.tex @ 0:4730a0d07d88
Исходники курса после первого прочтения.
Правки (которых должно быть много),
ещё пока не вносились.
Правки (которых должно быть много),
ещё пока не вносились.
author | Igor Chubin <igor@chub.in> |
---|---|
date | Tue Jul 01 16:16:44 2008 +0300 (2008-07-01) |
parents | |
children |
rev | line source |
---|---|
igor@0 | 1 \section{Реплицируемое блочное устройство DRBD} |
igor@0 | 2 |
igor@0 | 3 |
igor@0 | 4 Здесь детально рассматривается процедура |
igor@0 | 5 подготовки двух систем для синхронизации одного |
igor@0 | 6 из своих дисковых разделов с помощью DRBD. |
igor@0 | 7 |
igor@0 | 8 Может применяться для организации отказоустойчивых систем |
igor@0 | 9 хранения данных и отказоустойчивых кластерных систем. |
igor@0 | 10 |
igor@0 | 11 \subsection{Что такое DRBD?} |
igor@0 | 12 \textbf{DRBD} (англ. \textit{Distributed Replicated Block Device}, распределённое реплицируемое блочное устройство) --- это блочное устройство, |
igor@0 | 13 предназначенное для построения отказоустойчивых кластерных систем на операционной системе Linux. DRBD занимается полным отражением (mirroring) по сети всех операций с блочным устройством. Можно считать, что DRBD это сетевой RAID-1. |
igor@0 | 14 |
igor@0 | 15 DRBD берёт данные, записывает их на локальный диск и пересылает на другой хост. |
igor@0 | 16 На другом хосте они тоже записываются на диск. |
igor@0 | 17 |
igor@0 | 18 Помимо DRBD в кластере должно быть ещё два важных компонента: |
igor@0 | 19 \begin{enumerate} |
igor@0 | 20 \item Служба кластера (Cluster membership service), (в качестве которого чаще всего выступает \textit{heartbeat}; |
igor@0 | 21 \item Приложение, работающее поверх распределённого блочного устройства. |
igor@0 | 22 \end{enumerate} |
igor@0 | 23 |
igor@0 | 24 Примеры приложений: |
igor@0 | 25 \begin{itemize} |
igor@0 | 26 \item Файловая система c fsck; |
igor@0 | 27 \item Журналируемая файловая система; |
igor@0 | 28 \item СУБД; |
igor@0 | 29 \item домен Xen. |
igor@0 | 30 \end{itemize} |
igor@0 | 31 |
igor@0 | 32 \subsection{Как работает DRBD?} |
igor@0 | 33 Каждое DRBD-устройство (а DRBD-устройств одновременно может быть много) |
igor@0 | 34 находится в одном из двух состояний: |
igor@0 | 35 \begin{itemize} |
igor@0 | 36 \item primary — главном (первичном); |
igor@0 | 37 \item secondary — резервном (вторичном). |
igor@0 | 38 \end{itemize} |
igor@0 | 39 На узле, на котором DRBD-устройство находится в основном состоянии, |
igor@0 | 40 операционная система или процессы могут работать |
igor@0 | 41 с DRBD-устройством (оно доступно через файл-устройства \texttt{/dev/drbdX}). |
igor@0 | 42 |
igor@0 | 43 Каждое обращение на запись к DRBD-устройству |
igor@0 | 44 отправляется локальном к нижележащему устройству |
igor@0 | 45 и на узел, на котором находится реплика устройства. |
igor@0 | 46 Резервное устройство, получившее запрос, выполняет запись. |
igor@0 | 47 |
igor@0 | 48 Чтение выполняется всегда только локально. |
igor@0 | 49 |
igor@0 | 50 \begin{center} \resizebox{10cm}{!}{\includegraphics{/var/lib/mediawiki/images/d/da/Drbd.png}}\\ \textit{}\end{center} |
igor@0 | 51 |
igor@0 | 52 \begin{verbatim} |
igor@0 | 53 |
igor@0 | 54 \end{verbatim} |
igor@0 | 55 Если основной узел падает, heartbeat переключает запасной узел в |
igor@0 | 56 состояние ведущего и запускает приложения на нём |
igor@0 | 57 (если используется нежурналируемая файловая система, |
igor@0 | 58 кроме всего прочего ещё выполнится fsck). |
igor@0 | 59 |
igor@0 | 60 Когда сбойный узел поднимается, DRBD-устройство на нём находится в состоянии |
igor@0 | 61 второстепенного (secondary), и оно начинается синхронизироваться с основным устройством. |
igor@0 | 62 Конечно же, это происходит в фоне, без нарушения работы системы. |
igor@0 | 63 |
igor@0 | 64 Синхронизируются только те части устройства, |
igor@0 | 65 которые подверглись изменению. |
igor@0 | 66 DRBD старается выполнять ресинхронизацию максимально эффективным способом. |
igor@0 | 67 Начиная с DRBD-0.7 существует возможность |
igor@0 | 68 создания так называемых \textit{активных множеств} (active set) |
igor@0 | 69 определённого размера. |
igor@0 | 70 Что позволяет выполнять ресинхронизацию на 1—3 минуты, независимо от размера устройства (сегодня до 4TB) даже после падения активного узла. |
igor@0 | 71 |
igor@0 | 72 \subsubsection{Какое отношение DRBD имеет к HA-кластерам?} |
igor@0 | 73 Сегодня HA-кластеры (отказоуйстойчивые кластеры) используют в своей работе внешние хранилища, которые подключаюся сразу к нескольким узлам. |
igor@0 | 74 Обычно это делается с помощью шин SCSI или Fibre Channel (но не обязательно). |
igor@0 | 75 |
igor@0 | 76 DRBD позволяет делать похожие вещи, только оно не использует никакого специального оборудования, а работает поверх обычных IP-сетей. |
igor@0 | 77 |
igor@0 | 78 \subsubsection{DRBD и кластерные файловые системы} |
igor@0 | 79 Как уже говорилось, обычно |
igor@0 | 80 DRBD-устройство работает на одном из узлов в режиме главного (primary role), |
igor@0 | 81 а на других — в режиме второстепенного или резервного (secondary role). |
igor@0 | 82 Запись идёт на устройство, которое находится в режиме главного, |
igor@0 | 83 а на остальные просто выполняется репликация. |
igor@0 | 84 Такой режим применим для классических отказоустойчивых кластеров, |
igor@0 | 85 его следует использовать, если на DRBD-устройстве непосредственно |
igor@0 | 86 находятся традиционные, не кластерные файловые системы (ext3, XFS, JFS и т.д.). |
igor@0 | 87 |
igor@0 | 88 Начиная с DRBD-8.0.08 можно заставить работать оба узла в режиме primary. |
igor@0 | 89 Это даёт возможность монтировать кластерную ФС сразу на двух узлах |
igor@0 | 90 одновременно. Примеры таких кластерных файловых систем: \textit{GFS}, \textit{OCFS2}. |
igor@0 | 91 |
igor@0 | 92 Кроме того, эта возможность DRBD позволяет выполнять живую миграцию |
igor@0 | 93 доменов Xen, которые используют эти устройства. |
igor@0 | 94 В этом случае использование кластерных систем в домене Xen |
igor@0 | 95 не является обязательным, можно обойтись традиционными системами, |
igor@0 | 96 такими как \textit{ext3}, \textit{XFS}, \textit{JFS}. |
igor@0 | 97 |
igor@0 | 98 \subsection{DRBD: подготовка модуля ядра Linux} |
igor@0 | 99 Процедуры подготовки DRBD |
igor@0 | 100 для различных дистрибутивов Linux описаны здесь \htmladdnormallinkfoot{Howto Build and Install DRBD}{http://www.linux-ha.org/DRBD/HowTo/Install} (англ.). |
igor@0 | 101 |
igor@0 | 102 В Debian GNU/Linux подготовка выполняется очень просто: |
igor@0 | 103 |
igor@0 | 104 1) Найти пакет с модулем ядра: |
igor@0 | 105 \begin{verbatim} |
igor@0 | 106 %# apt-cache search drbd |
igor@0 | 107 drbd0.7-module-source - RAID 1 over tcp/ip for Linux module source |
igor@0 | 108 drbd0.7-utils - RAID 1 over tcp/ip for Linux utilities |
igor@0 | 109 drbd8-module-source - RAID 1 over tcp/ip for Linux module source |
igor@0 | 110 drbd8-utils - RAID 1 over tcp/ip for Linux utilities |
igor@0 | 111 drbdlinks - Manages symlinks into a shared DRBD partition |
igor@0 | 112 \end{verbatim} |
igor@0 | 113 |
igor@0 | 114 2) Установить этот пакет: |
igor@0 | 115 \begin{verbatim} |
igor@0 | 116 %# apt-get install drbd8-module-source |
igor@0 | 117 \end{verbatim} |
igor@0 | 118 |
igor@0 | 119 3) Собрать и загрузить модуль ядра: |
igor@0 | 120 \begin{verbatim} |
igor@0 | 121 %# module-assistant auto-install drbd8 |
igor@0 | 122 \end{verbatim} |
igor@0 | 123 |
igor@0 | 124 \subsection{Настройка DRBD} |
igor@0 | 125 Если инсталляция выполняется из архива исходных текстов, |
igor@0 | 126 нужно прочитать \texttt{README}, \texttt{INSTALL} |
igor@0 | 127 и \htmladdnormallinkfoot{DRBD/HowTo/Install}{http://www.linux-ha.org/DRBD/HowTo/Install}. |
igor@0 | 128 Нужно также ознакомится с файлами \texttt{upgrade\(\ast{}\).txt} |
igor@0 | 129 в каталоге \texttt{src/} drbd или непосредственно в репозитории проекта. |
igor@0 | 130 |
igor@0 | 131 В дистрибутив входит хорошо прокомментированный конфигурационный файл-пример. |
igor@0 | 132 В архиве исходных текстов он находится в \texttt{./scripts/drbd.conf}; |
igor@0 | 133 в пакетах может быть в одном из каталогов: |
igor@0 | 134 \texttt{/usr/\{shared/,\}doc/packages/drbd}. |
igor@0 | 135 |
igor@0 | 136 Нужно отредактировать этот файл в соответствии с вашими требованиями, |
igor@0 | 137 а потом скопировать его на оба узла. Затем убедиться, что meta-disk\rq{}и |
igor@0 | 138 находятся в правильных местах. |
igor@0 | 139 Если вы настраиваете синхронизацию нескольких ресурсов, |
igor@0 | 140 убедитесь, что в файле \texttt{/etc/drbd.conf} |
igor@0 | 141 указаны разные порты (или разные IP) для этих ресурсов. |
igor@0 | 142 |
igor@0 | 143 Пример фрагмента конфигурационного файла: |
igor@0 | 144 \begin{verbatim} |
igor@0 | 145 resource dns { |
igor@0 | 146 protocol C; |
igor@0 | 147 net { |
igor@0 | 148 allow-two-primaries; |
igor@0 | 149 after-sb-0pri discard-least-changes; |
igor@0 | 150 after-sb-1pri call-pri-lost-after-sb; |
igor@0 | 151 after-sb-2pri call-pri-lost-after-sb; |
igor@0 | 152 } |
igor@0 | 153 syncer { |
igor@0 | 154 rate 5M; |
igor@0 | 155 } |
igor@0 | 156 on dom0 |
igor@0 | 157 { |
igor@0 | 158 device /dev/drbd1; |
igor@0 | 159 disk /dev/XEN/dns; |
igor@0 | 160 address 192.168.1.190:7792; |
igor@0 | 161 meta-disk /dev/XEN/meta[1]; |
igor@0 | 162 } |
igor@0 | 163 on dom0m |
igor@0 | 164 { |
igor@0 | 165 device /dev/drbd1; |
igor@0 | 166 disk /dev/XEN/dns; |
igor@0 | 167 address 192.168.1.191:7792; |
igor@0 | 168 meta-disk /dev/XEN/meta[1]; |
igor@0 | 169 } |
igor@0 | 170 } |
igor@0 | 171 \end{verbatim} |
igor@0 | 172 |
igor@0 | 173 |
igor@0 | 174 Нужно обратить особое внимание на местоположение метадиска. |
igor@0 | 175 Если DRBD не найдёт метаданных там, где он их ождиает, он создаст новые. |
igor@0 | 176 Если вы укажите на неверное место, будут переписаны несколько килобайтов |
igor@0 | 177 или даже несколько мегабайтов возможно полезных данных! |
igor@0 | 178 Если использовать внутренний метадиск (\texttt{meta-disk=internal}), |
igor@0 | 179 нужно обязательно уменьшить файловую систему раздела (если она там есть). |
igor@0 | 180 |
igor@0 | 181 В настоящий момент метаданные DRBD забирают 128M, |
igor@0 | 182 независимо от настоящего размера физических данных. |
igor@0 | 183 В связи с этим маскимальный размер одного хранилища DRBD |
igor@0 | 184 не может превышать ~4TB. |
igor@0 | 185 |
igor@0 | 186 Скопируйте \texttt{drbd.conf} в \texttt{/etc/drbd.conf} |
igor@0 | 187 на обоих узлах. |
igor@0 | 188 После этого на обоих узлах выполните команду: |
igor@0 | 189 \begin{verbatim} |
igor@0 | 190 %# drbdadm up all |
igor@0 | 191 \end{verbatim} |
igor@0 | 192 Узлы должны подняться и перейти в состояние \textit{Secondary} и \textit{Inconsistent}. |
igor@0 | 193 |
igor@0 | 194 Последнее связано с тем, что хранилища на нижнем уровне не синхронизированы между собой, |
igor@0 | 195 и DRBD не знает откуда куда выполнять синхронизацию. |
igor@0 | 196 Источник и, соответственно, направлени синхронизации нужно указать явным образом указать. |
igor@0 | 197 Если данных нет, не имеет значения в какую сторону синхронизировать. |
igor@0 | 198 Если есть файловая система, которая должна быть скопирована, |
igor@0 | 199 указание неправильного направления приведёт к тому, что файловая система будет утеряна. |
igor@0 | 200 |
igor@0 | 201 Выберите, какой из узлов будет \textit{primary} (если есть данные, то это должен |
igor@0 | 202 быть узел, на котором они уже есть). |
igor@0 | 203 После этого выполните: |
igor@0 | 204 \begin{verbatim} |
igor@0 | 205 %# drbdsetup /dev/drbd1 primary -o |
igor@0 | 206 \end{verbatim} |
igor@0 | 207 или (для более старых версий) |
igor@0 | 208 \begin{verbatim} |
igor@0 | 209 %# drbdadm -- --do-what-I-say primary all |
igor@0 | 210 \end{verbatim} |
igor@0 | 211 Команда установит одно из устройств /dev/drbd1 в основной режим (если быть точным, |
igor@0 | 212 то это будет устройство на той машине, где вызывалась команда). |
igor@0 | 213 После этого должна выполниться полная синхронизация нижележащих устройств. |
igor@0 | 214 |
igor@0 | 215 Устройство готово к использованию. Если у вас ещё нет файловой системы на нём, |
igor@0 | 216 можно её создать прямо сейчас. |
igor@0 | 217 |
igor@0 | 218 Теперь: |
igor@0 | 219 \begin{itemize} |
igor@0 | 220 \item Смонтируйте DRBD-устройство на том узле, который находится в состоянии \textit{primary}; |
igor@0 | 221 \item Отредактируйте какие-нибудь файлы; |
igor@0 | 222 \item Размонтируйте DRBD; |
igor@0 | 223 \item Переведите этот узел \textit{secondary}, а второй — \textit{primary}; |
igor@0 | 224 \item Смонитруйте DRBD на новом узле; |
igor@0 | 225 \item Посмотрите изменения в файлах, которые вы сделали -- они должны были отразиться на втором узле. |
igor@0 | 226 \end{itemize} |
igor@0 | 227 |
igor@0 | 228 Устройство настроено и готово к использованию. |
igor@0 | 229 |
igor@0 | 230 \subsection{Пример настройки} |
igor@0 | 231 В этом примере используются устройства \texttt{/dev/drbdX}. |
igor@0 | 232 Раньше использовались \texttt{/dev/nbX}. |
igor@0 | 233 Исторически так сложилось что DRBD хищнечиски захватил |
igor@0 | 234 мажорный номер NBD (43) и узлы устройств. |
igor@0 | 235 Сейчас официально DRBD может использовать свой номер (147). |
igor@0 | 236 В связи с этим начиная с версии 0.7.1 |
igor@0 | 237 по умолчанию используются свои номера устройств и названия файлов устройств. |
igor@0 | 238 |
igor@0 | 239 Если система ничего не знает о \texttt{/dev/drbdX}, |
igor@0 | 240 нужно создать их командой наподобие такой: |
igor@0 | 241 \begin{verbatim} |
igor@0 | 242 %# for i in $(seq 0 15) ; do mknod /dev/drbd$i b 147 $i ; done |
igor@0 | 243 \end{verbatim} |
igor@0 | 244 Подробнее можно почитать в файлах \texttt{upgrade\(\ast{}\).txt}, |
igor@0 | 245 упоминавшихся выше. |
igor@0 | 246 |
igor@0 | 247 \begin{verbatim} |
igor@0 | 248 # administration ips of the nodes: |
igor@0 | 249 left=10.0.0.1 |
igor@0 | 250 right=10.0.0.2 |
igor@0 | 251 |
igor@0 | 252 vi drbd.conf |
igor@0 | 253 # double check. |
igor@0 | 254 scp drbd.conf $left:/etc/drbd.conf |
igor@0 | 255 scp drbd.conf $right:/etc/drbd.conf |
igor@0 | 256 |
igor@0 | 257 cmd='modprobe drbd; drbdadm up all; dmesg | tail; cat /proc/drbd' |
igor@0 | 258 ssh root@$left -- "$cmd" |
igor@0 | 259 ssh root@$right -- "$cmd" |
igor@0 | 260 \end{verbatim} |
igor@0 | 261 |
igor@0 | 262 Фрагмент из dmesg (или syslog) должен выглядеть так |
igor@0 | 263 (в примере хранилище размером 5М). |
igor@0 | 264 \begin{verbatim} |
igor@0 | 265 drbd: initialised. Version: 0.7.0 svn $Rev: 1442 $ (api:74/proto:74) |
igor@0 | 266 drbd: registered as block device major 147 |
igor@0 | 267 |
igor@0 | 268 nb: to have it register as 43 (NBD) you can say |
igor@0 | 269 modprobe drbd use_nbd_major |
igor@0 | 270 |
igor@0 | 271 drbd0: Creating state block |
igor@0 | 272 drbd0: resync bitmap: bits=1250 words=40 |
igor@0 | 273 drbd0: size = 5000 KB |
igor@0 | 274 drbd0: Assuming that all blocks are out of sync (aka FullSync) |
igor@0 | 275 drbd0: 5000 KB now marked out-of-sync by on disk bit-map. |
igor@0 | 276 drbd0: Handshake successful: DRBD Network Protocol version 74 |
igor@0 | 277 drbd0: Connection established. |
igor@0 | 278 drbd0: I am inconsistent, but there is no sync? BOTH nodes inconsistent! |
igor@0 | 279 drbd0: Secondary/Unknown --> Secondary/Secondary |
igor@0 | 280 \end{verbatim} |
igor@0 | 281 |
igor@0 | 282 Файл /proc/drbd должен выглядеть так: |
igor@0 | 283 \begin{verbatim} |
igor@0 | 284 %# cat /proc/drbd |
igor@0 | 285 version: 0.7.0 svn $Rev: 1442 $ (api:74/proto:74) |
igor@0 | 286 |
igor@0 | 287 0: cs:Connected st:Secondary/Secondary ld:Inconsistent |
igor@0 | 288 ns:0 nr:0 dw:0 dr:0 al:0 bm:1 lo:0 pe:0 ua:0 ap:0 |
igor@0 | 289 \end{verbatim} |
igor@0 | 290 |
igor@0 | 291 Пусть \texttt{\$left} будет \textit{primary}: |
igor@0 | 292 \begin{verbatim} |
igor@0 | 293 %# ssh root@$left -- "drbdadm primary all" |
igor@0 | 294 ioctl(,SET_STATE,) failed: Input/output error |
igor@0 | 295 Local replica is inconsistent (--do-what-I-say ?) |
igor@0 | 296 Command line was '/sbin/drbdsetup /dev/drbd0 primary' |
igor@0 | 297 drbdsetup exited with code 21 |
igor@0 | 298 \end{verbatim} |
igor@0 | 299 |
igor@0 | 300 Замечание: Это приведёт к перезагрузке системы (!) |
igor@0 | 301 |
igor@0 | 302 В действительности drbdadm просто выполняет команду \dq{}incon-degr-cmd\dq{}. |
igor@0 | 303 Поскольку в примере был \dq{}halt -f\dq{}, |
igor@0 | 304 вы сами попросили о перезапуске. |
igor@0 | 305 Возможно, лучше указать что-то менее жётское. |
igor@0 | 306 Это можно сделать, указав в файле \texttt{drbd.conf}: |
igor@0 | 307 |
igor@0 | 308 \begin{verbatim} |
igor@0 | 309 incon-degr-cmd "echo 'DRBD: primary requested but inconsistent!' \ |
igor@0 | 310 | wall; sleep 300000"; |
igor@0 | 311 \end{verbatim} |
igor@0 | 312 |
igor@0 | 313 Ещё одна хорошая команда: |
igor@0 | 314 |
igor@0 | 315 \begin{verbatim} |
igor@0 | 316 killall -9 heartbeat ipfail ccm |
igor@0 | 317 \end{verbatim} |
igor@0 | 318 |
igor@0 | 319 Продолжаем. |
igor@0 | 320 |
igor@0 | 321 \begin{verbatim} |
igor@0 | 322 # ok, this was expected. |
igor@0 | 323 # so double check that $left is the correct node. |
igor@0 | 324 # then force it: |
igor@0 | 325 ssh root@$left -- "drbdadm -- --do-what-I-say primary all" |
igor@0 | 326 # which will succeed silently. |
igor@0 | 327 |
igor@0 | 328 ## Bryce Porter suggests that: |
igor@0 | 329 ## At this point, you need to connect the resource(s) |
igor@0 | 330 # ssh root@$left -- "drbdadm -- connect all" |
igor@0 | 331 # |
igor@0 | 332 ## well, they should have been connected all along, see /proc/drbd excerpt above, |
igor@0 | 333 ## so if this was neccessary, something "unexpected" happend already... |
igor@0 | 334 ## -- lge |
igor@0 | 335 |
igor@0 | 336 ssh $left -- 'dmesg | tail ; cat /proc/drbd' |
igor@0 | 337 # output is: |
igor@0 | 338 drbd0: Resync started as SyncSource (need to sync 5000 KB [1250 bits set]). |
igor@0 | 339 |
igor@0 | 340 version: 0.7.0 svn $Rev: 1442 $ (api:74/proto:74) |
igor@0 | 341 |
igor@0 | 342 0: cs:SyncSource st:Primary/Secondary ld:Consistent |
igor@0 | 343 ns:9276 nr:0 dw:0 dr:9404 al:0 bm:2 lo:0 pe:915 ua:32 ap:0 |
igor@0 | 344 [=========>..........] sync'ed: 50.0% (4380/5000)K |
igor@0 | 345 finish: 0:00:05 speed: 620 (620) K/sec |
igor@0 | 346 |
igor@0 | 347 # or, to give an example from a larger device: |
igor@0 | 348 0: cs:SyncSource st:Primary/Secondary ld:Consistent |
igor@0 | 349 ns:12940824 nr:0 dw:87492 dr:13690591 al:109 bm:1668 lo:1000 pe:1876 ua:1000 ap:0 |
igor@0 | 350 [========>...........] sync'ed: 44.4% (15858/28487)M |
igor@0 | 351 finish: 0:09:20 speed: 28,933 (25,160) K/sec |
igor@0 | 352 |
igor@0 | 353 # whereas on the other node: |
igor@0 | 354 ssh $right -- 'dmesg | tail ; cat /proc/drbd' |
igor@0 | 355 drbd0: Resync started as SyncTarget (need to sync 5000 KB [1250 bits set]). |
igor@0 | 356 |
igor@0 | 357 version: 0.7.0 svn $Rev: 1442 $ (api:74/proto:74) |
igor@0 | 358 |
igor@0 | 359 0: cs:SyncTarget st:Secondary/Primary ld:Inconsistent |
igor@0 | 360 ns:0 nr:15000 dw:15000 dr:0 al:0 bm:6 lo:0 pe:0 ua:0 ap:0 |
igor@0 | 361 [=========>..........] sync'ed: 50.0% (5000/5000)K |
igor@0 | 362 finish: 0:00:12 speed: 5 (5) K/sec |
igor@0 | 363 |
igor@0 | 364 # or, to give an example from a larger device: |
igor@0 | 365 0: cs:SyncTarget st:Secondary/Primary ld:Inconsistent |
igor@0 | 366 ns:0 nr:27311780 dw:27311780 dr:0 al:0 bm:3447 lo:134 pe:493 ua:134 ap:0 |
igor@0 | 367 [==================>.] sync'ed: 93.7% (1818/28487)M |
igor@0 | 368 finish: 0:01:07 speed: 27,482 (25,008) K/sec |
igor@0 | 369 \end{verbatim} |
igor@0 | 370 |
igor@0 | 371 Убедимся, что всё работает: |
igor@0 | 372 |
igor@0 | 373 \begin{verbatim} |
igor@0 | 374 # if you have no file system yet, create one |
igor@0 | 375 # ssh root@$left -- 'mkreiserfs /dev/drbd0' |
igor@0 | 376 |
igor@0 | 377 ssh root@$left -- \ |
igor@0 | 378 'mkdir -p /mnt/ha0; mount /dev/drbd0 /mnt/ha0 && touch /mnt/ha0/been_there' |
igor@0 | 379 |
igor@0 | 380 # 'switch over' |
igor@0 | 381 ssh root@$left -- \ |
igor@0 | 382 'umount /mnt/ha0 && drbdadm secondary all' |
igor@0 | 383 # even during sync! |
igor@0 | 384 ssh root@$right -- \ |
igor@0 | 385 'drbdadm primary all' |
igor@0 | 386 ssh root@$right -- \ |
igor@0 | 387 'mkdir -p /mnt/ha0; mount /dev/drbd0 /mnt/ha0 && ls -l /mnt/ha0/been_there' |
igor@0 | 388 \end{verbatim} |
igor@0 | 389 |
igor@0 | 390 Обратите внимание, что хотя ошибки и не будет, но лучше так не делать: |
igor@0 | 391 \textit{SyncTarget} можно сделать \textit{primary}, но в случае проблем с сетью будет паника из-за отсутствия доступа к правильным данным. |
igor@0 | 392 Поэтому лучше так не делать никогда. |
igor@0 | 393 |
igor@0 | 394 \subsection{Дополнительная информация} |
igor@0 | 395 \begin{itemize} |
igor@0 | 396 \item \htmladdnormallinkfoot{DRBD}{http://xgu.ru/wiki/DRBD} (рус.) |
igor@0 | 397 \item \htmladdnormallinkfoot{DRBD}{http://www.drbd.org/} (англ.) — домашняя страница проекта DRBD |
igor@0 | 398 \item \htmladdnormallinkfoot{DRBD FAQ}{http://www.linux-ha.org/DRBD/FAQ} (англ.) |
igor@0 | 399 \item \htmladdnormallinkfoot{Howto Build and Install DRBD}{http://www.linux-ha.org/DRBD/HowTo/Install} (англ.) — процедура подготовки DRBD, в частности модуля ядра Linux |
igor@0 | 400 \item \htmladdnormallinkfoot{Data Redundancy with DRBD}{http://www.drbd.org/drbd-article.html} (англ.) — статья о DRBD 0.6 |
igor@0 | 401 \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 |
igor@0 | 402 \item \htmladdnormallinkfoot{Xen with DRBD, GNBD and OCFS2 HOWTO}{http://xenamo.sourceforge.net/index.html} (англ.) |
igor@0 | 403 \item \htmladdnormallinkfoot{CLVM Project Page}{http://sources.redhat.com/cluster/clvm/} (англ.) - кластерный LVM |
igor@0 | 404 \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 (англ.) |
igor@0 | 405 \item \htmladdnormallinkfoot{DRBD, Xen und Heartbeat}{http://www.pro-linux.de/work/virtual-ha/virtual-ha5.html} (нем.) |
igor@0 | 406 \item http://te.to/~ts1/xen\_cluster.html (англ.) |
igor@0 | 407 |
igor@0 | 408 \subsubsection{Обсуждения} |
igor@0 | 409 \item \htmladdnormallinkfoot{Sensible maximum number of drbd devices}{http://www.gossamer-threads.com/lists/drbd/users/10007} (англ.) - вопросы использования Xen и DRBD |
igor@0 | 410 \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} (англ.) |
igor@0 | 411 \item \htmladdnormallinkfoot{(Xen-devel) Debian, Xen and DRBD: Enabling true server redundancy}{http://lists.xensource.com/archives/html/xen-devel/2005-06/msg00544.html} (англ.) |
igor@0 | 412 \end{itemize} |
igor@0 | 413 |