NATの冗長化 〜High Availability NATパターンの別案〜

High Availability NATパターン
http://blog.suz-lab.com/2013/01/high-availability-natcentos6.html
が何故か安定しないので別案。

「pacemaker+corosync」は「ノード死活+iptables」から「ノード死活のみ」に変更し、iptablesはmonitで管理を行う。

crmコマンド再び
でcrmshを入れるとcorosyncとpacemakerも入るのでそのまま。

chkconfig pacemaker on
chkconfig corosync on

NATインスタンスを作成する
の通り、NATインスタンスを作成する。(2台)

monitが入っていない場合はインストールする。

yum install monit
chkconfig monit on

監視間隔は適宜変更する。

vim /etc/monit.conf
set daemon  5

iptables用の設定を作成する。

vim /etc/monit.d/iptables.conf
check program iptables with path "/root/scripts/iptables-check.sh" with timeout 5 seconds
  if status != 0 then restart
  start program = "/etc/init.d/iptables start"
  stop program = "/etc/init.d/iptables stop"

iptables監視用のスクリプトを作成する。

mkdir /root/scripts/
vim /root/scripts/iptables-check.sh
#!/bin/bash
/etc/init.d/iptables status
exit ${?}

chmod +x /root/scripts/iptables-check.sh

monitを起動する。

/etc/init.d/monit start

この時点でサーバ起動時は常にiptablesが起動している環境ができあがる。
ここから下はルートテーブル変更の為の設定。

フェイルオーバー時のルートテーブル変更用スクリプトを作成する。

vim /etc/init.d/associate-nat
#!/bin/sh
#
# chkconfig: 2345 99 10
# description: Associate RouteTables

# Source Function Library
. /etc/init.d/functions

# System Variable
prog=${0##*/}
lock=/var/lock/subsys/$prog

# User Variavle
ROUTE_TABLE_ID=(ルートテーブルのID)
DESTINATION_CIDR=0.0.0.0/0

# Source Config
if [ -f /etc/sysconfig/$prog ] ; then
    . /etc/sysconfig/$prog
fi

#
case "$1" in
    start)
        touch $lock
        AZ=`curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone`
        REGION=`echo $AZ | cut -c 1-$((${#AZ} - 1))`
        INSTANCE_ID=`curl -s http://169.254.169.254/latest/meta-data/instance-id`
        aws --region $REGION ec2 replace-route    
        --destination-cidr-block $DESTINATION_CIDR
        --route-table-id         $ROUTE_TABLE_ID  
        --instance-id            $INSTANCE_ID     
        | logger -s -i -t $prog

        exit ${PIPESTATUS[0]}
        ;;
    stop)
        rm -f $lock
        exit 0
        ;;
    status)
        if [ -f $lock ] ; then
            exit 0
        else
            exit 3
        fi
        ;;
    *)
        echo "Usage: $0 {start|stop|status}"
        exit 1
esac

chmod +x /etc/init.d/associate-nat

corosyncの設定を各サーバへ行う。

vim /etc/corosync/corosync.conf
compatibility: whitetank

service {
        name: pacemaker
        ver: 0
        use_mgmtd: yes
}

totem {
        version: 2
        secauth: off
        threads: udpu
        transport: udpu
        interface {
                ringnumber: 0
                bindnetaddr: (自ノードのIPアドレス)
                mcastport: 5405
                ttl: 1
                member {
                        memberaddr: (ノード1のIPアドレス)
                }
                member {
                        memberaddr: (ノード2のIPアドレス)
                }
        }
}

logging {
        fileline: off
        to_stderr: no
        to_logfile: yes
        to_syslog: yes
        logfile: /var/log/cluster/corosync.log
        debug: off
        timestamp: on
        logger_subsys {
                subsys: AMF
                debug: off
        }
}

amf {
        mode: disabled
}

/etc/init.d/corosync start

リソースを追加する。(片側)

crm configure property no-quorum-policy="ignore" stonith-enabled="false"
crm configure rsc_defaults resource-stickiness="INFINITY" migration-threshold="1"
crm configure primitive associate-nat lsb:associate-nat

associate-natを入れることで、フェイルオーバー時にルートテーブルを変更するスクリプトが実行される。

crm_monで確認する。

Last updated: Thu Feb 13 19:51:51 2014
Last change: Thu Feb 13 19:08:52 2014 via cibadmin on node02
Stack: classic openais (with plugin)
Current DC: node02 - partition with quorum
Version: 1.1.10-14.el6_5.2-368c726
2 Nodes configured, 2 expected votes
1 Resources configured


Online: [ node01 node02 ]

associate-nat   (lsb:associate-nat):    Started node01

監視方法は下記の通り
・monitのプロセス監視
・NAT配下のインスタンスから外部(8.8.8.8)へfping

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中