Поиск по сайту:

Как установить и настроить DRBD на CentOS


На этой странице

  1. 1. Предварительное примечание
  2. 2. Этап установки
  3. 3. Этап проверки
  4. 5. Конфигурация DRBD
  5. 6. Этап тестирования DRBD

В этом руководстве объясняется, как установить и настроить DRBD для вашего сервера. Прежде чем я начну, позвольте мне объяснить, что на самом деле представляет собой DRBD и для чего он используется. DRBD расшифровывается как распределенное реплицированное блочное устройство. Это программное решение для реплицированного хранилища без общего доступа, предназначенное для зеркального отображения содержимого блочных устройств, таких как жесткие диски, разделы, логические тома и т. д. Основная цель DRBD – предоставить альтернативное решение для столкнуться со сценариями высокой доступности, такими как отказоустойчивость или аварийное восстановление. Вы можете просмотреть основные детали на его веб-сайте здесь  .

1. Предварительное примечание


Для этого руководства я использую CentOS 6.4 в 32-разрядной версии. Конечный результат примера покажет, как создавать файлы или папки внутри раздела на сервере A и успешно отображать весь контент на другом сервере (сервере B) с помощью DRBD.

Ниже приведен эскиз архитектуры сервера:

+-----------------------------------+                                                    +------------- ------------------+
| [Сервер DRBD A]                 | 192.168.43.101 | 192.168.43.102     | [ Сервер DRBD B ]         |
| OEL641                               +----------------------+-----------------------+      OEL642 |
| папкаA                                 | | папкаB                  |
+--------------------------------------------------+                                                        +------- ----------------------+

Это руководство совместимо с любой версией CentOS/Redhat/Oracle Linux 6. Необходимо, чтобы сервер, на который вы хотите установить DRBD, имел свободное блочное устройство. В этом примере показано, как настроить и использовать блочное устройство /dev/sdb1.

2. Этап установки


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

yum -y update 
yum -y install gcc make automake autoconf libxslt libxslt-devel flex rpm-build kernel-devel
Setting up Install Process
Package gcc-4.4.7-3.el6.i686 already installed and latest version
Package 1:make-3.81-20.el6.i686 already installed and latest version
Package automake-1.11.1-4.el6.noarch already installed and latest version
Package autoconf-2.63-5.1.el6.noarch already installed and latest version
Package libxslt-1.1.26-2.0.2.el6_3.1.i686 already installed and latest version
Package libxslt-devel-1.1.26-2.0.2.el6_3.1.i686 already installed and latest version
Package flex-2.5.35-8.el6.i686 already installed and latest version
Package rpm-build-4.8.0-32.el6.i686 already installed and latest version
Package kernel-devel-2.6.32-358.el6.i686 already installed and latest version

Мы должны сделать вышеуказанный шаг на обоих серверах.

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

Ниже приведены шаги.

Сначала я создаю папку в пути /root/ с именами BUILD, BUILDROOT и т. д. Этот путь необходим для хранения файла rpm после сборки пакетов DRBD.

mkdir -p /root/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

Загрузите пакеты DRBD.

wget http://oss.linbit.com/drbd/drbd-utils-latest.tar.gz http://oss.linbit.com/drbd/8.4/drbd-8.4.7-1.tar.gz

Извлеките файлы пакета drbd-8.4.7-1.tar.gz и drbd-utils-latest.tar.gz.

tar -zxvf drbd-8.4.7-1.tar.gz
tar -zxvf drbd-utils-latest.tar.gz

Скомпилируйте пакет DRBD.

cd drbd-8.4.7-1 
drbd-8.4.7-1]# make km-rpm
...
...
You have now:
/root/rpmbuild/RPMS/i686/drbd-km-debuginfo-8.4.7-1.i686.rpm
/root/rpmbuild/RPMS/i686/drbd-km-2.6.32_358.el6.i686-8.4.7-1.i686.rpm

Скомпилируйте и настройте пакет.

cd ..
cd drbd-utils-8.9.6
./configure
make rpm
...
...
You have now:
/root/rpmbuild/RPMS/i686/drbd-utils-8.9.6-1.el6.i686.rpm
/root/rpmbuild/RPMS/i686/drbd-debuginfo-8.9.6-1.el6.i686.rpm
/root/rpmbuild/RPMS/i686/drbd-heartbeat-8.9.6-1.el6.i686.rpm
/root/rpmbuild/RPMS/i686/drbd-xen-8.9.6-1.el6.i686.rpm
/root/rpmbuild/RPMS/i686/drbd-km-debuginfo-8.4.7-1.i686.rpm
/root/rpmbuild/RPMS/i686/drbd-pacemaker-8.9.6-1.el6.i686.rpm
/root/rpmbuild/RPMS/i686/drbd-bash-completion-8.9.6-1.el6.i686.rpm
/root/rpmbuild/RPMS/i686/drbd-km-2.6.32_358.el6.i686-8.4.7-1.i686.rpm
/root/rpmbuild/RPMS/i686/drbd-8.9.6-1.el6.i686.rpm
/root/rpmbuild/RPMS/i686/drbd-udev-8.9.6-1.el6.i686.rpm

