В этой записи поговорим о автоматизации синхронизации файлов конфигурации на узлах нашего 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 необходимо добавлять на всех серверах.