【Love Affair】携帯からのアクセスに対する考察・次の一手 Part4.2 - ボーリング場3

このエントリーをはてなブックマークに追加
764root▲▲ ★
さてと。

「兄貴」の設定など相違のある点もあるかと思いますが、
まずはこういう順番でやってみるのがよさそう、っていう例を一方的に。

1) c21 = banana3239 単体で、matd を使ってロードバランサを動かす(単体テスト1)
2) c24 = banana3244 単体で、matd を使ってロードバランサを動かす(単体テスト2)
3) c21 と c24 を ucarp で結合する設定をする
765root▲▲ ★:2008/07/09(水) 01:08:26 ID:???0 BE:1095034-DIA(100512)
ただし、まず最初にやることがあります。
これをやらないと何もはじまりません。

0) c201〜c205 = tiger3502〜tiger3506 の lo0 に、206.223.150.14 の IP アドレスを追加する

# added for matd
ifconfig_lo0_alias0="inet 206.223.150.14 netmask 255.255.255.255"

上記をフロント5台の /etc/rc.conf に追加します。

で、
ifconfig lo0 206.223.150.14 netmask 255.255.255.255 alias

を手で入力します。こうすればリブートは必要ありません。
766root▲▲ ★:2008/07/09(水) 01:14:50 ID:???0 BE:3831067-DIA(100512)
次に、5台のフロントの em0 のMACアドレスを調べます。
ifconfig でわかりますが、一番楽なのはこの方法でしょう。

1) c21 = banana3239 にログインする
2) tiger3502〜tiger3505を順に ping する
3) arp -a | grep tiger350 | sort

tiger3502.maido3.com (206.223.150.105) at 00:1c:c0:4c:e2:cd on em0 [ethernet]
tiger3503.maido3.com (206.223.150.25) at 00:1c:c0:26:a7:08 on em0 [ethernet]
tiger3504.maido3.com (206.223.150.30) at 00:1c:c0:4d:39:c4 on em0 [ethernet]
tiger3505.maido3.com (206.223.150.130) at 00:1c:c0:56:75:f0 on em0 [ethernet]
767root▲▲ ★:2008/07/09(水) 01:15:38 ID:???0 BE:1824454-DIA(100512)
っと、もう1台あるか。

tiger3502.maido3.com (206.223.150.105) at 00:1c:c0:4c:e2:cd on em0 [ethernet]
tiger3503.maido3.com (206.223.150.25) at 00:1c:c0:26:a7:08 on em0 [ethernet]
tiger3504.maido3.com (206.223.150.30) at 00:1c:c0:4d:39:c4 on em0 [ethernet]
tiger3505.maido3.com (206.223.150.130) at 00:1c:c0:56:75:f0 on em0 [ethernet]
tiger3506.maido3.com (206.223.150.230) at 00:1c:c0:56:7d:83 on em0 [ethernet]

これで、MACアドレスがわかりました。

これをもとに matd.cf ファイルを作ります。
768root▲▲ ★:2008/07/09(水) 01:19:20 ID:???0 BE:7387799-DIA(100512)
banana3239 に入れる、/usr/local/etc/matd.cf を作ります。
ただし、まだこの時点では matd は起動しません。

# listen の address はホスト名または IP アドレス,
# port はサービス名またはポート番号で指定.
listen=206.223.150.14:80
# output_if は targets と同一セグメントにあるネットワーク I/F 名.
output_if=em0
# targets の address はホスト名,IP アドレスまたは MAC アドレスで指定.
# weight を省略した場合は 1 となる.
targets=00:1c:c0:4c:e2:cd,00:1c:c0:26:a7:08,00:1c:c0:4d:39:c4,00:1c:c0:56:75:f0,00:1c:c0:56:7d:83
769root▲▲ ★:2008/07/09(水) 01:21:42 ID:???0 BE:5837388-DIA(100512)
で、/etc/ipf.rules を書いて、banana3239 が返事をしないようにします。

でも、まずその前に念のため、banana3239 で動いている httpd の Listen 行を、

Listen 80
から、
Listen 206.223.150.200:80

に変更しておきます。

これで、間違って banana3239 の httpd が返事をすることはなくなりました。
770root▲▲ ★:2008/07/09(水) 01:23:31 ID:???0 BE:3648858-DIA(100512)
/etc/ipf.rules は1行でよいです。
他の行は必要ありません。

