[an error occurred while processing this directive]
■ 【ぷろじぇくと ぞうさん】 〜E-Bananaサーバ 構築日記〜

目次に戻る
1日目 2日目 3日目 4日目 5日目 6日目 7日目
8日目 9日目 10日目 11日目 12日目 13日目 14日目
15日目 16日目 17日目 18日目 19日目 20日目 21日目
22日目 23日目 24日目 25日目 26日目 27日目 28日目
29日目 30日目 31日目 32日目 33日目 34日目 35日目
36日目 37日目 38日目 39日目 40日目 41日目 42日目
43日目 44日目 45日目 46日目 47日目 48日目 49日目
50日目 51日目 52日目 53日目 54日目 55日目 56日目
57日目 58日目 59日目 60日目 61日目 62日目 63日目
64日目 65日目 66日目 67日目 68日目 69日目 70日目
71日目 72日目 73日目 74日目 75日目 76日目 77日目
78日目 79日目 80日目 81日目 82日目 83日目 84日目
85日目 86日目 87日目 88日目 89日目 90日目 91日目
92日目 93日目 94日目 95日目 96日目 97日目 98日目
99日目 100日目 101日目 102日目 103日目 104日目 105日目
106日目 107日目 108日目 109日目 110日目 111日目 112日目
113日目 114日目 115日目 116日目 117日目 118日目 119日目
120日目 121日目 122日目 123日目 124日目 125日目 126日目
127日目 128日目 129日目 130日目 131日目 132日目 133日目
134日目 135日目 136日目 137日目 138日目 139日目 140日目
141日目 142日目 143日目 144日目 145日目 146日目 147日目
148日目 149日目 150日目 151日目 152日目 153日目 154日目
155日目 156日目 157日目 158日目 159日目 160日目 161日目
162日目 163日目 164日目 165日目 166日目 167日目 168日目
169日目 170日目 171日目 172日目 173日目 174日目 175日目
176日目 177日目 178日目 179日目 180日目 181日目 182日目
183日目 184日目 185日目 186日目 187日目 188日目 189日目
190日目 191日目 192日目 193日目 194日目 195日目 196日目
197日目 198日目 199日目 200日目 201日目 202日目 203日目
204日目 205日目 206日目 207日目 208日目 209日目 210日目
211日目 212日目 213日目 214日目 215日目 216日目 217日目
218日目 219日目 220日目 221日目 222日目 223日目 224日目
225日目 226日目 227日目 228日目 229日目 230日目 231日目
232日目 233日目 234日目 235日目 236日目 237日目 238日目
239日目 240日目 241日目 242日目 243日目 244日目 245日目
246日目 247日目 248日目 249日目 250日目 251日目 252日目
253日目 254日目 255日目 256日目 257日目 258日目 259日目
260日目 261日目 262日目 263日目 264日目 265日目 266日目
267日目 268日目 269日目 270日目 271日目 272日目 273日目
274日目 275日目 276日目 277日目 278日目 279日目 280日目
281日目 282日目 283日目 284日目 285日目 286日目 287日目
288日目 289日目 290日目 291日目 292日目 293日目 294日目
295日目 296日目 297日目 298日目 299日目 300日目 301日目
302日目 303日目 304日目 305日目 306日目 307日目 308日目
309日目 310日目 311日目 312日目 313日目 314日目 315日目
316日目 317日目 318日目 319日目 320日目 321日目 322日目
323日目 324日目 325日目 326日目 327日目 328日目 329日目
330日目 331日目 332日目 333日目 334日目 335日目 336日目
337日目 338日目 339日目 340日目 341日目 342日目 343日目
344日目 345日目 346日目 347日目 348日目 349日目 350日目
351日目 352日目 353日目 354日目 355日目 356日目 357日目
358日目 359日目 360日目 361日目 362日目 363日目 364日目
第62日目:【speedo】ロードバランサーの解説を少し・・・

