xen-drbd
Материал из Xgu.ru
Репозиторий проекта
http://xgu.ru/hg/xen-drbd
- Подробное описание кластера виртуальных машин повышенной отказоустойчивости, построенного на основе Xen и DRBD, находится на странице Xen поверх DRBD. На этой странице описывается скрипт xen-drbd, предназначенный для управления виртуальными машинами в кластере.
Содержание |
[править] Получение кода xen-drbd
Архивы исходного кода:
- xen-drbd-v0.1.tar.gz, v0.1, 1 октября 2008
Текущее состояние кода xen-drbd можно получить из репозитория с помощью команды:
%$ hg clone http://xgu.ru/hg/xen-drbd
(для выполнения этой операции необходимо установить пакет mercurial).
[править] Подготовительные процедуры
[править] Развёртывание системы с помощью xen-drbd-install
Система должна быть развёрнута вручную, с помощью скрипта xen-drbd-install или каким-то другим способом.
- Должен быть поднят и работать DRBD;
- Должны быть подготовлены файловые системы доменов Xen.
[править] Копирование файла топологии
Файл топологии должен присутствовать на обеих машинах.
Не забудьте изменить на втором узле значение переменной i_am. Если вы используете функцию gethostname() для определения собственного имени, обязательно убедитесь что имя соответствует тому, которое указано в переменных node1 и node2. |
[править] Инсталляция ключей SSH
Узлы, входящие в кластер, должны знать друг о друге, видеть друга друга и доверять друг другу.
Для этого необходимо чтобы:
- имена узлов (в том виде в каком они указаны в конфигурационном файле топологии) преобразовывались в адреса как на одном узле, так и на втором;
- между узлами существовала связь на IP-уровне (ходил пинг);
- на обеих системах работали SSH-серверы;
- для беспарольной аутентификации на каждом узле были сгенерированы ключи и на противоположный узел была проинсталлирована их открытая часть (или настроение другое средство беспарольной аутентификации).
Пример последовательности команд для создания и инсталляции SSH-ключей.
%# ssh-keygen -t dsa %# cat ~/.ssh/id_dsa.pub | ssh mirror 'mkdir ~/.ssh/; cat >> ~/.ssh/authorized_keys; chmod 644 ~/.ssh/authorized_keys'
[править] Запуск системы
Будем считать, что наша топология называется topology. Необходимо чтобы файл с названием topology.py присутствовал в каталоге /etc/xen/ на обоих узлах кластера.
Сейчас имя текущей топологии указывается прямо в теле скрипта xen-drbd.py. Укажите там имя вашей топологии. (Название топологии в будущих топологиях будет настраиваемым без правки кода.) |
[править] Создание ссылок
Создание ссылок в каталоге /dev/drbd.
Здесь topology -- название файла с описанием топологии (к имени файла автоматически дописывается .py).
Посмотреть, какие ссылки будут создаваться:
%# xen-drbd-install --network=topology make-links
Создать ссылки:
%# xen-drbd-install --network=topology make-links | sh -s
Эта операция выполняется скриптом /etc/init.d/xen-drbd.
[править] Создание виртуальных мостов и настройка сети
Посмотреть, какие мосты будут создаваться и как:
%# xen-drbd-install --network=topology make-bridges
Если вы используете привязку мостов к реальным интерфейсам, то будьте осторожны при создании реальной конфигурации, потому что вы можете потерять связь с системой. |
Создать мосты:
%# xen-drbd-install --network=topology make-bridges | sh -s
Эта операция выполняется скриптом /etc/xen/scripts/network-xen-drbd.
Эти операции должны быть добавлены в загрузку.
[править] xen-drbd
В выполнении операции всегда принимают участие два узла. При старте домена проверяется, работает ли этот домен на втором узле. Если работает, старт не выполняется.
Терминология:
- этот узел — узел на котором выполняется запуск команды
- второй узел — второй узел в связке, противоположный тому, на котором был сделан запуск
- домены, закреплённые за узлом — домены, которые по умолчанию должны запускаться на этом узле. Распределение доменов по узлам определяется переменной domain_home файла описания топологии
Запуск доменов:
- start domain — запустить домен domain;
- start-all — запустить все домены на этом узле (за исключением тех, которые уже работают);
- start-my-domains — запустить на этом узле только его домены (в отличие от подкоманды start-all, домены закреплённые за вторым узлом не запускаются).
Миграция доменов:
- migrate-out domain — выполнить миграцию домена domain на второй узел;
- migrate-in domain — выполнить миграцию домена domain на этот узел со второго узла;
- migrate-out-all — выполнить миграцию всех доменов на второй узел;
- migrate-in-all — выполнить миграцию всех доменов на этот узел со второго узла;
- migrate-my-domains-home — выполнить миграцию всех доменов, закреплённых за этим узлом, со второго узла на текущий узел;
- migrate-and-start-my-domains — выполнить миграцию всех доменов, закреплённых за этим узлом, со второго узла на текущий узел, и запустить недостающие (только на этом узле, на втором запуск не выполняется);
- migrate-and-start-all — выполнить миграцию всех доменов по свои местам и запустить недостающие домены на своих местах (операция выполняется одинаково с обоими узлами; на каком из узлов она была вызвана, определяет только порядок старта — сначала домены запускаются на узле, на котором была вызвана команда).
[править] Стартовые скрипты xen-drbd
Выше мы вручную делали подготовительные операции: создание ссылок и создание мостов. Эти операции должны выполняться каждый раз при загрузке системы.
Также при старте системы должны запускаться домены. А при останове — домены должны мигрировать на другой узел кластера или останавливаться.
Эти операции выполняются с помощью специальных стартовых скриптов:
- /etc/init.d/xen-drbd — стартовый скрипт xen-drbd, выполняющий подготовку системы и запуск/миграцию недостающих доменов
- /etc/xen/scripts/network-xen-drbd — стартовый скрипт, выполняющий создание и настройку сетевых мостов
[править] Настройка сети при запуске
Настройку сети xen-drbd можно вызывать из файла /etc/network/interfaces:
# The primary network interface iface eth0 inet manual up /etc/xen/scripts/network-xen-drbd start
[править] Вызов xen-drbd при загрузке
Стартовые скрипты создаются автоматически при инсталляции.
Для загрузки скрипты просто включаются в иерархию rc.d. Для дистрибутива Debian GNU/Linux:
%# update-rc.d xend stop 95 0 1 6 . start 05 2 3 4 5 .
Конфигурация скрипта /etc/init.d/xen-drbd находится в файле /etc/default/xen-drbd.
[править] Конфигурационные файлы стартовых скриптов
Конфигурация стартовых скриптов находится в файле:
/etc/default/xen-drbd
Пример файла:
XEN_DRBD_PATH='/usr/local/sbin' TOPOLOGY_NAME='topology' START_ACTION=nothing STOP_ACTION=nothing
Назначение переменных:
- XEN_DRBD_PATH — путь к каталогу, куда установлен xen-drbd;
- TOPOLOGY_NAME — имя топологии;
- START_ACTION — действие xen-drbd, которое нужно выполнять при старте системы;
- STOP_ACTION — действие xen-drbd, которое нужно выполнять при останове системы.
В качестве действий START_ACTION и STOP_ACTION указываются подкоманды xen-drbd. Например:
START_ACTION=migrate-and-start-all STOP_ACTION=migrate-all-out
В этом случае при остановке узла домены мигрируют на второй узел, а при запуске узла домены возвращаются на место — на тот узел, за которым они закреплены. Если какого-то домена после миграции нет (например, он был потушен на втором узле), то он стартует заново.
Таким образом, когда старт узла завершится, на обоих узлах в совокупности должны работать все домены.
[править] Нестандартные ситуации
[править] Потеряна связь между узлами
Если в момент запуска домена второй узел не виден, домен стартовать не будет.
Сейчас сообщение об ошибке выглядит так:
# xen-drbd.py start samba Traceback (most recent call last): File "/usr/local/sbin/xen-drbd.py", line 245, in ? start_domain(domain) File "/usr/local/sbin/xen-drbd.py", line 114, in start_domain if (get_domain_id(domain,he_is) != -1): File "/usr/local/sbin/xen-drbd.py", line 87, in get_domain_id res = int(res) ValueError: invalid literal for int(): ssh: connect to host mirror port 22: No route to host
[править] См. также
- xen-drbd-install
- xen-drbd/todo — что можно было бы улучшить
|
---|