新しいblogに移行しました

新ブログ "All Yout Bugs Are Belong To Ass" に移行しました!

2009-10-10

[Perl]balanceのラッパークラスNet::Balance

balanceという名のバランサーがあります。
こいつはシンプルかつ軽量であることが身上のようですが、わりと堅牢なので重宝しています。

で、最近こいつを動的に操作する必要があったので、Perlからコントロールできるように、Net::Balanceというモジュールをこさえてみました。Net-Balance-0.001002.tar.gz [DL]

単純にHTTPをバランシングする場合、

use Net::Balance;
my $balance = Net::Balance->new( listen_port => 80 );
$balance->balance_member( [qw[ 10.0.0.1 10.0.0.2:8080 ] ] );
$balance->run;


とかすればOK。

で、死活監視と組み合わせて、

use LWP::UserAgent;
my $agent = LWP::UserAgent->new;
my @target =
for ( 0 .. $#target ) {
my $node = $target[ $_ ];
my $res = $agent->get( "http://$node/" );
if ( $res->is_success ) {
# 生きてればチャネル有効
$balance->group( 0 )->channel( $_ )->enable;
}
else {
# 死んでればチャネル無効
$balance->group( 0 )->channel( $_ )->disable;
}
}


とかできます。でも、そもそもbalanceにhttpバランシングとかさせると、アクセス元IPが上書きされるのでお勧めできないです。せいぜいミドルウェアサーバやらキャッシュサーバの冗長化に使うくらいのものでしょうか。

0 件のコメント: