BalancerMemberのloadfactorに指定できる数字が変更された
昨日更新したapache2.4.28ですが、CHANGESを参照するとこんなことが書いてあります。
*) mod_proxy: loadfactor parameter can now be a decimal number (eg: 1.25). [Jim Jagielski]
いままでは整数値で指定したたんですが、小数点以下も指定できるようになってより細かく負荷分散できるよってことなんでしょう。
で、自分が管理しているWebサイトではBalancerMemberはこんな感じで指定していました。
BalancerMember http://hoge.example.com loadfactor=30 BalancerMember http://fuga.example.com loadfactor=30 BalancerMember http://fooo.example.com loadfactor=10
でもってapache2.4.28をインストールして文法チェックをするとこんなエラーがでます。
# /usr/local/apache2/bin/apachectl -t AH00526: Syntax error on line 132 of /usr/local/apache2/conf/extra/director.conf: BalancerMember LoadFactor must be a number between 1..100
1から100の数字じゃないとイカンとか。そのとおりにしてますがなにか。
decimal numberじゃないといかんのかと10.0とか30.0にしてみても、同様のエラーになります。
apacheのドキュメントを参照してもまぁ、そのとおり(1から100の数字)としか書いてない。
ソースを見よう
こういうときはソースをみる。modules/proxy/mod_proxy.cに記述があります。
エラーチェックしているところはこんな感じです。
if (!strcasecmp(key, "loadfactor")) { /* Normalized load factor. Used with BalancerMember, * it is a number between 1 and 100. */ double fval = atof(val); ival = fval * 100.0; if (ival < 1 || ival > 100) return "LoadFactor must be a number between 1..100"; worker->s->lbfactor = ival; }
指定された数字を100倍したうえで、100倍された数字が1から100までの間に入っているかどうかをチェックしてる。
そうすると、1以上は指定できないじゃないですか。
ちなみに前バージョンである2.4.27のソースはこんな。
if (!strcasecmp(key, "loadfactor")) { /* Normalized load factor. Used with BalancerMember, * it is a number between 1 and 100. */ ival = atoi(val); if (ival < 1 || ival > 100) return "LoadFactor must be a number between 1..100"; worker->s->lbfactor = ival; }
ということで、設定ファイルを以下へ修正。
BalancerMember http://hoge.example.com loadfactor=0.3 BalancerMember http://fuga.example.com loadfactor=0.3 BalancerMember http://fooo.example.com loadfactor=0.1
なんだこの修正。
多分ifで値をチェックしているところ、1から1000くらいにするつもりだったのを直し忘れたとかそんなんじゃないかな。