Gentoo+Drbd+Ocfs2



Введение Однажды мне поставили задачу.

мол один сервер - это хорошо.

но с учетом роста посетителей неплохо было бы увеличить производительность на выходе и для этого будет куплен еще 1 сервер.

еще один сервер - это хорошо, подумал я.

только что с ним делать?? Пообщавшись с программистом и примерно поняв, чего он хочет. А именно одновременная доставка контента и что-то вроде нфс или шаров.

но тогда были бы накладные расходы, потому что данные пересылались по сети и диск одного сервера был бы загружен, поэтому необходимо было, чтобы данные одновременно хранились на обоих серверах и реплицировались друг на друга.

Поискав в Гугле что-нибудь на эту тему, я нашел информацию о кластерной fs, и мне подошли gfs2 и обнаруженный позже ocfs2, но проблема была в том, что обычно использовалось выделенное файловое хранилище и ноды его уже смонтировали.

что для меня было неприемлемо, и тогда, задав вопросы людям на конференции ([email protected], благо там были люди, работающие с кластерами и другими забавными вещами), я пришел к дрбд Исходные данные 1 боевой сервер 70 гигабайт информации, на обычном разделе reiserfs 1Тб 2 Новый сервер с диском 2ТБ, в lvm выделен раздел равный разделу на первом сервере, + безопасная зона, с которой будет работать сайт, перенесённый по rsync с первого сервера.



Дрбд

Что это такое? зайдя на офф сайт drbd.org После просмотра этой картинки сразу стало понятно, что это то, что мне нужно.



Gentoo+drbd+ocfs2

т.е.

это по сути сетевой рейд-1 репликация есть, но drbd только создает устройства и сверху нужна кластерная фс, иначе будет работать совсем странно.

Итак, устанавливаем drbd 1. Сеть между узлами должна работать 2. Для удобства желательно прописать алиасы в /etc/host 3. Размеры дисков должны совпадать, но так как у меня на втором компьютере было существенно больше места 2ТБ, а на первом всего 1ТБ, я с помощью lvm выделил кусок, примерно равный пространству на первом сервере, а остальное использовал для запуска сайт во время работы с дисками.

примерно равный кусок, потому что при создании устройства drbd он автоматически стал равен размеру меньшего из двух.

это такой приятный бонус.

4. Ядро должно быть включено Драйверы устройств ---> - Коннектор - единое пользовательское пространство <-> компоновщик пространства ядра Криптографический API ---> — Менеджер криптографических алгоритмов 5. Установите drbd на оба узла.

#emerge drbd 6. Отредактируйте конфиг /etc/drbd.conf. это должно выглядеть примерно так

global { usage-count yes; } common { syncer { rate 100M; } } resource drbd0 { protocol C; startup { wfc-timeout 20; degr-wfc-timeout 10; # become-primary-on both; # Enable this *after* initial testing } net { cram-hmac-alg sha1; shared-secret "megaSeCrEt"; allow-two-primaries; ping-timeout 20; } on node1 { device /dev/drbd0; disk /dev/sdb1; address 192.168.0.1:7789; meta-disk internal; } on node2 { device /dev/drbd0; disk /dev/mapper/vg-home; address 192.168.0.2:7789; meta-disk internal; } disk { fencing resource-and-stonith; no-disk-flushes; no-md-flushes; } handlers { outdate-peer "/sbin/obliterate"; # We'll get back to this. }

для более точного и полного описания man drbd.conf :) 7. На обоих узлах введите # modprobe drbd # drbdadm create-md drbd0 # drbdadm прикрепить drbd0 # drbdadm подключаем drbd0 8. Затем на втором узле (так как рядом есть сайт и его нужно будет загрузить в новый раздел) #drbdadm — --overwrite-data-of-peer Primary drbd0 и перезапустить #/etc/init.d/drbd перезапуск перезагрузка нужна, чтобы сервис нормально запустился и взял настройки из конфига, так как по умолчанию скорость синхронизации довольно низкая.

9. Синхронизацию можно наблюдать так #смотреть кота /proc/drbd теперь пришло время заняться ФС

OCFS2

Почему ocfs2? Потому что это в основе.

Почему не gfs2? Он есть в ядре, но при попытке его использовать при удалении файлов виснет в тупике (изначально была попытка его использовать, но на своей шкуре убедившись, что он все-таки не готов к производству, о чем неоднократно упоминается на сайте разработчика и не только :(выбран ocfs2) Почему не gfs1? На тот момент в ядре 2.6.27 его поддержки не было + он просто не работал.

1. Не забудьте включить это в ядре --> Файловые системы --> Поддержка файловой системы OCFS2 (ЭКСПЕРИМЕНТАЛЬНАЯ) а также длм 2. Ищем последние ебилды в bugzilla bugs.gentoo.org/show_bug.cgiЭid=193249 3. Ставим #emerge ocfs2-tools 4. Самый простой конфиг, по сравнению с тем, что нам приходилось делать на gfs2 (опять же на обеих нодах) /etc/ocfs2/cluster.conf

node: ip_port = 7777 ip_address = 192.168.0.1 number = 0 name = node1 cluster = ocfs2 node: ip_port = 7777 ip_address = 192.168.0.2 number = 1 name = node2 cluster = ocfs2 cluster: node_count = 2 name = ocfs2

5. Создайте fs на первом узле (этот шаг — 10-й шаг в части drbd) #mkfs.ocfs2 -b 4K -C 32K -N 2 /dev/drbd0 (здесь также нужно добавить имя кластера и использовать dlm) (точная команда ускользнула из головы, но что-то вроде этого.

как всегда полная информация man mkfs.ocfs2) и он зальет второй узел из-за синхронизации.



Нижняя граница

После некоторого неторопливого форматирования.

смонтируйте полученный раздел на втором узле #mount /dev/drbd0 /home/site/www/ -t ocfs2 (лирическое отступление, все логи веб-сервера и т.п.

находятся в /home/site/logs потому что нет смысла переносить их на другой узел, также делаются симлинки с /home/site/www на /home/site на какой-то конфиги, которые различаются на узлах) и теперь заливаем сайт обратно rsync. после 6 часов синхронизации серверы готовы к боевому дежурству, остается только раскидать запросы веб-сервера по узлам.

но это уже другая статья)) PS незабываемо #rc-update добавить drbd по умолчанию #rc-update добавить ocfs2 по умолчанию Извините, возможно, что при форматировании и монтировании ocfs2 нужно перезапустить службу.

к сожалению точно не помню.

#/etc/init.d/ocfs2 перезапуск Возможна ситуация с расщеплением мозга, информация как с этим бороться есть на офф сайте, Также здесь не упоминаются действия drbd в случае потери связи с другим узлом, но это довольно специфическая вещь, поэтому лучше сразу прочитать об этом в документации.

основные ссылки, на основе которых написана данная статья www.debian-administration.org/articles/578 oss.oracle.com/projects/ocfs2 www.netup.ru/articles.phpЭn=13 ru.gentoo-wiki.com/wiki/HOWTO_Heartbeat_and_DRBD www.drbd.org Теги: #Gentoo #DRBD #cluster #ocfs2 #lvm #rsync #Высокая производительность

Вместе с данным постом часто просматривают: