Pacemaker + Corosync on Ubuntu 14.04でHAクラスタを構成する

Ubuntu 14.04でPacemaker + Corosyncを用いてHAクラスタを組んでみたのでメモ。

Pacemakerとは

Linux-HA Japanさんが日本語情報をまとめています。

ざっくりいえば、

  • Pacemaker... アプリやノードやネットワークといったリソースを監視
  • Corosync... ノード同士を接続してクラスタを形成

という感じでしょうか。 歴史は以下のページに。

第1回 Pacemakerの歴史を見てみよう!:Pacemakerでかんたんクラスタリング体験してみよう!|gihyo.jp … 技術評論社

この記事で書くこと

  • PacemakerとCorosyncをインストール
  • Corosyncの初期設定(ノード同士が繋がるのを確認するところまで)

リソースの設定などは書きません。

参考にしたURL

環境

  • Ubuntu 14.04がインストールされたサーバ x3
    • 適当なサーバ2台以上あればOK

インストール(全ノード)

ClusterLabsのQuickStartを参考にやっていきます。 まずはaptを使ってインストールしていきましょう。

# apt install pacemaker corosync fence-agents

Corosyncの設定(全ノード)

クラスタ制御ツールCorosyncの設定をしていきます。 /etc/corosync/corosync.confに追記した部分は以下の通り。

# editor /etc/corosync/corosync.conf

totem {
...
        cluster_name: mycluster
        transport: udpu
        interface {
                ...
                bindnetaddr: 198.18.249.0
                ...
        }
}
...
quorum {
        ...
        two_node: 1
        wait_for_all: 1
        last_man_standing: 1
        auto_tie_breaker: 0
}
...
logging {
        ...
        debug: on
        ...
}
nodelist {
        node {
                ring0_addr: controller-ha
                nodeid: 101
        }
        node {
                ring0_addr: compute01
                nodeid: 102
        }
        node {
                ring0_addr: 198.18.249.121 
                nodeid: 103
        }
}

ポイント

  • bindnetaddr: 198.18.249.0
    • クラスタ間通信に使用する(Corosyncがバインドする)インターフェースに設定されているネットワークアドレス。
      • 自分のIPアドレス192.168.0.100/24であれば192.168.0.0と入力。
  • ring0_addr: controller-ha
    • ring0_addrの値にはIPアドレス or 名前解決可能なホスト名を入力。
  • nodeid: 101
    • 1つのノードに一意の番号を割り当てる。nodeidが被っているとクラスタが組めない。

この設定を全ノードに行います。1つのノードで設定して他ノードにコピーすればいいのか。

起動(全ノード)

Corosync起動→Pacemaker起動の流れ。

# corosync
# service pacemaker start

なぜかservice corosync startが何も反応なく、しかたなくプログラムを直接実行するという。。。 CorosyncがうまくいかないとPacemakerは落ちます。

クラスタ確認

本当にクラスタが組めているか確認します。操作はどれか1つのノードで行います。

# crm_mon
Last updated: Sun Dec 13 11:44:44 2015
Last change: Sat Dec 12 16:17:24 2015 via crm_attribute on controller-ha
Stack: corosync
Current DC: controller-ha (101) - partition with quorum
Version: 1.1.10-42f2063
3 Nodes configured
0 Resources configured


Online: [ compute01 198.18.249.121 controller-ha ]

設定したノードがすべてOnlineとなっていればOKです。

おまけ:Pacemakerのログを出力する

ログはdebug出力してほしい…君のすべてを知りたい…ということでおまけです。 (すべてを知りたければソースコードからお付き合いでしょうか。あるいは開発者と仲良くなることでしょうか。)

Pacemakerのログレベルについては/etc/default/pacemakerを編集することで設定できます。例によって変更点のみ。

# editor /etc/default/pacemaker
export PCMK_debug=yes
export PCMK_debugfile=/var/log/pacemaker.log
export PCMK_logpriority=debug

PCMK_logpriorityはなんとなく設定しましたが、syslogに出力するログレベルなのでなくてもいいかもです。

おしまい

「Corosyncの設定を全ノードしなきゃいけないの?スケールアウトするとき大変だ…」という人にはpacemaker-remoteというものもあります。 肝心のリソース設定は他の記事にお任せします…と思ったけれど、大体がCentOSでやっていてUbuntuでの日本語記事ってあんまりない気がするので、そのうちApacheのHAの設定やってみます。