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

どうも、('A`)です。
前回の日記で書いた通り、ロードバランサーのテスト環境構築の見直しを行なっています。
まずはIPの大台が唯一違っていたサーバをIP変更する要請を出すと共に、DNSの設定を
修正する、という作業を進めています。(トホホ・・・)

そして前回heartbeatに代わる相互監視機能のソフトウェアとしてucarpが登場しました。
現在ロードバランサー用として確保している2台のサーバ(banana260と261)にさっそく
インストールしてみようと思います。
前回の日記で「相互監視機能は後回し」と書きましたが、テスト用サーバが全部そろうまでに
時間があるので、確認できるところまで済ませておきます。

まずは2台のサーバにインストールされているheartbeatをアンインストールします。
(サーバの中をすっきりさせる意味で行ないます、ハイ。)
以下のコマンドを実行します。
 pkg_delete heartbeat-1.2.4
 rehash

次にucarpのインストールに進みますが、そもそも('A`)の頭の中では「ucarpって何?」
というレベルなので、ちょっと基礎情報を仕入れてみました。
まあ、ucarpのソース(ソース自体はココから取得できます。)中のREADMEファイルを
読んだりしただけなのですが・・・
今から('A`)なりに説明を書いてみます。


【ucarpの概要】
READMEの最初に書いている事を自己流で翻訳してみると、こんな内容です。
(READMEの実物はココに置いておきましたので、英語が得意な人は読んでみて下さい。)

・ucarpは2つのホストで自動フェイルオーバーを提供するために仮想IPアドレスを
 共有するソフトウェアである。
・ucarpは特許などで肥大化したVRRP(Virtual Router Redundancy Protocol:
 仮想ルータ冗長プロトコル)に代わるものとしてOpenBSDで開発された、特許などの
 心配がないCARP(Common Address Redundancy Protocol:一般的なアドレス冗長
 プロトコル)をユーザランドで扱える(言い換えると一般ユーザ権限で動作する)様に
 簡略化した形で実装化されたものである。
・CARPプロトコルの長所は以下の4点が挙げられる。
 1)オーバヘッドがとても少ない
 2)暗号化されたメッセージ
 3)異なるOS間での相互運用が可能
 4)ホスト間で(通信の為の)特別&専用のネットワークリンクを必要としない
※「フェイルオーバー」というのはメインのサーバに障害が発生した場合、代替サーバが
  処理を引き継ぐ機能を言います。

「('A`)が何を言ってるのか、さっぱり判らないー!」という人がいるかもしれませんが、
英語が得手でないので許してね。
(というかucarpについての日本語紹介ページとかほとんど無いので、難儀しています。)


【ucarpのインストールと注意事項】
ucarpをインストールするにあたっての注意事項としては、パケットキャプチャライブラリ
(libpcap)が既にインストールされている事が必須となります。

インストール方法は2つあります。
1) ソースからインストールする。
  前述のソース(コレです)を使って以下のコマンドでインストールします。
  fetch http://download.pureftpd.org/pub/ucarp/ucarp-1.2.tar.gz
  tar zxvf ucarp-1.2.tar.gz
  cd ucarp-1.2/
  ./configure
  make install-strip

2) Ports(バイナリ)をインストールする。
  この日記ではおなじみのpkg_addコマンドを使ってインストールします。
  pkg_add -r ucarp-1.2 (FreeBSD 6.2Rの場合)

※FreeBSD 6.2RのPortsを提供しているFTPサーバはもうほとんど無いかもしれません。
 その場合には6-STABLEで提供されているパッケージ(ucarp-1.3)を以下のコマンドで
 入れてみて下さい。
 (例として日本サイトの3号機(ftp3)から取ってくる、という形にしてみました。)
  pkg_add -r ftp://ftp3.jp.freebsd.org/pub/FreeBSD/ports/i386/packages-6-stable/All/ucarp-1.3.tbz

