| ■ 【ぷろじぇくと ぞうさん】 〜E-Bananaサーバ 構築日記〜
|
第11日目:〜外伝V〜 ロードバランサーを作れ! (その3)〜
|
どうも、('A`)です。
('A`)が住んでいる札幌某所ではここ数日暖かい日が続いています。
先月の目まぐるしい忙しさもひと段落し一息ついているのですが、ここ数日ちょっと
憂鬱です・・・
会社の同僚の鯖子(以下、 J( 'ー`)し)が朝から「今日はもう日記書いたの?え、まだ?
早く書きなさいよっ!」と事あるごとに言ってくるので、プレッシャーを感じています・・・
(たぶん裏の方で(^_^;)さんが糸引いているんだろうなあ・・・)
連載マンガや小説を書いている人達もこんな感じで原稿とにらめっこしているのかなあ、と
思うと「大変ですよねー」と声かけてあげたくなる心境です、ハイ・・・
前回heartbeatのインストールと設定まで終わりました。
いよいよheartbeatを動かしてみます。
root弟(以下、(´・ω・`))と一緒にSSH経由でサーバにログインしています。
('A`):「さて、設定ファイルも設置したし、いよいよ動かしてみるか。」
(´・ω・`):「heartbeatのサイトを参考にすると、
/usr/local/lib/heartbeat/heartbeat startで起動するようです。」
('A`):「よしっ、動いたーーーーー」
(´・ω・`):「成功ですね。」
('A`):「止めるときはどうするの?」
(´・ω・`):「/usr/local/lib/heartbeat/heartbeat stopで停止するようですよ。」
('A`):「って、あれー?止まらない・・・」
(´・ω・`):「え、あ、あれぇ。」
('A`):「何度やっても止まらない(泣 killコマンド入れるわ・・・」
|
ちなみに起動コマンド(らしきもの)を入れた時はこんなメッセージが出ました。
# /usr/local/lib/heartbeat/heartbeat start
heartbeat: 2008/03/17_03:26:22 info: Neither logfile nor logfacility found.
heartbeat: 2008/03/17_03:26:22 info: Logging defaulting to /var/log/ha-log
heartbeat: 2008/03/17_03:26:22 info: **************************
heartbeat: 2008/03/17_03:26:22 info: Configuration validated. Starting heartbeat 1.2.4
#
そして停止コマンド(らしきもの)を入れた時は以下のメッセージが出ました。
# /usr/local/lib/heartbeat/heartbeat stop
heartbeat: 2008/03/17_03:26:58 info: Neither logfile nor logfacility found.
heartbeat: 2008/03/17_03:26:58 info: Logging defaulting to /var/log/ha-log
heartbeat: 2008/03/17_03:26:58 info: **************************
heartbeat: 2008/03/17_03:26:58 info: Configuration validated. Starting heartbeat 1.2.4
heartbeat: 2008/03/17_03:26:58 info: heartbeat: already running [pid 28813].
#
STOPが認識されていない。。。
うーん、どうしたものか。
(´・ω・`):「どうして停止しないんだろう・・・」
('A`):「あれかなあ、起動用のスクリプトとかあるのかなあ。」
(´・ω・`):「えー、heartbeatのサイトではそんなの載っていませんでしたよ。」
('A`):「でもね、FreeBSDのパッケージを入れた訳だから。」
(´・ω・`):「あー。でもそれじゃあ、そのスクリプトはどこにあるんでしょう?」
('A`):「心当たりはあるんだ。」
(´・ω・`):「え、何処にあるんですか?」
('A`):「まあ、あったらラッキーだけどね。これから探してみるよ。」
|
root管理者としてデビューしたての頃、('A`)はひょんな事から2chのむむむさんと出会い、
個人的に色々と教えてもらった事があります。
「困った時にはman(マニュアル)を見ましょう」、そして「/etcは宝の山」という言葉を
頂きました。
/etc と一口に言っても、実は「etc」と名のつく処はいろんな所にあるんですよ。
例えば /usr/local の下にも etcがあります。
ここを調べようかと思います。
サーバ起動時に各種ソフトウェアを起動する場合には/usr/local/etc/rc.dの中に
起動スクリプトなどを設置したりする場合があります。
(bananaサーバとかT-BananaサーバではここにMySQLの起動スクリプトを置いています。)
もしかしたら、FreeBSDの事だから、ここに起動スクリプトが設置されているかもしれない。
んで、lsコマンドを打ったら、、、、あったー!
「heartbeat.sh」なるものが。
# ls -l /usr/local/etc/rc.d
total 34
-rwxr-xr-x 1 root wheel 23589 Oct 15 2006 heartbeat.sh
-rwxr-xr-x 1 root wheel 1496 Oct 15 2006 ldirectord.sh
-r-xr-xr-x 1 root wheel 1659 Oct 31 2006 mysql-server
-r-xr-xr-x 1 root wheel 1269 Oct 15 2006 snmpd
-r-xr-xr-x 1 root wheel 813 Oct 15 2006 snmptrapd
#
|
(heartbeat.sh の内容はココを参照して下さい。)
なので、起動・停止のコマンドは以下の様になります。
(起動): /usr/local/etc/rc.d/heartbeat.sh start
(停止): /usr/local/etc/rc.d/heartbeat.sh stop
|
さっそく実行してみると、こういうメッセージが出ます。
# /usr/local/etc/rc.d/heartbeat.sh start
Starting High-Availability services:
Done.
#
# /usr/local/etc/rc.d/heartbeat.sh stop
Stopping High-Availability services:
Done.
#
で、稼働中のheartbeatのプロセスは以下の4つが表示されます。
78441 ?? Ss 0:00.04 heartbeat: heartbeat: master control process (heartbeat)
78445 ?? S 0:00.01 heartbeat: heartbeat: FIFO reader (heartbeat)
78446 ?? S 0:00.01 heartbeat: heartbeat: write: bcast vr0 (heartbeat)
78447 ?? S 0:00.01 heartbeat: heartbeat: read: bcast vr0 (heartbeat)
(´・ω・`):「へえー、こんな場所にあったんだ・・・」
('A`):「賭けに近かったけど、もしかしたらと思ったんだ。」
(´・ω・`):「/etcって本当に「宝の山」なんですね。」
('A`):「受け売りな感じもあるけど、でもね、昔教えてもらってから何度か助かった
事もあるんだよ。」
|
heartbeatの起動・停止まで確認できたので、本来なら「片方がダウンしたら、もう片方が
メインに切り替わるか」という実験を行おうかと思ったのですが、それより残り2つの
ソフトウェアをインストールする作業を進めよう。
次にインストールするソフトウェアは「balance」です。
(このソフトは外部から来たアクセス要求に対する各サーバ間への振り分けを行います。
balanceについてはココ(本家サイト)を参照して下さい。)
んで、いつもの如くpkg_addで入れられないかなあとFreeBSDの本家サイトで検索していると、、、
ありました。balance-3.34として、6.2-RELEASE版のPortsにありました。
さっそくインストール。
balance本体は /usr/local/bin/balance として入りました。また、heartbeatの時の様に
/usr/local/etc/rc.d を調べてみると、起動用のスクリプト(らしきもの)が見つかりました。
# ls -l /usr/local/etc/rc.d
total 30
-r-xr-xr-x 1 root wheel 1605 Oct 14 2006 balance
-rwxr-xr-x 1 root wheel 23589 Oct 15 2006 heartbeat.sh
-rwxr-xr-x 1 root wheel 1496 Oct 15 2006 ldirectord.sh
-r-xr-xr-x 1 root wheel 1659 Oct 31 2006 mysql-server
#
|
(起動用スクリプトらしき上記 balance の内容はココを参照して下さい。)
ただ、この起動スクリプトらしきものではIPアドレスとかホスト名とかの指定を埋め込む
必要がありそうです。(別の仕組みを考えないといけないなあ。。。)
まずはインストールしたbalanceが起動するかどうか、実際にサーバ(今回はbanana261)
から以下のコマンドを直接叩いてみよう。
(なおバックグラウンドで実行される様に コマンド入力直後に CTRL + Zキー 2回押し
してから bg と入力します。)
balance -b 206.223.148.166 -B 206.223.148.166 -f 80 jbana205.maido3.com:80
ここで、206.223.148.166 というIPアドレスはbanana261が持っている2つのIPのうちの1つで、
heartbeatやbalanceが専用で使うアドレスです。また jbana205.maido3.com とは今回確保した
サーバの1つで、「振られる側のサーバ」のホスト名を示しています。
psコマンドで調べると、確かに動きました。
1056 p0 S 0:00.01 balance -b 206.223.147.166 -B 206.223.147.166 -f 80 jbana205.maido3.com:80
(´・ω・`):「動いてますねー」
('A`):「うん。ただ、これを実際にどうやって日常的に動かすか、これから方法を
考えないと・・・」
(´・ω・`):「あー、あとmatdのインストールもあるんですよねえ?」
('A`):「そう、それなんだよ。ソースやMakefileとかは難民板の雪だるまスレで
見つけたけど、実際インストールして動かせるかは正直自信が無い・・・」
(´・ω・`):「でも、今までうまくいったじゃないですか。大丈夫ですよ。」
('A`):「甘いな。こういうのって、インクルードされているヘッダファイルが無い、
とかでエラーになったりする事が多いんだ。」
(´・ω・`):「どうしてそんなに「悪い方へ、悪い方へ」考えちゃうんですか?」
('A`):「今までそういうので痛い目に遭ってきているからね。予め想定しておけば
ショックも少ないでしょう。」
(´・ω・`):「・・・」
|
さて、いよいよロードバランサー構築に必要な最後のソフトウェア「matd」のインストールに
入ります。
matdとは難民板の雪だるまスレでSunOSさんから紹介されているMacアドレスを利用した
通信のためのデーモンです。
(詳細はSunOSさんのサイトのココに詳しく載っています。)
使用するには事前に libdnet と libpcap がインストールされている必要があります。
matdのソース本体はココから、Makefileは2chのむむむさんのサイトのココから頂きました。
(banana260の/home/admin/matd に格納)
んで、banana260に libdnet-1.11 と libpcap-0.9.5 をpkg_addでインストールしてから、
makeしてみる。
どうかな、どうかな・・・
# ls -l
total 34
-rw-r--r-- 1 root wheel 595 Dec 18 2005 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
/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'
/var/tmp//ccccysVg.o(.text+0xb47): In function `readconfig':
: undefined reference to `pcap_open_live'
/var/tmp//ccccysVg.o(.text+0xb97): In function `readconfig':
: undefined reference to `pcap_freealldevs'
/var/tmp//ccccysVg.o(.text+0xbb1): In function `readconfig':
: undefined reference to `pcap_freealldevs'
/var/tmp//ccccysVg.o(.text+0xc36): In function `readconfig':
: undefined reference to `pcap_compile'
/var/tmp//ccccysVg.o(.text+0xc58): In function `readconfig':
: undefined reference to `pcap_setfilter'
/var/tmp//ccccysVg.o(.text+0xc83): In function `readconfig':
: undefined reference to `pcap_geterr'
/var/tmp//ccccysVg.o(.text+0xca8): In function `readconfig':
: undefined reference to `pcap_freecode'
/var/tmp//ccccysVg.o(.text+0xcb4): In function `readconfig':
: undefined reference to `pcap_close'
/var/tmp//ccccysVg.o(.text+0xcf8): In function `readconfig':
: undefined reference to `pcap_close'
/var/tmp//ccccysVg.o(.text+0xd0a): In function `readconfig':
: undefined reference to `pcap_freecode'
/var/tmp//ccccysVg.o(.text+0xd19): In function `readconfig':
: undefined reference to `pcap_setdirection'
/var/tmp//ccccysVg.o(.text+0xd40): In function `readconfig':
: undefined reference to `pcap_geterr'
/var/tmp//ccccysVg.o(.text+0x113a): In function `readconfig':
: undefined reference to `pcap_close'
/var/tmp//ccccysVg.o(.text+0x14fd): In function `readconfig':
: undefined reference to `pcap_close'
/var/tmp//ccccysVg.o(.text+0x15d5): In function `readconfig':
: undefined reference to `pcap_close'
/var/tmp//ccccysVg.o(.text+0x162f): In function `readconfig':
: undefined reference to `pcap_geterr'
/var/tmp//ccccysVg.o(.text+0x1680): In function `freeconfig':
: undefined reference to `pcap_close'
/var/tmp//ccccysVg.o(.text+0x1df4): In function `iploop':
: undefined reference to `pcap_get_selectable_fd'
/var/tmp//ccccysVg.o(.text+0x1e65): In function `iploop':
: undefined reference to `pcap_dispatch'
*** Error code 1
Stop in /home/admin/matd.
#
|
うーん。エラーになるなあ。これって何かのヘッダファイルが足りないのかなあ。
ちょっとmatd.cに書かれているヘッダファイルが揃っているか調べてみよう。
('A`)はCプログラムを殆ど知らないので、これを解決するには時間がかかりそうです。
(いずれにしてもmatdを動かせないと、今構築しようとしているロードバランサーが
うまく動いてくれないだろうから・・・)
という事でmatdの攻略は次回のお楽しみという事で。
それでは、また。
|
|
|
|
|
10日目に戻る。 12日目に続く。
解析
|