Итак, первое что нужно будет сделать - это организовать связь между серверами по кросс-кабелю.
Предположим, что дополнительные сетевые карты видны в системе как eth0. Поднимем локальную сеть:
Первый сервер: ifconfig eth0 192.168.1.1 up Второй сервер: ifconfig eth0 192.168.1.2 up
Проверяем - сервера должны пинговать друг-друга по этим IP. Если все в порядке, то нужно организовать автостарт этих IP, отредактировав файл /etc/network/interfaces:
Первый сервер:
auto eth0
iface eth0 inet static
address 192.168.1.1
netmask 255.255.255.0
Второй сервер:
auto eth0
iface eth0 inet static
address 192.168.1.1
netmask 255.255.255.0Однако обращаться к серверам по IP неудобно. Назовем их node1 и node2, отредактировав файл /etc/hosts на каждом сервере:
192.168.1.1 node1 192.168.1.2 node2
Следующим шагом будет создание общего диска, на котором будут лежать файлы для работы сайта. Для этих целей разумно будет создать LVM, от которого мы отцепим кусок и сделаем его сетевым. Приемущества этого подхода дают возможность увеличивать диск по мере его использования в онлайне (впрочем для этого файловая система должна поддерживать такую возможность) и автоматическое создание копии всей файловой системы перед ее синхронизацией (резервное копирование).
В случае автоматической установки на серверах Hetzner большая часть дискового пространства отошла в программный raid /dev/md3, который подмонтирован в /home. Переделаем из него LVM, предварительно удалив строку монтирования из /etc/fstab:
На node1 и node2: umount /dev/md3 apt-get install lvm2 psmisc pvcreate /dev/md3 vgcreate datavg /dev/md3
Теперь создадим там два куска по 5G для Apache и MySQL:
На node1 и node2: lvcreate -L 5G -n apache datavg lvcreate -L 5G -n mysql datavg
Для паралельной работы mysql мы будем использовать настоящий MySQL-кластер, настройки которого выходят за рамки этой статьи. Достаточно упомянуть только то, что эта кластеризация создается с помощью хранилища NDB и не требует общего диска. Так что LVM раздел mysql будет подключен на каждом из серверов отдельно.
А вот с Apache ситуация иная. Там потребуется общий диск и кластерная файловая система. Кроме того нужно будет следить за тем, чтобы при выходе любого из компонент кластера (общем диске, кластерной файловой системе или apache) на каком-то из серверов, отключить там все и перевести его в "аварийное" состояние, мигрировав IP аварийного сервера на оставшийся рабочий.
Сначала установим и настроим drbd. На обоих серверах выполняем команду:
apt-get install drbd-utils
Создаем общий сетевой диск с пропускной способностью 30% (подробности по ссылке http://www.drbd.org/users-guide-8.3/s-configure-syncer-rate.html) и автоматическим бекапом, создав на node1 и node2 файл /etc/drbd.d/r1.res с содержимым:
Взять отсюда: http://rascal.su/blog/2011/02/06/debian-squeeze-drbd-ocfs2/
С учетом http://www.drbd.org/users-guide/s-enable-dual-primary.html
Для ускореняи первоначальной синхронизации можно временно отдать всю пропускную способность при помощи команды
drbdsetup /dev/drbd1 syncer -r 80M
Наблюдать процесс синхронизации в реальном режиме времени можно при помощи команды
watch cat /proc/drbd
Отключаем автозапуск drbd и apache на node1 и node2. Теперь этим будет управлять кластер.
update-rc.d -f drbd remove
update-rc.d -f apache2 remove
Настраиваем http://publications.jbfavre.org/virtualisation/cluster-xen-corosync-pacemaker-drbd-ocfs2.en
Рабочий конфиг:
Комментировать