[править] Использование
При старте узлов
на каждом из них запускаются домены,
закреплённые в переменной domain_home.
Ручной запуск машин.
Запуск машины:
%# xen-drbd start dns
Запуск всех машин:
%# xen-drbd start-all
Запуск машин, закреплённых за этим хостом (см. domain_home):
%# xen-drbd start-my-domains
Миграция машин.
Миграция машины dns на другой узел:
%# xen-drbd migrate-out dns
Миграция всех машин на второй узел:
%# xen-drbd migrate-out-all
Миграция обратно машин, закреплённых за этим хостом (см. domain_home):
%# xen-drbd migrate-my-domains-home
При выключении узла,
домены можно смигрировать на другой узел:
%# xen-drbd migrate-out-all
Или, если такое действие указано в /etc/default/xen:
%# /etc/init.d/xen-drbd stop
Это действие вызывается автоматически
при останове узла.
Подробнее об этих и других командах: xen-drbd
[править] Отдельные вопросы эксплуатации xen-drbd
[править] Создание новых устройств DRBD
При синхронизации множества отдельных томов с помощью DRBD
нужно обратить внимание на следующее:
- Количество синхронизируемых устройств DRBD ограничено (<=255);
- Для синхронизации отдельных устройств DRBD используются
отдельные TCP-порты. При добавлении нового DRBD-устройства обратите
внимание на то, что бы порт, который вы назначаете ему для
синхронизации, уже не был занят.
- Используйте внешние метадиски, поскольку в случае когда
метадиск является внутренним, поведение DRBD при изменении размера
логического тома может оказаться неожиданным.
[править] Множество DRBD-устройств
Количество синхронизируемых устройств DRBD ограничено.
Максимальное количество используемых одновременно DRBD-устройств
задаётся в качестве параметра minor_count модуля ядра drbd
при его загрузке. Этот параметр не может превышать 255.
$ sudo modinfo drbd
filename: /lib/modules/2.6.18-4-xen-686/kernel/drivers/block/drbd.ko
author: Philipp Reisner <phil@linbit.com>, Lars Ellenberg <lars@linbit.com>
description: drbd - Distributed Replicated Block Device v8.0.1
license: GPL
alias: block-major-147-*
vermagic: 2.6.18-4-xen-686 SMP mod_unload 686 REGPARM gcc-4.1
depends: cn
parm: trace_devs:int
parm: trace_type:int
parm: trace_level:int
parm: fault_count:int
parm: fault_rate:int
parm: enable_faults:int
parm: allow_oos:DONT USE! (bool)
parm: minor_count:Maximum number of drbd devices (1-255) (int)
[править] Сетевые порты DRBD
Для синхронизации отдельных устройств DRBD используются отдельные TCP-порты.
При добавлении нового DRBD-устройства обратите внимание на то, что бы порт,
который вы назначаете ему для синхронизации, уже не был занят.
Кроме того, нужно обратить внимание на то, чтобы доступ к этим портам
для парного узла не был ограничен брандмауэром.
В примере конфигурационного файла drbd.conf, приведённом ниже, есть строка:
address 192.168.1.190:7792;
она показывает, что синхронизация ресурса
выполняется с узлом 192.168.1.190 и для синхронизации используется
порт 7792.
Лучше не использовать внутренний метадиск (meta-disk internal),
особенно если вы собираетесь менять размеры соответствующих томов
и файловых систем на них.
Нужно создать отдельный том для-
meta-disk'ов DRBD и задать его размер
равным 128MB x количество устройств.
В пример конфигурационного файла drbd.conf, приведённом ниже,
meta-disk /dev/XEN/meta[1];
Она говорит о том, что мета-информация
об DRBD-устройстве, к которому относится эта строка,
должна находится в мета-диске 1 (нумерация с нуля)
на томе /dev/XEN/meta.
Подготовка этого тома не выполняется каким-то
особенным образом — в данном случае это обычный
логический том LVM, но вообще это может быть любое блочное
устройство достаточного объёма.
Если метадиск создаётся на отдельном логическом
томе LVM, то его можно расширять.
Расширять метадиск нужно в том случае,
когда количество DRBD-устройств, использующих
его, превышает допустимое.
Это число можно найти, разделив размер метадиска
на объём, необходимый для каждого DRBD-устройства
(в настоящий момент 128MB).
[править] Пример секции файла drbd.conf
resource dns {
protocol C;
net {
allow-two-primaries;
after-sb-0pri discard-least-changes;
after-sb-1pri call-pri-lost-after-sb;
after-sb-2pri call-pri-lost-after-sb;
}
syncer {
rate 5M;
}
on dom0
{
device /dev/drbd1;
disk /dev/XEN/dns;
address 192.168.1.190:7792;
meta-disk /dev/XEN/meta[1];
}
on dom0m
{
device /dev/drbd1;
disk /dev/XEN/dns;
address 192.168.1.191:7792;
meta-disk /dev/XEN/meta[1];
}
}
[править] Расширение диска DRBD
DRBD-устройство может менять свои размеры.
Это возможно в том случае, если меняют размер (как правило, расширяются)
устройства на которых базируется DRBD.
Когда DRBD работает поверх логических томов LVM,
желание расширение DRBD-устройства выглядит весьма естественно,
поскольку изменение размеров LVM-томов
является вполне простой и часто использующейся операцией;
хочется, чтобы то, что работает поверх логического тома LVM,
могло отреагировать на изменение размеров.
Расширение DRBD-устройства и файловой системы, находящейся на нём, состоит из
следующих шагов:
- Расширение логического тома, на котором базируется DRBD-устройство на обоих узлах;
- Отражение изменений в метадиске;
- Перезагрузка домена Xen, использующего это устройство;
- Расширение файловой системы на primary-устройстве;
- Проверка правильности выполнения.
Например, пусть:
- хост называются primary и secondary;
- с помощью DRBD синхронизируется логический том /dev/TURBO/lv0;
- размер тома увеличивается на 2G;
- на томе создана файловая система ext2/ext3;
Все указанные параметры являются необязательными
и приведены для удобства повествования.
1) Измените размер тома на обоих машинах.
primary# lvresize -L +2048M /dev/TURBO/lv0
secondary# lvresize -L +2048M /dev/TURBO/lv0
2) Вызовите команду перестроения размера
DRBD-устройства на обоих машинах:
primary# drbdadm resize all #(вместо all может быть указан только интересующий диск)
secondary# drbdadm resize all
3)
3.1) Если домен не запущен. На primary-устройстве измените размер файловой системы,
расположенной на DRBD-устройстве:
primary# ext2resize /dev/drbd0 # (или другое устройство)
3.2) Если домен, использующий устройство, запущен. Перезагрузите домен, для того чтобы
он увидел изменения в размере. После этого выполните ext2resize внутри домена.
|
Указать домену Xen, использующему DRBD-устройство,
что оно изменило размер, в настоящий момент,
к сожалению, невозможно.
В будущем, сообщить об изменении конфигурации
дискового устройства домена будет можно, предположительно,
с помощью команды xm block-configure.
|
4) Проверьте, что изменение размера прошло успешно.
primary# df -h /dev/drbd0
Проверка с помощью df возможна только в том случае,
если /dev/drbd0 смонтировано в настоящий момент.
Если расширение происходит внутри домена, то
проверять наличие свободного места нужно тоже
внутри домена.
Размер несмонтированной файловой системы можно тоже посмотреть,
но только не в байтах, а в блоках.
Для файловых систем ext2/ext3:
%# dumpe2fs /dev/drbd0 | grep ^Block
dumpe2fs 1.40-WIP (14-Nov-2006)
Block count: 979933
Block size: 1024
Blocks per group: 8192
[править] Выключение после синхронизации
Пара DRBD-устройств может находиться
в трёх состояниях:
- Синхронизированном;
- Синхронизирующемся.
- Несинхронизирующемся.
В первом случае на обеих частях DRBD-диска
находятся одинаковые данные.
Во втором случае правильные данные
находятся на одном узле,
и они переписываются на второй узел.
При этом со временем пара должна
прийти к первому состоянию.
В третьем случае неизвестно где именно находятся
правильные данные. Для того чтобы решить это требуется
административное вмешательство. После того как
выяснилось, на каком из узлов данные верны,
начинается синхронизация.
Каждый узел при этом характеризуется двумя параметрами:
- Первичность -- Primary/Secondary;
- Верность данных -- Inconsistent/Up-to-date.
Первый параметр говорит о том,
могут ли записываться данные на этот узел (primary),
или он получает данные со второго узла (secondary).
Второй параметр говорит о том,
находятся ли на этом диске актуальные данные,
или их нужно обновить.
Важно то, что первый параметр не определяет второй и наоборот.
Диск может находиться в состоянии secondary и при этом хранить
актуальные данные, и наоборот.
В случае когда диск находится в состоянии primary,
но при этом состоянии inconsistent,
обязательно должно существовать состояние
между двумя устройствами. При обращении к Primary-диску
DRBD заботится о том чтобы узнать на второй половине
актуальные данные и предоставить их. Снаружи это выглядит
абсолютно прозрачно. Пользователь работает с DRBD-устройством,
не ведая при этом, что данные сейчас синхронизируются между дисками
(причём, возможно даже, копируются на тот узел, где DRBD-диск находится
в состоянии primary).
Пока оба узла работают, всё в порядке.
Проблема возникает, если есть узел находящийся в
состоянии secondary/up-to-date,
и он выключается.
Необходимо предусмотреть такую возможность,
чтобы миграция доменов xen-drbd при выключении
производилась только когда синхронизация завершена.
Рекомендуется для этого ввести действия xen-drbd:
- migrate-out-after-sync domain
- migrate-out-after-sync-all
Миграция домена в этом случае будет выполняться только после того,
как все используемые им устройства полностью синхронизированы.
До этого момента команда будет находиться в состоянии ожидания.
Если использовать действие migrate-out-after-sync-all
при выключении узла, узел завершит свою работу,
только после того как все диски, использующиеся в его доменах,
завершат синхронизацию, а домены отмигрируют.
[править] Взаимный контроль узлов с помощью heartbeat
Кластер функционален уже — без настройки и использования heartbeat,
однако функциональность его частична:
при выходе из строя одного из узлов кластера,
доступными останутся только те домены, которые
исполнялись на нём в момент выхода из строя второго узла.
Оставшиеся домены можно будет поднять, но только вручную.
Нужно же, чтобы каждый из узлов имел возможность определить,
что его напарник пропал и запустить все недостающие домены.
При этом особенно важно избежать случая, когда каждый узел
ошибочно решит, что его напарник выключился, в то время как оба они будут работать,
но по какой-то причине перестанут видеть друг друга.
В этом случае может наступить опасная ситуация, касающаяся взаимной противоречивости данных на DRBD-устройствах, и названная split-brain.
[править] Благодарности
- Олександру Юдіну и Олегу Дорохину — за помощь при разработке и тестировании и ценные идеи
|
|
Источник: http://xgu.ru/wiki/%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BE%D0%BC%D0% |