K
kenny
Гость
Csync2
Я не скрываю что мягко говоря недолюбливаю Debian.
Но вот пути неисповедимы как говорится. Достался по наследству парк серверов, выведенные в отдельную сетку и все как на зло на Debian. Задачу поставили довольно таки простую нужно синхронизировать и управлять конфигурациями на этих серверах, так как серверов всего на всего 12 штук решил не использовать Puppet хотя он реально хорош и предельно понятен .
Как говорится в рекламе не вопрос Коленька.
Порылся я в их репах, нашел софтинку csync2, полез на их сайт
Почитал в принципе все что нужно умеет и не надо заморачиваться с ruby
Что умеет:
•Синхронизировать парк машин
•Выполнять скрипты и команды на удаленных машинах
•Есть встроенная база данных
•Предельно прост в настройки, развернул я все это дело за 10-15 минут.
И так Debian и csync.
Стандартные команды:
В процессе установки вытащит еще sqllite.
Далее начинаем варить сертификаты.
Это нужно сделать на всех нодах.
Далее нужно создать сертификаты для самого csync и разложить на серверах
Процесс долгий можно сходить налить кофейку…….
После завершения нужно скопировать сертификат на все сервера, я копировал с помощью mussh, если серверов 2-4 то есть не много можно и scp скопировать.
Так вроде все, теперь начинаем конфигурацию, я конечно же не буду приводить реальный конфигурационный файл со своих серверов, он сугубо личный и с рядом нюансов.
Открываем файл конфигурации
vi /etc/csync2.cfg
Начнем с описание общей для всех серверов синхронизации.
Вот и все конфигурационный файл есть, простенький который разложит пользователей и папки.
Усложним. К примеру надо есть 6 серверов
n1,n2,n3,n4,n5,n6
На всех нужно синхронизировать csync2.cfg hosts
На n1,n2,n3 надо синхронизировать пользователей, домашние папки
На n4,n5 надо синхронизировать nginx точнее его конфигурационные файлы и корневые папки сайтов.
На n6 нужно просто копировать бекап.
Вот примерный конфигурационный файл
Стоит ответить что Ip-адреса программа не понимает в ноды надо указывать хостнеймы, то есть писать так как выводит команда uname -n
Все сохраняемся и запускаем синханихзацию
csync2 –x
Ждем окончания и радуемся
Ну последний шаг это добавить все в крон
Я сделал так
Чтобы исключить повторное выполнение, сохраняем допустим в /etc/lock.sh делаем исполняемым и добавляем в крон crontab –e
Для теста можете создать папку или файл и подождать 5 минут.
Я не скрываю что мягко говоря недолюбливаю Debian.
Но вот пути неисповедимы как говорится. Достался по наследству парк серверов, выведенные в отдельную сетку и все как на зло на Debian. Задачу поставили довольно таки простую нужно синхронизировать и управлять конфигурациями на этих серверах, так как серверов всего на всего 12 штук решил не использовать Puppet хотя он реально хорош и предельно понятен .
Как говорится в рекламе не вопрос Коленька.
Порылся я в их репах, нашел софтинку csync2, полез на их сайт
Почитал в принципе все что нужно умеет и не надо заморачиваться с ruby
Что умеет:
•Синхронизировать парк машин
•Выполнять скрипты и команды на удаленных машинах
•Есть встроенная база данных
•Предельно прост в настройки, развернул я все это дело за 10-15 минут.
И так Debian и csync.
Стандартные команды:
Код:
apt-get update && apt-get upgrade && apt-get install csync2 –y
Далее начинаем варить сертификаты.
Код:
openssl genrsa -out /etc/csync2_ssl_key.pem 1024
openssl req -new -key /etc/csync2_ssl_key.pem -out /etc/csync2_ssl_cert.csr
openssl x509 -req -days 600 -in /etc/csync2_ssl_cert.csr -signkey /etc/csync2_ssl_key.pem -out /etc/csync2_ssl_cert.pem
Далее нужно создать сертификаты для самого csync и разложить на серверах
Код:
csync2 -k /etc/csync2.key
После завершения нужно скопировать сертификат на все сервера, я копировал с помощью mussh, если серверов 2-4 то есть не много можно и scp скопировать.
Так вроде все, теперь начинаем конфигурацию, я конечно же не буду приводить реальный конфигурационный файл со своих серверов, он сугубо личный и с рядом нюансов.
Открываем файл конфигурации
vi /etc/csync2.cfg
Начнем с описание общей для всех серверов синхронизации.
Код:
group all {
host node1 node2 node3; #здесь идет список серверов их хостнеймы
key /etc/csync2.key;#ключ
include /etc/csync2.cfg; синхронизируем конфигурационный файл
К примеру вы хотите синхронизировать пользователей и папки между всеми нодами.
include /etc/passwd;
include /etc/group;
include /etc/gshadow;
include /etc/shadow;
include /home/*;
include /root/*;
auto younger; последнее что указываем то что надо разрешать конфликты.
}
Усложним. К примеру надо есть 6 серверов
n1,n2,n3,n4,n5,n6
На всех нужно синхронизировать csync2.cfg hosts
На n1,n2,n3 надо синхронизировать пользователей, домашние папки
На n4,n5 надо синхронизировать nginx точнее его конфигурационные файлы и корневые папки сайтов.
На n6 нужно просто копировать бекап.
Вот примерный конфигурационный файл
Код:
group all {
host n1 n2 n3 n4 n5 n6;
key /etc/csync2.key;
include /etc/csync2.cfg; синхронизируем конфигурационный файл
include /etc/hosts;
auto younger; последнее что указываем то что надо разрешать конфликты.
}
group home
{
host n1 n2 n3;
key /etc/csync2.key
include /etc/passwd;
include /etc/group;
include /etc/gshadow;
include /etc/shadow;
include /home/*;
include /root/*;
auto younger;
}
group web
{
host n1 n2 n3;
key /etc/csync2.key
include /etc/nginx;
include /var/www/*
action {
pattern /etc/nginx/*;
exec "/etc/init.d/nginx reload";
logfile "/var/log/csync2.actions.log";
do-local;
}
auto younger;
}
group home
{
host n6;
key /etc/csync2.key
include /usr/back/*;
auto younger;
}
Все сохраняемся и запускаем синханихзацию
csync2 –x
Ждем окончания и радуемся
Ну последний шаг это добавить все в крон
Я сделал так
Код:
#!/bin/sh
pid_file=/tmp/csync.pid
umask 333
(echo $$ > "$pid_file") 2>/dev/null
if [ $? -ne 0 ]
then
umask 22
echo "Already started :("
exit 1
fi
umask 22
/usr/sbin/csync2 -x
rm -f "$pid_file"
Код:
*/5 * * * * /etc/lock.sh