レンタルサーバー
BIG-server.com
簡単・はやい・大容量・どんな目的にもマッチするレンタルサーバー
HOME プライス お見積もり・プラン選択 お申し込み ユーザーサポート お問い合わせ

■ 【ぷろじぇくと ぞうさん】 〜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日目
目次に戻る
第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日目
目次に戻る

いま一番お得なページ! 解析
Copyright (C) 1997-2008, big-server.com. All Rights Reserved. server@maido3.com
レンタルサーバー BIG-server.com
Powered By Maido3.com