Pull to refresh

Gentoo+drbd+ocfs2

High performance *

Введение


Поставили передо мной как-то задачу… говорят один сервер это хорошо… но учитываю рост посетителей, неплохо бы было повысить производительность отдачи и для этой цели будет приобретен еще 1 сервер…
еще один сервер это хорошо, подумал я… только что с ним делать ??
Поговорив с програмистом и примерно поняв чего он хочет…

А именно одновременную отдачу контента, и что-то типа nfs или шары…
но тогда был бы оверхед ибо данные гонялись по сети и нагружен был бы диск одного сервера, посему надо было чтобы данные одновременно хранились на обоих серверах и реплицировались друг на друга…
поискав в гугле что-то на эту тему нашел информацию по кластерным фс, и для меня подходили gfs2 и позднее обнаруженная ocfs2, но была проблема в том что обычно использовалось выделенное файловое хранилище и его уже монтировали ноды… что было неприемлимо для меня, и тогда позадавав вопросы народу в конференции (gentoo@conference.gentoo.ru благо там были люди работающие с кластерами и прочими веселыми вещами) я вышел на drbd

Исходные данные
1 Боевой сервер 70 гигов информации, на обычном 1Tb reiserfs разделе
2 Новый сервер с 2TB диска, используется lvm чтобы выделить раздел равный разделу на первом сервере, + безопасная зона с которой будет работать сайт перенесенный rsync'ом c первого сервера.

Drbd


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

Итак ставим drbd
1. Сеть между нодами должна работать
2. В /etc/host желательно прописать алиасы, для удобства
3. Размеры дисков должны совпадать, но тк у меня на втром компе было значительно больше места 2TB а на первом всего 1TB, я использовал lvm чтобы выделить кусок примерно равный месту на первом сервере, а оставшуюся часть использовать для работы сайта пока идет работа с дисками.
примерно равный кусок потому что при создании drbd устройства оно автоматически стало равным размеру меньшего из двух… вот такой приятный бонус…
4. В ядре должно быть включено

Device Drivers --->
— Connector — unified userspace <-> kernelspace linker

Cryptographic API --->
— Cryptographic algorithm manager

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 attach drbd0
# drbdadm connect drbd0

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

9. За синхронизацией можно наблюдать вот так
#watch cat /proc/drbd

теперь пора занятся ФС

OCFS2


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

1. Не забываем включить в ядре
--> File systems
--> OCFS2 file system support (EXPERIMENTAL)
а также dlm

2. Последнии ебилды ищем в багзилле
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. Создаем фс на первой ноде (этот шаг является 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 часов синхронизации сервера готовы к боевому дежурству, осталось дело за малым сделать раскидывание запросов веб сервера по нодам… но это уже другая статья ))

зы незабываем
#rc-update add drbd default
#rc-update add ocfs2 default

зыы возможно при форматировании и монтировании ocfs2 надо перезапустить службу… точно к сожалению не помню…
#/etc/init.d/ocfs2 restart

зыыы возможна ситауция split-brain о том как справлятся с ней есть информация на офф сайте,
также здесь неупомянуты действия drbd в случае потери связи с другой нодой, но это достаточно специфичная вещь по сему лучше об этом читать сразу в документации…

основные ссылки на основе которых была написана данная статья

www.debian-administration.org/articles/578
oss.oracle.com/projects/ocfs2
www.netup.ru/articles.php?n=13
en.gentoo-wiki.com/wiki/HOWTO_Heartbeat_and_DRBD
www.drbd.org
Tags: gentoodrbdclusterocfs2lvmrsync
Hubs: High performance
Total votes 6: ↑5 and ↓1 +4
Comments 12
Comments Comments 12

Popular right now