ちなみに('A`)は 2)の方法でインストールしました。
これは第13日目の日記でmatdのコンパイルエラーが起きた件に関連して、pkg_add で
libpcap をインストールした後 1)の方法でインストールすると、ライブラリの参照先が
違ってくるのでエラーになると考えられたからです。
まあ手作業でlibpcapのライブラリを修正してからインストールすればうまくいくのかも
しれませんが、あまりイレギュラーな処理は行なわない形で進めていく方が良いかと
思いました。
いずれ時間が出来たら、libpcapの参照先の問題について別に調べようと思ってます。


【ucarpを動かす為の準備】
2台のサーバにucarpをインストールしたら、動かす為に以下の準備作業を行ないます。

1) 2台のサーバで共通で使用するIPアドレスを1つ用意する。
  → これは各サーバが持っているIPとは別のIPを割り当てます。
    ('A`)の場合には今回 206.223.147.161 を用意しました。

2) 起動用のスクリプトを用意する。
  → ucarpを起動する際に指定するパラメータは /usr/local/sbin/ucarp -h を
    実行すると以下の様に表示されます。
--interface=[if] (-i [if]): bind interface [if]
--srcip=[ip] (-s [ip]): source (real) IP address of that host
--vhid=[id] (-v [id]): virtual IP identifier (1-255)
--pass=[pass] (-p [pass]): password
--preempt (-P): becomes a master as soon as possible
--neutral (-n): don't run downscript at start if backup
--addr=[ip] (-a [ip]): virtual shared IP address
--help (-h): summary of command-line options
--advbase=[seconds] (-b [seconds]): advertisement frequency
--advskew=[skew] (-k [skew]): advertisement skew (0-255)
--upscript=[file] (-u [file]): run [file] to become a master
--downscript=[file] (-d [file]): run [file] to become a backup
--deadratio=[ratio] (-r [ratio]): ratio to consider a host as dead
--shutdown (-z): call shutdown script at exit
--daemonize (-B): run in background
--facility=[facility] (-f): set syslog facility (default=daemon)
ここで最低限必要な設定についてだけ解説します。
  ・--interface=[if] (-i [if]): bind interface [if]
    → 通信を行なうネットワークデバイス(NIC)の装置記号名を記述する。
      (bananaサーバの場合には、ここは vr0 となります。)
  ・--srcip=[ip] (-s [ip]): source (real) IP address of that host
    → サーバの実IPを記述する。
      banana260の場合には 206.223.147.160、
      banana261の場合には 206.223.147.165 となります。
  ・--vhid=[id] (-v [id]): virtual IP identifier (1-255)
    → 2サーバで使用する「仮想IP」の識別子を指定します。
      今回の場合には 1 とします。
  ・--pass=[pass] (-p [pass]): password
    → ucarp間で通信を行なう際に使用するパスワードを記述する。
      (セキュアな通信を行なう為に、このパスワードを使っています。)
      ほにゃらら
  ・--preempt (-P): becomes a master as soon as possible
    → 自分がバックアップとして稼働し、相手(マスタ)がダウンした時に
      すぐに自分がマスタとして動く、という事を記述する。
  ・--addr=[ip] (-a [ip]): virtual shared IP address
    → 2サーバで使用する共通のIP(仮想IP)を記述する。
      今回の場合には 206.223.147.161 とします。
  ・--upscript=[file] (-u [file]): run [file] to become a master
    → 自分自身がマスタとして稼働する際に実行するスクリプトを記述する。
      ここでは /var/ucarp/vip-up.sh とします。
      この内容については 3)で説明します。
  ・--downscript=[file] (-d [file]): run [file] to become a backup
    → 自分自身がバックアップ機として稼働する際に実行するスクリプトを記述する。
      ここでは /var/ucarp/vip-down.sh とします。
      この内容については 3)で説明します。
  ・--shutdown (-z): call shutdown script at exit
    → 終了時にシャットダウンスクリプトを呼び出す。
      (特別なスクリプトを準備しなくても良いみたい。「おなじない」か?)

以上の内容で次のシェルスクリプトを作ります。
スクリプト名:ucarp.sh
内容:
#!/bin/sh

/usr/local/sbin/ucarp \
--preempt --interface=vr0 --srcip=206.223.147.160 --vhid=1 \
--pass=ほにゃらら --addr=206.223.150.161 \
--upscript=/usr/local/etc/vip-up.sh --downscript=/usr/local/etc/vip-down.sh \ --shutdown

