眠る開発屋blog ある開発屋の雑感。日々勉強。

2007/1/4 木曜日

mod_proxy_balancerに独自振り分けロジックを追加できる気がする

Filed under: 技術メモ — タグ: , — dev0000 @ 14:22:26

Apache2.2について。
一部のモジュールでは、ap_register_providerを使って、関数を文字列と紐付けて登録し、設定ファイルでそれを指定するという機構を利用している。
実際に使用箇所はこのような感じなのだが、別モジュールにて関数を登録し、それを指定させることも可能。

例えば、mod_proxy_balanerに対し、mod_wanko.c というソースを別途作成して、独自の振り分けロジックを設定する場合はこんな感じ。
[c num=1]#include “httpd.h”
#include “http_config.h”
#include “http_protocol.h”
#include “ap_config.h”

#include “mod_proxy.h”

module AP_MODULE_DECLARE_DATA proxy_balancer_module;

static proxy_worker *find_best_bywanko(proxy_balancer *balancer,
request_rec *r)
{
proxy_worker *mycandidate = NULL;
/* なんか処理を書く */
return mycandidate;
}

static const proxy_balancer_method bywanko =
{
“bywanko”,
&find_best_bywanko,
NULL
};

static void wanko_register_hooks(apr_pool_t *p)
{
ap_register_provider(p, PROXY_LBMETHOD, “bywanko”, “0”, &bywanko);
}

module AP_MODULE_DECLARE_DATA wanko_module = {
STANDARD20_MODULE_STUFF,
NULL, /* create per-dir config structures */
NULL, /* merge per-dir config structures */
NULL, /* create per-server config structures */
NULL, /* merge per-server config structures */
NULL, /* table of config file commands */
wanko_register_hooks /* register hooks */
};[/c]
httpd.conf は以下のように設定し、lbmethodも独自の「bywanko」というものを指定できる。

LoadModule wanko_module       modules/mod_wanko.so
ProxyPass /lb balancer://TEST lbmethod=bywanko

正直なところ、mod_proxy_balancerの振り分けロジック(PROXY_LBMETHOD)だとどうもいいのが思いつかなかった。
が、認証(AUTHN_PROVIDER_GROUP)とかキャッシュ機構(CACHE_PROVIDER_GROUP)でも同様の仕組みがとられているみたいなので、そちらで試してみるのもいいかもしれない。

Powered by WordPress