Задача: Организовать доступ в тестовом режиме к Shared storage (multi-write), выделенном в VMWare на два хоста. Операционная система — CentOS 6.5
В качестве решения используется GFS2.
GFS2 — Global File System. Это распределенная файловая система, позволяющая использовать доступное дисковое простанство несколькими хостами одновременно.
Это позволяет обеспечить отказоустойчивое решение. В случае отказа одного хоста второй продолжает работать.
Подготовка хостов
Дальнейшие действия нужно проделать на обоих хостах.
Синхронизация времени
Синхронизация времени крайне важна для хостов, работающих в кластере, поэтому ntpd устанавливаю и настраиваю в первую очередь.
# yum install ntp
# chkconfig ntpd on
# service ntpd start
Необходимые пакеты
Установка необходимых пакетов.
# yum -y install modcluster rgmanager gfs2 gfs2-utils cman
Hostnames
Для того, чтобы хосты видели друг друа по имени вношу записи о них в /etc/hosts
:
192.168.1.12 www1 192.168.1.13 www2
Firewall
В /etc/sysconfig/iptables
добавляю:
# modclusterd -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m state --state NEW -m tcp --dport 16851 -j ACCEPT # ricci -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m state --state NEW -m tcp --dport 11111 -j ACCEPT # dlm -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m state --state NEW -m tcp --dport 21064 -j ACCEPT # cman -A INPUT -s 192.168.1.0/24 -p udp -m addrtype --dst-type MULTICAST -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p udp -m state --state NEW -m multiport --dports 5404,5405 -j ACCEPT
Применяю правила
# service iptables restart
Создание кластера
Создаю новый кластер:
# ccs_tool create cluster1
Добавляю в кластер ноды:
# ccs_tool addnode -n 1 -v 1 www1
# ccs_tool addnode -n 2 -v 1 www2
Если не хочется то же самое делать на втором хосте, можно сделать так:
# scp /etc/cluster/cluster.conf root@www2:/etc/cluster/cluster.conf
Стартую все службы на обоих хостах
# service modclusterd start
# chkconfig modclusterd on
# service cman start
# chkconfig cman on
Файловая система GFS2
While a GFS2 file system may be used outside of LVM, Red Hat supports only GFS2 file systems that are created on a CLVM logical volume. CLVM is included in the Resilient Storage Add-On. It is a cluster-wide implementation of LVM, enabled by the CLVM daemon clvmd, which manages LVM logical volumes in a cluster. The daemon makes it possible to use LVM2 to manage logical volumes across a cluster, allowing all nodes in the cluster to share the logical volumes.
Речь о том, что RedHat поддерживает работу GFS2 поверх Cluster LVM. Поэтому предварительно на выделенном shared storage выделяю LVM:
# pvcreate /dev/sdb
# vgcreate shared /dev/sdb
# lvcreate -l100%FREE -n lv_shared shared
Затем создаю файловую систему GFS2.
# mkfs.gfs2 -p lock_dlm -t cluster1:GFS -j 2 /dev/shared/lv_shared
Теперь можно монтировать и проверять чтение/запись.
# mount /dev/sdb /path/to/directory
Убеждаюсь, что clvmd запущен:
# chkconfig clvmd on
# service clvmd start
Добывляю запись о GFS2 разделе в /etc/fstab
/dev/shared/lv_shared /path/to/directory gfs2 defaults 0 0
Не забываю про сервис GFS2
# chkconfig gfs2 on
# service gfs2 start
На этом настройка окончена.
P.S. Эта схема отлично работает до тоо момента, как один из серверов по какой либо причине станет недоступен (холодный рестарт, например). Мы перечитали кучу документаций, howto, рекомендаций, но так и не добились, что бы при неожиданном отказе одного из серверов, второй продолжал работать. В случае за корректного завершения работы — все прекрасно.