3) upscript、downscriptを用意する。
  → 2) で紹介したupscript、downscriptで指定するスクリプトを作成する。
    最低限必要な内容としては、「共用(仮想)IP」の追加と削除が挙げられます。
    (upscriptでNICに共用IPをエイリアスの形で追加し、downscriptで共用IPを
    NICから削除します。)
(upscript)
スクリプト名:vip-up.sh
内容:
#!/bin/sh
_VIP="206.223.147.161"
ifconfig vr0 $_VIP netmask 255.255.255.255 alias

(downscript)
スクリプト名:vip-down.sh
内容:
#!/bin/sh
_VIP="206.223.147.161"
ifconfig vr0 $_VIP delete
※ここではIPの追加・削除だけを記述していますが、他のスクリプトの実行や停止なども
 必要であればここで記述すると良いかも。

4) 各スクリプトを設置するディレクトリを用意する。
  → ('A`)の場合あっちこっちにスクリプトを置くと、どこに置いたか判らなくなるので
    一か所にまとめて設置します。
    (場所は /var/ucarp というディレクトリを作って、この中に置きます。)
    設置する際にはパーミッションは実行可能状態(例えば755とか)に設定する。


【実際のucarpの動き】
準備ができたところで、実際に動かしてみましょう。
本来ですとdaemontoolsとかで起動や実行制御を行なうのが普通ですが、
bananaサーバではdaemontoolsへの登録等が複雑な設定を必要とするので、
今回はスクリプトをバックエンドで起動させ、マスター&バックアップの
切り替わりを見てみようと思います。

まずbanana260でucarpを起動します。するとNICにIP(206.223.147.161)が
追加され、マスタとして稼働します。
banana260# /var/ucarp/ucarp.sh &
[1] 3518
banana260# [INFO] Local advertised ethernet address is [00:30:18:b0:02:60]
[WARNING] Switching to state: MASTER
[WARNING] Spawning [/usr/local/etc/vip-up.sh vr0]

banana260# ifconfig
vr0: flags=8843 mtu 1500
inet 206.223.147.160 netmask 0xffffff00 broadcast 206.223.147.255
inet 206.223.147.161 netmask 0xffffffff broadcast 206.223.147.161
ether 00:30:18:b0:02:60
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
banana260#

次にbanana261でucarpを起動します。するとNICにIP(206.223.147.161)が
追加され、マスタとして稼働します。
と同時に、banana260側ではマスタ→バックアップに切り替わり、NICから
IP(206.223.147.161)が削除されます。
[banana261側]
banana261# /var/ucarp/ucarp.sh &
[1] 3211
[INFO] Local advertised ethernet address is [00:30:18:b0:02:61]
[WARNING] Switching to state: MASTER ←MASTERになる
[WARNING] Spawning [/usr/local/etc/vip-up.sh vr0]

banana261# ifconfig
vr0: flags=8843 mtu 1500
inet 206.223.147.165 netmask 0xffffff00 broadcast 206.223.147.255
inet 206.223.147.161 netmask 0xffffffff broadcast 206.223.147.161
ether 00:30:18:b0:02:61
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
banana261#


[banana260側]
banana260# [WARNING] Switching to state: BACKUP ←BACKUPに変更
[WARNING] Spawning [/usr/local/etc/vip-down.sh vr0]
[WARNING] Preferred master advertised: going back to BACKUP state

banana260# ifconfig
vr0: flags=8843 mtu 1500
inet 206.223.147.160 netmask 0xffffff00 broadcast 206.223.147.255
ether 00:30:18:b0:02:60
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
banana260#

('A`)いやあ、ほとんど瞬時に切り替わったなあ・・・
後はucarpをdaemontoolsで動かす方法を確立すれば、監視機能(二重化)は完成かな。

隣ではあぶらみくん( `э´)が必死になってサーバを作っている最中です。
(今日中には完成するかな、かな・・・)
完成したら、明日はmatdを使った振り分け部分の構築に進みます。
あ、明日は月次処理があるから日記書けるかなあ。ちょっと心配ですが頑張ります。
それでは、また。

17日目に戻る。   19日目に続く。

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