| ■ 【ぷろじぇくと ぞうさん】 〜E-Bananaサーバ 構築日記〜
|
第13日目:〜外伝V〜 ロードバランサーを作れ! (その4)〜
|
どうも、('A`)です。
家でニュースを見ていたら、東京とかで桜が開花したと伝えていました。
もうお花見のシーズンなんだなあ。('A`)の住んでいる札幌では、GW過ぎないと見れないです。
ただ、北海道では短い間ですが梅とか桜とかがほぼ一斉に咲くので、なかなか華やかですよ。
前回(第11日目)matdのインストールでエラー出まくり途方に暮れていましたが、おかげさまで
コンパイル通りました。
いきなりこのページに来た人は状況判らないと思いますので、簡単に説明しますと、、、
・matdのソースをココから入手
・コンパイル等の処理を実行するMakefileをココから入手
・matdで利用しているソフトウェア(libdnet-1.11、libpcap-0.9.5)をpkg_addでインストール
・でもmakeしたら、エラーが出まくってmakeがストップ
・・・というのが前回までの状況でした。
# make
cc -O2 -I/usr/local/include -o matd matd.c -pthread -L/usr/local/lib -ldnet
/var/tmp//ccccysVg.o(.text+0x7c7): In function `readconfig':
: undefined reference to `pcap_findalldevs'
/var/tmp//ccccysVg.o(.text+0x99e): In function `readconfig':
: undefined reference to `pcap_freealldevs'
(以下、略)
*** Error code 1
Stop in /home/admin/matd.
#
|
よくよくエラーを見ると「pcap_なんたら」という関数(?)が定義されていないと言ってるので、
ヘッダファイルが無いのかな、と思い調べてみましたが、存在してました。
うーん。。。
# find /usr -name dnet.h -print
/usr/local/include/dnet.h
# find /usr -name pcap.h -print
/usr/include/pcap.h
/usr/local/include/pcap.h
#
|
検索エンジンを使って「pcap_findalldevs」で調べてみると、こんなページを見つけました。
http://www.tcpdump.org/lists/workers/2004/01/msg00032.html
(何故かリンク先のサーバがダウンしているみたいなので、繋がらなかったら検索結果の
キャッシュを見る様にして下さい。でもたしかココってtcpdumpの本家サイトだったと
思ったんだが・・・いいのか、ダウンしたまんまで?)
This means that, when you link your program, you need to have the option
-L /usr/local/lib
in the compiler command line *before* the "-lpcap" option.
もしかして・・・-lpcapってのをMakefleの記述に追加すると動くかも。
試しにMakefileの以下の行を修正してみます。
LIBS = -L/usr/local/lib -ldnet
↓
LIBS = -L/usr/local/lib -ldnet -lpcap
んで、もう一度makeを実行すると・・・成功!
matdの実行形式(モジュール)が生成されました。
# ls -l
total 34
-rw-r--r-- 1 root wheel 602 Mar 21 03:13 Makefile
-rw-r--r-- 1 root wheel 32221 Oct 23 11:30 matd.c
# make
cc -O2 -I/usr/local/include -o matd matd.c -pthread -L/usr/local/lib -ldnet -lpcap
# ls -l
total 186
-rw-r--r-- 1 root wheel 602 Mar 21 03:13 Makefile
-rwxr-xr-x 1 root wheel 154444 Mar 23 22:59 matd
-rw-r--r-- 1 root wheel 32221 Oct 23 11:30 matd.c
#
|
どうも pcapのヘッダファイル(pcap.h)が /usr/include と /usr/local/include の2か所に
あって、 /usr/local/include の方を使わないといけなかったようです。
(そして -lpcap と指定して 「/usr/local/lib の方を使うよー」と明示してあげないと
取り込んでもらえない。)
しかもそれぞれの include ライブラリにあるヘッダファイルの中身が違っていた。。。
# ls -l /usr/include/pcap.h
-r--r--r-- 1 root wheel 10364 Jan 11 2007 /usr/include/pcap.h
# ls -l /usr/local/include/pcap.h
-r--r--r-- 1 root wheel 10991 Oct 15 2006 /usr/local/include/pcap.h
#
|
ま、なんとかロードバランサーとして必要な3つのソフトウェア(heartbeat、balance、matd)が
これで全部「インストール」できた。
山登りで例えると4〜5合目まで辿り着いたかなあ、というところです。
ちなみにmatdの使い方とかはSunOSさんのサイトのココに詳しく載っています。
私の方ではworkerとかは使わないので、動かし方は以下の方法となります。
/usr/local/sbin/matd -F -f /usr/local/etc/matd.cf
(パラメータ -F は「フォアグラウンドで実行する」事を、 -f は設定ファイルの場所を指定する
場合に記述します。)
そして /usr/local/etc に設置する設定ファイル(matd.cf)の内容は以下の通りとなります。
(ここではサーバ1: banana260.maido3.com (IP:206.223147.160、206.223.147.161)を例に
記述します。)
[/usr/local/etc/matd.cf]
proto=tcp
listen=206.223.147.161:80
output_if=vr0
targets=[相手先サーバ1のMACアドレス],[相手先サーバ2のMACアドレス]
|
こう書いているうちに突然気がついた。。。
('A`)「あ、あれっ・・・俺、サーバ何台確保していたんだっけ?」
改めて考えると、ロードバランサーを使ったサーバ環境を構築する場合、
・バランサーとして動くサーバは最低2台以上
(メインと交代用の2台が必要)
・バランサーから監視やアクセス要求を受けるサーバは最低2台以上
(振り分け機能の確認という意味では2〜3台は必要)
必要となります。
そして、('A`)の手元にあるサーバは・・・3台!(9日目の日記を参照)
1台足りないよぉぉぉぉぉ。
急いでサーバを追加確保して、FreeBSD 6.2-RELEASEに再インストールです。
(実はまだ確保作業中だったりします(泣 ドジッてすみません。)
こんな時に限って鯖子J( 'ー`)し が、「今日の日記は?」と覗きに来ました。
('A`)の方ではmatdの作業内容と日記の原稿を書くのに集中特化していたのですが、
やがて、、、
J( 'ー`)し:「フォアグラウンドって何?」
('A`):「え、ちょっと今は日記を書いているんだから、後で・・・」
J( 'ー`)し:「だから何?これじゃ日記読んでも判らないわよ!説明しなさい。」
('A`):「うー、あー、、、」
|
('A`)えーと、先ほどmatdの動かし方のところで「フォアグラウンド」という言葉が
出てきましたが、馴染みが無いかもしれないのでここで説明しますね。
(本当は用語辞典とかの方が詳しいと思うんだけど・・・)
[プロセスとフォア/バックグラウンドについて]
サーバではいろんなソフトウェアやコマンドが動いています。
(例えばqmailとかApacheなどのソフトウェア、あるいはcpコマンドやfindコマンドなど)
この1つ1つの「処理」をプロセスと言います。
プロセスには大きく分けて「フォアグラウンド」と「バックグラウンド」の2つがあります。
('A`)が認識している相違点としては、「フォアグラウンド」とはユーザが操作可能な状態
(例えばSSHの画面から入力が受付できる状態、など)、「バックグラウンド」とはユーザ
操作ができない状態(例えばSSHの画面からそのプロセスに対しての入力とかが一切
できない状態)という事が挙げられます。
プロセスをフォアグラウンド/バックグラウンドのどちらでで動かすかの切り替えは
以下のコマンドで実現できます。
(例)SSHの画面から以下のコマンドを実行する。
(その時のプロセスIDが777とします。)
ls -R / > /home/list.txt
これを実行するとコマンドの実行が終了するまでSSHのプロンプトは出ないままの
状態となります。
このプロセスをバックグラウンドに切り替えする場合には、まずctrlキーを
押しながらzキーを2回押します。
すると画面上に「Suspended」という表示が出ます。この時該当のプロセスは
中断状態になります。
そこで続けて画面上から bg と入力してEnterキーを押すと該当のプロセスは
バックグラウンドされ実行が再開されます。
(画面上には最後に & の文字がついた形で最初に入力されたコマンドが
表示されます。)
# ls -R / > /home/list.txt
^Z
Suspended
# bg
[1] ls -R / > /home/list.txt &
#
|
psコマンドでプロセス一覧を見ると、該当のプロセス番号が判ります。
777 ?? Is 0:00.04 ls -R / > /home/list.txt
このプロセスを再びフォアグラウンドに戻す時には
fg 777 (777はプロセス番号)
と入力すると、フォアグラウンドに戻ります。
J( 'ー`)し:「ふーん・・・」
('A`):「どう、判った?」
J( 'ー`)し:「まあ他の人が判るんだったらいいわ。」
('A`):「おいおい、せっかく説明してあげたのに、、、」
J( 'ー`)し:「そうだ、サポートの方にMySQLの質問が多く来ているの。私うまく
答えられないから、代わりに答えてあげて。」
('A`):「えーーーーー」
|
自分('A`)のチョンボのせいでサーバ確保とか追加作業が起きている中で、更に
振られるとは・・・
次回はロードバランサーのお話ができる様に努めますが、もしかすると間に合わない
かもしれないので、その時には先ほどリクエストのあったMySQLについてのお話に
なるかも、かも・・・(うわーん!)
それでは、また。
|
|
|
|
|
12日目に戻る。 14日目に続く。
解析
|