どうも、('A`)です。
花子の復旧が終わって一息つけるかなあ、と思いきや・・・今度はBrian( ^ω^)から
泣きつかれまして・・・なんでも彼が担当しているお客様から「ムービー系ソフト」の
インストールを頼まれて、大弱りになっていたそうで。

で、お手伝いというので('A`)がportsからインストールしてみたら、とんでもなく
大変な目に遭って・・・portsからのインストールがまともにできない。
(やれ「X11のライブラリが無い」「gnome-configでエラーです」とか言いまくって、
最後はいつもの如く「力技」で乗り切りました・・・)
それで、現在Brian( ^ω^)のお客様に確認をお願いしている処です。
(「OK!」と返事が来たら、振り返る意味で社内サーバにでも入れてみよう。)
なお、このBrian( ^ω^)からお願いされた「ムービー系ソフト(Mencoder & Mplayer
+ ffmpeg)」の事は後日アップできればなあ、と思っています。
これが本当に動けば(7.0R i386限定ですが)サーバ上で色々と動画編集とか
できるかもしれませんので。。。

それ以外にも、ここ1月の間に調子が悪くなったT-Bananaサーバを7台くらい
「再生」させたり、A-Tigerサーバの発注とか、Dualサーバの構築を始めたり・・・
色々な事に手を出していたりします。(大丈夫だろか・・・)

で、ようやっとロードバランサーの解説ができる様になりましたので、今回は
べっかんこ(ula)で実際に稼働し始めた「speedo」サーバを例に構築方法を書きます。
(と、同時に今抱えている問題もあるのですが、ね。。。)

今まで「べっかんこ(ula)」ではDNSラウンドロビンを利用して、フロントサーバ
(samexx.ula.cc)を4台で動かしていました。ただ、DNSラウンドロビンで振り分けを
おこなっている関係で、時間帯によっては特定のサーバがすごく忙しくなったり
フロントサーバの1台がダウンすると復帰するまでしばらく繋がらないという
事が発生しました。

DNSのラウンドロビン設定を修正しても新しい情報の繁栄は最短で5分後から
始まる事になりますし、ユーザが利用されるDNSキャッシュによっては古い情報が
残った状態で利用を続けられる場合も見受けられました。
そこでロードバランサーを使ってみよう、という事に急きょなりまして・・・

で、既存のフロントサーバとは別に新しいサーバ群の環境を整備しました。
以前の日記でも書いたのですが、ロードバランサーを利用するシステムを
構築する場合、一番大事な事は
システムで使用する全てのサーバは同一ネットマスク
(同一IP大台)を持つ構成にしないと動かない

という事です。
(今回久々にロードバランサーのシステムを構築したので、最初この注意点が
漏れてしまい、慌ててサーバのIPを修正したのでした・・・orz)

「speedoシステム」(以後、こう呼ぶ事にします)では以下のサーバで構成しています。
  ・ロードバランサー speedo.ula.cc
   (banana3180:IPは 206.223.150.20)
   ※このサーバにはmatdをインストールし、更にaliasの形でIPを1つ追加します。
    (この追加したIPはシステム共通で使用する事になります。)
  ・フロントサーバ same2x.ula.cc
   (現在は以下の6台で運用中)
   banana3160:IPは206.223.150.15 same20.ula.cc
   banana3195:IPは206.223.150.15 same21.ula.cc
   banana3103:IPは206.223.150.160 same22.ula.cc
   banana3219:IPは206.223.150.65 same23.ula.cc
   banana3292:IPは206.223.150.205 same24.ula.cc
   banana3293:IPは206.223.150.135 same25.ula.cc
   ※このサーバ上のApacheのバーチャルホスト定義で speedo.ula.cc を追加し、
    aliasの形でロードバランサーに付与したIPを1つ追加します。

で、サーバの構築方法は以下の手順でおこないます。

【ロードバランサーの作り方】
[第1節 IP追加]
1) サーバを用意します。(Apacheとか必要なソフトは予めインストールしておく)
2) 共通IPを用意します。
  ※今回は206.223.150.21を用意しました。
3) サーバにSSHでログインして、スーパーユーザモードになります。
4) /etc/rc.conf を編集して、共通IPを"メイン"のネットワークデバイスに追加します。
  ※T-Bananaではメインのネットワークデバイスは「em0」で、かつメインIPとして
   206.223.150.20が ifconfig_em0= の形式で記述されています。
   IPを追加する場合には、以下の形式で1行追加します。
    ifconfig_em0_alias0="inet 206.223.150.21 netmask 255.255.255.255"
