Openfiler, настройка сетевого хранилища с репликацией Active/Passive с помощью Corosync, Pacemaker и DRBD.

Openfiler это основаный на Linux NAS/SAN приложение для создания сетевого хранилища данных посредством nfs/smb/iscsi и ftp, а также удобный Web-интерфейс для управления этими службами посредством браузера.

  • 1. Создание системы и ее установка:

hostname: nas1
eth0: 192.168.10.1 (внешний IP, если сервера находятся например в дата-центре, и требуется к ним доступ, в локальной сети достаточно двух интерфейсов)
eth1: 10.0.100.101 (IP локальной сети для раздачи ресурсов)
eth2: 10.0.111.1 (Подсеть межву двумя нодами, для репликации напрямую)
500MB Meta partition
4GB+ Data partition

hostname: nas2
(сетевые интерфейсы аналогично)
eth0: 192.168.10.2
eth1: 10.0.100.102
eth2: 10.0.111.2
500MB Meta partition
4GB+ Data partition

Вообще по сетевым интерфейсам я бы советовал для eth1 и eth2 использовать агрегацию портов.
virtualip: 10.0.100.105 (не использует физических адаптеров создается посредством corosync)

  • 1.1 Создаем hosts файлы для более простого доступа на обоих нодах

root@nas1 ~# nano /etc/hosts
10.0.100.102 nas2

root@nas2 ~# nano /etc/hosts
10.0.100.101 nas1

  • 1.2 Создаем и обмениваемся SSH ключами для более удобного обмена файлами.

root@nas1 ~# ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):
Created directory ‘/root/.ssh’.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
46:1a:b2:da:94:4c:d7:97:8b:9f:3f:6d:a0:96:0b:8c root@nas1
The key’s randomart image is:

Тоже самое выполняем на nas2.

root@nas2 ~# ssh-keygen -t dsa

Теперь обмениваемся файлами.

root@nas1 ~# scp ~/.ssh/id_dsa.pub root@nas2:~/.ssh/authorized_keys
root@nas2 ~# scp ~/.ssh/id_dsa.pub root@nas1:~/.ssh/authorized_keys

Теперь можно обменивать файлави между нодами без использования паролей.

  • 2. Создание meta/data раздела на nas1 и nas2.

Прежде чем мы сможем реально использовать кластер, мы должны подготовить обе системы, и синхронизировать meta раздел прежде чем возможно будет использовать corosync/pacemaker , но перед этим мы настроим DRBD.

  • 2.1 Настроим DRBD

редактируем /etc/drbd.conf on nas1 and nas2:

# You can find an example in /usr/share/doc/drbd…/drbd.conf.example
include «drbd.d/global_common.conf»;
#include «drbd.d/*.res»;
resource meta {
on nas1 {
device /dev/drbd0;
disk /dev/sda4;
address 10.0.111.1:7788;
meta-disk internal;
}
on nas2 {
device /dev/drbd0;
disk /dev/sda4;
address 10.0.111.2:7788;
meta-disk internal;
}
}
resource data {
on nas1 {
device /dev/drbd1;
disk /dev/sda5;
address 10.0.111.1:7789;
meta-disk internal;
}
on nas2 {
device /dev/drbd1;
disk /dev/sda5;
address 10.0.111.2:7789;
meta-disk internal;
}
}

После этого создаем meta/data разделы если вы столкнулись с ошибками при создании, проверьте /etc/fstab на наличие записей относящихся к разделам которые вы используете, в моем случае это /dev/sda4 и /dev/sda5, если таковые имеются удалите их. И если у вас что-то было на этих разделах выполните например dd if=/dev/zero of=/dev/sda5 bs=4M, в противном случае при попытке создания drdb устройства у вас могут возникать ошибки.

Создаем разделы

root@nas1 ~# drbdadm create-md meta
root@nas1 ~# drbdadm create-md data

и

root@nas2 ~# drbdadm create-md meta
root@nas2 ~# drbdadm create-md data

Теперь можно запустить drbd на обеих нодах:

service drbd start

Делаем nas1 основным (Primary):

root@nas1 ~# drbdsetup /dev/drbd0 primary -o
root@nas1 ~# drbdsetup /dev/drbd1 primary -o

  • 2.2 Подготавливаем раздел конфигурации.

root@nas1 ~# mkfs.ext3 /dev/drbd0
root@nas1 ~# service openfiler stop

  • 2.2.1 Переносим настройки Openfiler на meta-Partition

