Назад | Перейти на главную страницу

Как заставить DRBD автоматически запускаться после перезагрузки, монтировать том, запускать службу и настраивать первичный / вторичный

У меня есть отличная рабочая версия DRBD на двух серверах Debian Stretch, которую я создал, следуя этому замечательному руководству: https://www.howtoforge.com/setting-up-network-raid1-with-drbd-on-debian-squeeze-p2/

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

Вот что я вижу, когда он работает, до перезагрузки:

root@server1:~# cat /proc/drbd version: 8.4.7 (api:1/proto:86-101) srcversion: AC50E9301653907249B740E 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----- ns:8 nr:0 dw:4 dr:1209 al:1 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

На сервере 2:

root@server2:~# cat /proc/drbd version: 8.4.7 (api:1/proto:86-101) srcversion: AC50E9301653907249B740E 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r----- ns:0 nr:8 dw:8 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

На сервере 1:

root@server1:~# mount ... /dev/drbd0 on /var/www type ext3 (rw,relatime,data=ordered)

И вот что я вижу после перезагрузки. Все работает, но потеряны установка, запуск службы и первичная / вторичная конфигурации. Я пытался добавить drbd для начала, сделав это:

update-rc.d drbd defaults

на обоих серверах это не работает. DRBD просто не запускается, а выполняет вручную /etc/init.d/drdb start отлично работает на обоих серверах.

Также я не уверен, могу ли я просто добавить тома DRBD в fstab потому что, конечно, это не сработает, если служба DRBD даже не запустится? Я читал об использовании _netdev в fstab но различные комбинации fstab записи не сложились.


Наконец, мне также нужно устанавливать первичный и вторичный статус DRBD каждый раз, когда я перезагружаюсь, а затем заново монтирую том вручную.

Итак, вот как я получаю его работу после перезагрузки:

На сервере 1:

root@server1:/etc# /etc/init.d/drbd status ● drbd.service - LSB: Control DRBD resources. Loaded: loaded (/etc/init.d/drbd; generated; vendor preset: enabled) Active: inactive (dead) Docs: man:systemd-sysv-generator(8)

root@server1:/etc# /etc/init.d/drbd start [ ok ] Starting drbd (via systemctl): drbd.service. root@jmtest1:/etc# cat /proc/drbd version: 8.4.7 (api:1/proto:86-101) srcversion: AC50E9301653907249B740E 0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r----- ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

root@server1:/etc# drbdadm primary r0

root@server1:/etc# cat /proc/drbd version: 8.4.7 (api:1/proto:86-101) srcversion: AC50E9301653907249B740E 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----- ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

На сервере 2:

root@server2:~# /etc/init.d/drbd status ● drbd.service - LSB: Control DRBD resources. Loaded: loaded (/etc/init.d/drbd; generated; vendor preset: enabled) Active: inactive (dead) Docs: man:systemd-sysv-generator(8)

root@server2:~# /etc/init.d/drbd start [ ok ] Starting drbd (via systemctl): drbd.service.

root@server2:~# cat /proc/drbd version: 8.4.7 (api:1/proto:86-101) srcversion: AC50E9301653907249B740E 0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r----- ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

root@server2:~# drbdadm secondary r0

root@server2:~# cat /proc/drbd version: 8.4.7 (api:1/proto:86-101) srcversion: AC50E9301653907249B740E 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r----- ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

Некоторые fstab записи, которые я пробовал:

/dev/drbd0 /var/www ext3 _netdev 0 2 UUID=042cc2e395b2b32 /var/www ext3 none,noauto 0 0

Не уверен, что вы должны использовать UUID или просто /dev/drbd0

У меня есть вопросы, почему он не запускается:

  1. Какие записи FSTAB должны быть там?
  2. Почему update-rc.d drbd defaults не работает?
  3. Почему мне нужно сбрасывать первичный и вторичный на обоих серверах после каждого перезапуска?

Здесь есть что распаковать, но я начну с того, что скажу: эта версия DRBD устарела! Вам следует обновить его до 8.4.11 (на момент написания статьи, декабрь 2018 г.) или перейти в ветку 9. Но вопросы, которые вы задаете, можно решить с помощью той версии, которую вы используете.

