Я кластер разведу руками, управляем парком серверов

Статус
В этой теме нельзя размещать новые ответы.
K

kenny

Гость
Csync2
Я не скрываю что мягко говоря недолюбливаю Debian.
Но вот пути неисповедимы как говорится. Достался по наследству парк серверов, выведенные в отдельную сетку и все как на зло на Debian. Задачу поставили довольно таки простую нужно синхронизировать и управлять конфигурациями на этих серверах, так как серверов всего на всего 12 штук решил не использовать Puppet хотя он реально хорош и предельно понятен .
Как говорится в рекламе не вопрос Коленька.
Порылся я в их репах, нашел софтинку csync2, полез на их сайт

Please Login or Register to view hidden text.


Почитал в принципе все что нужно умеет и не надо заморачиваться с ruby
Что умеет:
•Синхронизировать парк машин
•Выполнять скрипты и команды на удаленных машинах
•Есть встроенная база данных
•Предельно прост в настройки, развернул я все это дело за 10-15 минут.
И так Debian и csync.
Стандартные команды:
Код:
apt-get update && apt-get upgrade && apt-get install csync2 –y
В процессе установки вытащит еще sqllite.
Далее начинаем варить сертификаты.
Код:
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; 
}
Стоит ответить что Ip-адреса программа не понимает в ноды надо указывать хостнеймы, то есть писать так как выводит команда uname -n
Все сохраняемся и запускаем синханихзацию
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"
Чтобы исключить повторное выполнение, сохраняем допустим в /etc/lock.sh делаем исполняемым и добавляем в крон crontab –e
Код:
*/5 *   *  *    *   /etc/lock.sh
Для теста можете создать папку или файл и подождать 5 минут.
 

notebug

Пользователь
мне, человеку отдаленному от администрирования, интересно почитать такие статейки, чтобы немного абстрагироваться от своей рутины и посмотреть, чем народ живет...хотя бы в чтении пары строк кода. лайкаю
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху