++ ВведениеДанная статья описывает механизм развертывания файлового сервера на предварительно поднятом кластере высокой готовности (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.me/tips/info/2297.shtml