Blame view

clsync/inotify-to-many-nodes 3.74 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
++ Введение



Достаточно типичной задачей в системной администрировании является поддержание определённых файлов в синхронном состоянии на большом количестве узлов.



В рамках рассмотренных ниже примеров синхронизация будет производится по схеме master-slave для файлов из директории /opt/global (на master-узле) в директорию /opt/production (на slave-узлах).



++ Установка clsync



Установить clsync можно следующим образом:



   # Debian

   apt-get install clsync

   

   # Gentoo

   layman -a bircoph

   emerge --sync

   emerge clsync

   

   # FreeBSD

   git clone https://github.com/xaionaro/clsync

   cd clsync/freebsd/usr/ports/sysutils/clsync && make install clean

   

   # Other

   pushd /tmp

   git clone https://github.com/xaionaro/clsync

   cd clsync

   autoreconf -fi

   ./configure

   make install



++ pdcp



pdcp - это утилита позволяющая производить копирование файла на множество узлов посредством ssh.



Установка (на master-узле):



   # Debian:

   apt-get install pdsh

   # Gentoo:

   emerge pdsh

   # FreeBSD

   cd /usr/ports/sysutils/pdsh && make install clean



Подготовка (обычно этот этап не требуется, так как такие кластера делаются методом клонирования системы, однако для наглядности пример команд с master-узла):



   ssh-keygen -t ecdsa -b 521

   # Копирование ключей на все узлы

   for HOST in $(seq 16 31); do

       IP=192.168.0."$host"

       echo "$IP	n${HOST}.example.org n${HOST}" >> /etc/hosts

       echo "$HOST" >> /etc/machines

       ssh-copy-id "$IP"

   done



Запуск на master-узле:



   clsync -M simple -S $(which pdcp) -W /opt/global -b -Y syslog -- -a %INCLUDE-LIST% %INCLUDE-LIST%



Готово, можно попробовать:



   date >> /opt/global/test.log



++ uftp



uftp - это утилита позволяющая организовывать передачу файлов посредством multicast, что может быть удобным при передаче больших объёмов информации на очень большое количество узлов.



Установка зависимостей (на всех узлах)



   # Debian:

   apt-get install libssl-dev



Установка (на всех узлах):



   wget 'http://sourceforge.net/projects/uftp-multicast/files/source-tar/uftp-4.3.tar'

   tar -xvf uftp-4.3.tar

   cd uftp

   make install



Подготовка (на всех узлах):



   mkdir -p /opt/global /opt/production

   # Linux

   echo net.ipv4.igmp_max_memberships=256 >> /etc/sysctl.conf

   sysctl -f



Запуск на slave-узлах:



   uftpd -M 248.225.233.1 -D /opt/production

   # если у вас настроено использование pdsh, то тогда:

   #     pdsh -a echo uftpd -M 248.225.233.1 -D /opt/production \> /etc/rc.local  # или в другое место, в зависимости от вашей системы

   #     pdsh -a uftpd -M 248.225.233.1 -D /opt/production



Запуск на master-узле:



   clsync --mode=direct --sync-handler=uftp --watch-dir=/opt/global --background=1 --output=syslog -- -M 248.225.233.1 %INCLUDE-LIST%



Готово, можно попробовать:



   date >> /opt/global/test.log