5) プロンプトから以下のコマンドを入力します。
  ※このコマンドを実行する事で「リブートする事無く」追加したIPが有効化されます。
    ifconfig em0 inet 206.223.150.21 netmask 255.255.255.255 alias

[第2節 ipfilter設定]
6) kldload ipl.ko を実行します。
7) /boot/loader.conf に以下の行を追加します。
   ipl_load="YES" 8) /etc/rc.conf 内に以下のipfilter起動用のパラメータを追加します。
   ipfilter_enable="YES"
   ipfilter_rules="/etc/ipf.rules"
   ipfilter_flags=""
   ipmon_enable="YES"
   ipmon_flags="-D /var/log/ipflog"
9) /etc/ipipf.rules(ipfilterの設定ファイル)を作ります。
   block in log quick from any to any with ipopts
   block in log quick proto tcp from any to any with short
   block in quick proto tcp from any to 206.223.150.21 port = 80
   block out from 127.0.0.0/8 to any group 150
   block out from any to 127.0.0.0/8 group 150
   block out from any to 206.223.150.21/32 group 150
   block in from 127.0.0.0/8 to any group 100
   block in from 206.223.150.21/32 to any group 100

[第3節 matdのインストール・設定]
10) 作業用ディレクトリに移動します。(今回は cd /home/admin を実行しました)
11) matdのソースファイル、及びMakefileを wget コマンドで取得します。
   (ソースファイル)
   http://sunos.saita.ma/matd.c
   (Makefile)
   http://mumumu.mu/matd/Makefile
12) Makefile の以下の行を修正します。
  (修正前)
   LIBS = -L/usr/local/lib -ldnet
  (修正後)
   LIBS = -L/usr/local/lib -ldnet -lpcap
13) make を実行します。
  ※実行すると/home/admin の中に、 matd というファイルが生成されます。
   これが実行形式のmatdファイルです。
14) 生成された matd を実行用ライブラリに移動します。
   mv /home/admin/matd /usr/local/sbin
15) 管理用ユーザ aniki を作成します。
  ※adduserコマンドとかで作ります。
   FTPアカウントとして利用できる様にして下さい。
16) ディレクトリを2つ作ります。
  mkdir /home/aniki/bin
  mkdit /home/aniki/ctrl
17) /home/aniki/bin に 「兄貴スクリプト」(matd_manage.pl)を設置します。
  ※本体はコレです。
   これを所有者権限はaniki、パーミッションを 755 にして設置します。
18) /home/aniki/ctrl に以下の3つのファイルを設置します。
   ・matd.cf 本体 (matd.cf)
    ※現時点の内容はコレです。
     所有者権限はrootユーザで、パーミッションは644にします。
   ・matd.cf 雛型 (matd.cf.master)
    ※現時点の内容はコレです。
     所有者権限は一般ユーザで、パーミッションは644にします。
   ・サーバ一覧リスト (server.list)
    ※現時点の内容はコレです。
     所有者権限は一般ユーザで、パーミッションは644にします。
     このファイルの書式は以下の通りです。
       [サーバ名] [URL] [MACアドレス] [重み] [タイムアウト秒]
19) 以下の作業を実施し、daemontools登録の準備作業をおこないます。
   cd /var
   mkdir /var/matd
   mkdir /var/matd/supervise
   echo '#\!/bin/sh' > /var/matd/run
   echo 'exec env - /usr/local/sbin/matd -F -f \
      /home/aniki/ctrl/matd.cf' >> /var/run/matd
20) daemontoolsのディレクトリ(/var/service) に移動して、リンクを貼ります。
   cd /var/service
   ln -s /var/matd matd<
  ※リンクを貼った時点でmatdは動きだします。
   確認する場合には cd /var/service でdaemontoolsのディレクトリに移動した後、
   svstat * を実行し、matdが動いているか(動いている秒数にも注意)を見て下さい。
21) ルート用のディレクトリ(/root)に移動して、以下のシェルスクリプトとcronを
  設置します。
   ・matd_check.sh
    (所有者はroot、グループはwheel、パーミッションは700で設定します。)
    echo '#\!/bin/sh' > /root/matd_check.sh
    echo 'perl /home/aniki/bin/matd_manage.pl' >> /root/matd_check.sh
   ・crontab.txt
    echo '#\!/bin/sh' > /root/crontab.txt
    echo '* * * * * /root/matd_check.sh > /dev/null' >> /root/matd_check.sh
