Строим кластер на CentOS 6 и iscsi в Nas4Free

server farmВ данной статье я Вам расскажу о построении кластера на основе CentOS 6 и таргетов iSCSI.

Задача: экономичность дискового пространства, увеличить отказоустойчивость и производительность системы.

Сервера:

storage (установлен Nas4Free на флешку, диски собраны на аппаратном RAID 10)
rcstar-node01 — 160gb SATA 2
rcstar-node02 — 160gb SATA 2
rcstar-node03 — 160gb SATA 2
rcstar-manager — 320gb SATA 2

 

В качестве файловой системы я выбрал GFS2 — кластерная система.

Работаем с CentOS.
Для начала мы отключим не нужное и обновим систему (все сервера):

Приводим строку в файле /etc/selinux/config к виду:

1
SELINUX=disabled

И выполняем:

1
2
3
4
yum clean all
yum -y upgrade
yum -y install gfs2-utils
setenforce 0

Если у Вас установлен репозиторий epel отрубите перед установкой кластера, либо добавьте ricci и luci в список исключаемых пакетов для epel. Иначе будете иметь проблемы ;)

После загрузки всех серверов продолжим установку кластера. Выполняем на всех серверах

1
yum groupinstall "High Availability" "Resilient Storage"

И на нашем менеджере еще ставим:

1
yum groupinstall "High Availability Management"

Добавляем правила на всех серверах:

1
2
3
4
5
iptables -A INPUT -s 192.168.0.0/23 -m udp --dport 5404 -j ACCEPT
iptables -A INPUT -s 192.168.0.0/23 -m udp --dport 5405 -j ACCEPT
iptables -A INPUT -s 192.168.0.0/23 -m tcp --dport 1111 -j ACCEPT
iptables -A INPUT -s 192.168.0.0/23 -m tcp --dport 21064 -j ACCEPT
iptables -A INPUT -s 192.168.0.0/23 -m tcp --dport 16851 -j ACCEPT

И на менеджере выполняем еще одну:

1
iptables -A INPUT -s 192.168.0.1/23 -m tcp --dport 8084 -j ACCEPT

И снова на всех

1
service iptables save

таблица сервисов:

1
2
3
4
5
5404, 5405 UDP corosync/cman (Cluster Manager)
11111 TCP ricci (вещает все ноды об изменениях в кластере)
21064 TCP dlm (Distributed Lock Manager)
16851 TCP modclusterd
8084 TCP luci (вебморда на менеджере)

На всех нодах устанавливаем пароль пользователю ricci

1
passwd ricci

Выполняем команды на всех серверах

1
2
3
4
5
6
chkconfig ricci on
service ricci start
chkconfig cman on
chkconfig clvmd on
chkconfig rgmanager on
chkconfig modclusterd on

Только на менеджере:

1
2
chkconfig luci on
service luci start

Редактируем файл /etc/hosts на всех серверах:

1
2
3
4
5
6
127.0.0.1 localhost.localdomain localhost
192.168.0.1 rcstar-node01 rcstar-node01.rcstar.net
192.168.0.2 rcstar-node02 rcstar-node02.rcstar.net
192.168.0.3 rcstar-node03 rcstar-node03.rcstar.net
192.168.0.10 manager manager.rcstar.net
192.168.0.11 storage storage.rcstar.net

Заходим по IP

//192.168.0.10:8084

Дальнейшие два действия выполняются в веб-интерфейсе и интуитивно понятны, по этому я не буду их детально описывать.
Вводим пароль к учетной запись root, создаем кластер с именем RcSTAR, вводим в ноды в кластер (выбирайте перезагрузку ноды и шаринг медиа).
Создаем в Nas4Free iscsi порталы и цели, в аутентификации указываем пароли и пользователи. На каждой ноде настраиваем таргет, указываем CHAP и пароль с Nas4Free.

На любой из нод выполняем:

1
2
iscsiadm -m discovery -t sendtargets -p storage
service iscsi restart

смотрим как подключился диск iscsi:

1
dmesq| tail

У меня он определился, как sdb. Создаем первичный раздел и форматируем в GFS2 на sdb1:

fdisk /dev/sdb
vgcreate stor_vg /dev/sdb1
vcreate -L +1TB -n stor_lv stor_vg

1
mkfs.gfs2 -p lock_dlm -t RcSTAR:storage -j 2 /dev/mapper/stor_vg-stor_lv

Я создал 2 журнала, и допустил ошибку. Вы можете создать сразу больше журналов, либо выполнить команду gfs2_jadd -j2 /home после монтирования. Эта команда добавит еще 2 журнала.

В параметре -t Указывайте имя Вашего кластера (у меня RcSTAR) и имя тома.

Добавляем строку в ftsab для автомонтирования раздела в каждой ноде.

1
/dev/mapper/stor_vg-stor_lv /home gfs2 defaults 0 0

Перезагружаем все ноды. При правильной настройке все ноды должны подхватить таргет, который настраивался на одной ноде. Если же нет — смотрим логи.

Настраиваем сервисы как надо ;) Можете добавить в сеть лоадбалансер (haproxy,Varnish) и спокойно дальше дышать.

При настройке кластера я использовал также bonding (LACP, агрегация каналов). Напишу чуть пожже свою статью.

Пока что есть эти — //www.alsigned.ru/?p=2896&cpage=1#comment-8215 и //advancelinux.blogspot.com/2012/01/bonding-in-rhel-6.html.