share facebook facebook2 twitter menu hatena pocket slack

2014.07.15 TUE

CentOS6.5.1でNATフェイルオーバ(CDP:High Availability NATパターン)構築手順まとめ [corosync + pacemaker + crmコマンド+AWS SDK for PHP]

WRITTEN BY三浦 剛慈

cloudpack三浦 剛慈です。

手順書作成の手助けに、NATフェイルオーバ構築手順をまとめました。
OSはCentos6.5.1で、利用したAMIはsuz-lab_centos-core-6.5.1になります。

参考URL:


①.natサーバを構築する。
 ①-1 IAM roleを作成しLaunch時に付与する(route tableをFO時に経路変更する用)

 注意:IAM roleを作成してEC2に付与する際に以下のIAM権限を付けて行いました。
    (policy templateのPower User Accessのみでは作成・付与出来ません)

  AddRoleToInstanceProfile
  CreateInstanceProfile
  CreateRole
  DeleteInstanceProfile
  DeleteRole
  DeleteRolePolicy
  GetInstanceProfile
  GetRole
  GetRolePolicy
  ListInstanceProfilesForRole
  ListRolePolicies
  ListRoles
  PassRole
  PutRolePolicy
  RemoveRoleFromInstanceProfile

 

  ①-1-1 IAM role作成

01

02

03


04

05

06

07

08

09

10

  ①-1-2 IAM roleをEC2に付与する。launch時にしか付与出来ないので注意が必要です。
11

 ①-2 natサーバを構築する
  以下ブログの手順そのままでバッチリ構築出来ます。
②corosyncとpacemakerをyumインストール
# yum -y install corosync

# yum -y install pacemaker
③crmコマンドをyumインストール。リポジトリが無いので取得してからになります。
cd /etc/yum.repos.d/
curl -L -o ha-clustering.repo “http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/network:ha-clustering:Stable.repo”
yum install crmsh.x86_64
④corosyncのコンフィグファイルを編集する。
赤文字・青文字は環境に合わせて変更します。”bindnetaddr”には自身のIPアドレスを設定します。
# vi /etc/corosync/corosync.conf

compatibility: whitetank

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

totem {
        version: 2
        secauth: off
        transport: udpu
        interface {
                ringnumber: 0
                transport: udpu
                bindnetaddr: xxx.xxx.xxx.xxx
                mcastport: 5405
                ttl: 1
                member {
                        memberaddr: xxx.xxx.xxx.xxx
                }
                member {
                        memberaddr: yyy.yyy.yyy.yyy
                }
        }
}

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

⑤AWS SDK PHP ver.1の実行環境をインストールする(php,pear,AWS SDK PHP ver.1)。
natフェイルオーバの過去実績の高いphpスクリプトを活用する為にver.2では無くver.1をインストールします。インストールにpearが必要になるので、pearもインストールします。
 ⑤-1 yum -y install phpを実行するとyumでエラーが発生するので、まず
# yum clean all
# yum update atomic-release
を実行します。
 ⑤-2 yum update atomic-release実行するとさらにエラーが発生するので、さらに
# yum remove atomic-release.noarch
# rpm -ivh http://www6.atomicorp.com/channels/atomic/centos/6/i386/RPMS/atomic-release-1.0-19.el6.art.noarch.rpm
を実行します。
 ⑤-3 php,pearをインストールします。
# yum -y install php
# yum -y install php-pear
 ⑤-4 AWS SDK PHP ver.1をインストールします。
# cd /opt
# curl -s http://getcomposer.org/installer | php
# vi composer.json
{
        “require”: {
                “aws/aws-sdk-php”: “2.*”
        }
}

# php composer.phar install

# pear channel-discover pear.amazonwebservices.com
# pear install aws/sdk-1.6.2
 ⑤-5 AWS SDK PHP ver.1を分かりやすい場所に移動します。
# mkdir /opt/aws/php
# mv /usr/share/pear/AWSSDKforPHP /opt/aws/php/default
⑥フェールオーバ処理スクリプトを作成する。
 ⑥-1 フェイルオーバ用のサービスを作成・登録する(実行権限付与、サービス登録も忘れずに)。赤文字のreplace-natは次の手順で作成します。
# vi /etc/init.d/igw

#!/bin/bash
#
# igw        IGW
#
# chkconfig: 2345 99 10
# description: IGW

# Source function library.
. /etc/init.d/functions

prog=igw
lock=/var/lock/subsys/$prog
log=/var/log/igw.log

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

case “$1” in
    start)
        echo `date +”%Y-%m-%d %T”` “begin igw” >> $log
        touch $lock
        /opt/aws/bin/replace-nat  >> $log
        exit $?
        ;;
    stop)
        echo `date +”%Y-%m-%d %T”` “end   igw” >> $log
        rm -f $lock
        exit $?
        ;;
    status)
        if [ -f $lock ]
        then
            exit 0
        else
            exit 3
        fi
        ;;
    *)
        echo $”Usage: $0 {start|stop}”
        exit 1
esac 

# chmod 755 /etc/init.d/igw

# chkconfig –add igw
# chkconfig igw on

 ⑥-2 FO時にルートテーブルのエントリを書き換えて経路変更させるスクリプを作成する(前述/etc/init.d/igwからコールされます)。実行権限の付与も忘れずに。AWSアクセスキー、シークレットアクセスキーは今回IAM roleを使用しますのでコーディング不要になります。
  参考URL:http://blog.suz-lab.com/2012/05/c9katayama-vpcip-vpcazfloating-ip-aws.html
  参考URL:http://blog.suz-lab.com/2012/06/iam-roles-for-ec2-instancesaws-php-sdk.html
# mkdir /opt/aws

# mkdir /opt/aws/bin
# vi /opt/aws/bin/replace-nat
#!/usr/bin/php

<?php
require_once(“/opt/aws/php/default/sdk.class.php”);
date_default_timezone_set(“Asia/Tokyo”);
define(“TABLE_A”, “rtb-XXXXXXX“);
define(“CIDR” , “0.0.0.0/0”);
$instance = file_get_contents(“http://169.254.169.254/latest/meta-data/instance-id“);
$ec2 = new AmazonEC2(array(“default_cache_config” => “/tmp”));
$ec2->set_region(AmazonEC2::REGION_APAC_NE1);
$response = $ec2->replace_route(TABLE_A, CIDR, array(“InstanceId” => $instance));
if(!$response->isOK()) {
  error_log(“[” . $response->body->Errors->Error->Code . “] ” . $response->body->Errors->Error->Message);
  exit(1);
}

exit(0);
?> 
# chmod 755 /opt/aws/bin/replace-nat
⑦corosyncを起動させる(自動起動もONにしておきます)。
/etc/init.d/corosync restart
chkconfig corosync on
⑧crmコマンドでフェイルオーバ設定
参考URL:http://blog.suz-lab.com/2012/12/corosync-pacemakeriptables.html
crm configure property no-quorum-policy=”ignore” stonith-enabled=”false”
crm configure rsc_defaults resource-stickiness=”INFINITY” migration-threshold=”1″
crm configure primitive iptables lsb:iptables op start interval=”0s” timeout=”60s” op monitor interval=”10s” timeout=”30s” op stop interval=”0s” timeout=”60s”
crm configure primitive igw lsb:igw
crm configure group igw-group igw iptables
⑨AMIコピーを取得し、そこからIAMroleを付与して2系をlaunchして/etc/corosync/corosync.confのIPアドレスを自身のIPアドレスに換えれて使用すれば完成です。

元記事は、こちら