Перейдите в /root/rpmbuild/RPMS/i686. Пакеты rpm из компиляции будут существовать внутри и устанавливать соответствующие пакеты rpm.

cd /root/rpmbuild/RPMS/i686
rpm -Uvh drbd-xen* drbd-udev* drbd-pacemaker* drbd-bash-completion* drbd-utils-*.rpm drbd-km-*.rpm drbd-8*
Preparing... ########################################### [100%]
1:drbd-utils ########################################### [ 13%]
2:drbd-xen ########################################### [ 25%]
3:drbd-udev ########################################### [ 38%]
4:drbd-pacemaker ########################################### [ 50%]
5:drbd-bash-completion ########################################### [ 63%]
6:drbd ########################################### [ 75%]
7:drbd-km-2.6.32_358.el6.########################################### [ 88%]
8:drbd-km-debuginfo ########################################### [100%]


Сделав это на первом сервере, выполните те же действия на сервере OEL642.

3. Этап проверки


Сейчас мы на полпути к завершению. Давайте сосредоточимся на настройке OEL641. Во-первых, подтвердите имя хоста своего сервера. Это важно, поскольку для настройки DRBD потребуется такое же имя, как и имя хоста. Ниже приведены шаги:

uname -n
OEL641

Затем обновите модуль DRBD.

modprobe drbd
lsmod |grep drbd
drbd 341783 0
libcrc32c 841 1 drbd

4. Вот и все, теперь мы создадим новый раздел диска, который будет действовать как диск DRDB. Вот у меня новый диск /dev/sdb. Я создам раздел /dev/sdb1 и использую его как диск DRBD.

fdisk -l
Disk /dev/sdb: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
fdisk /dev/sdb
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-130, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-130, default 130):
Using default value 130
Command (m for help): p
Device Boot Start End Blocks Id System
/dev/sdb1 1 130 1044193+ 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
fdisk -l
Disk /dev/sdb: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x89770d51
Device Boot Start End Blocks Id System
/dev/sdb1 1 130 1044193+ 83 Linux

После этого повторите шаги для OEL642.

5. Конфигурация DRBD


Теперь мы подходим к последнему шагу — настройке DRBD. По сути, нам нужно установить, какой раздел диска и сервера должен действовать под модулем DRBD. Для этого мы создадим файл ответов, как показано ниже, и скопируем его на OEL642, чтобы оба сервера имели одинаковую конфигурацию.

cd /etc/drbd.d/
vi s1.res
resource s1 {
on OEL641 {
device /dev/drbd1;
disk /dev/sdb1;
address 192.168.43.101:7799;
meta-disk internal;
}
on OEL642 {
device /dev/drbd1;
disk /dev/sdb1;
address 192.168.43.102:7799;
meta-disk internal;
}
}

Скопируйте файл с scp на второй сервер:

scp /etc/drbd.d/s1.res :/etc/drbd.d/s1.res

После этого нам нужно инициализировать раздел на обоих серверах. Ниже приведены шаги:

drbdadm create-md s1
initializing activity log
NOT initializing bitmap
Writing meta data...
New drbd meta data block successfully created.
success

s1 — это имя ресурса, которое мы определили в файле s1.res выше.

Войдите на сервер OEL642 и выполните те же действия, что и выше:

drbdadm create-md s1
initializing activity log
NOT initializing bitmap
Writing meta data...
New drbd meta data block successfully created.
success


Теперь вернитесь на сервер OEL641, и мы сможем запустить службу DRBD. Ниже приведены шаги: -

/etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.4.7-1 (api:1/proto:86-101)
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by ~]# /etc/init.d/drbd start
Starting DRBD resources: [
create res: s1
prepare disk: s1
adjust disk: s1
adjust net: s1
]
..........
***************************************************************
DRBD's startup script waits for the peer node(s) to appear.
- If this node was already a degraded cluster before the
reboot, the timeout is 0 seconds. [degr-wfc-timeout]
- If the peer was available before the reboot, the timeout
is 0 seconds. [wfc-timeout]
(These values are for resource 's1'; 0 sec -> wait forever)
To abort waiting enter 'yes' [ 26]:
.


Обратите внимание, что служба DRBD еще не запущена. Это связано с тем, что сервер OEL641 ищет службу DRBD на OEL642.

Поэтому в это время войдите в OEL642 и запустите службу DRBD так же, как вы делали это в OEL641. Вы заметите, что после запуска службы DRBD на OEL642 служба DRBD на OEL641 прекратит ожидание и также запустится.