Давайте взглянем на три ваших вопроса, которые вы задали в конце поста:

  1. Какие записи FSTAB должны быть там?

Нет, в идеале. Прежде чем использовать DRBD-устройства, их необходимо продвигать. Fstab - не лучший вариант даже для блочных устройств DRBD-9, которые могут автоматически продвигаться, так как в большинстве случаев он мешает процессу загрузки, что не все в порядке. Но технически это может работать со многими оговорками.

  1. Почему update-rc.d drbd по умолчанию не работает?

Не делай так. Debian использует systemd, а DRBD имеет файл модуля systemd. Вы должны использовать это, ЕСЛИ вы не используете диспетчер кластеров, который я настоятельно рекомендую. Таким образом, в отсутствие диспетчера ресурсов кластера Pacemaker вы должны выпускать такие вещи, как # sytemctl enable drbd чтобы он запускался при загрузке. Или # systemctl start drbd для запуска службы после ее остановки. Наиболее распространенные команды - это запуск, остановка, перезапуск, включение и отключение.

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

Потому что DRBD не имеет понятия о выборах лидера. Внешняя система должна повысить ресурс DRBD до основного, и одновременно может быть только один основной. Есть много способов сделать это.

Вы можете «вручную» продвигать ресурс с помощью # drbdadm primary <resource> а затем смонтировать вещи оттуда - но этого вы хотите избежать. DRBD может "автоматически продвигаться" в версии 9, которая автоматически продвигает ресурс при попытке открыть его блочное устройство для доступа (например, при монтировании файловой системы или активации группы томов), но используемая вами версия не может этого сделать. (обновление? Это мощь хватит вам). ИЛИ вы можете использовать систему выборов лидера с конечным числом состояний для управления действиями по продвижению и обеспечения состояния как DRBD, так и поддерживаемого им стека приложений. Это кардиостимулятор.

Вы хотеть Я обещаю, кардиостимулятор. Кардиостимулятор не слишком сложен, но он очень большой. Вам не придется многому учиться, чтобы достичь того, чего вы хотите. Вы можете потратить много времени и энергии на создание «идеального» кластера, который будет противостоять любому отказу под солнцем, и эти усилия будут вознаграждены. Это хорошая система.

Комбинация Corosync / Pacemaker, DRBD-9.x или DRBD-8.4.x последней версии, и все, что у вас есть, должно автоматически выполнять то, что вы хотите. Существует множество документов, в которых подробно описано, как это сделать. Вот один из последних:

https://docs.linbit.com/docs/users-guide-9.0/#ch-pacemaker

Я бы порекомендовал прочитать это руководство, если у вас есть время. DRBD претерпел серьезную эволюцию за последние несколько лет.

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

Я описал в этом посте [ Nagios / Icinga: не показывать CRITICAL для разделов DRBD на резервном узле ] как мне удается делать именно то, что вы ожидаете, с помощью opensvc, и он отлично работает годами.

  • нет необходимости в записях fstab, поскольку подключения описаны в файле конфигурации службы opensvc, который автоматически синхронизируется между узлами кластера opensvc

  • не нужно настраивать update-rc.d drbd defaults потому что стек opensvc модифицирует модуль drbd, когда видит, что у вас есть ресурсы drbd в некоторых службах, а затем вызывает drbd в первичном / вторичном состояниях

  • чтобы получить доступ к первичному / вторичному при загрузке, просто настройте nodes параметр в DEFAULT раздел файла конфигурации службы opensvc.

    Если вы хотите server1 в качестве основного и server2 как вторичный, просто установите nodes=server1 server2 используя команду svcmgr -s mydrbdsvc set --kw DEFAULT.nodes="server1 server2"

  • если вы хотите, чтобы служба запускалась только при загрузке server1, установить orchestrate=start параметр с помощью команды svcmgr -s mydrbdsvc set --kw DEFAULT.orchestrate=start

  • если вы хотите, чтобы служба была организована только в режиме высокой доступности (что означает автоматическое переключение между узлами), установите orchestrate=ha параметр с помощью команды svcmgr -s mydrbdsvc set --kw DEFAULT.orchestrate=ha

  • чтобы переместить службу с одного узла на другой, вы можете использовать svcmgr -s mydrbdsvc switch команда