22) DNSの設定で、ロードバランサーとして使うドメインを登録します。
  ※今回の場合には speedo.ula.cc を 206.223.150.21 というIPで登録しました。
   なお注意点として、ロードバランサーのApacheにはこのドメインは
   登録されていない(登録してはいけない)
という事を忘れないで下さい。
   (誤って登録してしまうと、matdよりも先にApacheの方でアクセスを受けてしまい、
   ロードバランサーとして正常に動作しません。

【フロントサーバの作り方】
1) サーバを用意します。。(Apacheとか必要なソフトは予めインストールしておく)
2) サーバにSSHでログインして、スーパーユーザモードになります。
3) フロントサーバのシステムを予め入れます。
4) /etc/rc.conf を編集して、共通IPを"ローカル(lo0)"のネットワークデバイスに追加する。
  ※IPを追加する場合には、以下の形式で1行追加します。
    ifconfig_lo0_alias0="inet 206.223.150.21 netmask 255.255.255.255"
   注意すべき点はlo0のIPアドレスはそのままにして、新しく追加する事です。
5) プロンプトから以下のコマンドを入力します。
  ※このコマンドを実行する事で「リブートする事無く」追加したIPが有効化されます。
    ifconfig lo0 inet 206.223.150.21 netmask 255.255.255.255 alias
6) フロントサーバのバーチャルホスト定義でロードバランサーのドメインを追加します。
7) Apacheを再起動します。
  ※再起動後にロードバランサーからのリクエストを受け付けできる様になります。


これで、ロードバランサーの仕組みが出来上がります。
実際、今のところ順調に稼働しています。
但し、現状の仕組みでは問題を抱えています。
何故か自動振り分け機能(aniki)がうまく動いていない様に見受けられるのです。
matdを再起動する際のパラメータ('/usr/local/bin/svc -t /var/service/matd')を -h に
したのが影響しているのかなあ・・・現在調査中です。
あと、ロードバランサーは今1台体制で動いています。
当然このサーバがダウンしてしまうと、フロントサーバも含めてシステム全体が
「お亡くなり」となります。
ただ、こちらも「二重化」の仕組みがうまく動かないのです・・・
(特にマスター&バックアップへ変更する際のmatdの再起動及びIPの追加・削除が
うまくいきません。こちらも時間を見つけて調査中です。)

