Наша производственная среда обычно состоит из 4-8 веб-серверов Apache и 2 (My) SQL-серверов:
Каждый веб-сервер связан с одним SQL-сервером. SQL-серверы имеют настройку циклической репликации. Все веб-серверы сбалансированы по нагрузке, например, с помощью Pound. Каждую ночь задание выполняет резервное копирование одного из SQL-серверов, блокируя дочерние веб-серверы примерно на 10-15 минут.
Есть ли способ настроить балансировку, чтобы избежать доступа к этим заблокированным серверам на короткое время?
Есть ли другой способ справиться с этой блокировкой, кроме резервного копирования непроизводственного третьего сервера?
PS: Мы планируем перезагрузить конфигурацию Pound непосредственно перед и после резервного копирования с соответствующим файлом конфигурации, но это кажется немного странным ...
Вопрос уже задан на StackOverflow но закрыто как «не ориентированное на развитие». По сути, это скорее обсуждение производства и запуска.
Снятие нагрузки с сервера для резервного копирования - не редкость. Как вы это сделаете, полностью зависит от вашего балансировщика нагрузки. Например, балансировщики нагрузки Kemp имеют веб-API, который вы можете вызвать, чтобы отключить определенный сервер, а haproxy имеет интерфейс управления на основе канала, который вы можете создать скрипт из оболочки Linux. Я уверен, что у фунта есть эквивалентный способ отключить сервер, но я не знаю, что это такое.
Другой популярный способ отключить сервер с помощью haproxy - заставить действие проверки искать определенный файл. Если вы хотите отключить сервер, просто удалите или переименуйте этот файл. Вы должны легко сделать это с помощью pound, и это удовлетворяет ваши требования по хранению сценариев на нашем веб-уровне и не вызывает балансировщик нагрузки.
Если вы остановите apache на хосте, на котором вы делаете резервные копии, фунт должен через 30 секунд обнаружить, что серверная часть отключена, и направить посетителей на другие хосты.
Если вы являетесь ведомым устройством, на котором запущен один из ведущих, то вы можете делать резервные копии на ведомом устройстве без осложнений, связанных с репликацией ведущий-ведущий из более чем двух узлов. Это был бы мой предпочтительный выбор.
Но вы также можете пометить один из двух текущих мастеров как «изолированный», принудительно направляя весь веб-трафик на все еще активный сервер. Как вы это делаете, зависит от того, что обращается к базе данных. Если это просто PHP (без постоянных подключений - что было бы глупо в этой настройке), просто замените другой включаемый файл, подождите пару секунд (минут?) Для завершения текущих подключений, затем запустите резервную копию. Когда резервное копирование завершится, снова переключите включаемые файлы.
В качестве альтернативы, если у вас есть возможности веб-сервера, разделите свои wbservers на 2 пула - по одному для каждой СУБД и скажите фунту ограждать один банк, пока вы выполняете резервное копирование / запускаете 2 экземпляра фунта с RRDNS и добавляете таблицы iptables для отклонения новых подключений на резервный банк, когда вы хотите сделать резервную копию.
Если у вас есть постоянные соединения, переключение банка, вероятно, является единственным практическим решением.