root@nas1 ~# mkdir /meta
root@nas1 ~# mount /dev/drbd0 /meta
root@nas1 ~# mv /opt/openfiler/ /opt/openfiler.local
root@nas1 ~# mkdir /meta/opt
root@nas1 ~# cp -a /opt/openfiler.local /meta/opt/openfiler
root@nas1 ~# ln -s /meta/opt/openfiler /opt/openfiler
root@nas1 ~# rm /meta/opt/openfiler/sbin/openfiler
root@nas1 ~# ln -s /usr/sbin/httpd /meta/opt/openfiler/sbin/openfiler
root@nas1 ~# rm /meta/opt/openfiler/etc/rsync.xml
root@nas1 ~# ln -s /opt/openfiler.local/etc/rsync.xml /meta/opt/openfiler/etc/
root@nas1 ~# mkdir -p /meta/etc/httpd/conf.d

  • 2.2.2 Переносим конфигурационные файлы Samba/NFS/ISCSI/PROFTPD на Meta Partition

root@nas1 ~# service nfslock stop
root@nas1 ~# umount -a -t rpc-pipefs
root@nas1 ~# mkdir /meta/etc
root@nas1 ~# mv /etc/samba/ /meta/etc/
root@nas1 ~# ln -s /meta/etc/samba/ /etc/samba
root@nas1 ~# mkdir -p /meta/var/spool
root@nas1 ~# mv /var/spool/samba/ /meta/var/spool/
root@nas1 ~# ln -s /meta/var/spool/samba/ /var/spool/samba
root@nas1 ~# mkdir -p /meta/var/lib
root@nas1 ~# mv /var/lib/nfs/ /meta/var/lib/
root@nas1 ~# ln -s /meta/var/lib/nfs/ /var/lib/nfs
root@nas1 ~# mv /etc/exports /meta/etc/
root@nas1 ~# ln -s /meta/etc/exports /etc/exports
root@nas1 ~# mv /etc/ietd.conf /meta/etc/
root@nas1 ~# ln -s /meta/etc/ietd.conf /etc/ietd.conf
root@nas1 ~# mv /etc/initiators.allow /meta/etc/
root@nas1 ~# ln -s /meta/etc/initiators.allow /etc/initiators.allow
root@nas1 ~# mv /etc/initiators.deny /meta/etc/
root@nas1 ~# ln -s /meta/etc/initiators.deny /etc/initiators.deny
root@nas1 ~# mv /etc/proftpd /meta/etc/
root@nas1 ~# ln -s /meta/etc/proftpd/ /etc/proftpd
root@nas1 ~# mkdir /meta/etc/sysconfig
root@nas1 ~# mv /etc/sysconfig/iscsi-target /meta/etc/sysconfig/
root@nas1 ~# ln -s /meta/etc/sysconfig/iscsi-target /etc/sysconfig/iscsi-target

  • 2.2.3 httpd Modules for Openfiler

root@nas1 ~# rm /opt/openfiler/etc/httpd/modules
root@nas1 ~# ln -s /usr/lib64/httpd/modules /opt/openfiler/etc/httpd/modules

Теперь можно опять запустить Openfiler

root@nas1 ~# service openfiler start

  • 2.2.4 настройка nas2 Openfiler

root@nas2 ~# service openfiler stop
root@nas2 ~# mkdir /meta
root@nas2 ~# mv /opt/openfiler/ /opt/openfiler.local
root@nas2 ~# ln -s /meta/opt/openfiler /opt/openfiler

  • 2.2.5 Переносим конфигурационные файлы Samba/NFS/ISCSI/PROFTPD на Meta Partition

root@nas2 ~# service nfslock stop
root@nas2 ~# umount -a -t rpc-pipefs
root@nas2 ~# rm -rf /etc/samba/
root@nas2 ~# ln -s /meta/etc/samba/ /etc/samba
root@nas2 ~# rm -rf /var/spool/samba/
root@nas2 ~# ln -s /meta/var/spool/samba/ /var/spool/samba
root@nas2 ~# rm -rf /var/lib/nfs/
root@nas2 ~# ln -s /meta/var/lib/nfs/ /var/lib/nfs
root@nas2 ~# rm -rf /etc/exports
root@nas2 ~# ln -s /meta/etc/exports /etc/exports
root@nas2 ~# rm /etc/ietd.conf
root@nas2 ~# ln -s /meta/etc/ietd.conf /etc/ietd.conf
root@nas2 ~# rm /etc/initiators.allow
root@nas2 ~# ln -s /meta/etc/initiators.allow /etc/initiators.allow
root@nas2 ~# rm /etc/initiators.deny
root@nas2 ~# ln -s /meta/etc/initiators.deny /etc/initiators.deny
root@nas2 ~# rm -rf /etc/proftpd
root@nas2 ~# ln -s /meta/etc/proftpd/ /etc/proftpd
root@nas2 ~# rm /etc/sysconfig/iscsi-target
root@nas2 ~# ln -s /meta/etc/sysconfig/iscsi-target /etc/sysconfig/iscsi-target

  • 2.3 Подготовка раздела Data

