Corosync

Corosync
正式名称:The Corosync Cluster Engine
LinuxでHighAvailability(H/A)構成を実現する為に使用する、ノード装置死活監視ソフトウェア。
設定したノード(対向、多対向)のノード監視を行い、ノードが停止した場合に正常系への切り替え処理を実施する。

インストール

1. ビルド・インストール
色々なインストール方法があるが一番楽なのは、yum一発で入れる方法
下記コマンドを打てば、必要なライブラリも全て自動でインストール出来る。

# yum install corosync

しかし、冗長構成等のシステム基幹部分もyumに頼るのはどうかと思うので、
今回はソースコードからのインストールも実施する。
また、corosyncはクラスタリングの基盤という立ち位置の為、localstatedirを"/var"に変更してビルドする。
※ソースコードの取得にgitコマンドが必要なので事前にいれておく

# wget http://build.clusterlabs.org/corosync/releases/corosync-2.3.4.tar.gz
# tar zxvf corosync-2.3.4.tar.gz
# cd corosync-2.3.4
# ./autogen.sh
# ./configure --prefix=/usr/local/corosync-2.3.4 --sysconfdir=/etc --localstatedir=/var
# make
# make install
# cd /usr/local
# ln -s /usr/local/corosync-2.3.4 ./corosync
# cd /usr/bin
# ln -s /usr/local/corosync/bin/corosync-blackbox .
# cd /usr/sbin
# ln -s /usr/local/corosync/sbin/corosync* .
# cd /usr/include/
# ln -s /usr/local/corosync/include/corosync .
# cd /usr/lib64/pkgconfig
# ln -s /usr/local/corosync/lib/pkgconfig/* .
# cd /usr/lib64
# ln -s /usr/local/corosync/lib/lib* .
# cp ${SOURCE_DIR}/init/corosync.sysconfig.example /etc/sysconfig/corosync
# cd /etc/init.d
# mv corosync corosync-
# sed -e "s/corosync-2.3.4/corosync/g" corosync- > corosync



2. コンフィグ
設定はひな形を元に作成し、今回はUDPユニキャスト方針でクラスターノードを見つける設定にする。
項目についてはGitHubを見るか、OSSでLinuxサーバ構築のどちらかを参照

# cp /etc/corosync/corosync.conf.example.udpu /etc/corosync/corosync.conf
# vi /etc/corosync/corosync.conf
=====
#corosync.confをOpenAISと互換性を保ったコンフィグにする
compatibility: whitetank

#Corosyncを実行するユーザとグループ
aisexec {
    user: root
    group: root
}

#VirtualIPの付け替えを行うフロントエンド指定
service {
    #Pacemakerを使う
    name: pacemaker

    #PacemakerをCorosyncと連携させる設定。Pacemakerのバージョンに揃える
    ver: 1

    #PacemakerGUIを使う
    use_mgmtd: yes
}

#クラスタノード間の通信プロトコルなどを指定する
totem {
    #Corosync設定ファイルのバージョン。今は2のみ指定可能
    version: 2

    #クラスタノードプロセス(Pacemaker)の停止を検出する時間。ms指定
    token: 1000

    #冗長リング構成(ringnumber)の動作モード
    rrp_mode: active

    #クラスタ間通信の暗号化指定
    secauth: off
    #crypto_cipher: none
    #crypto_hash: none

    interface {
        #クラスタノード(メンバー)のIPアドレスorホスト名
        member {
            memberaddr: 192.168.0.2
        }
        member {
            memberaddr: 192.168.0.3
        }

        #リングプロトコル使用時のI/F所属リング番号。0から開始する
        ringnumber: 0

        #memberの属するネットワークアドレスを指定
        #もし、memberが別NWに所属するならcorosyncを実行中のノード(member)IPアドレスを書く
        bindnetaddr: 192.168.0.0

        #クラスタノード間通信のポート番号
        mcastport: 5405

        #MulticastTransport利用時に有効なTTL数を指定
        ttl: 1
    }
 
    #UDPユニキャストモードを使用する
    transport: udpu
}

#クラスターに所属するノード一覧
nodelist {
    node {
        ring0_addr: 192.168.0.2
        nodeid: 1
    }
    node {
        ring0_addr: 192.168.0.3
        nodeid: 2
    }
}

#ログの記録方法を設定する
logging {
    fileline: off
    to_logfile: yes
    to_syslog: off
    logfile: /var/log/cluster/corosync.log
    debug: off
    timestamp: on
    
    #loggingステートの設定上書き
    logger_subsys {
        subsys: QUORUM
        debug: off
    }
}

#スプリットブレイン対策
quorum {
    provider: corosync_votequorum
    expected_votes: 2
}

コンフィグを作成したら、UDPユニキャストコンフィグ時に使用する認証鍵を一応作成しておく。

# corosync-keygen
-----
corosync-keygenをすると、"/dev/random"を使って鍵を自動生成するので放置する。
"/etc/corosync/authkey"が完成したら、authkeyファイルを各クラスタノードに転送しておく。 



3. 起動方法
コンフィグを書いたら、Corosyncの起動テストを行う。
起動時にはログイン中のユーザを一度exitで抜けた後に再ログインして行う。

# /etc/init.d/corosync start
Starting corosync (via systemctl):        [ OK ]
-----
# systemctl start corosync.service