我的Web应用程序的前端由当前两个Apache反向代理构成,使用mod_proxy_balancer在多个后端应用程序服务器上分配stream量。 前端反向代理,运行在不同的主机上,可以从互联网上访问。 DNS循环通过两者分配stream量。 将来,反向代理的数量可能会增长,因为networking应用的带宽非常大。
我的问题是:我如何保持反向平衡器/代理的状态同步?
例如,出于维护目的,我可能希望减less后端应用服务器之一的负载。 目前我可以通过访问每个代理上的Balancer-Manager Web表单来更改分配规则。 但是我必须手动在每个代理上执行此操作,并确保input相同的内容。
是否有可能“链接”mod_proxy_balancer的多个实例? 还是有一个工具,连接到一些实例,并更新所有相同的信息?
更新 :工具应该检索运行时状态并进行运行时更改,就像现有的Balancer-Manager一样,只能用于一些代理服务器 – 而不仅仅是一个代理服务器。 configuration文件的修改不是我感兴趣的(因为有很多工具)。
有一个ruby模块名称Amphibian ,可以通过程序访问平衡器pipe理器的Web界面。 它可能没有你需要的所有function,但你可以添加它们或者用它作为例子来用另一种语言编写一个类似的库。 以下是一个示例脚本,用于在两个代理平衡器上启用或禁用用户指定的后端应用服务器。
# 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
我最近写了一个工具来做你所需要的。 如果太晚了,我希望这对其他人有用。 项目名称是ACM(Apache集群pipe理器),可在以下url获得: http : //code.google.com/p/apache-cluster-manager/
由于我不知道任何工具允许你这样做,所以我对这个问题的解决办法是创build一个脚本,通过SSH在每台服务器上运行,并进行所需的修改。
这可能是一个非常简单的Python脚本,但我想其他脚本语言也可以很容易地做到这一点。 我会使用像sed这样的工具来进行文本修改。
更合理的方法是使用厨师或傀儡等工具来pipe理这些configuration文件,但是我没有这些经验(不是一件好事!)