CDN на коленке: Часть 3. Синхронизируем узлы

В этой записи поговорим о автоматизации синхронизации файлов конфигурации на узлах нашего cdn. Строго говоря описанный ниже способ применим и к синхронизации данных, но мы этого делать не будем, так как этим занимаются веб-серверы. Для синхронизации будем использовать старый проверенный Csync2.

Csync2 входит в состав большинства современных дистрибутивов. Например в Debian/Ubuntu установку можно выполнить так:

root@cdn1:~# apt-get install csync2

После установки необходимо создать сертификат для шифрования трафика синхронизации:

root@cdn1:~# openssl genrsa \
-out /etc/csync2_ssl_key.pem 2048
root@cdn1:~# openssl req -new \
-key /etc/csync2_ssl_key.pem \
-out /etc/csync2_ssl_cert.csr
root@cdn1:~# openssl x509 -req -days 3650 \
-in /etc/csync2_ssl_cert.csr \
-signkey /etc/csync2_ssl_key.pem \
-out /etc/csync2_ssl_cert.pem

Так же понадобится pre-shared-key который используется для авторизации узлов внутри группы синхронизации:

root@cdn1:~# csync2 -k /etc/csync2.key

Созданные файлы (кроме csr) нужно разнести по всем узлам внутри группы синхронизации, как и конфигурационный файл /etc/csync2.cfg:

group cdn {
        host cdn1.rascal.su;
        host cdn2.rascal.su;

        key /etc/csync2.key;
        include /etc/nginx;

        action {
                pattern /etc/nginx/nginx.conf;
                pattern /etc/nginx/sites-enabled/*;
                pattern /etc/nginx/sites-available/*;
                exec "/etc/init.d/nginx reload";
                logfile "/var/log/csync2_action.log";
        do-local;
        }

        backup-directory /var/backups/csync2;
        backup-generations 3;
        auto none;
}

Выполняем начальную синхронизацию:

root@cdn1:~# csync2 -xv

Если изменения планируется производить только на одном узле, то нужно добавить в crontab на этом сервере сроку вида:

*/5 * * * *       /usr/sbin/csync2 -x

Если изменения планируется производить на всех серверах, то подобную строку в crontab необходимо добавлять на всех серверах.