Apache HTTP サームãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2.2
説明: | è² è·åˆ†æ•£ã®ãŸã‚ã® mod_proxy æ‹¡å¼µ |
---|---|
ステータス: | Extension |
モジュールè˜åˆ¥å: | proxy_balancer_module |
ソースファイル: | mod_proxy_balancer.c |
äº’æ›æ€§: | Apache 2.1 以é™ã§ä½¿ç”¨å¯èƒ½ |
本モジュールã«ã¯ mod_proxy
ãŒå¿…è¦ã§ã™ã€‚
本モジュール㯠HTTP
㨠FTP
㨠AJP13
プãƒãƒˆã‚³ãƒ«ã®ãƒãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚¹æ©Ÿèƒ½ã‚’æŒã£ã¦ã„ã¾ã™ã€‚
ã§ã™ã‹ã‚‰ã€ ãƒãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚¹ã‚’有効ã«ã™ã‚‹å ´åˆ mod_proxy
㨠mod_proxy_balancer
ãŒã‚µãƒ¼ãƒã«çµ„ã¿è¾¼ã¾ã‚Œã¦
ã„ãªã‘れã°ã„ã‘ã¾ã›ã‚“。
安全ãªã‚µãƒ¼ãƒã«ã™ã‚‹ã¾ã§ãƒ—ãƒã‚ã‚·æ©Ÿèƒ½ã¯æœ‰åйã«ã—ãªã„ã§ãã ã•ã„。 オープンプãƒã‚シサーãƒã¯ã‚ãªãŸè‡ªèº«ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«ã¨ã£ã¦ã‚‚〠インターãƒãƒƒãƒˆå…¨ä½“ã«ã¨ã£ã¦ã‚‚å±é™ºã§ã™ã€‚
ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ãƒ‡ã‚£ãƒ¬ã‚¯ãƒ†ã‚£ãƒ–ã¯ã‚りã¾ã›ã‚“。
ç¾æ™‚点ã§ã¯ 3 種類ã®ãƒãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ©ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ã‹ã‚‰é¸ã¹ã¾ã™ã€‚
リクエスト回数ã«ã‚ˆã‚‹ã‚‚ã® (訳注: Request Counting)
ã€ãƒˆãƒ©ãƒ•ィックé‡ã«ã‚ˆã‚‹ã‚‚ã® (訳注: Weighted Traffic Counting)
ã¨ã€å‡¦ç†ä¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆæ•°ã«ã‚ˆã‚‹ã‚‚ã® (訳注: Pending Request Counting)
ã¨ãŒã‚りã¾ã™ã€‚ãƒãƒ©ãƒ³ã‚µã®è¨å®š lbmethod
値ã§ã€ã©ã‚Œã‚’使ã†ã‹æŒ‡å®šã—ã¾ã™ã€‚
詳細㯠ProxyPass
ディレクティブを
å‚ç…§ã—ã¦ãã ã•ã„。
ãƒãƒ©ãƒ³ã‚µã¯ã‚¹ãƒ†ã‚£ãƒƒã‚ãƒã‚¹ã‚’サãƒãƒ¼ãƒˆã—ã¾ã™ã€‚リクエストãŒã‚ã‚‹ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã« プãƒã‚ã‚·ã•ã‚ŒãŸæ™‚ã€ç¶šãåŒã˜ãƒ¦ãƒ¼ã‚¶ã‹ã‚‰ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¯ã€ã™ã¹ã¦ãã®åŒã˜ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã« プãƒã‚ã‚·ã•れるã¹ãã§ã™ã€‚多ãã®ãƒãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µã¯ã“ã®æ©Ÿèƒ½ã‚’クライアント㮠IP アドレスã¨ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã®å¯¾å¿œè¡¨ã‚’æŒã¤ã“ã¨ã§å®Ÿç¾ã—ã¾ã™ã€‚ ã“ã®æ–¹æ³•ã¯ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«ã‚‚ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã«ã‚‚é€éŽã«å‹•作ã—ã¾ã™ãŒã€ æ¬¡ã«æŒ™ã’ã‚‹ã„ãã¤ã‹ã®å•題ãŒã‚りã¾ã™ã€‚ ã‚‚ã—クライアント自身ãŒãƒ—ãƒã‚ã‚·ã®èƒŒå¾Œã«ã„ã‚‹å ´åˆã€è² è·åˆ†æ•£ãŒä¸å‡ä¸€ã«ãªã‚Šã¾ã™ã€‚ ã‚‚ã—動的㪠IP アドレスをæŒã¤ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ã‚¢ãƒ‰ãƒ¬ã‚¹ãŒã‚»ãƒƒã‚·ãƒ§ãƒ³ä¸ã«å¤‰ã‚る㨠スティッã‚ãƒã‚¹ã¯æœŸå¾…ã©ãŠã‚Šã«å‹•作ã—ã¾ã›ã‚“。 ã‚‚ã—対応表ãŒã‚ãµã‚Œã‚‹ã¨ã€ã‚¹ãƒ†ã‚£ãƒƒã‚ãƒã‚¹ãŒå¤±ã‚れã¾ã™ã€‚
mod_proxy_balancer
ã¯ã‚¹ãƒ†ã‚£ãƒƒã‚ãƒã‚¹ã‚’
2 種類ã®åˆ¥æ‰‹æ³•ã‚’ã‚‚ã¨ã«å®Ÿè£…ã—ã¦ã„ã¾ã™ã€‚クッã‚ー㨠URL エンコーディングã®ãµãŸã¤ã§ã™ã€‚
クッã‚ーã¯ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã‚‚ã—ã㯠Apache Web サーãƒè‡ªèº«ã«ã‚ˆã‚Šæä¾›ã•れã¾ã™ã€‚
URL エンコーディングã¯é€šå¸¸ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã«ã‚ˆã‚Šè¡Œã‚れã¾ã™ã€‚
技術的ãªè©³ç´°ã«å…¥ã‚‹å‰ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚以下ã¯ã€2 å°ã®ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã‚µãƒ¼ãƒã‚’
ãƒãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚¹ã™ã‚‹ãŸã‚ã® mod_proxy_balancer
ã®ä½¿ã„æ–¹ã®ä¸€ä¾‹ã§ã™:
<Proxy balancer://mycluster>
BalancerMember http://192.168.1.50:80
BalancerMember http://192.168.1.51:80
</Proxy>
ProxyPass /test balancer://mycluster
別ã®ä¾‹ã¨ã—ã¦ã€mod_headers
を使ã£ã¦ã‚¹ãƒ†ã‚£ãƒƒã‚ãƒã‚¹
を実ç¾ã™ã‚‹ãƒãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µã®è¨å®šä¾‹ã‚’示ã—ã¾ã™ã€‚ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã®ã‚µãƒ¼ãƒãŒ
é©åˆ‡ãªã‚»ãƒƒã‚·ãƒ§ãƒ³ã‚¯ãƒƒã‚ーをセットã—ãªãã¦ã‚‚動作ã—ã¾ã™ã€‚
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/"
env=BALANCER_ROUTE_CHANGED
<Proxy balancer://mycluster>
BalancerMember http://192.168.1.50:80 route=1
BalancerMember http://192.168.1.51:80 route=2
ProxySet stickysession=ROUTEID
</Proxy>
ProxyPass /test balancer://mycluster
lbmethod=byrequests
ã§æœ‰åйã«ãªã‚Šã¾ã™ã€‚
ã“ã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ©ã®èƒŒæ™¯ã«ã‚ã‚‹è€ƒãˆæ–¹ã¯ã€æ§˜ã€…ãªãƒ¯ãƒ¼ã‚«ãƒ¼ãŒãれãžã‚Œã€
è¨å®šã•れã¦ã„る分担リクエスト数をãã¡ã‚“ã¨å—ã‘å–れるよã†ã«ã€
リクエストを扱ã†ã¨ã„ã†è€ƒãˆæ–¹ã§ã™ã€‚次ã®ã‚ˆã†ã«å‹•作ã—ã¾ã™:
lbfactor ã¯ã€ã©ã®ç¨‹åº¦ãƒ¯ãƒ¼ã‚«ãƒ¼ã«ä»•事を振る㋠ã¤ã¾ã‚Šãƒ¯ãƒ¼ã‚«ãƒ¼ã®ã‚¯ã‚ªãƒ¼ã‚¿ã‚’指ã—ã¾ã™ã€‚ã“ã®å€¤ã¯ "分担" é‡ã‚’è¡¨ã™æ£è¦åŒ–ã•れãŸå€¤ã§ã™ã€‚
lbstatus ã¯ã€ãƒ¯ãƒ¼ã‚«ãƒ¼ã®ã‚¯ã‚ªãƒ¼ã‚¿ã‚’満ãŸã™ãŸã‚ã« ã©ã®ãã‚‰ã„æ€¥ãŽã§åƒã‹ãªã‘れã°ãªã‚‰ãªã„ã‹ã‚’指ã—ã¾ã™ã€‚
ワーカーã¯ãƒãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µã®ãƒ¡ãƒ³ãƒã§ã€é€šå¸¸ã¯ã€ サãƒãƒ¼ãƒˆã•れるプãƒãƒˆã‚³ãƒ«ã®ã†ã¡ã®ä¸€ã¤ã‚’æä¾›ã—ã¦ã„るリモートホストã§ã™ã€‚
ã¾ãšå€‹ã€…ã®ãƒ¯ãƒ¼ã‚«ãƒ¼ã«ãƒ¯ãƒ¼ã‚«ãƒ¼ã‚¯ã‚ªãƒ¼ã‚¿ã‚’割り振りã€ã©ã®ãƒ¯ãƒ¼ã‚«ãƒ¼ãŒæœ€ã‚‚急ãŽã§ åƒã‹ãªã‘れã°ãªã‚‰ãªã„ã‹ (lbstatus ãŒæœ€å¤§ã®ã‚‚ã®) を調ã¹ã¾ã™ã€‚ 次ã«ä»•事をã™ã‚‹ã‚ˆã†ã«ã“ã®ãƒ¯ãƒ¼ã‚«ãƒ¼ã‚’é¸æŠžã—ã€é¸æŠžã—ãŸãƒ¯ãƒ¼ã‚«ãƒ¼ã® lbstatus ã‹ã‚‰å…¨ãƒ¯ãƒ¼ã‚«ãƒ¼ã«å‰²ã‚ŠæŒ¯ã£ãŸã‚¯ã‚ªãƒ¼ã‚¿ã®åˆè¨ˆã‚’引ãã¾ã™ã€‚ã§ã™ã‹ã‚‰ã€lbstatus ã®ç·é‡ã¯ çµæžœçš„ã«å¤‰åŒ–ã—ã¾ã›ã‚“(*)ã—ã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¯æœŸå¾…通りã«åˆ†æ•£ã•れã¾ã™ã€‚
ã‚るワーカーãŒç„¡åйã«ãªã£ã¦ã‚‚ã€ä»–ã®ã‚‚ã®ã¯æ£å¸¸ã«ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã•れ続ã‘ã¾ã™ã€‚
for each worker in workers
worker lbstatus += worker lbfactor
total factor += worker lbfactor
if worker lbstatus > candidate lbstatus
candidate = worker
candidate lbstatus -= total factor
ãƒãƒ©ãƒ³ã‚µã‚’次ã®ã‚ˆã†ã«è¨å®šã—ãŸå ´åˆ:
worker | a | b | c | d |
---|---|---|---|---|
lbfactor | 25 | 25 | 25 | 25 |
lbstatus | 0 | 0 | 0 | 0 |
ãã—㦠b ãŒç„¡åйã«ãªã£ãŸå ´åˆã€æ¬¡ã®ã‚ˆã†ãªã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒ 行ã‚れã¾ã™ã€‚
worker | a | b | c | d |
---|---|---|---|---|
lbstatus | -50 | 0 | 25 | 25 |
lbstatus | -25 | 0 | -25 | 50 |
lbstatus | 0 | 0 | 0 | 0 |
(repeat) |
ã¤ã¾ã‚Šã“ã®ã‚ˆã†ã«ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ«ã•れã¾ã™: a c d a c d a c d ... 次ã®ç‚¹ã«æ³¨æ„ã—ã¦ãã ã•ã„:
worker | a | b | c | d |
---|---|---|---|---|
lbfactor | 25 | 25 | 25 | 25 |
ã“ã®æŒ™å‹•ã¯ã€æ¬¡ã®è¨å®šã¨å…¨ãåŒã˜ã«ãªã‚Šã¾ã™:
worker | a | b | c | d |
---|---|---|---|---|
lbfactor | 1 | 1 | 1 | 1 |
ã¨è¨€ã†ã®ã‚‚ã€lbfactor ã®å€¤ã¯å…¨ã¦æ£è¦åŒ–ã•れãŸã‚‚ã®ã§ã€ ä»–ã¨ã®ç›¸å¯¾å€¤ã ã‹ã‚‰ã§ã™ã€‚次ã®è¨å®šã§ã¯:
worker | a | b | c |
---|---|---|---|
lbfactor | 1 | 4 | 1 |
ワーカー b ã¯ã€å¹³å‡ã—ã¦ã€a 㨠c ã® 4 å€ã®æ•°ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’å—ã‘æŒã¤ã“ã¨ã«ãªã‚Šã¾ã™ã€‚
次ã®ã‚ˆã†ãªéžå¯¾ç§°ãªè¨å®šã§ã¯ã€ã“ã†ãªã‚‹ã¨äºˆæƒ³ã•れるã§ã—ょã†:
worker | a | b |
---|---|---|
lbfactor | 70 | 30 |
lbstatus | -30 | 30 |
lbstatus | 40 | -40 |
lbstatus | 10 | -10 |
lbstatus | -20 | 20 |
lbstatus | -50 | 50 |
lbstatus | 20 | -20 |
lbstatus | -10 | 10 |
lbstatus | -40 | 40 |
lbstatus | 30 | -30 |
lbstatus | 0 | 0 |
(repeat) |
スケジュール㯠10 スケジュール後ã«ç¹°ã‚Šè¿”ã•れã€a 7 回㨠b 3 回ã§ã¾ã°ã‚‰ã«é¸ã°ã‚Œã¾ã™ã€‚
lbmethod=bytraffic
ã§æœ‰åйã«ãªã‚Šã¾ã™ã€‚
ã“ã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ©ã®èƒŒæ™¯ã«ã‚ã‚‹è€ƒãˆæ–¹ã¯ã€Request Counting
ã¨éžå¸¸ã«ä¼¼ã¦ã„ã¾ã™ãŒã€æ¬¡ã®é•ã„ãŒã‚りã¾ã™:
lbfactor 㯠ã©ã‚Œã ã‘ã®ãƒã‚¤ãƒˆæ•°ã®ãƒˆãƒ©ãƒ•ィックé‡ã‚’〠ã“ã®ãƒ¯ãƒ¼ã‚«ãƒ¼ã«å‡¦ç†ã—ã¦ã‚‚らã„ãŸã„㋠を表ã—ã¾ã™ã€‚ ã“ã®å€¤ã‚‚åŒæ§˜ã«æ£è¦åŒ–ã•れãŸå€¤ã§ã€ãƒ¯ãƒ¼ã‚«ãƒ¼å…¨ä½“ã®ã†ã¡ã§ã® "分担" é‡ã‚’表ç¾ã—ã¦ã„ã¾ã™ã€‚リクエスト数をå˜ç´”ã«æ•°ãˆã‚‹ä»£ã‚りã«ã€ ã©ã‚Œã ã‘ã®è»¢é€é‡ã‚’処ç†ã—ãŸã‹ã‚’æ•°ãˆã¾ã™ã€‚
次ã®ã‚ˆã†ã«ãƒãƒ©ãƒ³ã‚µã‚’è¨å®šã—ãŸå ´åˆ:
worker | a | b | c |
---|---|---|---|
lbfactor | 1 | 2 | 1 |
b ã«ã¯ a ã‚„ c ã® 2 å€ å‡¦ç†ã—ã¦ã»ã—ã„ã¨ã„ã†ã“ã¨ã«ãªã‚Šã¾ã™ã€‚ b 㯠2 å€ã® I/O を処ç†ã™ã‚‹ã¨ã„ã†æ„味ã«ãªã‚Šã€ 2 å€ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆæ•°ã‚’処ç†ã™ã‚‹ã¨ã„ã†ã“ã¨ã«ã¯ãªã‚Šã¾ã›ã‚“。 ã§ã™ã‹ã‚‰ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¨ãƒ¬ã‚¹ãƒãƒ³ã‚¹ã®ã‚µã‚¤ã‚ºãŒã€ é‡ã¿ä»˜ã‘ã¨æŒ¯ã‚Šåˆ†ã‘ã®ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ã«åйã„ã¦ã„ã¾ã™ã€‚
lbmethod=bybusyness
ã§æœ‰åйã«ãªã‚Šã¾ã™ã€‚ã“ã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ©ã¯
ç¾åœ¨ã©ã®ãらã„ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆãŒå€‹ã€…ã®ãƒ¯ãƒ¼ã‚«ãƒ¼ã«ã‚¢ã‚µã‚¤ãƒ³ã•れã¦ã„ã‚‹ã‹ã‚’把æ¡ã—ã¦ã„ã¾ã™ã€‚
æ–°ã—ã„リクエストã¯ã€æœ€ã‚‚処ç†é€”ä¸ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆæ•°ãŒå°‘ãªã„ワーカーã«
自動的ã«å‰²ã‚ŠæŒ¯ã‚‰ã‚Œã¾ã™ã€‚ã“れã¯ã€ãƒ¯ãƒ¼ã‚«ãƒ¼ãŒ Apache ã¨ç„¡é–¢ä¿‚ã«å…¥åŠ›ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’
ã‚ãƒ¥ãƒ¼ã«æºœã‚è¾¼ã‚€å ´åˆã«æœ‰åйã§ã€ã‚ューã®é•·ã•ã‚’åŒç¨‹åº¦ã«ç¶æŒã—ã¤ã¤ã‚‚ã€
最も早ã処ç†ã§ããã†ãªãƒ¯ãƒ¼ã‚«ãƒ¼ã«å¸¸ã«ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’割り振りã¾ã™ã€‚
複数ã®ãƒ¯ãƒ¼ã‚«ãƒ¼ãŒæœ€å°‘ã®å‡¦ç†ä¸ãƒªã‚¯ã‚¨ã‚¹ãƒˆæ•°ã§ä¸¦ã‚“ã å ´åˆã€Request Counting
アルゴリズムã¨åŒã˜çµ±è¨ˆæƒ…å ±ï¼ˆã¨é‡ã¿ä»˜ã‘)を使ã£ã¦é †ç•ªã‚’決ã‚ã¾ã™ã€‚
時間ãŒçµŒã¤ã¨ã€å‰²ã‚ŠæŒ¯ã‚Šã®å‰²åˆã¯ byrequests
ã¨ä¼¼ãŸã‚ˆã†ãª
傾å‘を示ã™ã‚ˆã†ã«ãªã‚‹ã§ã—ょã†ã€‚
ã“ã®ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ 㯠Apache HTTP サーム2.2.10以é™ã§åˆ©ç”¨å¯èƒ½ã§ã™ã€‚
ç¾åœ¨ã€6 ã¤ã®ç’°å¢ƒå¤‰æ•°ãŒã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã•れã¾ã™:
ç¾åœ¨ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«ä½¿ã‚れる stickysession 値ã«ãªã‚Šã¾ã™ã€‚ スティッã‚ーセッションã®ãŸã‚ã®ã‚¯ãƒƒã‚ーåã‚‚ã—ãã¯ãƒªã‚¯ã‚¨ã‚¹ãƒˆãƒ‘ラメータåã§ã™ã€‚
ç¾åœ¨ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’パースã—ã¦å¾—られる route 値ã§ã™ã€‚
ç¾åœ¨ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆãŒä½¿ã†ãƒãƒ©ãƒ³ã‚µåã§ã™ã€‚balancer://foo
ã®ã‚ˆã†ãªå€¤ã§ã™ã€‚
ç¾åœ¨ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆãŒä½¿ã†ãƒ¯ãƒ¼ã‚«ãƒ¼åã§ã™ã€‚http://hostA:1234
ã®ã‚ˆã†ãªå€¤ã§ã™ã€‚
ç¾åœ¨ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆãŒä½¿ã†ãƒ¯ãƒ¼ã‚«ãƒ¼ã® route 値ã§ã™ã€‚
セッションルートã¨ãƒ¯ãƒ¼ã‚«ãƒ¼ãƒ«ãƒ¼ãƒˆãŒä¸€è‡´ã—ãªã„時 (BALANCER_SESSION_ROUTE != BALANCER_WORKER_ROUTE) ã‚ã‚‹ã„ã¯ã€ã‚»ãƒƒã‚·ãƒ§ãƒ³ãŒã¾ã ルートを確立ã—ã¦ã„ãªã„時ã€å€¤ãŒ 1 ã«ãªã‚Šã¾ã™ã€‚ スティッã‚ãƒ¼ã‚»ãƒƒã‚·ãƒ§ãƒ³ã‚’ä½¿ã†æ™‚ã€ãƒ«ãƒ¼ãƒˆã®æ›´æ–°ã‚’クライアントã«é€ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã‚’ 判æ–ã™ã‚‹ãŸã‚ã«ã“ã®ç’°å¢ƒå¤‰æ•°ã‚’使ãˆã¾ã™ã€‚
ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ mod_status
ã®ã‚µãƒ¼ãƒ“スを
å¿…è¦ã¨ã—ã¾ã™ã€‚
ãƒãƒ©ãƒ³ã‚µãƒžãƒãƒ¼ã‚¸ãƒ£ã‚’使ã†ã¨ã€ãƒãƒ©ãƒ³ã‚µã®ãƒ¡ãƒ³ãƒãƒ¼ã®å‹•çš„ãªæ›´æ–°ãŒ
ã§ãã¾ã™ã€‚ãƒãƒ©ãƒ³ã‚µãƒžãƒãƒ¼ã‚¸ãƒ£ã‚’使ã£ã¦ã€ãƒãƒ©ãƒ³ã‚¹ä¿‚æ•° (lbfactor)
を変更ã—ãŸã‚Šã€ãƒ¡ãƒ³ãƒãƒ¼ã‚’変更ã—ãŸã‚Šã€ç‰¹å®šã®ãƒ¡ãƒ³ãƒãƒ¼ã‚’
オフラインモードã«ã—ãŸã‚Šã§ãã¾ã™ã€‚
ã§ã™ã‹ã‚‰ã€ãƒãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µç®¡ç†æ©Ÿèƒ½ã‚’使ã„ãŸã‘れã°ã€
mod_status
㨠mod_proxy_balancer
をサーãƒã«çµ„ã¿è¾¼ã¾ãªã‘れã°ãªã‚Šã¾ã›ã‚“。
example.com ドメインã®ãƒ–ラウザã‹ã‚‰ãƒãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µç®¡ç†æ©Ÿèƒ½ã‚’
使ãˆã‚‹ã‚ˆã†ã«ã™ã‚‹ã«ã¯ã€æ¬¡ã®ã‚ˆã†ãªã‚³ãƒ¼ãƒ‰ã‚’ httpd.conf
ã«è¿½åŠ ã—ã¾ã™ã€‚
<Location /balancer-manager>
SetHandler balancer-manager
Order Deny,Allow
Deny from all
Allow from .example.com
</Location>
ã“ã†ã™ã‚‹ã¨ã€http://your.server.name/balancer-manager
ã®ãƒšãƒ¼ã‚¸çµŒç”±ã§ã€ã‚¦ã‚§ãƒ–ブラウザã‹ã‚‰ãƒãƒ¼ãƒ‰ãƒãƒ©ãƒ³ã‚µãƒžãƒãƒ¼ã‚¸ãƒ£ã«
アクセスã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚
クッã‚ーをもã¨ã«ã‚¹ãƒ†ã‚£ãƒƒã‚ãƒã‚¹ã‚’使ã†å ´åˆã€ã©ã®ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã«å‰²ã‚ŠæŒ¯ã‚‹ã¹ãã‹
を決ã‚るクッã‚ーã®åå‰ã‚’指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
クッã‚ーå㯠ProxyPass
ã¾ãŸã¯
ProxySet
ã®ã„ãšã‚Œã‹
ã«ä»˜ä¸Žã™ã‚‹ stickysession 属性ã§è¨å®šã—ã¾ã™ã€‚
クッã‚ーåã¯å¤§æ–‡å—å°æ–‡å—を区別ã—ã¾ã™ã€‚
ãƒãƒ©ãƒ³ã‚µã¯ãã®ã‚¯ãƒƒã‚ーã®å€¤ã‚’å–り出ã—ã€ãã®å€¤ã«ä¸€è‡´ã™ã‚‹ route 値ã®
ワーカーを探ã—ã¾ã™ã€‚
route ã‚‚ ProxyPass
ã¾ãŸã¯ ProxySet
ã®ã„ãšã‚Œã‹ã«è¨å®šã—ãªã‘れã°ã„ã‘ã¾ã›ã‚“。
クッã‚ーã¯ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã«ã‚ˆã£ã¦è¨å®šã•れるã‹ã€ã‚ã‚‹ã„ã¯
上記㮠例 ã®ã‚ˆã†ã« Apache Web サーãƒè‡ªèº«
ã«ã‚ˆã£ã¦è¨å®šã•れã¾ã™ã€‚
ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã®ä¸ã®ä¸€éƒ¨ã¯å°‘ã—ç•°ãªã‚‹å½¢å¼ã®ã‚¹ãƒ†ã‚£ãƒƒã‚ãƒã‚¹ã‚¯ãƒƒã‚ーを使ã„ã¾ã™ã€‚
ãŸã¨ãˆã° Apache Tomcat ãŒãã†ã§ã™ã€‚Tomcat ã¯è‡ªèº«ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹åã‚’
セッション ID ã®ã‚¯ãƒƒã‚ãƒ¼ã®æœ€å¾Œã«ä»˜ã‘åŠ ãˆã¾ã™ã€‚ã“ã®æ™‚ã€ã‚»ãƒƒã‚·ãƒ§ãƒ³ ID
ã¨ã®åŒºåˆ‡ã‚Šæ–‡å—ã«ãƒ‰ãƒƒãƒˆ (.
) を使ã„ã¾ã™ã€‚
ã“ã®ãŸã‚ã€Apache Web サーãƒãŒãƒ‰ãƒƒãƒˆã‚’スティッã‚ãƒã‚¹ã‚¯ãƒƒã‚ー値ã®ä¸ã«è¦‹ã¤ã‘ã‚‹ã¨ã€
route を探ã™ãŸã‚ã«ãƒ‰ãƒƒãƒˆä»¥é™ã®éƒ¨åˆ†ã®ã¿ã‚’使ã†ã‚ˆã†ã«ã—ã¾ã™ã€‚
Tomcat å´ã§è‡ªèº«ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹åã‚’è¨å®šã™ã‚‹ã«ã¯ã€Tomcat ã®è¨å®šãƒ•ァイル
conf/server.xml
ã®ä¸ã® jvmRoute
属性ã«
指定ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚値ã¯ãれãžã‚Œã® Tomcat ã«æŽ¥ç¶šã™ã‚‹ãƒ¯ãƒ¼ã‚«ãƒ¼ã®
route 値ã¨ä¸€è‡´ã•ã›ã¾ã™ã€‚
Tomcat ãŠã‚ˆã³ã‚µãƒ¼ãƒ–レットベース㮠Java Web アプリサーãƒãŒä¸€èˆ¬ã«ä½¿ã†
セッションクッã‚ーã®åå‰ã¯ JSESSIONID
(ã™ã¹ã¦å¤§æ–‡å—) ã§ã™ã€‚
ã“ã®åå‰ã¯è¨å®šã«ã‚ˆã‚Šå¤‰æ›´ã‚‚å¯èƒ½ã§ã™ã€‚
スティッã‚ãƒã‚¹ã‚’実装ã™ã‚‹ãµãŸã¤ã‚ã®æ‰‹æ®µã¯ URL エンコーディングã§ã™ã€‚
Web サーãƒã¯ãƒªã‚¯ã‚¨ã‚¹ãƒˆã® URL ã®ä¸ã‹ã‚‰ã‚¯ã‚¨ãƒªãƒ‘ラメータを探ã—ã¾ã™ã€‚
探ã™ãƒ‘ラメータåã¯åŒã˜ã‚ˆã†ã« stickysession å±žæ€§ã§æŒ‡å®šã—ã¾ã™ã€‚
パラメータ値ã¨ä¸€è‡´ã™ã‚‹ route 値ã®ãƒ¯ãƒ¼ã‚«ãƒ¼ã‚’探ã—ã¾ã™ã€‚
レスãƒãƒ³ã‚¹ã«å«ã¾ã‚Œã‚‹ã™ã¹ã¦ã® URL リンクを探ã—ã ã—æ›¸ãæ›ãˆã‚‹ã®ã¯ç°¡å˜ã§ã¯ãªã„ã®ã§ã€
一般ã«ãれãžã‚Œã®ãƒªãƒ³ã‚¯ã«ã‚¯ã‚¨ãƒªãƒ‘ラメータを付ã‘åŠ ãˆã‚‹ã®ã¯ã€
ãã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„を生æˆã—ãŸãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã®ä»•事ã§ã™ã€‚
時ã«ã¯ã€mod_substitute
を使ã£ã¦ Web サーãƒã«ã“ã®æ›¸ãæ›ãˆã‚’
ã•ã›ã‚‹ã®ãŒå¯èƒ½ãªå ´åˆã‚‚ã‚りã¾ã™ã€‚
ãŸã ã—ã€ãƒ‘フォーマンスをè½ã¨ã™å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚
Java 標準㯠URL エンコーディングを少ã—ç•°ãªã‚‹å½¢ã§å®Ÿè£…ã—ã¾ã™ã€‚
URL ã®ãƒ‘ã‚¹æƒ…å ±ã‚’ã‚»ãƒŸã‚³ãƒãƒ³ (;
) ã§åŒºåˆ‡ã£ã¦
セッション ID を付ã‘åŠ ãˆã¾ã™ã€‚
クッã‚ーã®å ´åˆã¨åŒã˜ã‚ˆã†ã«ã€ Apache Tomcat ã¯ã“ã®ãƒ‘ã‚¹æƒ…å ±ã«
jvmRoute
ã®è¨å®šå€¤ã‚’å«ã‚ã¾ã™ã€‚
Apache ã«ã“ã®ç¨®ã®ãƒ‘ã‚¹æƒ…å ±ã‚’è¦‹ã¤ã‘ã•ã›ã‚‹ã«ã¯ã€
ProxyPass
ã‚ã‚‹ã„ã¯
ProxySet
ã®
scolonpathdelim
ã‚’ On
ã«ã—ã¾ã™ã€‚
最後ã«ã€ã‚¯ãƒƒã‚ー㨠URL エンコーディングã®ä¸¡æ–¹ãŒæŒ‡å®šã§ãã‚‹ã“ã¨ã‚’示ã—ã¾ã™ã€‚
次ã®ä¾‹ã®ã‚ˆã†ã«ã€ã‚¯ãƒƒã‚ーå㨠URL パラメータåを垂直ãƒãƒ¼ (|
)
ã§åŒºåˆ‡ã£ã¦æŒ‡å®šã—ã¾ã™:
ProxyPass /test balancer://mycluster stickysession=JSESSIONID|jsessionid scolonpathdelim=On
<Proxy balancer://mycluster>
BalancerMember http://192.168.1.50:80 route=node1
BalancerMember http://192.168.1.51:80 route=node2
</Proxy>
ã‚‚ã—åŒã˜ãƒªã‚¯ã‚¨ã‚¹ãƒˆãŒã€ã‚¯ãƒƒã‚ーã¨ãƒªã‚¯ã‚¨ã‚¹ãƒˆãƒ‘ラメータã®ä¸¡æ–¹ã®ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°æƒ…å ±ã‚’ æä¾›ã—ãŸå ´åˆã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆãƒ‘ラメータã®ã»ã†ãŒä½¿ã‚れã¾ã™ã€‚
ã‚‚ã—アプリã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ãŒå¤±ã‚れã¦ãƒ¦ãƒ¼ã‚¶ãŒå†ãƒã‚°ã‚¤ãƒ³ã—ãªã‘れã°ã„ã‘ãªã„ãªã© スティッã‚ãƒã‚¹é–¢é€£ã®ã‚¨ãƒ©ãƒ¼ã«éé‡ã—ãŸã‚‰ã€ ã“ã®åŽŸå› ã¯ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã®å¿œç”ã«æ”¯éšœãŒã‚ã£ãŸã›ã„ã‹ã€ ã‚ã‚‹ã„ã¯è¨å®šãƒŸã‚¹ã«ã‚ˆã‚‹ã‚‚ã®ã‹ã‚’最åˆã«åˆ‡ã‚Šåˆ†ã‘ãŸã„ã§ã—ょã†ã€‚ ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã®å®‰å®šæ€§ã«é–¢ã—ã¦èµ·ãã†ã‚‹å•題を見ã¤ã‘ã‚‹ã«ã¯ã€ Apache ã®ã‚¨ãƒ©ãƒ¼ãƒã‚°ã«ãƒ—ãƒã‚シエラーã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒãªã„ã‹ç¢ºèªã—ã¦ãã ã•ã„。
è¨å®šãŒæ£ã—ã„ã‹ã‚’確èªã™ã‚‹ã«ã¯ã€æœ€åˆã«ã‚¹ãƒ†ã‚£ãƒƒã‚ãƒã‚¹ã‚’
クッã‚ー㨠URL エンコーディングã®ã©ã¡ã‚‰ã§è¡Œã£ã¦ã„ã‚‹ã‹ã‚’確èªã—ã¦ãã ã•ã„。
次ã«ã€LogFormat
を変更ã—ã¦
アクセスãƒã‚°ã«é©åˆ‡ãªãƒ‡ãƒ¼ã‚¿ãŒæ®‹ã‚‹ã‚ˆã†ã«ã™ã‚‹ã¨ã‚ˆã„ã§ã—ょã†ã€‚
次ã®ãƒ•ィールドãŒä¾¿åˆ©ã§ã™:
%{MYCOOKIE}C
MYCOOKIE
ã¨ã„ã†åå‰ã®ã‚¯ãƒƒã‚ーã®å€¤ã€‚
ã“ã®åå‰ã¯ stickysession å±žæ€§ã®æŒ‡å®šå€¤ã¨åŒã˜ã¯ãšã§ã™ã€‚%{Set-Cookie}o
%{BALANCER_SESSION_STICKY}e
%{BALANCER_SESSION_ROUTE}e
%{BALANCER_WORKER_ROUTE}e
%{BALANCER_ROUTE_CHANGED}e
1
ã«ãªã‚Šã¾ã™ã€‚ã¤ã¾ã‚Šã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¯ã‚¹ãƒ†ã‚£ãƒƒã‚ーã¨ã—ã¦
処ç†ã•れã¦ã„ã¾ã›ã‚“。セッションãŒå¤±ã‚ã‚Œã‚‹åŽŸå› ã§ã‚ˆãã‚ã‚‹ã‚‚ã®ã¯ã€ã‚»ãƒƒã‚·ãƒ§ãƒ³ã‚¿ã‚¤ãƒ アウトã§ã™ãŒã€ ã“れã¯é€šå¸¸ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã®ã‚µãƒ¼ãƒã§å¤‰æ›´å¯èƒ½ã§ã™ã€‚
ãƒã‚°ãƒ¬ãƒ™ãƒ«ã‚’ debug
以上ã«è¨å®šã™ã‚‹ã¨ã€
ãƒãƒ©ãƒ³ã‚µã¯ã‚¹ãƒ†ã‚£ãƒƒã‚ãƒã‚¹å‹•作ã®è©³ç´°ãªæƒ…å ±ã‚’ã‚¨ãƒ©ãƒ¼ãƒã‚°ã«æ›¸ã出ã—ã¾ã™ã€‚
ã“れã¯ã‚¹ãƒ†ã‚£ãƒƒã‚ãƒã‚¹ã®å•題ã®ãƒˆãƒ©ãƒ–ルシューティングã™ã‚‹ç°¡å˜ãªæ‰‹æ³•ã§ã™ãŒã€
é«˜è² è·ãªæœ¬ç•ªã‚µãƒ¼ãƒã§ã¯ãƒã‚°ã®åˆ†é‡ãŒè†¨å¤§ã«ãªã£ã¦ã—ã¾ã†ã‹ã‚‚ã—れã¾ã›ã‚“。