Назад | Перейти на главную страницу

Выполнение очистки rsync перед инициализацией lsyncd для синхронизации экземпляров на EC2

Моя компания использует несколько серверов EC2, которые увеличиваются и уменьшаются в зависимости от нагрузки, которую мы получаем на наших сайтах в любой момент. Для нашего обсуждения здесь мы запускаем четыре экземпляра:

Я использую lsyncd, чтобы синхронизировать все веб-серверы, и по большей части он работает довольно хорошо. Мы используем схему двусторонней синхронизации, так что каждый веб-сервер синхронизируется с главным сервером, а мастер синхронизируется с каждым веб-сервером. Таким образом, веб-серверы синхронизируются, даже если они не синхронизируются друг с другом напрямую.

Однако у меня есть одна проблема, которую мне трудно решить. Это происходит при следующих обстоятельствах:

В этом случае я бы хотел, чтобы произошло следующее:

К сожалению, в настоящее время, когда запущен спящий сервер, когда запускается lsyncd, он отправляет изменения обратно на главный сервер. перед обновлением собственной кодовой базы, перезаписывая новый код старым.

Таким образом, перед запуском lsyncd я хотел бы иметь возможность синхронизировать код веб-сервера с кодом мастера, возможно, запустив простой односторонний rsync для двух машин.

Мы используем lsyncd v.2, и я попытался сделать это, используя параметры конфигурации "bash", описанные в lsyncd руководство. Мой файл конфигурации выглядит так:

settings = {
   logfile      = "/home/user/log/lsyncd/log.txt",
   statusFile   = "/home/user/log/lsyncd/status.txt",
   maxProcesses = 2,
   nodaemon     = false,
}

bash = {
    onStartup = "rsync user@master.ourdomain.com:/home/user/www /home/user/www"
}

sync{
    default.rsyncssh,
    source="/home/user/www/",
    host="user@master.ourdomain.com",
    targetdir="/home/user/www/",
    rsyncOpts="-ltus",
    excludeFrom="/home/user/conf/lsyncd/exclude"
}

(Я, очевидно, отредактировал этот файл, чтобы защитить личности виновных.)

Проще говоря, это просто не работает.

Как еще я могу подойти к этой проблеме? Я смотрел на --delete-after вариант в man rsync, но я не думаю, что это то, что я ищу.

Есть ли предложения, как мне подойти к этой проблеме?

Спасибо за то, что уделили время и знания.

Крис

Установка init = false в lsyncd.lau на веб-серверах, похоже, работает для меня.

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