同时管理多个 Apache 代理(mod_proxy_balancer)

同时管理多个 Apache 代理(mod_proxy_balancer)

我的 Web 应用程序的前端目前由两个 Apache 反向代理组成,使用 mod_proxy_balancer 将流量分配到多个后端应用程序服务器上。两个前端反向代理运行在不同的主机上,可以通过互联网访问。DNS 轮询将流量分配到两者上。将来,反向代理的数量可能会增加,因为 Web 应用程序占用的带宽非常大。

我的问题是:如何保持两个反向平衡器/代理的状态同步?

例如,出于维护目的,我可能希望减少后端应用服务器之一的负载。目前,我可以通过访问每个代理上的 Balancer-Manager Web 表单并更改分发规则来实现这一点。但我必须在每个手动代理并确保我输入相同的内容。

是否可以“链接”多个 mod_proxy_balancer 实例?或者是否有一个工具可以连接到多个实例,并使用相同的信息更新所有实例?

更新:该工具应该检索运行时状态并进行运行时更改,就像现有的 Balancer-Manager 一样,但只针对多个代理 - 而不只是一个。配置文件的修改不是我感兴趣的(因为有很多工具可以做到这一点)。

答案1

有一个 ruby​​ 模块名称两栖动物这简化了对平衡器管理器 Web 界面的编程访问。它可能不具备您需要的所有功能,但您可以添加它们或将其用作示例,以另一种语言编写类似的库。这是一个示例脚本,使用它来启用或禁用两个代理平衡器上的用户指定的后端应用服务器。

# 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

答案2

我最近写了一个工具来满足你的需要。如果为时已晚,我希望它对其他人有用。该项目的名称是 ACM(Apache Cluster Manager),可在以下位置获取: http://code.google.com/p/apache-cluster-manager/

答案3

由于我不知道有任何工具允许您执行此操作,因此我解决此问题的方法是创建一个脚本,该脚本通过 SSH 在每台服务器上运行并执行您希望它执行的修改。

这可能是一个非常简单的 Python 脚本,但我想其他脚本语言也可以轻松完成此操作。我会使用 sed 等工具进行文本修改。

更“合理”的方法是使用 Chef 或 puppet 等工具来管理这些配置文件,但我对此没有经验(不是一件好事!)

相关内容