Изменим lvm filter в файле /etc/lvm/lvm.conf
Заменим строку

filter = [ "a/.*/" ]

на

filter = [ "a|drbd[0-9]|», «r|.*|» ]

Изменить данный файл нужно на обоих нодах.
После все что было сделано, создадим LVM раздел.

root@nas1 ~# pvcreate /dev/drbd1
root@nas1 ~# vgcreate data /dev/drbd1
root@nas1 ~# lvcreate -L 400M -n filer data

  • 3. Запуск и создание конфигурации для Corosync:
  • 3.1 Создание ключа аутентификации для Corosync

root@nas1~# corosync-keygen

( Теперь нажимаем случайно кнопки на клавиатуре в терминале. )
Копируем ключ аутентификации на nas2:

root@nas1~# scp /etc/corosync/authkey root@nas2:/etc/corosync/authkey
root@nas2~# chmod 400 /etc/corosync/authkey

  • 3.2 Создаем файл с именем pcmk /etc/corosync/service.d/pcmk

root@nas1~# nano /etc/corosync/service.d/pcmk

С содержимым:

service {
# Load the Pacemaker Cluster Resource Manager
name: pacemaker
ver: 0
}

Копируем его на nas2

root@nas1~# scp /etc/corosync/service.d/pcmk root@nas2:/etc/corosync/service.d/pcmk

  • 3.3 Создаем файл corosync.conf и изменяем bindnetaddr, на подсеть в которой у нас настроена репликация, в моем случае это 10.0.111.0

root@nas1~# nano /etc/corosync/corosync.conf

Содержимое:

# Please read the corosync.conf.5 manual page
compatibility: whitetank
totem {
version: 2
secauth: off
threads: 0
interface {
ringnumber: 0
bindnetaddr: 10.0.111.0
mcastaddr: 226.94.1.1
mcastport: 5405
ttl: 1
}
}
logging {
fileline: off
to_stderr: no
to_logfile: yes
to_syslog: yes
logfile: /var/log/cluster/corosync.log
debug: off
timestamp: on
logger_subsys {
subsys: AMF
debug: off
}
}
amf {
mode: disabled
}

Копируем этот файл на nas2:

root@nas1~# scp /etc/corosync/corosync.conf root@nas2:/etc/corosync/corosync.conf

  • 4. Подготовка к первому запуску corosync

Сначала мы отключим на наших нодах некоторые сервесы, которые будет обрабатывать corosync

root@nas1~# chkconfig —level 2345 openfiler off
root@nas1~# chkconfig —level 2345 nfslock off
root@nas1~# chkconfig —level 2345 corosync on

Тоже самое делаем на nas2

root@nas2~# chkconfig —level 2345 openfiler off
root@nas2~# chkconfig —level 2345 nfslock off
root@nas2~# chkconfig —level 2345 corosync on

теперь перегрузите обе ноды.

  • 4.1 Проверяем запустился ли corosync.

root@nas1~# ps auxf

в выводе должно быть что-то вроде:

oot 2074 0.0 0.1 66240 2820 ? S 22:40 0:00 \_ /usr/lib64/heartbeat/stonithd
106 2075 0.0 0.2 65812 4952 ? S 22:40 0:00 \_ /usr/lib64/heartbeat/cib
root 2076 0.0 0.1 68896 2296 ? S 22:40 0:00 \_ /usr/lib64/heartbeat/lrmd
106 2077 0.0 0.1 66604 3116 ? S 22:40 0:00 \_ /usr/lib64/heartbeat/attrd
106 2078 0.0 0.1 66992 2756 ? S 22:40 0:00 \_ /usr/lib64/heartbeat/pengine
106 2079 0.0 0.1 74832 3420 ? S 22:40 0:00 \_ /usr/lib64/heartbeat/crmd

и

root@nas2~# crm_mon —one-shot -V

в выводе должно быть что-то вроде:

crm_mon[2159]: 2011/08/20_22:48:17 ERROR: unpack_resources: Resource start-up disabled since no STONITH resources have been defined
crm_mon[2159]: 2011/08/20_22:48:17 ERROR: unpack_resources: Either configure some or disable STONITH with the stonith-enabled option
crm_mon[2159]: 2011/08/20_22:48:17 ERROR: unpack_resources: NOTE: Clusters with shared data need STONITH to ensure data integrity
============
Last updated: Sat Aug 20 22:48:17 2011
Stack: openais
Current DC: nas2 — partition with quorum
Version: 1.1.2-c6b59218ee949eebff30e837ff6f3824ed0ab86b
2 Nodes configured, 2 expected votes
0 Resources configured.
============
Online: [ nas2 nas1 ]

  • 4.2 Последующая настройка Corosync

Запустим мониторинг состояния кластера на nas2:
root@nas2~# crm_mon

  • 4.2.1 Пошаговая настройка corosync

Заходим в консоль corosync.

root@nas1~# crm configure
crm(live)configure#

В консоли выполняем следующие команды.

property stonith-enabled=»false»
property no-quorum-policy=»ignore»
rsc_defaults $id=»rsc-options» resource-stickiness=»100″
primitive ClusterIP ocf:heartbeat:IPaddr2 \
params ip=»10.0.100.105″ cidr_netmask=»32″ \
op monitor interval=»30s»
primitive MetaFS ocf:heartbeat:Filesystem \
params device=»/dev/drbd0″ directory=»/meta» fstype=»ext3″
primitive lvmdata ocf:heartbeat:LVM \
params volgrpname=»data»
primitive drbd_meta ocf:linbit:drbd \
params drbd_resource=»meta» \
op monitor interval=»15s»
primitive drbd_data ocf:linbit:drbd \
params drbd_resource=»data» \
op monitor interval=»15s»
primitive openfiler lsb:openfiler
primitive iscsi lsb:iscsi-target
primitive samba lsb:smb
primitive nfs lsb:nfs
primitive nfslock lsb:nfslock
group g_drbd drbd_meta drbd_data
group g_services MetaFS lvmdata openfiler ClusterIP iscsi samba nfs nfslock
ms ms_g_drbd g_drbd \
meta master-max=»1″ master-node-max=»1″ \
clone-max=»2″ clone-node-max=»1″ \
notify=»true»
colocation c_g_services_on_g_drbd inf: g_services ms_g_drbd:Master
order o_g_servicesafter_g_drbd inf: ms_g_drbd:promote g_services:start
commit

Выходим и запускаем монитор ресурсов, что бы убедится что все заработало.

root@nas1 ~# crm_mon

  • 4.2.2 Поиск неисправностей.

Если вы получаете различные ошибки при применении конфигурации попробуйте просто очистить MetaFS.

root@filer01~# crm
crm(live)# resource cleanup MetaFS

  • 4.2.3 Проверка конфигурации

Для проверки конфигурации выполните

root@nas1~#crm configure show
node nas1
node nas2
primitive ClusterIP ocf:heartbeat:IPaddr2 \
params ip=»10.0.100.105″ cidr_netmask=»32″ \
op monitor interval=»30s»
primitive MetaFS ocf:heartbeat:Filesystem \
params device=»/dev/drbd0″ directory=»/meta» fstype=»ext3″
primitive drbd_data ocf:linbit:drbd \
params drbd_resource=»data» \
op monitor interval=»15s»
primitive drbd_meta ocf:linbit:drbd \
params drbd_resource=»meta» \
op monitor interval=»15s»
primitive iscsi lsb:iscsi-target
primitive lvmdata ocf:heartbeat:LVM \
params volgrpname=»data»
primitive nfs lsb:nfs
primitive nfslock lsb:nfslock
primitive openfiler lsb:openfiler
primitive samba lsb:smb
group g_drbd drbd_meta drbd_data
group g_services MetaFS lvmdata openfiler ClusterIP iscsi samba nfs nfslock
ms ms_g_drbd g_drbd \
meta master-max=»1″ master-node-max=»1″ clone-max=»2″ clone-node-max=»1″ notify=»true»
colocation c_g_services_on_g_drbd inf: g_services ms_g_drbd:Master
order o_g_servicesafter_g_drbd inf: ms_g_drbd:promote g_services:start
property $id=»cib-bootstrap-options» \
dc-version=»1.1.2-c6b59218ee949eebff30e837ff6f3824ed0ab86b» \
cluster-infrastructure=»openais» \
expected-quorum-votes=»2″ \
stonith-enabled=»false» \
no-quorum-policy=»ignore» \
last-lrm-refresh=»1313866914″
rsc_defaults $id=»rsc-options» \
resource-stickiness=»100″

Оставить комментарий

*