Моя компания использует несколько серверов 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 на веб-серверах, похоже, работает для меня.
После этого вам все равно придется вызывать одностороннюю синхронизацию от мастера к только что запущенному веб-серверу.