После этого статус службы DRBD будет отображаться на обоих серверах, как показано ниже:

/etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.4.7-1 (api:1/proto:86-101)
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by , 2016-08-20 01:23:44
m:res cs ro ds p mounted fstype
1:s1 Connected Secondary/Secondary Inconsistent/Inconsistent C


Теперь выполните следующие действия только на сервере OEL641. Это необходимо для инициализации того, кто будет первоначальным первичным сервером.

drbdadm -- --overwrite-data-of-peer primary s1
/etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.4.7-1 (api:1/proto:86-101)
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by , 2016-08-20 01:23:44
m:res cs ro ds p mounted fstype
... sync'ed: 0.8% (1037872/1044124)K
1:s1 SyncSource Primary/Secondary UpToDate/Inconsistent C

Затем проверьте OEL642:

/etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.4.7-1 (api:1/proto:86-101)
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by , 2016-08-20 01:23:44
m:res cs ro ds p mounted fstype
... sync'ed: 12.2% (921244/1044124)K
1:s1 SyncTarget Secondary/Primary Inconsistent/UpToDate C


В приведенном выше отчете о состоянии вы можете заметить, что теперь сервер OEL641 подтвержден как основной, а OEL642 – как дополнительный.

Это означает, что теперь любые файлы или папки, которые мы создадим в разделе DRBD на сервере OEL641, будут синхронизированы с разделом DRBD на OEL642.

6. Этап тестирования DRBD

Теперь мы подошли к заключительной части, которая посвящена тестированию службы DRBD, чтобы убедиться, что она соответствует поставленной задаче.

Во-первых, давайте смонтируем раздел DRBD.

Выполните описанные ниже шаги один раз ТОЛЬКО на основном сервере OEL641!

mkfs.ext3 /dev/drbd1
...
...
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done


Это форматирует раздел с файловой системой ext3.

Теперь создайте папку и подключите к ней раздел DRBD.

mkdir /folderA
mount /dev/drbd1 /folderA
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/drbd1 1004M 18M 936M 2% /folderA
cd /folderA/
ls -h
lost+found

Как показано выше, новая папка с именем folderA успешно создана.

Теперь давайте создадим файл размером 30Mb внутри папки:

dd if=/dev/zero of=/folderA/testfile bs=1M count=30
30+0 records in
30+0 records out
31457280 bytes (31 MB) copied, 0.178448 s, 176 MB/s
ls -lh
total 31M
drwx------. 2 root root 16K Aug 21 08:55 lost+found
-rw-r--r--. 1 root root 30M Aug 21 09:09 testfile


Это были предварительные условия, давайте начнем тестировать процесс.

В конечном итоге, как только мы смонтируем раздел DRBD на сервере OEL642, тестовый файл должен существовать внутри папки.

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

/etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.4.7-1 (api:1/proto:86-101)
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by , 2016-08-20 01:23:44
m:res cs ro ds p mounted fstype
1:s1 Connected Primary/Secondary UpToDate/UpToDate C /folderA ext3
umount /folderA
drbdadm secondary s1
/etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.4.7-1 (api:1/proto:86-101)
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by , 2016-08-20 01:23:44
m:res cs ro ds p mounted fstype
1:s1 Connected Secondary/Secondary UpToDate/UpToDate C


Теперь оба сервера DRBD находятся в вторичном состоянии. Давайте перейдем к серверу OEL642 и изменим его состояние с вторичного на первичное.

Сначала создайте пустую папку и смонтируйте ее в раздел DRBD на OEL642:

mkdir /folderB
cd /folderB
ls -lh
total 0
/etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.4.7-1 (api:1/proto:86-101)
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by , 2016-08-20 01:23:44
m:res cs ro ds p mounted fstype
1:s1 Connected Secondary/Secondary UpToDate/UpToDate C
drbdadm primary s1
/etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.4.7-1 (api:1/proto:86-101)
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by , 2016-08-20 01:23:44
m:res cs ro ds p mounted fstype
1:s1 Connected Primary/Secondary UpToDate/UpToDate C
mount /dev/drbd1 /folderB
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_oel641-lv_root
96G 3.5G 88G 4% /
tmpfs 640M 80K 640M 1% /dev/shm
/dev/sda1 485M 32M 428M 7% /boot
/dev/drbd1 1004M 48M 906M 5% /folderB
ls -lh /folderB/
total 31M
drwx------. 2 root root 16K Aug 21 08:55 lost+found
-rw-r--r--. 1 root root 30M Aug 21 09:09 testfile


После того, как вы успешно смонтировали раздел DRBD в новую папку, вы заметите, что файл, который вы создали на сервере OEL641, автоматически существует!


ГОТОВО! Вы успешно установили и настроили DRBD на CentOS!