Синхронизация кластера с помощью Csync2

Утилита csync2 предоставляет хорошие возможности: - Высокая скорость работы. - Низкое потребление ресурсов (CPU, дисковые операции). Два этих фактора позволяют запускать процесс синхронизации максимально часто, поэтому данные на серверах становятся идентичными практически в “реальном времени”. - Простота настройки для обмена данными между любым количеством серверов. - Возможность синхронизации удаления файлов. - Защищенный обмен данными между хостами (SSL). - Подробная документация по использованию и конфигурированию csync2 доступна на официальном сайте разработчика Мы же рассмотрим пример конкретной конфигурации для двух веб-серверов в кластере.

В некоторых дистрибутивах Linux (например, в Ubuntu) csync2 уже присутствует в репозиториях и доступен для установки из пакетов. Для CentOS необходимо рассмотреть иные варианты установки (сборка из исходников, установка из доступных rpm).

Установка Centos

Устанавливаем необходимые доступные пакеты (библиотеки rsync используются в csync2, из xinetd будет запускаться серверная часть csync2):

yum install rsync librsync-devel xinetd
Устанавливаем libtasn1 - библиотеку для работы с X.509 (требуется для csync2):
wget http://ftp.freshrpms.net/redhat/testing/EL5/cluster/x86_64/libtasn1-1.1-1.el5/libtasn1-1.1-1.el5.x86_64.rpm 
wget http://ftp.freshrpms.net/redhat/testing/EL5/cluster/x86_64/libtasn1-1.1-1.el5/libtasn1-devel-1.1-1.el5.x86_64.rpm 
wget http://ftp.freshrpms.net/redhat/testing/EL5/cluster/x86_64/libtasn1-1.1-1.el5/libtasn1-tools-1.1-1.el5.x86_64.rpm 
rpm -ihv libtasn1-1.1-1.el5.x86_64.rpm libtasn1-devel-1.1-1.el5.x86_64.rpm libtasn1-tools-1.1-1.el5.x86_64.rpm

Устанавливаем sqlite (2-ой версии) - именно эта версия используется в csync2:

wget http://ftp.freshrpms.net/redhat/testing/EL5/cluster/x86_64/sqlite2-2.8.17-1.el5/sqlite2-2.8.17-1.el5.x86_64.rpm 
wget http://ftp.freshrpms.net/redhat/testing/EL5/cluster/x86_64/sqlite2-2.8.17-1.el5/sqlite2-devel-2.8.17-1.el5.x86_64.rpm 
rpm -ihv sqlite2-2.8.17-1.el5.x86_64.rpm sqlite2-devel-2.8.17-1.el5.x86_64.rpm
Устанавливаем непосредственно csync2:
wget http://ftp.freshrpms.net/redhat/testing/EL5/cluster/x86_64/csync2-1.34-4.el5/csync2-1.34-4.el5.x86_64.rpm 
rpm -ihv csync2-1.34-4.el5.x86_64.rpm

Сертификаты

После установки уже доступны сгенерированные SSL-сертификаты, однако, если их нужно сгенерировать заново, сделать это можно так:

openssl genrsa -out /etc/csync2/csync2_ssl_key.pem 1024 
openssl req -new -key /etc/csync2/csync2_ssl_key.pem -out /etc/csync2/csync2_ssl_cert.csr 
openssl x509 -req -days 600 -in /etc/csync2/csync2_ssl_cert.csr -signkey /etc/csync2/csync2_ssl_key.pem -out /etc/csync2/csync2_ssl_cert.pem

Ключи

На одном из хостов необходимо сгенерировать файл ключей, который затем будет необходимо разместить на всех серверах, которые будут участвовать в процессе синхронизации:

csync2 -k /etc/csync2/csync2.cluster.key
Файл csync2.cluster.key на всех машинах должен быть одинаковым и должен быть размещен в /etc/csync2/.

Конфигуратор

Пример конфигурационного файла /etc/csync2/csync2.cfg Обратим особое внимание на директиву host. В конфигурационном файле csync2 может быть задано несколько групп синхронизации. csync2 автоматически игнорирует те группы, в которых не задано локальное имя машины (которое можно посмотреть, например, с помощью команды hostname).
Поэтому имена машин, данные которых синхронизируются, не должны изменяться.
Используйте файл /etc/hosts для указания постоянных IP для конкретных имен. Чтобы задать фиксированное имя для каждого сервера укажите его в каком-либо файле:

echo "node1.demo-cluster.ru" > /etc/hostname
И в стартап-скрипте /etc/init.d/network предпоследней строкой (до exit) впишите:
/bin/hostname -F /etc/hostname
Если изначально каждый новый сервер создается уже с копией данных с других серверов: (например, в случае использования Amazon EC2 удобно сделать snapshot имеющегося instance, а затем подключить его для нового instance), то первая инициализация базы файлов для синхронизации выполняется с помощью команды:
csync2 -cIr
Делается это на каждом хосте.
Работа csync2 на каждом хосте состоит из двух частей - серверной и клиентской. Для запуска серверной части закомментируйте в файле /etc/xinetd.d/csync2 строку disable = yes, перезапустите сервис xinetd и разрешите его запуск при загрузке системы:
service xinetd restart 
chkconfig xinetd on
Клиентская часть - запуск csync2 с ключом “-x”.
Определите (в зависимости от объема данных) необходимую частоту обновлений и пропишите запуск csync2, например, через cron. Строка в /etc/crontab:
*/5 * * * * root /usr/sbin/csync2 -x >/dev/null 2>&1
означает запуск csync2 каждые 5 минут.

Опубликовано: 13.12.2024