Drbd - кластер дисків
Матеріал з docs.linux.org.ua — збірника документації з Unix/Linux українською мовою.
|
|
DRBD Distributed Remote Block Device (DRBD) - розмноження блочного пристрою через мережу для операційної системи GNU/Linux, з допомогою якого створюється блочний пристрій. Спеціально розроблено для побудови високонадійних та продуктивних кластерів. Це здійснюється з допомогою дзеркального відображення всього блочного пристрою через (виділену) мережу. Подібно до raid-1, тільки через мережу. |
Версія 1 (альфа)
Зміст |
Вступ
Опис роботи DRBD
DRBD бере дані, записує їх на локальний диск і пересилає до іншого комп'ютера. На іншому вузлі DRBD приймає дані і записує там на диск.
Інші компоненти необхідні для реалізації: сервіс членства у кластері, наприклад heartbeat - серце кластеру, і деякі звичні програми, що працюють з блочними пристроями: файлова система і fsck, журналізована файлова система, база даних з здатністю до відновлення.
Кожний пристрій (DRBD надає змогу підтримувати більш ніж один) має два стани: 'основний' чи 'другорядний'. На основному вузлі працюють програми з пристроєм /dev/drbdX. Кожний запис посилається на "локальний низькорівневий блочний пристрій" і до вузла з пристроєм в стані 'другорядний'. На другорядному вузлі дані просто записуються на низькорівневий блочний пристрій. Зчитування даних завжди ведеться локально.
Коли основний вузол стає недоступним, heartbeat автоматично переключає другорядний вузол в основний стан і запускає програми там (якщо ви використовуєте не журналізовану файлову систему то запуститься fsck)
Якщо сервер що зупинивсь стає доступним знову, він появляється як новий другорядний і мусить синхронізувати свій вміст з основним. Звичайно все це відбувається без переривання сервісів і синхронізуються тільки ті частини блочного пристрою що змінились за час простою.
DRBD завжди робить доцільну десинхронізацію коли це можливо. Ви можете визначити певний розмір "active set". Це дозволить мати загальний час десинхронізації 1 -- 3 хвилини, не залежно від розміру пристрою (зараз максимальний розмір 4TB), навіть при виході з ладу заліза на основному вузлі.
Відношення до високонадійних та продуктивних кластерних систем (HA clusters)
Більшість HAclusters використовують спільні масиви збереження даних, тобто масиви збереження даних (диски) одночасно підключені більш ніж до одного вузла (через спільні SCSI шини чи Fibre Channel).
DRBD дає таку ж поведінку, як спільні масиви даних, але не потребує додаткового заліза. Воно працює поверх звичайної IP мережі, що набагато дешевше ніж спеціальні масиви даних.
Поки, що DRBD гарантує запис-зчитування тільки до одного вузла в один час, що фактично реалізує тільки надійний HA cluster. Для глобальних файлових систем http://www.globalfilesystem.org корисно мати одночасний запис/зчитування на обидва вузли.
Встановлення DRBD
DRBD входить в багато Лінукс дистрибутивів, якщо Ваш немає, беріть тут: http://www.drbd.org або http://www.linbit.com/support/drbd-current Для встановлення мусять бути актуальними джерела ядра. По суті цей пакет розділений на два: модуль ядра та користувацькі утиліти. В Gentoo DRBD встановлюється наступною командою:
# emerge sys-cluster/drbd
В Debian DRBD встановлюємо командами:
# apt-get install drbd0.7-module-source # apt-get install drbd0.7-utils # apt-get install dpatch # cd /usr/src # tar -zxf drbd0.7.tar.gz # cd /usr/src/modules/drbd # module-assistant prepare # module-assistant automatic-install drbd0.7-module-source # cd /usr/src # dpkg -i drbd0.7-module-2.4.27-2-k7_0.7.10-3+2.4.27-8_i386.deb
Інструкція по встановленню в Debian: http://www.linux-ha.org/DRBD_2fInstallDebianPackages07
При бажанні DRBD можна вкомпілити в монолітне ядро руками. Для цього потрібно пропатчити джерельні коди ядра:
# cd /usr/src # tar -xvzf where/you/downloaded/it/drbd-0.7.10.tar.gz # cd drbd-0.7.10 # make KDIR=/usr/src/linux-2.6.x kernel-patch
створиться patch-linux-2.6.x-drbd-0.7_whatever
# cd /usr/src/linux-2.6.x # patch -p1 < /usr/src/drbd-0.7.10/drbd/patch-linux-2.6.x-drbd-0.7_whatever
Детальну інформацію по компіляції ядра можна почерпнути тут: Компіляція ядра GNU/Linux Додатково додайте підтримку DRBD:
Device Drivers --->
Bloc Device --->
[*] DRBD suport
Програма drbsetup
Програма drbsetup є низькорівневий інструмент для налаштування DRBD. З його допомогою можна встановити зв'язок між drbd пристроєм та низькорівневим блочним пристроєм, встановити пару пристроїв DRBD для дзеркального відображення їх низькорівневих блочних пристроїв (дисків), і перевірити налаштування працюючих DRBD пристроїв. Детальніше дивіться drbdsetup.8. Практично замість drbsetup використовують drbdadm перед тим налаштувавши /etc/drbd.conf так, що наступні команди можна пропустити.
На вузлі 2 виконуємо:
$ insmod drbd.o $ drbdsetup /dev/drbd0 disk /dev/sdb6 $ drbdsetup /dev/drbd0 net 10.0.0.11 10.0.0.10 C
На вузлі 1 виконуємо:
$ insmod drbd.o $ drbdsetup /dev/drbd0 disk /dev/sdb6 $ drbdsetup /dev/drbd0 net 10.0.0.10 10.0.0.11 C $ drbdsetup /dev/drbd0 primary
Тепер можна користатись /dev/drbd0 just like any other device
Налаштування в drdb.conf
Конфігураційним файлом DRBD, що використовується різними скриптами та програмою drbdadm є /etc/drdb.conf Хороший приклад drdb.conf можна знайти в /usr/src/drbd-0.7.10/scripts/drbd.conf, чи в /usr/share/doc/drbd-0.7.10/drbd.conf.gz детальну інформацію по синтаксису файлу та різних опціях з прикладами, можна прочитати в drbd.conf.5
Приклад /etc/drbd.conf
Потрібно обов'язково ідентично налаштувати на обох вузлах кластеру.
resource diskless {
protocol C;
incon-degr-cmd "halt -f"; # killall heartbeat буде хорошою альтернативою :->
disk {
on-io-error panic;
}
syncer {
rate 5M; # Note: 'M' is MegaBytes, not MegaBits
}
on primarydhcp {
device /dev/drbd0;
disk /dev/sdb6;
address 10.0.0.10:7789;
meta-disk internal;
}
on secondarydhcp {
device /dev/drbd0;
disk /dev/sdb6;
address 10.0.0.11:7789;
meta-disk internal;
}
}
drbdadm
Високорівневий інтерфейс до DRBD бажано користуватись саме ним. Детальна інформація є тут: drbdadm.8
Запуск DRBD
Запустити DRBD можна з допомогою ініціалізаційного скрипта:
# /etc/init.d/drbd start
Скрипт може задати питання: ``Do you want to abort waiting for other server and make this one primary?``. Відповідайте ``yes`` тільки у випадку коли впевнені, що інший вузол кластеру відновити не можна. Встановлення одного з вузлів у основний режим:
# drbdadm primary all
або насильно
# drbdsetup /dev/drbd0 primary --do-what-I-say
Налаштування файлової системи
Створення і монтування файлової системи на новоствореному віртуальному DRBD блочному пристрої здійснюється на основному вузлі:
# mkreiserfs /dev/drbd0 (чи mke3fs, чи xfs,...) # mkdir /share/spool0 # mount /dev/drbd0 /share/spool0
Створюємо директорії
# mkdir /share/spool0/data
Створені директорії можна експортувати через NFS.
NFS поверху DRDB
Опис мережевої файлової системи NFS знаходиться тут: NFS - мережева файлова система. Звичайно директорії для експорту повинні знаходитись на файловій системі, що працює по верху віртуального DRBD пристроя. Потрібно виконати все ідентично на обох вузлах, крім завантаження NFS та налаштування автоматичного запуску NFS при включені комп'ютера.
Файлова система, що працює поверху DRBD може бути одночасно примонтована тільки на одному з вузлів. Тому ми мусимо віддати повний контроль heartbeat над віртуальною файловою системою DRBD та мережевою NFS, ось чому не можна запускати NFS сервіс на обох вузлах. В Gentoo це забезпечується командою:
# rc-update -d nfsd default
В Debian:
# update-rc.d -f nfs-kernel-server remove
NFS звично зберігає свої дані в /var/lib/nfs. Ці дані для управління мусять знаходитись на віртуальному пристрої DRBD щоб бути доступними на активному вузлі після відключення партнера. Для розміщення файлів для керування NFS на том DRBD виконайте наступну команду (її можна виконати тільки на основному вузлі де примонтована файлова система):
# mv /var/lib/nfs /share/spool0/varlibnfs # ln -s /share/spool0/varlibnfs /var/lib/nfs
http://lists.community.tummy.com/pipermail/linux-ha-dev/2004-June/008125.html
http://lists.community.tummy.com/pipermail/linux-ha-dev/2004-June/008126.html
NFS статистичний сервіс асоціює ім'я комп'ютера з звичайним інформаційним станом. Отже ми не будемо мати те саме ім'я після відключення основного вузла, тобто потрібно вказати статистичному сервісу використовувати одне кластерне ім'я (будь-яке постійне ім'я) замість імен вузлів. В Gentoo для цього встановлюємо опцію RPCSTATDOPTS="diskclaster"
# cat /etc/conf.d/nfs # /etc/conf.d/nfs # $Header: /var/cvsroot/gentoo-x86/net-fs/nfs-utils/files/nfs.confd,v 1.9 2005/03/18 07:22:00 vapier Exp $ # Config file for /etc/init.d/nfs # If you wish to set the port numbers for lockd, # please see /etc/sysctl.conf # Number of servers to be started up by default RPCNFSDCOUNT=8 # Options to pass to rpc.mountd # ex. RPCMOUNTDOPTS="-p 32767 RPCMOUNTDOPTS="" # Options to pass to rpc.statd # ex. RPCSTATDOPTS="-p 32765 -o 32766" RPCSTATDOPTS="diskclaster" # Options to pass to rpc.idmapd RPCIDMAPDOPTS="" # Timeout (in seconds) for exportfs EXPORTFSTIMEOUT=30
В Debian потрібно визначити змінну STATDOPTS в /etc/default/nfs-common. Для цього виконуємо:
# echo 'STATDOPTS="-n diskclaster"' >> /etc/default/nfs-common
http://lists.community.tummy.com/pipermail/linux-ha-dev/2003-June/006000.html
heartbeat - серце кластеру
Опис забезпечення прозорого переключення клієнтів з відключеного основного вузла на другорядний наводиться в розділі "heartbeat для NFS поверху DRDB" на сторінці heartbeat - серце кластеру
Література
http://www.slackworks.com/~dkrovich/DRBD
man 8 drbd, man 8 drbdsetup, man 5 drbd.conf, man 8 drbdadm
--Svyat 18:49, 1 жов 2005 (EEST)

