Gentoo+drbd+ocfs2

    Введение


    Поставили передо мной как-то задачу… говорят один сервер это хорошо… но учитываю рост посетителей, неплохо бы было повысить производительность отдачи и для этой цели будет приобретен еще 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
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 12
    • 0
      А как скорость упала? Сам использовал еще старый drbd 0.7 который на одной ноде только на запись работал. Тогда приходилось раздавать NFS'ом получалось вроде неплохо, но при большом количестве io всеравно начинало подтормаживать.
      В последнее время я склоняюсь к тому, что лучше на уровне вебапликейшена реализовывать чтение, запись файла на разные ноды и тупо балансировщиком нагрузки хоть по хэшу разбрасывать запросы, чем городить огород с drbd и т.п. Так как в случае split-brain иногда бывает очень сложно разобраться у кого и насколько актуальные данные.
      • 0
        мм она и не падала, м/ду серверами гигабитный линк, и на чтение не влияет по сути весь этот огород, ибо по сути оно идет с локального диска, а блокировки только при записи… что впринципе и логично…

        зы такая схема держала около 45000 пользователей в сутки пиковую нагрузку…

      • 0
        мм она и не падала, м/ду серверами гигабитный линк, и на чтение не влияет по сути весь этот огород, ибо по сути оно идет с локального диска, а блокировки только при записи… что впринципе и логично…

        зы такая схема держала около 45000 пользователей в сутки пиковую нагрузку…
        • 0
          почитайте внимательно про gfs2
          цитата «With Red Hat's the release of 5.3 gfs2 is not only production ready,
          it is also fully supported»

          • 0
            это было в августе, и сейчас в листе рассылки похожие баги есть до сих пор…
            • 0
              что было в августе?
              какие баги?
              • 0
                настройка серверов и тд…

                баги при попытке удаления файла на одной из нод дедлок (софтина переходила в состояние uninterrptible) аналогично при попытке посмотреть размер… или зайти в директорию…
                • 0
                  поверьте — этого бага давно нет
                  проверьте — поставьте свежую сборку
                  • 0
                    ладно… попробую… но по простоте ocfs2 впереди…
          • НЛО прилетело и опубликовало эту надпись здесь
            • 0
              Решил потестировать данное решение.

              Получил «затык» на моменте:
              /etc/init.d/ocfs2 start
              — не стартовал кластер.

              Решил так:

              superhost ~ # /sbin/o2cb_ctl -H -n clustername -t cluster -a online=no
              superhost ~ # /sbin/o2cb_ctl -H -n clustername -t cluster -a online=yes

              После данной операции всё зарегистрировалось и заработало.

              Так же все имена лучше делать alphanumeric. Без подчёркиваний и прочих символов.
              • 0
                Я считаю ocfs2 — изврат, gfs — фуфло, которое имеет ряд условий с дедлоками, нормальное и рабочее решение — GlusterFS.

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.