Иногда возникает необходимость иметь одинаковые конфиги на разных машинах. И не хочется постоянно копировать их туда-сюда по scp. При этом в случае изменения файла нужно, чтобы файлы обновился на всех машинах. Например фронт-энды на nginx с идентичными конфигами. Для этого можно писать свои скрипты, использовать rsync и т.д. Или использовать более мощные системы управления типа chef или puppet. Для небольших кластеров проще использовать csync2.
Инсталяция
Стандартно ставим пакет из репозитария
Сертификаты
Затем стоит прочитать /usr/share/doc/csync2/README.Debian, где описано как создать ssl-сертификаты для взаимодействия серверов. Либо выполнить следующие команды:
После создания сертификатов создаем уникальный ключ для кластера:
Конфигурация
Прописываем /etc/hosts адреса нод кластера:
Создаем каталог для логов:
Ротейтим будущие логи через logrotate для этого создаем файл /etc/logrotate.d/csync2:
Создаем конфиг /etc/csync2.cfg:
Тестируем
Перед первым использованием необходимо забэкапить всё, что планируете синхронить. Т.к. выбрано правило обновления younger -- новые файлы заменяют старые.
Необходимо скопировать на все ноды кластера файлы /etc/csync2.*
Первый раз я сгенерировал ssl-сертификаты на каждой ноде отдельно и раскопировал только ключ кластера(csync2.cluster.key) и не мог понять почему у меня выдается ошибка при синхоронизации.
Выполняем тестовые синхронизацию на всех нодах, для проверки работоспособности:
Если есть проблемы, то стоит проверить подключение через telnet host 30865. Возможно блокирует фаерволл, либо не запущен inetd (необходимо, чтобы был установлен пакет openbsd-inetd по умолчанию притягивается из зависимостей).
Автоматизируем синхронизацию
И добавляем в /etc/crontab запуск csync2:
Замечание
Рассмотрен самый простой вариант синхронизации. Для того, чтобы узнать все возможности стоит прочитать документацию, где достаточно доступно всё изложено на 10 страницах.
Инсталяция
Стандартно ставим пакет из репозитария
~$ sudo aptitude install csync2
Сертификаты
Затем стоит прочитать /usr/share/doc/csync2/README.Debian, где описано как создать ssl-сертификаты для взаимодействия серверов. Либо выполнить следующие команды:
~$ sudo openssl genrsa -out /etc/csync2_ssl_key.pem 1024 ~$ sudo openssl req -new -key /etc/csync2_ssl_key.pem -out /etc/csync2_ssl_cert.csr ~$ sudo openssl x509 -req -days 600 -in /etc/csync2_ssl_cert.csr \ -signkey /etc/csync2_ssl_key.pem -out /etc/csync2_ssl_cert.pem
После создания сертификатов создаем уникальный ключ для кластера:
~$ sudo csync2 -k /etc/csync2.cluster.key
Конфигурация
Прописываем /etc/hosts адреса нод кластера:
192.168.101.101 nginx-101 192.168.101.102 nginx-102 192.168.101.103 nginx-103
Создаем каталог для логов:
~$ mkdir /var/log/csync2
Ротейтим будущие логи через logrotate для этого создаем файл /etc/logrotate.d/csync2:
/var/log/csync2/*.log { daily missingok rotate 7 compress delaycompress notifempty }
Создаем конфиг /etc/csync2.cfg:
group nginx { host nginx-101 nginx-102 nginx-103; key /etc/csync2.cluster.key; auto younger; include /etc/hosts; include /etc/crontab; include /etc/csync2.cfg; include /etc/nginx; include /etc/logrotate.d/csync2; action { pattern /etc/nginx/*; exec "/etc/init.d/nginx reload"; logfile /var/log/csync2/csync2-nginx.log; do-local; } }
Тестируем
Перед первым использованием необходимо забэкапить всё, что планируете синхронить. Т.к. выбрано правило обновления younger -- новые файлы заменяют старые.
Необходимо скопировать на все ноды кластера файлы /etc/csync2.*
Первый раз я сгенерировал ssl-сертификаты на каждой ноде отдельно и раскопировал только ключ кластера(csync2.cluster.key) и не мог понять почему у меня выдается ошибка при синхоронизации.
Выполняем тестовые синхронизацию на всех нодах, для проверки работоспособности:
~$ sudo csync2 -xvvЧем больше букв v, тем выше уровень логирования.
Если есть проблемы, то стоит проверить подключение через telnet host 30865. Возможно блокирует фаерволл, либо не запущен inetd (необходимо, чтобы был установлен пакет openbsd-inetd по умолчанию притягивается из зависимостей).
Автоматизируем синхронизацию
И добавляем в /etc/crontab запуск csync2:
*/15 * * * * root /usr/sbin/csync2 -xv >> /var/log/csync2/csync.log 2>&1 15 7 * * * * root /usr/sbin/csync2 -Rv >> /var/log/csync2/csync.log 2>&1
Замечание
Рассмотрен самый простой вариант синхронизации. Для того, чтобы узнать все возможности стоит прочитать документацию, где достаточно доступно всё изложено на 10 страницах.
Комментариев нет:
Отправить комментарий