[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日目
第22日目:〜外伝V〜 ロードバランサーを作れ! (その9)〜

どうも、('A`)です。
前回の日記で急きょ追加で報告しましたが、matdが動きましたー!
むむむさん、ありがとうございました。
ココのむむむさんの説明に書かれた内容(特に879番の内容)にそって修正したら、
無事稼働しました。

えーと、どこを直したかと言いますと
  ・3台のコンテンツ部サーバ(banana261、banana205、banana274)のlo0に対して
   「206.223.147.161」のIPを付与した
   (/etc/rc.conf に1行追加)
という事です。

先ほど紹介したスレで注目した文面は以下の内容です。
879 :root▲▲ ★:2008/04/03(木) 14:06:08 ID:???0 ?DIA(100256)
ちと時間とれそうなので、続きを。

IPdアドレスの振り方ですが、

・u1の外向けインタフェース(em0やvr0等)
・s1〜s3の*ローカルインタフェース*(lo0)

に、同じIPアドレスを振ります。

実際の処理をするs1〜s3サーバの lo0 に振るのがポイントです。
これにより「自分にはIPdアドレスが振られている」ということが認識され、
かつ、lo0 のIPアドレスは外には決して見えないので、
外部から見た場合、IPアドレスがバッティングしてしまうことがありません。
外部からはu1につけられたIPdだけが見えることになります。

ちょっとだけ先回りして言っておくと、
>>847
> データを送り届けられたm2の本体部分は「IP荷札」の「送信先IPアドレス」が、
> 自分のIPアドレスと一致したら、それは確かに自分のものだ、と認識します。

これに関係しています。

えー、、、まったく気づきませんでした。お恥ずかしい限りです。
そうだよなあ、matd側で共通IPを設定していても、受け取り側のサーバで指定して
いなかったら、メッセージ自体取れないもんなあ。

ここで「ローカルインターフェース(lo0)って何?」という人がいるかもしれませんので
ちょっと説明します。
例えばサーバ上でifconfigコマンドを実行すると、そのサーバ内で管理・把握されている
ネットワークの情報が表示されます。
# ifconfig
vr0: flags=8843 mtu 1500
inet 206.223.147.75 netmask 0xffffff00 broadcast 206.223.147.255
inet6 fe80::230:18ff:fef6:2331%vr0 prefixlen 64 scopeid 0x1
ether 00:30:18:f6:23:31
media: Ethernet 10baseT/UTP
status: active
plip0: flags=108810 mtu 1500
lo0: flags=8049 mtu 16384
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
#
太文字で表示されているのはOS(FreeBSD)で把握しているネットワーク機器の装置
記号名をあらわしています。

「vr0」はイーサネットネットワークカードを意味します。
(ネットワークカードのメーカー・機種によって、表示される記号名が変わってきます。
このサーバでは VIA VT6102 Rhine-II を使っているので、vr0となります。)

「plip0」はプリンタとかで使用するパラレルインターフェースを意味します。

そして「lo0」がローカルインターフェースを意味します。
これはローカルループバックとも呼ばれ、OSが提供している仮想インターフェイスです。
(NICの様に物理的な装置として存在していません。)
マシン内部に仮想のネットワークを設け、ネットワーク機器とOS・アプリケーション
ソフトの間で送信/受信を行います。
そしてこの一連の通信はあくまでも「マシン内部」においてのみ発生するので、
ネットワーク機器から外部への通信は一切発生しません。
いわば「内輪で使うネットワーク」といったところでしょうか。

このローカルインターフェースにはOS側で便宜上「127.0.0.1」というIPアドレスを
付与しています。つまりサーバ内部では「127.0.0.1」という名前で問い合わせが
発生したら、それは「lo0のことだっ」と認識する訳です。
むむむさんの説明では、この「lo0」に「206.223.147.161」というアドレス(名前)を
割り当ててあげましょう、という事を言っている訳です。
そうする事で、例えば外部から「206.223.147.161って人、いますかー?」と聞かれたら
サーバのOS側(ネットワーク管理)は「ああ、lo0の事だよ。伝えておくよ。」という
反応をします。
もし「206.223.147.161」というアドレス(名前)が何処にも付与されていないと、
同じ問い合わせを受けた時に「ん、そんな奴はいないよ。」となってしまいます。

そこで3台の受け取り用サーバ(banana261、205、274)の /etc/rc.conf に
  ifconfig_lo0="inet 206.223.147.161 netmask 255.255.255.255"
の1行を追加し、かつスーパーユーザモードから
  ifconfig lo0 inet 206.223.147.161 netmask 255.255.255.255
を実行しました。
これでlo0に「206.223.147.161」が付与されて、外部からの「206.223.147.161」宛の
問い合わせを受け取れる様になりました。


[訂正 2008/04/07]
上記で「ローカルインターフェース(lo0)のIPアドレスを変更する」と書きましたが、
その後むむむさんから特化型スレで「変更ではなく追加するのがよろし」、とのご指摘を
受けました。
確かに・・・ローカルインターフェースのアドレス(127.0.0.1)が他のサービスで使われていたら
正常に動作しなくなりますよね。
なので、大急ぎで /etc/rc.conf を以下の様に修正しました。
  ifconfig_lo0_alias0="inet 206.223.147.161 netmask 255.255.255.255"

これでサーバ再起動時はlo0に「127.0.0.1」と「06.223.147.161」の2つのIPが
付与される事になります。
(「inconfig_lo0 は指定しないの?」と疑問に思われる人がいるかもしれませんが、
「127.0.0.1」はOS側で自動的に付与するので、わざわざ指定する必要はありません。)

あとは現在稼働中のサーバ上のlo0のIPを修正するのですが、まずは
  ifconfig lo0 inet 127.0.0.1 netmask 255.0.0.0
を実行します。これでlo0が「127.0.0.1」に戻ります。(netmaskに指定する値に注意!)
次に、   ifconfig lo0 inet 206.223.147.161 netmask 255.255.255.255 alias
を実行します。(最後の alias を忘れずに指定する事)
これでlo0に2つのIPが付与され、有効となります。
実際に ifconfig コマンドで確認すると、以下の様になります。
# ifconfig lo0 inet 127.0.0.1 netmask 255.0.0.0
# ifconfig lo0 inet 206.223.147.161 netmask 255.255.255.255 alias
# ifconfig
vr0: flags=8843 mtu 1500
inet 206.223.147.225 netmask 0xffffff00 broadcast 206.223.147.255
ether 00:30:18:b0:02:05
media: Ethernet 10baseT/UTP
status: active plip0: flags=108810 mtu 1500
lo0: flags=8049 mtu 16384
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
inet 206.223.147.161 netmask 0xffffffff
#
(訂正は以上で終わりです)



むむむさんの説明を読みながらmatdの具体的な動きのイメージを掴もうとした際に、
('A`)は頭の中でこんなイメージ(というか妄想)を作りました。
「週刊コミックを連載している漫画家にファンレターが送られてきた時」を
イメージしてしまいました。
(「なんじゃ、こりゃ?」と思わないで下さい。('A`)は昔からドラマ仕立てで
イメージを作って理解する、という癖がありまして・・・)
以下で3つのシーンに分けて、図を交えて説明してみますね。
(各シーン毎でストーリ、図、解説の3つを書いてみました。)


【第一部】
ある処に('A`)(ペンネーム:206.223.147.161、本名:www.dokuo.zansu.com)の
ファン<`∀´>がいました。
ある日、<`∀´>は('A`)に手紙を書きました。
「('A`)、うちの親戚がおまえのファンだ!サイン送れや!」
そして<`∀´>はその手紙をポストに投函しました。

郵便局(゚Д゚)では手紙に書かれた本名(www.dokuo.zansu.com)からペンネーム
(206.223.147.161)を割り出し、編集部( `э´)に手紙を送りました。

編集部( `э´)では送られてきた手紙を受取りました。確かに編集部の
名簿にペンネーム(206.223.147.161)が登録されているので、間違って届いた
ものではないようです。しかし編集部のフロアには('A`)は存在していません。
そこで('A`)の編集担当J( 'ー`)しに居場所を聞いてみる事にしました。

J( 'ー`)し:「('A`)君は3か所の仕事場を持っているの。でも応対に出るのは
      各仕事場の部屋の住人がおこなっているわ。
      本名(www.dokuo.zansu.com)で問い合わせても気づいてもらえない
      かもしれないから、ペンネーム(206.223.147.161)を書いておくと
      呼び出してもらえるかも。
      今日はどこにいるか聞いていないけど、まずは手帳に書いてある
      この部屋に転送しておきましょう。部屋番号は「00:30:18:b0:02:61」よ。」

( `э´):「よし、判った。手紙転送しておくわー」

かくして<`∀´>からの手紙は('A`)がいると思われる仕事場の部屋番号が
追記され、送られました。。。




--[解説]--
あらすじ&図の中で出てきたJ( 'ー`)しが「matd」です。
matdが稼働しているサーバでは、「206.223.147.161」をNICに登録しておく事で
公に「206.223.147.161」宛のメッセージを受け付けられる様にしています。
そしてmatdは「206.223.147.161」宛にメッセージが来た事をNIC経由で
ネットワーク管理から知らされた時(図では (1)に該当)、自分が把握している
転送先(これは/usr/local/etc/matd.cf 中で targets= で記載されている
MACアドレス)から1つを選びます。
そして届けられたメッセージにMACアドレスの情報を新たに付け加えてから、
NIC経由で転送します。(図では (2)に該当)


【第二部】
('A`)の仕事場の一つである(´・ω・`)(名前は206.223.147.165、部屋番号は
00:30:18:b0:02:61)の部屋が入っているアパートに手紙が届きました。
アパートの管理人(^_^;)が(´・ω・`)の処に手紙を持って上がりこんできました。

(^_^;):「(´・ω・`)さん、手紙ですよー」
(´・ω・`):「はーい。あれ、、、宛先の名前が「206.223.147.161」に
       なっている・・・」
(^_^;):「ちょっと変だと思ったんだけどね。でも部屋番号はあなたの番号
     だったから持ってきたのですが。」
(´・ω・`):「うーん、でも僕の名前は「206.223.147.165」なんだけどなあ。」
(^_^;):「そうですか。それじゃあ宛先不明となりますねえ、、、
     ん?ちょっと奥の部屋に何か書かれていますが・・・」
(´・ω・`):「え?」に

とその時、突然「206.223.147.161の部屋」と小さい字で書かれた奥の部屋から
ヌーっと('A`)が顔を出しました。

('A`):「あ、どうも。('A`)です。その手紙、俺宛のものだと思いますので、、、」
(´・ω・`):「うわぁ、いつの間に居るの?!」
('A`):「あー、ゴメン。部屋の中で作業に没頭していたんだけど、どうも名前が
    呼ばれているなと思って、顔出したんだ。
    扉のところにも念の為に名前書いておいてるから・・・」
(^_^;):「ま、何はともあれ、この手紙が迷子にならずに済みましたね。
     じゃあ、確かにお渡ししましたよ。」
('A`):「はい、ありがとうございました。」

手紙を受け取った('A`)は再び奥の部屋に引きこもりました。




--[解説]--
('A`)が顔を出していた「206.223.147.161の部屋」と小さい字で書かれた
奥の部屋がサーバに設定された「ローカルインターフェース」の部分です。
最初(´・ω・`)イーサネットネットワークカードの処にメッセージが届きましたが
(図では (1) に該当)、それはメッセージ内の2つの宛先情報の1つ(MACアドレス)が
一致したからです。
しかしイーサネットネットワークカードには「206.223.147.165」という
IPアドレスが予め付与されていて、それがもう1つの宛先情報(IPアドレス)と
一致していません。(図では (2)に該当)
そこで(^_^;)OS側(ネットワーク管理)では他に「06.223.147.161」のIPを持っている
インターフェースが無いか調べる事になります。
その時、ローカルインターフェース側で「206.223.147.161」が設定されている事が
判り、メッセージがローカルインターフェース(lo0)に受け渡されます。
(図では (3)に該当)
こうして「ロードバランサー(( `э´) & J( 'ー`)し)」から転送されたメッセージが
受け取り先サーバ(コンテンツ部)に宛先不明とならずに受信されます。


【第三部】
手紙を受け取った('A`)は中身を読みました。
「また<`∀´>か・・・この忙しい時に。でもサイン送らないと後で大変な
事になるだろうなあ。」
そこで('A`)はアシスタント君(・∀・)にお願いして('A`)の代わりに<`∀´>宛に
サインを送ってもらおうと思いました。
アシスタント君(・∀・)はアパートの中にいて、住人のお願い事を「携帯電話」経由で
受付て代わりに処理してくれる人です。ただし彼もなぜか引きこもり体質なので、
アパートの外に手紙とか小包とかを送る時は(´・ω・`)にお願いしているようです。
('A`)はさっそく携帯で(・∀・)と連絡を取りました。

(・∀・):「もしもーし!」
('A`):「あ、(・∀・)君。('A`)だけど、実はお願いがあってさ・・・」
(・∀・):「はい、お願いって何でしょう?」
('A`):「実はある処に('A`)のサインを送って欲しいんだ。アパートの中にある
    やつでいいから。
    宛先の情報だけど、住所は(゚Д゚)、名前は<`∀´>だから。
    よろしくねー」
(・∀・):「はーい!」

(・∀・)君は早速アパート内にあるサイン(www.dokuo.zansu.com/index.html)を
手に('A`)から聞いた宛先といつもの様に('A`)のペンネームと本名を差出人として
書きました。

そして(・∀・)君は(´・ω・`)の処に「携帯電話」で連絡を入れました。
(´・ω・`):「やあ、(・∀・)君。今日はどうしたの?」
(・∀・):「えへへ、実は1つお願いがありまして・・・」
(´・ω・`):「また郵便局に手紙を送って、という事かい。たまには自分で送ったら?」
(・∀・):「いやあ、それはちょっとできなくて。
      あ、手紙はお部屋の前の箱の中に入れてありますので、よろしくです。」

(´・ω・`)が部屋の前に置いてある箱の中を見ると1通の封筒が入っていました。
宛先もちゃんと書いてあります。(´・ω・`)はそれをポストに投函しました。

やがて・・・
<`∀´>の元に郵便局(゚Д゚)から届きました。開封していると確かに('A`)の
サインが入っていました。
<`∀´>:「これで親戚にも顔が立った。ウェハハハハハ!」

そして今日もどこかでまた同じ事が繰り返されているようです・・・




--[解説]--
('A`)ローカルインターフェースは受け取ったメッセージを(・∀・)Apacheに
渡します。これはApacheのhttpd.confで「Listen 80」(サーバ内であれば80番
ポート経由でどのインターフェースからの要求も受け付ける)という設定が
されているからです。(図では (1)に該当)

メッセージに基づいて処理された結果と受け取った宛先情報から返信メッセージを
(・∀・)Apacheが作り、(´・ω・`)イーサネットネットワークカードに渡します。
(図では (2)に該当)
('A`)ローカルインターフェースは外部と通信できない事は既に知られていて、かつ
返信先が外部であるので(´・ω・`)イーサネットネットワークカードに渡るのです。
(図では (3)に該当)
(´・ω・`)イーサネットネットワークカードは返信メッセージを受け取ると、その
宛先に向かってメッセージを送信します。
(図では (4)に該当)



説明を書いていると背後から人の気配が・・・お、久しぶりの(^_^;)さんです。

(^_^;):「どうだい、調子は?」
('A`):「(^_^;)さん、 matdが動きましたよ!ブラウザでページも見れます。」
(^_^;):「ほうほう、試してみよう。。。おおっ、ページが切り替わるなあ。
     んで、次は?」
('A`):「えーと、次はロードバランサーをucarpを使って二重化してダウン時に
    切り替わる様にする事です。ただ、サーバを同じスイッチに繋いだり
    外付けのNICを手配して取り付けたりする必要があるので、数日は
    その事前準備にかかるかと・・・」
(^_^;):「うーん・・・」
('A`):「えーと、どうしましたか?」
(^_^;):「いやね、ロードバランサーの二重化は進めてもらうにして、もっと大切な
     事があると思うんだが・・・」
('A`):「え、え、、、何でしょう?」
(^_^;):「受取先サーバがダウンした時にはロードバランサーの方で自動的に
     切り離しとか振り先の変更とか、今の状態でできるの?」
('A`):「うっ、え、あー」
(^_^;):「それができないとロードバランサーがたとえ動いていても振り先変更とか
     対応してくれなかったら、ダウンしたサーバに振られる事態も発生して
     外から見れなくなる、って事になるでしょ。
     DNSラウンドロビンでサーバがダウンした時と変わりないじゃないか。」
('A`):「うー、うー、、、そうですね。」
(^_^;):「じゃあ次はその対応を頼むよ。またね。」


やっとmatdが動いて振り分けの部分ができたかなあ、とホッとしていたのですが、
またお題が出てしまいました。
・・・でもどうやって自動的に切り離しとか振り先変更とかするのかなあ。
ucarpは使えないし。。。
何故なら相互監視するなら誤検知を防ぐ為、専用のネットワークが必要になる。
そうなると結局1サーバについて2回線・2つのスイッチポートが必要になってしまう。
それだと結局資源をいっぱい使って、かつ特別なネットワーク環境が無いといけない事に
なっちゃうんじゃないだろうか・・・
またスレを読んで調べよう。
それでは、また。

21日目に戻る。   23日目に続く。

目次に戻る
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]