block in quick proto tcp from any to 206.223.150.14 port = 80
771root▲▲ ★:2008/07/09(水) 01:25:09 ID:???0 BE:1642436-DIA(100512)
これで準備できたので、

ifconfig_em0_alias1="inet 206.223.150.14 netmask 255.255.255.255"

のような行を書いて(既に書いてあるみたいですね)、サーバをリブートします。
>>769 とか >>770 の影響を防ぐため、単に reboot しておくといいかも。
772root▲▲ ★:2008/07/09(水) 01:32:50 ID:???0 BE:6567089-DIA(100512)
次に、matd を起動するための設定をします。

このサーバは matd に最大限の資源を与えるべきなので、
rtprio コマンドを使って、鼻薬をかがせます。

こんな起動スクリプトを準備して、daemontools 配下に置くのが楽です。
matd のエラーログをとるため、以下のように log も準備します。

mkdir /home/matd
chmod +t /home/matd
mkdir /home/matd/log
mkdir /home/matd/log/main
chown users:users /home/matd/log/main

(/home/matd/run 作成)
exec env - PATH="/usr/sbin:/usr/bin:/bin:/usr/local/bin" \
/usr/sbin/rtprio 31 /usr/local/sbin/matd -F \
-f /usr/local/etc/matd.cf \
-s /var/log/matd.stats

(/home/matd/log/run 作成)
#!/bin/sh
exec setuidgid users multilog t ./main

chmod +x /home/matd/run
chmod +x /home/matd/log/run
773root▲▲ ★:2008/07/09(水) 01:35:16 ID:???0 BE:2553874-DIA(100512)
で、

cd /var/service
ln -s /home/matd

とすると、matd が起動するはずです。
10秒程度以上経過してから、

svstat /var/service/matd

で、matd が起動して10秒程度以上経過していることを確認します。

何かエラーがあった場合、/var/service/matd/log/main/current にログができていくので、
対応する必要があります(エラーがない場合ログは何も出ません)
774root▲▲ ★:2008/07/09(水) 01:39:53 ID:???0 BE:821333-DIA(100512)
ここまでで、*外部*から、

telnet 206.223.150.14

すると、それぞれのフロント tiger3502〜3506 の httpd が「こんにちは」するはずです。

ただしそれには、tiger3502〜3506 のほうで、
バーチャルホストの設定を済ませてある必要があります。

具体的には、tiger3502〜3506 の httpd.conf で、
従来からある、

NameVirtualHost 206.223.150.105:80

などの行に追加して、

NameVirtualHost 206.223.150.14:80

の行を追加してやり、

<VirtualHost 206.223.150.105:80 206.223.150.96:80>

のように、VirtualHost の行にも IP アドレスを追加して、httpd を再起動します。
775root▲▲ ★:2008/07/09(水) 01:44:11 ID:???0 BE:4104195-DIA(100512)
ここまでで、

a) 単体で banana3239 がバランサとして動作し、
b) 5つのフロントサーバ tiger3502〜3506 に負荷が均等に配分される

ようになったはずです。

確認はこのようにすればいいでしょう。
*外から* telnet で port 80 につないで、c.2ch.net がこんにちは、
すれば、問題ないわけです。

念のため、数回やってみるとよいです。

telnet 206.223.150.14 80
Trying 206.223.150.14...
Connected to 206.223.150.14.
Escape character is '^]'.
GET / HTTP/1.1 <= 入力
Host: c.2ch.net <= 入力
<= 空行を入力
HTTP/1.1 200 OK
Date: Tue, 08 Jul 2008 16:41:53 GMT
Server: Apache/なんちゃら
Last-Modified: Fri, 23 May 2008 03:42:31 GMT
ETag: "90-44ddd9e9c57c0"
Accept-Ranges: bytes
。。。
776root▲▲ ★:2008/07/09(水) 01:47:04 ID:???0 BE:3283294-DIA(100512)
ここまでできると、

>>764
> 1) c21 = banana3239 単体で、matd を使ってロードバランサを動かす(単体テスト1)

が、できたことになります。

自分でやるなら、っていうことで、
以前のことを思い出しつつ、メモや過去ログをみつつやったので、
手順に抜けや間違いなど、あるかもしんないです。

ここまでは、c21 と c24 をクロスケーブルで直結していなくてもできますので、
たんたんとテストをすすめておくとよいと思います。

ということで、今日はここまでで。

# 実は、明日午後から金曜まで外勤だったりする私。