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とかで確認しても大丈夫だった。)
参考:
- サーバー/インフラを支える技術
- Gratuitous ARPについて
http://d.hatena.ne.jp/shibainu55/20080813
http://d.hatena.ne.jp/shibainu55/20080823/1219890558