++ ВведениеДанная статья описывает механизм развертывания файлового сервера на предварительно поднятом кластере высокой готовности (High-Aviability).
Предполагается, что все кластерные службы, а так же службы обеспечения высокой готовности настроены и запущены. В моем случае, кластер состоит из 2-х узлов.
++ Собственно ПО
В данном случае использован следующий набор ПО для High-Aviability:
Операционная система - CentOS 5.4
Кластерное ПО - все от RedHat (группы пакетов "Cluster" и "Cluster Storage")
Файловая система для общего хранилища - GFS2.
Репликация дисков DRBD8 (замечу, все узлы в режиме "primary")
Механизм "сердцебиения" - опционально(далее поясню, почему) - HeartBeat.
Для файлсервера: Samba 3.3 и CTDB 1.0.82
++ Установка, настройка и запуск
То, что описано ниже, делаем на всех узлах кластера.
Для начала собираем CTDB из исходных текстов
cd ctdb
./autogen.sh
./configure
make
make install
После этого необходимо создать и отредактировать основные конфигурационные файлы, служащие для запуска и работы CTDB.
1. Создать файл /etc/sysconfig/ctdb.sysconfig:
CTDB_RECOVERY_LOCK="/synchronized/lock"
CTDB_PUBLIC_INTERFACE=eth0
CTDB_PUBLIC_ADDRESSES=/usr/local/etc/ctdb/public_addresses
CTDB_MANAGES_SAMBA=yes
CTDB_INIT_STYLE=redhat
CTDB_NODES=/usr/local/etc/ctdb/nodes
CTDB_LOGFILE=/var/log/log.ctdb
В данном случае, этот файл не использует все возможные параметры, а лишь те, которые необходимы в данном случае:
CTDB_RECOVERY_LOCK="/synchronized/lock" - этот параметр описывает месторасположение файла, в котором хранится записи о том, какой из узлов является мастером восстановления. Файл lock должен располагаться на общем хранилище и быть доступным всем нодам,использующим CTDB.
CTDB_PUBLIC_INTERFACE=eth0 - этот параметр описывает сетевой интерфейс, на котором в данный момент времени поднято сетевое соединение.
CTDB_PUBLIC_ADDRESSES=/usr/local/etc/ctdb/public_addresses - этот параметр определяет файл, содержащий список IP-адресов, по которым клиенты, использующие Samba для доступа к файловым ресурсам, посылают запросы на соединение. Распределением этих адресов по нодам занимается CTDB.
CTDB_MANAGES_SAMBA=yes - этот параметр определяет, будет ли CTDB управлять запуском Samba-сервера вместо стандартных сценариев управления, которые реализует операционная система.
CTDB_INIT_STYLE=redhat - этот параметр описывает сценарии запуска служб для различных операционных систем.
CTDB_NODES=/usr/local/etc/ctdb/nodes - этот параметр определяет файл, в котором хранится информация об узлах кластера.
CTDB_LOGFILE=/var/log/log.ctdb - этот параметр определяет лог- файл, использующийся службой CTDB.
2. Создать файл /usr/local/etc/ctdb/nodes:
192.168.1.1
192.168.1.2
Здесь IP-адрес 192.168.1.1 принадлежит первой ноде, IP-адрес 192.168.1.2 - второй.
3. Создать файл /usr/local/etc/ctdb/public_addresses:
192.168.0.200/24 eth0
Это IP-адрес, за которым в DNS сервере закреплено доменное имя Samba-сервера.
Далее собираем самбу
cd samba-3.3.8/source
./autogen.sh
./configure --with-ctdb=/usr/src/ctdb --with-cluster-support \
--enable-pie=no --with-shared-modules=idmap_tdb2
make
make install
/usr/src/ctdb - каталог с исходными текстами CTDB, установленными ранее.
Правим smb.conf
Эти два параметра обязательно надо добавить в global. Остальное, по Вашим запросам.
clustering = Yes
idmap backend = tdb
++ Запуск Samba
Сначала запускаем CTDB на всех узлах кластера.
/usr/local/sbin/ctdbd
Проверяем, запустилось ли.
ctdb status
Если все конфигурационные файлы корректны,будет такое:
Number of nodes:2
pnn:0 192.168.1.1 OK (THIS NODE)
pnn:1 192.168.1.2 OK
Generation:1087563258
Size:2
hash:0 lmaster:0
hash:1 lmaster:1
Recovery mode:NORMAL (0)
Recovery master:0
Проверяем для начала параметры smb.conf
/usr/local/samba/bin/testparm
Load smb config files from /usr/local/samba/etc/smb.conf
Processing section "[public]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Запускаем самбу:
/usr/local/samba/sbin/smbd -D
/usr/local/samba/sbin/smbd -D
Далее, все как обычно, только не забывайте, что это не кластер, и все действия должны быть выполнены на всех узлах.
++ Тестирование
Для сравнения производительности Samba-сервера с использованием CTDB и без использования CTDB, а также возможностей файловой системы (общего хранилища) используется ряд тестовых модулей.
Скорость чтения данных
Чтение(MB/sec)
Клиент
1
2
3
4
Samba без CTDB
2,15
2,16
2,13
2,09
Samba + CTDB
24,73
23,42
23,26
23,15
Сервер был доступен по кналу 1 Гб/с, поэтому суммарно использовано около 75% пропускной способности.
Скорость записи идентична, не намного уступает, определяется скорее возможностями файловой системы.
Замечу, что с ростом узлов (до 8) скорость доступа к данным (скорость чтения/записи) стремительно растет.
++ Заключение
Предложенный вариант кластеризации Samba позволяет достичь некоторых результатов:
1. Высокая надежность и отказоустойчивость (читайте про CTDB). Потеря данных исключена.
2. Показатели производительности по сравнению с 1-серверными системами отличные.
Конфигурация годится для организации бюджетного кластерного файлового сервера, и при грамотной организации каналов связи (между узлами, клиент- сервер) обеспечит отличный уровень производительности.
++ Список источников
* http://ctdb.samba.org
* http://wiki.samba.org/index.php/Clustered_Samba
URL:
Обсуждается: http://www.opennet.dev/tips/info/2297.shtml