NFS сервер · 6 min read · Jan 30, 2026

Высокодоступный NFS сервер с использованием DRBD и Heartbeat на Debian 5.0 (Lenny)

Высокодоступный NFS сервер с использованием DRBD и Heartbeat на Debian 5.0 (Lenny)

Этот HowTo объясняет, как я настроил высокодоступный NFS сервер с использованием Debian 5 (Lenny) и drbd8 с heartbeat.

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

Автор - Вишал Шарма
Создано - 9 марта 2010
Версия - 1.0

Отказ от ответственности - Этот HowTo предоставляется как есть и не имеет абсолютно никакой гарантии. Используйте его на свой страх и риск. Эти шаги сработали для меня. Поэтому, вероятно, они также сработают и для вас. Если у вас возникнут какие-либо проблемы, пожалуйста, оставьте свои комментарии ниже. Я постараюсь ответить на них как можно скорее.

Вот краткое резюме того, что вам нужно сделать:

Шаг 1. Подготовьте вашу систему. Это включает в себя настройку вашего базового оборудования и программного обеспечения. (Это не охватывается в этом HowTo.)

Шаг 2. Настройте необходимые IP-адреса.

Шаг 3. Установите необходимые пакеты.

Шаг 4. Отредактируйте соответствующие конфигурационные файлы.

Шаг 5. Запустите вашу систему.

Шаг 6. Протестируйте, чтобы убедиться, что она действительно работает.

ШАГ 1. Подготовка вашей системы

Я использую 3 системы Debian для этого. Все они являются стандартной установкой по умолчанию. Однако я изменил настройки, чтобы загрузить систему в текстовом режиме. Поскольку у меня не такое уж хорошее оборудование на моем компьютере, я предпочел бы поиграть с командной строкой.

Каждая система имеет встроенную сеть. Обычно в производственных системах это может быть не так. Но поскольку моя установка является просто экспериментальной, я не стал добавлять оборудование, которое обеспечивало бы лучшую производительность.

Если вы не хотите выделять отдельный компьютер, вы всегда можете использовать Sun VirtualBox для этого и настроить свою систему. Это гораздо проще, так как это дает вам возможность делать снимки системы перед внесением каких-либо значительных изменений в конфигурацию.

Моя тестовая установка здесь основана на 2 серверах и одном клиенте. В моем сценарии эта клиентская система является обычным NFS клиентом, монтирующим ресурсы с NFS сервера. Моя установка здесь является Активной/Пассивной, а не Активной/Активной. Таким образом, в любой момент времени, если ваша активная система выходит из строя, пассивная система возьмет на себя управление.

На server01 и server02 у меня есть 2 раздела, а именно

/dev/hdb1 - 500GB - который будет смонтирован как /data.

/dev/hdc1 - 500MB - это будет хранить метаданные drbd. Ему требуется минимум 128MB.

Убедитесь, что вы не монтируете ни один из этих разделов. Это будет обрабатываться drbd. Убедитесь, что вы просто создаете разделы и оставляете их как есть. Никакого форматирования, никаких монтирований пока.

ШАГ 2. Настройка необходимых IP-адресов

Вот как я назвал свои системы:

server01 - 192.168.1.2/24 (eth0)

server02 - 192.168.1.3/24 (eth0)

client01 - 192.168.1.4/24 (eth0)

Убедитесь, что у вас есть указанные выше записи в вашем файле /etc/hosts, чтобы разрешение имен не было проблемой. Это, вероятно, лучший вариант, и вы не захотите сталкиваться с настройкой DNS-сервера для этого.

192.168.1.5/24 будет моим виртуальным плавающим IP-адресом. Это адрес, который будет виден внешнему миру и будет перемещаться от системы к системе по мере изменения их состояния.

Мой шлюз по умолчанию - 192.168.1.1/24, который является моим маршрутизатором. Мне нужен доступ в Интернет для установки пакетов.

Шаг 3. Установка необходимых пакетов

Самое важное для правильной работы HA кластера - ВРЕМЯ. Время на системах должно быть одинаковым. Чтобы это обеспечить, убедитесь, что у вас установлены пакеты ntp.

server01# apt-get install ntp ntpdate

Выполните вышеуказанное на server01 и server02.

На серверах, т.е. server01 и server02, вам нужно установить следующие пакеты, чтобы начать работу.

drbd8, заголовочные файлы ядра, установка nfs-server и heartbeat. Вот что я сделал.

server01# apt-get update
server01# apt-get install linux-headers-`uname -r` drbd8-utils drbd8-source heartbeat nfs-kernel-server

(Это должно занять некоторое время для завершения.)

После завершения установки создайте модуль ядра drbd с помощью следующей команды:

server01# m-a a-i drbd8-source

Это выполнит компиляцию и создаст модуль ядра drbd.

server01# modprobe drbd
server01# lsmod | grep drbd

(Это должно показать вам что-то, если это не дает вам ничего, то есть какая-то проблема, которую нужно исправить.)

