В бизнес решениях зачастую очень важна откуазоустоичивость реализованного решения, ведь простой, компании достаточно дорого обходится, наша с вами задача реализовать отказоустойчивые решения для корпоративной среды. Что нам потребуется: 2 компьютера или виртуальных машины, с двумя сетевыми картами(каждая), linux(использован centos 6.4), по разделу без файловой системы на каждой машине, прямые руки.
Изначально нужно настроить службу которая будет синхронизировать данные между дисками двух систем. Для этого можно использовать DRBD
DRBD (Distributed Replicated Block Device — распределённое реплицируемое блочное устройство) — это блочное устройство, предназначенное для построения отказоустойчивых кластерных систем на операционной системе Linux. DRBD занимается полным отражением (mirroring) по сети всех операций с блочным устройством. Можно считать, что DRBD это сетевой RAID-1.
Перед установкой проыедем настройку серверов: у каждого из них должен быть внутренний и внеший адрес, один из них используется для синхронизайии второй для работы с внешнем миром. у каждого сервера должен быть указан hostname, в нашем случае cl1.cl и cl2.cl
Для усановки потребуется подключить доп репохиторий .
rpm -Uvh http://elrepo.org/elrepo-release-6-4.el6.elrepo.noarch.rpm
vi /etc/yum.repos.d/elrepo.repo
enabled=0
yum –enablerepo=elrepo install drbd83-utils kmod-drbd83
После установки DRBD пристепим к настроике: у нас имеется наразмеченный раздел на наших серверах и называется он /dev/sda3.
Внесем в конфигурационный файл DRBD ./etc/drbd.d/global_common.conf следуюшее:
global { usage-count yes; }
#участвовать в глобальном подсчете пользоватей
common { syncer { rate 10M; } }
#установка скорости канала для синхронизации
resource r0 {
#начало описания ресурса
protocol C;
#протокол синхронизации
net {
cram-hmac-alg sha1;
#проверка хеша
shared-secret «bombom»;
#секрктный ключ
}
on cl1.cl {
#описание устроиств на первом сервере
device /dev/drbd0;
# будет создано виртуальное устроиство
disk /dev/sda3;
# раздел на котором находится информация
address 10.10.10.1:7789;
# адрес и порт для синхронизации
meta-disk internal;
# метаданные хранятся на диске
}
on cl2.cl {
device /dev/drbd0;
disk /dev/sda3;
address 10.10.10.2:7789;
meta-disk internal;
}
}
Описание протоколов:
Protocol A: write IO is reported as completed, if it has reached
local disk and local TCP send buffer.
Protocol B: write IO is reported as completed, if it has reached
local disk and remote buffer cache.
Protocol C: write IO is reported as completed, if it has reached
both local and remote disk.
Перед конфигурированием иногда может понадобится загрузить модуль ядра drbd
modprobe drbd
Копируем конфигурационный файл на вторй сервер и выполняем команду:
drbdadm create-md r0
на двух серверах. при успешном ее выполнение, запускаем drbd
service drbd start
проверяем статус устроиства
cat /proc/drbd
если видим строку
0: cs:Connected st:Secondary/Secondary ds:Inconsistent/Inconsistent C r---
значит устроиство создано успешно и обе ноды находятся в состояние Secondary.
одну из них нам нужно перевести в сотстояние primary;
Сделаем это на первом сервере cl1.cl
drbdadm -- --overwrite-data-of-peer primary r0
после этого начнетя процесс синхронизации нод
для просмотра наберите
watch cat /proc/drbd
После синхронизации можно проверить стостояние нод командой:
drbdadm dstate r0
Результат UpToDate/UpToDate говорит о рабочем состояние системы.
Создадим файловую систему на нашем новом блочном устроистве.
mkfs -t ext3 /dev/drbd0
Создадим точку монтирование для файловой системы:
mkdir /mnt/drbd0
Смонтируем в него наше устроиство
mount /dev/drdb0 /mnt/drdb0
Для проверки можно создать на нем несколько файлов и папок.
размонтируем устроиство, и и понизим статус ноды до вторичной.
umount /mnt/drbd0
drbdadm secondary r0
На втором сервере сделаем повысим статус ноды до primary, создадим точку монтирования, смонтируем блочное устроиство и посмотрим файлы на нем.
drbdadm primary r0
mkdir /mnt/drbd0
mount /dev/drdb0 /mnt/drdb0
Если в /mnt/drbd0 появились наши файлы, значит полет проходит нормально и система работоспособна.
если не получилось очищаем устроиство и делаем все заново
drbdadm – –assume-clean resize r0