目次

heartbeatによる仮想IPのフェイルオーバー

概要

  • 単純なアクティブ・バックアップ構成
  • メインサーバが停止したらバックアップが仮想IPを引き継ぐ
  • サーバはmain-server(192.168.1.10)とslave-server(192.168.1.11)
  • 仮想IPは192.168.1.2
  • PING監視するホストは192.168.1.1
  • ハートビート用のネットワークは設けない(eth0)

設定

マスターサーバ(192.168.1.10)

  • ハートビート用のポートをあけるため、/etc/sysconfig/iptableに次を追加
    -A RH-Firewall-1-INPUT -p udp -m udp --dport 694 -s 192.168.1.11 -j ACCEPT
    • 終わったらiptableを再起動する。
  • heartbeatのインストール
    # yum -y install heartbeat
  • /etc/ha.d/ha.cf の修正
    debugfile /var/log/ha-debug
    logfile /var/log/ha-log
    
    keepalive 2
    deadtime 30
    warntime 10
    initdead 120
    
    udpport 694
    ucast eth0 192.168.1.10 # スレーブサーバのIPアドレスを指定
    
    ### 自動フェイルバック
    auto_failback on
    
    ### watchdog
    watchdog /dev/watchdog
    
    ### クラスタノード
    node    main-server slave-server
    
    ### ping監視
    ping 192.168.1.1
    
    ### 外部プログラム
    respawn hacluster /usr/lib/heartbeat/ipfail
    
    ### クライアントAPIのアクセス制御
    apiauth ipfail gid=haclient uid=hacluster
  • /etc/ha.d/haresourcesの修正
    jpd1-sv62.comfortmarketing.jp 192.168.1.2/24/eth0
  • /etc/sysctl.conf の追加
    net.ipv4.ip_nonlocal_bind = 1
    • 終わったら「sysctl -p」で設定を読み込む
  • /etc/ha.d/authkeys の修正
    auth 1
    1 crc
    • 終わったらパーミッションを600に変更する。

スレーブサーバ(192.168.1.11)

  • ハートビート用のポートをあけるため、/etc/sysconfig/iptableに次を追加
    -A RH-Firewall-1-INPUT -p udp -m udp --dport 694 -s 192.168.1.10 -j ACCEPT
  • heartbeatのインストール
    • マスターと同じ
  • /etc/ha.d/ha.cf の修正
    debugfile /var/log/ha-debug
    logfile /var/log/ha-log
    
    keepalive 2
    deadtime 30
    warntime 10
    initdead 120
    
    udpport 694
    ucast eth0 192.168.1.11 # マスターのIPアドレスを指定
    
    ### 自動フェイルバック
    auto_failback on
    
    ### watchdog
    watchdog /dev/watchdog
    
    ### クラスタノード
    node    main-server slave-server
    
    ### ping監視
    ping 192.168.1.1
    
    ### 外部プログラム
    respawn hacluster /usr/lib/heartbeat/ipfail
    
    ### クライアントAPIのアクセス制御
    apiauth ipfail gid=haclient uid=hacluster
  • /etc/sysctl.conf の追加
    • メインと同じ
    • 終わったら「sysctl -p」で設定を読み込む
  • /etc/ha.d/authkeys の修正
    • メインと同じ
    • 終わったらパーミッションを600に変更する。

サービスの起動と動作検証

  • メイン→サブ、の順番で次を実行
    # /etc/init.d/heartbeat start
  • 起動したらメインサーバのifconfigで仮想IPアドレスがセットされているかを確認する。
    # ifconfig
    ~略~
    eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:80:F0:7A
              inet addr:192.198.1.2  Bcast:192.198.1.255  Mask:255.255.255.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              Interrupt:59 Base address:0x2000
    ~略~
    • メインのheartbeatを停止したときに、サブで仮想IPアドレスがセットされればOK。
    • もし仮想IPがセットされていなかったり、メイン・サブの両方でセットされている場合は失敗なので、設定を見直す。

heartbeatとldirectord(ipvs)によるロードバランサー一体型のWebサーバ構成

これをCentOS5で実装すると、heartbeatが再起動するたびに仮想IPアドレスが登録されているループバックのインターフェイスがクリアされてしまい、トラフィックが正しく返されなくなるので使えない!!。

ERROR: 192.168.1.2 is running an interface (lo) instead of the configured one (eth0)

概要

  • 仮想IPアドレスには192.168.1.2、PING監視対象は192.168.1.1とする
  • マスターは192.168.1.10、スレーブは192.168.1.11
  • Webサーバとロードバランサーが同居したサーバを2台構成で運営
  • 普段はマスターサーバがトラフィックを担当
    • http要求をマスターとスレーブに割り振る
    • http応答しないサーバには自動的に振り分けない
  • マスターサーバが停止したらスレーブがロードバランサーの役割を肩代わりする

設定

事前準備

  • Webサーバを設定しておく
    • 確認用に「check」と書いたcheck.htmlをWeb公開ディレクトリに配置しておく。

マスターサーバ(192.168.1.10)

  • heartbeatの設定
    • 原則は前回と同じだが、/etc/ha.d/haresources の最後に「ldirectord」と追加しておく master-server 192.168.1.2/24/eth0 ldirectord
  • ldirectordのインストール
    # yum -y install heartbeat-ldirectord
    # chkconfig --add ldirectord
    # chkconfig ldirectord off
    • heartbeat経由で起動するため、自動起動させない。
  • /etc/ha.d/ldirectord.cf の設定
    autoreload=yes
    quiescent=no
    checktimeout=1
    checkinterval=2 
    
    virtual=192.168.1.2:80
        real=192.168.1.10:80 gate
        real=192.168.1.11:80 gate
        scheduler=rr
        protocol=tcp
        service=http
        request="check.html"
        receive="check"

スレーブサーバ(192.168.1.11)

  • heartbeatの設定
    • 原則は前回と同じだが、/etc/ha.d/haresources の最後に「ldirectord」と追加しておく
  • ldirectordのインストール
    • マスターと同じ
  • /etc/sysctl.confの追加
    net.ipv4.ip_forward = 1
    net.ipv4.conf.all.arp_ignore = 1
    net.ipv4.conf.eth0.arp_ignore = 1
    net.ipv4.conf.all.arp_announce = 2
    net.ipv4.conf.eth0.arp_announce =2
    net.ipv4.ip_nonlocal_bind = 1
    • 終わったら「sysctl -p」で設定を読み直す
  • /etc/sysconfig/network-scripts/ifcfg-lo:0 の追加
    DEVICE=lo:0
    IPADDR=192.168.1.2
    NETMASK=255.255.255.255
    ONBOOT=yes
    • 終わったらnetworkを再起動する

サーバの起動と検証

  • マスターとスレーブでheartbeatを起動
    # /etc/init.d/heartbeat start

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-09-25 (日) 19:27:03 (446d)