HA構成を作ってみる

サーバー/インフラを支える技術を少しずつ読み始めている。

とりあえず一番最初の「冗長化の基本」に出てくるフェイルオーバーのシェルの中身を見てみた。

#!/bin/sh

# failover.sh

VIP="192.168.0.60"
DEV="eth0"

healthcheck(){
  # ①
  # -cは何回パケットを投げるか
  # -wは待ち時間。成功しようがしまいが-wオプションで指定された秒数でコマンドを終了させる。
  ping -c 1 -w 1 $VIP > /dev/null
  return $?
}

ip_takeover(){
  # ②
  # MACアドレスを:を削った値で取得。
  # egrepの-oオプションはマッチした部分だけを表示するオプション
  MAC=`ip link show eth0 | egrep -o '([0-9a-f]{2}:){5}[0-9a-f]{2}' | head -n 1| tr -d :`
  # ③
  # IPアドレスの割り当て。
  ip addr add $VIP/24 dev $DEV
  send_arp $VIP $MAC 255.255.255.255 ffffffffffff
}

# ヘルスチェックをし続けて
while healthcheck; do
  echo "healthcheck ok!"
  sleep 1
done

echo "fail over!"
ip_takeover

①対象の仮想IPに対してPingを投げて生存確認。

②MACアドレスを「:」抜きの形で取得。

③フェイルオーバー処理。仮想IPを割り当てた後に Gratuitous ARPを送出する。

2つのサーバーでこのシェルを実行(rootで)すると、
先に動かした方はfail over!と表示されて終了するが、
もう片方の方は1秒おきに「healthcheck ok!」と出続け、
スタンバイ状態になる。
この状態で先にシェルを起動したほうのマシンを落とすと
見事にフェイルオーバーが動作し、後でシェルを起動したほうのマシンに
192.168.0.60のIPが割り振られる。(sshとかで確認しても大丈夫だった。)

参考:

  • サーバー/インフラを支える技術

http://www.amazon.co.jp/gp/product/4774135666?ie=UTF8&tag=cyubachi-22&linkCode=as2&camp=247&creative=7399&creativeASIN=4774135666

  • Gratuitous ARPについて

http://d.hatena.ne.jp/shibainu55/20080813
http://d.hatena.ne.jp/shibainu55/20080823/1219890558