あー、本当は将来的にこの仕組みがどういう道をたどるのかを('A`)なりにご説明
しようかと思ったのですが・・・またまた「長編」になってしまう。。。
なので、次回お話できる機会ができたら取り上げるという事で、お楽しみに
それでは、また


[追伸 20:20]
「花子★の秘密の花園」スレで「なんのテストだったんだろうねー 」という書き込みを
見つけましたので、ちょっとご報告を・・・
実は今、社内サーバをリニューアル中でして、その一貫で「花子スレ」への定時報告の
仕組みが新しいサーバでちゃんと動くかをテストしていたんです。
ご存知かもしれませんが、花子&花代には1日1回(サーバ時間で毎日午前2時)に
サーバ内のuptimeコマンドの結果を報告する仕組みが動いています。
(具体的にはuptimeの結果をメールで社内サーバに送信しているんです。)
で、それを受け取った社内サーバではメールが届いていたら「花子スレ」に
CGIを使って書き込みをしています。
また、花子や花代でHDD内のセクタが壊れ、自動修復をかけた場合にもメールが
社内サーバに送られてきて、同じ様に書き込みがなされます。
(例)
3ware 3DM2 alert -- host: banana3000.maido3.com

20080625105126 - Controller 0
WARNING - Sector repair completed: port=12, LBA=0x4FAF7AC

この場合、花子には0番から15番までのHDDが繋がっているのですが、「12番目の
HDDのセクタ(場所としてはLBA=0x4FAF7ACで示されるところ)が壊れていたので
自動的に修復(repair)しましたよー」という意味です。

HDDを使っていると、時々こういう症状が起きます。ただ、花子も花代も優秀な
RAIDコントローラーカードがあって、これが障害を検知すると自動的に修復を
行なうのです。(具体的には、読めなかったセクタが含まれているデータを
「再計算」して、復元すべきデータを求め、それを別のセクタに書き込む
事をおこなっています。)
なので、今のところは心配ありません。
但し一般的な目安として、1か月の間に「4回以上」同一のHDDでエラーが
生じる場合には、HDDに物理的な障害が発生していないか調べる必要があります。
(最悪の場合にはHDD交換も視野にいれる事になります。)

以上、追伸でした。。。

61日目に戻る。   63日目に続く。

目次に戻る
1日目 2日目 3日目 4日目 5日目 6日目 7日目
8日目 9日目 10日目 11日目 12日目 13日目 14日目
15日目 16日目 17日目 18日目 19日目 20日目 21日目
22日目 23日目 24日目 25日目 26日目 27日目 28日目
29日目 30日目 31日目 32日目 33日目 34日目 35日目
36日目 37日目 38日目 39日目 40日目 41日目 42日目
43日目 44日目 45日目 46日目 47日目 48日目 49日目
50日目 51日目 52日目 53日目 54日目 55日目 56日目
57日目 58日目 59日目 60日目 61日目 62日目 63日目
64日目 65日目 66日目 67日目 68日目 69日目 70日目
71日目 72日目 73日目 74日目 75日目 76日目 77日目
78日目 79日目 80日目 81日目 82日目 83日目 84日目
85日目 86日目 87日目 88日目 89日目 90日目 91日目
92日目 93日目 94日目 95日目 96日目 97日目 98日目
99日目 100日目 101日目 102日目 103日目 104日目 105日目
106日目 107日目 108日目 109日目 110日目 111日目 112日目
113日目 114日目 115日目 116日目 117日目 118日目 119日目
120日目 121日目 122日目 123日目 124日目 125日目 126日目
127日目 128日目 129日目 130日目 131日目 132日目 133日目
134日目 135日目 136日目 137日目 138日目 139日目 140日目
141日目 142日目 143日目 144日目 145日目 146日目 147日目
148日目 149日目 150日目 151日目 152日目 153日目 154日目
155日目 156日目 157日目 158日目 159日目 160日目 161日目
162日目 163日目 164日目 165日目 166日目 167日目 168日目
169日目 170日目 171日目 172日目 173日目 174日目 175日目
176日目 177日目 178日目 179日目 180日目 181日目 182日目
183日目 184日目 185日目 186日目 187日目 188日目 189日目
190日目 191日目 192日目 193日目 194日目 195日目 196日目
197日目 198日目 199日目 200日目 201日目 202日目 203日目
204日目 205日目 206日目 207日目 208日目 209日目 210日目
211日目 212日目 213日目 214日目 215日目 216日目 217日目
218日目 219日目 220日目 221日目 222日目 223日目 224日目
225日目 226日目 227日目 228日目 229日目 230日目 231日目
232日目 233日目 234日目 235日目 236日目 237日目 238日目
239日目 240日目 241日目 242日目 243日目 244日目 245日目
246日目 247日目 248日目 249日目 250日目 251日目 252日目
253日目 254日目 255日目 256日目 257日目 258日目 259日目
260日目 261日目 262日目 263日目 264日目 265日目 266日目
267日目 268日目 269日目 270日目 271日目 272日目 273日目
274日目 275日目 276日目 277日目 278日目 279日目 280日目
281日目 282日目 283日目 284日目 285日目 286日目 287日目
288日目 289日目 290日目 291日目 292日目 293日目 294日目
295日目 296日目 297日目 298日目 299日目 300日目 301日目
302日目 303日目 304日目 305日目 306日目 307日目 308日目
309日目 310日目 311日目 312日目 313日目 314日目 315日目
316日目 317日目 318日目 319日目 320日目 321日目 322日目
323日目 324日目 325日目 326日目 327日目 328日目 329日目
330日目 331日目 332日目 333日目 334日目 335日目 336日目
337日目 338日目 339日目 340日目 341日目 342日目 343日目
344日目 345日目 346日目 347日目 348日目 349日目 350日目
351日目 352日目 353日目 354日目 355日目 356日目 357日目
358日目 359日目 360日目 361日目 362日目 363日目 364日目

いま一番お得なページ! 解析
[an error occurred while processing this directive]