高可用性ロードバランサーを nginx + heartbeat で作る

ロードバランサーの可用性を高めるために、アクティブスタンバイ構成で、アクティブ系が落ちたらスタンバイ系に引き継げるようにする。

構築環境

  • サーバー機
    • NIC × 2 枚 (推奨 4 枚)
    • RAID: 1, (推奨 0 + 1)
    • 電源ボード × 2 (予算があれば)
    • 仮想化ソフトウェア: VMWare ESXi 4.0
  • 仮想化ソフトウェア (VMWare ESXi 4.0) の設定
    • NIC は 2 枚 1 組でフェイルオーバーするように設定
    • ネットワーク × 2 (NIC 2 枚構成の場合は VLANを作成)
      • VM Network: 既存 (デフォルト)
      • HA Network: 新規追加
  • ロードバランサー用ゲストOS (Ubuntu Server 9.10: 各サーバに1 台ずつ追加)
    • ディスク: 4G程度 (Ubuntu Server の最小ハードウェア要件は 1G)
    • コア数: 2
    • メモリ: 4G
    • ネットワーク × 2
      • VM Network に接続された NIC
      • HA Network に接続された NIC
ネットワーク アクティブ (lb01) スタンバイ (lb02)
eth0 (heartbeat 監視用) 192.168.0.2 192.168.0.3
eth1 (管理用) 172.16.0.2 172.16.0.3
サービス用 172.16.0.1 (実際にサービスを提供する IP)

インストールと設定

  1. パッケージ類のインストール (nginx と heartbeat)
    ロードバランサーとして利用する nginx と、クラスタリングするための heartbeat をインストールする
    sudo aptitude install nginx heartbeat
    
  2. nginx の自動起動をやめる
    sysv-rc-conf などを利用し、各ランレベルでの自動起動を停止しておく
    ※ sysv-rc-conf をインストールしていない場合は以下でインストールできる
    sudo sptitude install sysv-rc-conf
    
  3. hosts ファイルに各サーバを登録する
    sudo vi /etc/hosts
    
    192.168.0.2 lb01
    192.168.0.3 lb02
    
    ※ お互い ping 試験
  4. /etc/ha.d/ha.cf の作成
    テンプレートがあるので、作業用ディレクトリーに複製、及び編集
    監視対象を指定
    sudo cp /usr/share/doc/heartbeat/ha.cf.gz .
    sudo gzip -d ha.cf.gz
    sudo vi ha.cf
    
    コメントを外したり、記入したりなどする
    keepalive 2
    deadtime 30
    warntime 10
    initdead 120
    udpport 694
    ucast eth0 192.168.0.[2-3] # 相手のIPアドレス
    auto_failback on
    node lb01
    node lb02
    use_logd yes
    
    /etc/ha.d/ へ配置する
    sudo cp ha.cf /etc/ha.d/
    
  5. /etc/ha.d/haresources の作成
    これもテンプレートから
    アクティブ系、IP、サービス名を指定
    sudo cp /usr/share/doc/heartbeat/haresources.gz .
    sudo gzip -d haresources.gz
    sudo vi haresources
    
    lb01 IPaddr::172.16.0.1/24 nginx
    
    /etc/ha.d/ へ配置する
    sudo cp haresources /etc/ha.d/
    
  6. /etc/ha.d/authkeys の作成
    これもテンプレートから
    sudo cp /usr/share/doc/heartbeat/authkeys .
    sudo vi authkeys
    
    auth 3
    3 md5 Hello!
    
    /etc/ha.d/ へ配置し、root ユーザからのアクセスのみ許可するようにする (これしてなくて heartbeat 起動時に怒られた)
    sudo cp authkeys /etc/ha.d/
    chmod 600 /etc/ha.d/authkeys
    
  7. lb01 -> lb02 の順で heartbeat を起動
    sudo /etc/init.d/heartbeat start
    
  8. フェイルオーバーの試験とか
    ifconfig とかでeth1:0 に サービス IP 172.16.0.1 が引き継がれていれば成功。

コメント

このブログの人気の投稿

Python から Win32 API 経由で印刷する

Disqus のスケール - Django 編

Django と Python 3 - #python_adv