2013年5月14日火曜日

pacemaker + corosync で HA クラスタ構築

こんにちは、OSSテクノロジーセンターの稲垣です。

今回のブログでは、pacemaker と corosync を使用して HA クラスタを構築していきます。

Red Hat Enterprise Linux 6 系ではテクニカルプレビューですが、pacemaker と corosync が同梱されていますので、今回は Red Hat Enterprise Linux 6.4 を使用して環境を構築していきます。

ホスト名 pacemaker01 pacemaker02
IP アドレス 1 192.168.100.101 192.168.150.101
IP アドレス 2 192.168.100.102 192.168.150.102

方法は様々ありますが、今回は私が実際に確認した手順をご紹介していきます。

  1. インストール & セットアップ

    まずはパッケージのインストールです。

    今回は検証目的のため、事前に firewall を停止し、selinux を disabled にしています。

    本環境で使用したパッケージは RHEL6.4 の iso イメージに同梱されているものを使用していますが、この場合のインストール方法としては yum コマンドで iso イメージのマウント先を参照するようにすると簡単です。

    yum コマンドで iso イメージのマウント先を参照する場合は、/etc/yum.repos.d/ ディレクトリにリポジトリファイルを作成します。今回は例として media.repo としています。

    # vim /etc/yum.repos.d/media.repo
    
    [media]
    name=Base
    baseurl=file://[iso イメージのマウント先] (例 : /media/RHEL)
    enabled=1
    gpgcheck=0
    
    [media2]
    name=High Availability
    baseurl=file://[iso イメージのマウント先]/HighAvailability/
    enabled=1
    gpgcheck=0
    
    ※上記は記入例です。
    

    pacemaker などの HA パッケージを yum でインストールするためには、ベースパッケージ群となるリポジトリの他に、HA リポジトリが置いてあるディレクトリを指定しなければいけない点に注意してください。

    media.repo ファイルを作成したら、yum コマンドを実行してパッケージをインストールします。リソース制御を行う pacemaker、クラスタ制御を行う corosync、pacemaker をコマンドラインで操作する pcs を指定します。

    # yum install pacemaker corosync pcs
    
    [インストールパッケージ]
    pacemaker
    corosync
    pcs
    
    [依存関係でインストールされるパッケージ]
    cluster-glue-libs
    clusterlib
    corosynclib
    libibverbs
    libqb
    librdmacm
    pacemaker-cli
    pacemaker-cluster-libs
    pacemaker-libs
    perl-TimeDate
    resource-agents
    

    yum コマンドが正常に終了したら、無事にインストールは完了です。

    続いて、サービスを起動するために、設定ファイルを修正します。

    まずは、/etc/corosync/corosync.conf ファイルを作成します。

    以下では /etc/corosync/corosync.conf.sample ファイルを参考にしながら、編集していきます。

    # Please read the corosync.conf.5 manual page
    compatibility: whitetank
    
    totem {
            version: 2
            secauth: off
            threads: 0
            rrp_mode: active
            interface {
                    ringnumber: 0
                    bindnetaddr: 192.168.100.0
                    mcastaddr: 226.94.1.1
                    mcastport: 5405
                    ttl: 1
            }
            interface {
                    ringnumber: 1
                    bindnetaddr: 192.168.150.0
                    mcastaddr: 226.94.1.1
                    mcastport: 5405
                    ttl: 1
            }
    }
    
    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
    }
    

    サンプルの設定から、以下の項目を追記・変更します。

    • rrp_mode: active を追記
    • bindnetaddr: 項目を自身の IP アドレス

    続いて、pacemaker と corosync を連携させるために、/etc/corosync/service.d/pcmk ファイルを新規作成し、内容を編集します。

    service {
            # Load the Pacemaker Cluster Resource Manager
            name: pacemaker
            ver:  1
    }
    

    これらの設定を行なったら、pacemaker と corosync を起動し、自動起動するようにしておきます。

    # service pacemaker start
    # service corosync start
    
    # chkconfig pacemaker on
    # chkconfig corosync on
    

    サービスを起動したら、crm_mon コマンドを使用してステータスを確認します。

    # crm_mon
    Last updated: Wed May  1 19:33:25 2013
    Last change: Thu Apr 25 20:10:00 2013 via crmd on pacemaker01
    Stack: classic openais (with plugin)
    Current DC: pacemaker02 - partition with quorum
    Version: 1.1.8-7.el6-394e906
    2 Nodes configured, 2 expected votes
    0 Resources configured.
    
    Online: [ pacemaker01 pacemaker02 ]
    

    両ノードがオンラインになっていることを確認します。

    なお、今回の環境では STONITH を使用しないため、以下のコマンドで無効にし、スプリットブレインが発生してもクォーラムが特別な動作を行わないように設定します。

    # pcs property set stonith-enabled=false
    # pcs property set no-quorum-policy=ignore
    

    さらに、以下のコマンドで自動フェイルバックなし、同一サーバでリソースの再起動を試みる回数を 1 回に設定します。

    # pcs resource rsc defaults resource-stickiness=INFINITY migration-threshold=1
    

    最後に、以下のコマンドで問題がないか確認します。

    # crm_verify -L
    

  2. 仮想 IP 作成

    以下のコマンドを使用して、仮想 IP を作成します。

    # pcs resource create VirtualIP1 ocf:heartbeat:IPaddr2 ip=192.168.100.105 cidr_netmask=24 op monitor interval=30s
    

    このコマンドでは、以下のような設定でリソースを作成しています。

    リソース名 VirtualIP1
    IP アドレス 192.168.100.105
    サブネットマスク 24
    監視感覚 30 秒

    crm_mon コマンドを使用して確認を行ないます。

    # crm_mon
    
    Last updated: Wed May  1 20:42:30 2013
    Last change: Wed May  1 20:27:57 2013 via cibadmin on pacemaker01
    Stack: classic openais (with plugin)
    Current DC: pacemaker02 - partition with quorum
    Version: 1.1.8-7.el6-394e906
    2 Nodes configured, 2 expected votes
    1 Resources configured.
    
    
    Online: [ pacemaker01 pacemaker02 ]
    
    VirtualIP1      (ocf::heartbeat:IPaddr2):       Started pacemaker01
    

    "Started pacemaker01" と表示されていることから、VirtualIP1 は pacemaker01 にて動作していることが確認できます。

    ping コマンドを使用して疎通確認を行います。

    # ping 192.168.100.105
    PING 192.168.100.105 (192.168.100.105) 56(84) bytes of data.
    64 bytes from 192.168.100.105: icmp_seq=1 ttl=64 time=0.019 ms
    64 bytes from 192.168.100.105: icmp_seq=2 ttl=64 time=0.027 ms
    64 bytes from 192.168.100.105: icmp_seq=3 ttl=64 time=0.020 ms
    ^C
    --- 192.168.100.105 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2250ms
    rtt min/avg/max/mdev = 0.019/0.022/0.027/0.003 ms
    

    これで、仮想 IP リソースの作成が完了し、疎通確認も行うことができました。

今回は以上となります。
次回は、仮想 IP リソースのフェイルオーバ確認と仮想 IP 以外のリソース作成を行なっていきたいと考えています。

0 件のコメント:

コメントを投稿