Внешний интерфейс моего веб-приложения в настоящее время сформирован двумя обратными прокси-серверами Apache, использующими mod_proxy_balancer для распределения трафика между несколькими серверами внутренних приложений. Оба обратных прокси-сервера, работающие на разных хостах, доступны из Интернета. Циклический перебор DNS распределяет трафик по обоим. В будущем количество обратных прокси-серверов, вероятно, вырастет, поскольку веб-приложение требует большой пропускной способности.
У меня вопрос: как мне синхронизировать состояние обоих обратных балансиров / прокси?
Например, в целях обслуживания я мог бы уменьшить нагрузку на один из внутренних серверов приложений. В настоящее время я могу сделать это, зайдя в веб-форму Balancer-Manager на каждом прокси-сервере и изменив правила распределения. Но я должен сделать это на каждый прокси вручную и убедитесь, что я ввожу то же самое.
Можно ли «связать» несколько экземпляров mod_proxy_balancer? Или есть инструмент, который подключается к нескольким экземплярам и обновляет все с одной и той же информацией?
Обновить: Инструмент должен получать статус выполнения и вносить изменения во время выполнения, как и существующий Balancer-Manager, только для нескольких прокси, а не только для одного. Меня не интересует модификация файлов конфигурации (для этого есть множество инструментов).
Недавно я написал инструмент, который сделает то, что вам нужно. Если будет слишком поздно, надеюсь, это может быть полезно для кого-нибудь. Название проекта - ACM (Apache Cluster Manager), и он доступен по адресу: http://code.google.com/p/apache-cluster-manager/
Есть название модуля ruby Амфибия что упрощает программный доступ к веб-интерфейсу балансировщика-менеджера. Он может не иметь всех необходимых функций, но вы можете добавить их или использовать в качестве примера для написания аналогичной библиотеки на другом языке. Вот пример сценария, который использует его для включения или отключения указанных пользователем внутренних серверов приложений на двух балансировщиках прокси.
# amphibian_example.rb
require 'amphibian'
balancer_hosts = ["b1.example.com", "b2.example.com"]
command = ARGV.shift
backend_hosts = ARGV
balancer_hosts.each do |balancer_host|
balancer_url = "http://#{balancer_host}/balancer-manager"
balancer = Amphibian::BalancerManager.new(balancer_url)
backend_hosts.each do |backend_host|
backend_url = "http://#{backend_host}"
if command == "enable"
balancer.enable_host(backend_url)
puts "Enabled #{backend_host} on #{balancer_host}"
end
if command == "disable"
balancer.disable_host(backend_url)
puts "Disabled #{backend_host} on #{balancer_host}"
end
end
end
Это можно было бы запустить как
$ amphibian_example.rb disable a1.example.com a5.example.com
Disabled a1.example.com on b1.example.com
Disabled a5.example.com on b1.example.com
Disabled a1.example.com on b2.example.com
Disabled a5.example.com on b2.example.com
Поскольку я не знаю каких-либо инструментов, позволяющих вам это сделать, мой подход к этой проблеме заключался бы в создании сценария, который будет работать на каждом сервере через SSH и вносить изменения, которые вы хотите.
Это может быть очень простой сценарий Python, но я полагаю, что другие языки сценариев также могут сделать это довольно легко. Для изменения текста я бы использовал такие инструменты, как sed.
Более «рациональным» подходом было бы использование таких инструментов, как Chef или puppet, для управления этими файлами конфигурации, но у меня нет опыта работы с ними (не очень хорошо!)