Отключите запуск nfs при загрузке. Это делается потому, что запуск и остановка nfs обрабатываются drbd, и мы не хотим, чтобы система вмешивалась.

server01# update-rc.d -f nfs-kernel-server remove
server01# update-rc.d -f nfs-common remove

Выполните те же шаги на server02.

Шаг 4. Создание / редактирование соответствующих конфигурационных файлов

Это файлы, которые вам нужно отредактировать на server01 и server02.

Чтобы обрабатывать NFS экспорты - /etc/exports - (на server01 и server02):

/data/export 192.168.1.0/255.255.255.0(rw)

Для конфигурации drbd - /etc/drbd.conf (на server01 и server02):

global {
usage-count yes;
}
common {
  syncer { rate 10M; }
}

resource r0 {
  protocol C;
  handlers {
    pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";
    pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";
    local-io-error "echo o > /proc/sysrq-trigger ; halt -f";
  }

  startup {
    degr-wfc-timeout 120;    # 2 минуты.
  }

  disk {
    on-io-error   detach;
  }

  net {
  }

  syncer {
    rate 10M;
    al-extents 257;
  }

on server01 {
    device /dev/drbd0;
    disk /dev/hdb1;
    address 192.168.1.2:7788;
    meta-disk /dev/hdc1[0];
  }

on server02 {
    device /dev/drbd0;
    disk /dev/hdb1;
    address 192.168.1.3:7788;
    meta-disk /dev/hdc1[0];
  }
}

Для heartbeat - /etc/ha.d/ha.cf - (на server01 и server02):

logfacility local0
keepalive 1
deadtime 10
bcast eth1
auto_failback on
node server01 server02

Настройка аутентификации heartbeat - /etc/heartbeat/authkeys - (на server01 и server02):

auth 3
3 md5 your_password

Вместо использования md5, вы также можете использовать sha1. Не забудьте сделать этот файл доступным для чтения/записи только для root.

chmod 600 /etc/heartbeat/authkeys 

(На server01 и server02.)

Для того, чтобы сделать ресурс ha доступным - /etc/ha.d/haresources - (на server01 и server02):

server01 IPaddr::192.168.1.100
server01 drbddisk::r0 Filesystem::/dev/drbd0::/data::ext3 nfs-kernel-server

(ПРИМЕЧАНИЕ: для server02 в файле haresources вы, должно быть, заметили, что я использовал то же имя хоста, т.е. server01. Это сделано для того, чтобы убедиться, что когда server01 доступен онлайн, server02 вернет контроль ему, и он станет вторичным. Пожалуйста, измените вышеуказанное имя хоста на server02, если вы хотите, чтобы он оставался первичным.)

После того, как вы сделали все вышеперечисленное, выполните эти команды, чтобы инициализировать метадиск drbd (на server01 и server02):

server01# drbdadm create-md r0 

( r0 это имя ресурса.)

server01# drbdadm up all

Выполните

cat /proc/drbd 

на server01 и server02, и вы увидите, что обе server01 и server02 находятся в режиме Secondary и они несогласованны. Это довольно очевидно, потому что мы еще не настроили систему nfs и не определили, какая система будет первичным сервером. В моем случае это server01. Поэтому я выполню следующие команды на server01:

server01# drbdsetup /dev/drbd0 primary -o
server01# mkfs.ext3 /dev/drbd0
server01# mkdir /data
server01# mount -t ext3 /dev/drbd0 /data

По умолчанию сервер nfs хранит свое состояние монтирования и блокировки в /var/lib/nfs, и мы хотим, чтобы это сохранялось в случае сбоя. Поэтому выполните это на server01:

server01# mv /var/lib/nfs/ /data/
server01# ln -s /data/nfs/ /var/lib/nfs
server01# mkdir /data/export
server01# umount /data
server01# cat /proc/drbd  

<— Посмотрите внимательно, и вы заметите, что server01 теперь является первичной системой.

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

mkdir /data
rm -fr /var/lib/nfs
ln -s /data/nfs /var/lib/nfs

Хм… это, в общем-то, и все. Вы закончили с точки зрения конфигурации. Теперь вперед, запускайте свои системы.

Шаг 5. Запуск вашей системы

Запустите необходимые службы на server01 и server02:

/etc/init.d/drbd start
/etc/init.d/heartbeat start

После успешного завершения вышеуказанного вы заметите, что server01 будет иметь дополнительный IP - 192.168.1.100 и /data смонтировано. Вы также можете проверить файл /proc/drbd для получения актуального статуса.

На server02 вы не должны видеть 192.168.1.100 и /data.

tail -f /var/log/messages

и наблюдайте за процессом.

Шаг 6. Тестирование, чтобы убедиться, что это действительно работает

Лучший способ протестировать это - сделать это по-настоящему и жестко. Просто выключите server01 и посмотрите, как server02 берет на себя управление. Следите за журналами захвата на server02. :)

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.