0

Настройка CentOS для работы с Shared Storage

Задача: Организовать доступ в тестовом режиме к 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, рекомендаций, но так и не добились, что бы при неожиданном отказе одного из серверов, второй продолжал работать. В случае за корректного завершения работы — все прекрасно.

Alexey Egorychev

FreeBSD and Linux sysadmin. Know many systems like mailsystems, DB, WWW stack. Automation with salt, ansible. Monitoring with nagios, zabbix.