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

Одновременное управление несколькими прокси Apache (mod_proxy_balancer)

Внешний интерфейс моего веб-приложения в настоящее время сформирован двумя обратными прокси-серверами 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, для управления этими файлами конфигурации, но у меня нет опыта работы с ними (не очень хорошо!)