У меня есть отличная рабочая версия 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
У меня есть вопросы, почему он не запускается:
update-rc.d drbd defaults
не работает?Здесь есть что распаковать, но я начну с того, что скажу: эта версия DRBD устарела! Вам следует обновить его до 8.4.11 (на момент написания статьи, декабрь 2018 г.) или перейти в ветку 9. Но вопросы, которые вы задаете, можно решить с помощью той версии, которую вы используете.
Давайте взглянем на три ваших вопроса, которые вы задали в конце поста:
Нет, в идеале. Прежде чем использовать DRBD-устройства, их необходимо продвигать. Fstab - не лучший вариант даже для блочных устройств DRBD-9, которые могут автоматически продвигаться, так как в большинстве случаев он мешает процессу загрузки, что не все в порядке. Но технически это может работать со многими оговорками.
Не делай так. Debian использует systemd, а DRBD имеет файл модуля systemd. Вы должны использовать это, ЕСЛИ вы не используете диспетчер кластеров, который я настоятельно рекомендую. Таким образом, в отсутствие диспетчера ресурсов кластера Pacemaker вы должны выпускать такие вещи, как # sytemctl enable drbd
чтобы он запускался при загрузке. Или # systemctl start drbd
для запуска службы после ее остановки. Наиболее распространенные команды - это запуск, остановка, перезапуск, включение и отключение.
Потому что 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
команда