Pacemaker + Corosync構築手順


## パッケージのインストール

```bash
yum install pacemaker pm_logconv-cs pm_extras pcs corosync
```

---


## 設定ファイルの変更

### corosync.confの設定

192.168.254.11と、192.168.254.12の2台構成のクラスタを設定場合の設定例。

以下の設定を両ノードに実施。

```bash
vi /etc/corosync/corosync.conf

# クラスタ間の通信方法定義
totem {

    # 設定ファイルのバージョン設定(有効な値は2のみの模様)
    version: 2

    # メッセージの暗号設定
    crypto_cipher: none
    
    # メッセージの認証設定
    crypto_hash: none

    # ネットワーク設定
    interface {
        # リング番号
        ringnumber: 0

        # 各ノードが属するアドレスを設定
        bindnetaddr: 192.168.254.0

        # マルチキャストアドレスの設定
        # (多くの場合、デフォルト値のままで動作する)
        mcastaddr: 239.255.1.1
        mcastport: 5405
        ttl: 1
    }
}

# クラスタ内のノードの設定
nodelist {

    # name : ノードの名称
    # ringX_addr : 対象のノードのIPアドレス (Xにはリング番号を指定する)
    # nodeid : ノードの識別子 (0は予約済みとなっているので指定できない)
    
    node {
        name: node_name1
        ring0_addr: 192.168.254.11
        nodeid: 1
    }
    node {
        name: node_name2
        ring0_addr: 192.168.254.12
        nodeid: 2
    }
}

# ログ出力設定
logging {
    fileline: off
    to_stderr: no
    to_logfile: yes
    logfile: /var/log/cluster/corosync.log
    to_syslog: yes
    syslog_facility: local1
    debug: off
    timestamp: on

    # サブシステムの識別名 (デフォルト設定を使用)
    logger_subsys {
        subsys: QUORUM
        debug: off
    }
}

# クラスタのPrimary/Secondaryの決定方法などの定義
quorum {
    # Primary/Secondaryの決定方法のアルゴリズム(下記の設定で過半数ノードの合意により決定するアルゴリズムを指定)
    provider: corosync_votequorum
    
    # クラスタノードの過半数を指定
    expected_votes: 2
}
```

* https://www.sraoss.co.jp/tech-blog/pacemaker/pacemaker-config-values/
* https://blog.drbd.jp/2015/05/corosync-conf-5
* https://gist.github.com/inokappa/124b1ee5f3e3fbe6b172

### /etc/sysconfig/pacemakerの設定

```bash
vi /etc/sysconfig/pacemaker

    # 以下の設定を追加
    # Pacemakerの内部プロセスが異常になった場合もノード故障として取り扱う
    PCMK_fail_fast=yes
```

### systemdユニットファイルの変更

```bash
# systemdユニットファイルの編集
cp -p /usr/lib/systemd/system/corosync.service /etc/systemd/system

vi /etc/systemd/system/corosync.service
    # 下記を参照にして以下の設定を追加
    # https://linux-ha.osdn.jp/wp/archives/4591
    Restart=on-failure
    RestartSec=70
    ExecStartPre=/sbin/modprobe softdog soft_margin=6



cp -p /usr/lib/systemd/system/pacemaker.service /etc/systemd/system

vi /etc/systemd/system/pacemaker.service
    # Pacemakerの停止時にcorosyncを停止する設定を追加
    # 下記を参照にして以下の設定を追加
    # https://linux-ha.osdn.jp/wp/archives/4591
    ExecStopPost=/bin/sh -c 'pidof crmd || killall -TERM corosync'

cp -pi /usr/lib/systemd/system/pm_logconv.service /etc/systemd/system/

systemctl daemon-reload
```

---

## serviceの設定

```bash

systemctl enable pacemaker
systemctl enable corosync
systemctl enable pcsd
systemctl enable pm_logconv
```

---
## clusterのセットアップ

```bash
# pcsdを起動
systemctl start pcsd

# haclusterユーザのパスワードを設定
echo "passwd" | passwd --stdin hacluster

# クラスタ内の認証パスワードを設定
pcs cluster auth node_name1 node_name2 -u hacluster -p passwd

    # 失敗: Error: Unable to communicate with node_name2 
    # 成功: node_name2 : Authorized


# クラスタを構築する
# ※ (--nameに任意のクラスタ名を指定する)
pcs cluster setup --name cluster_name node_name1 node_name2 

# corosyncの認証用の鍵を作成
corosync-keygen -l
ls -lir /etc/corosync/authkey

# corosyncの認証用の鍵をもう一つのノードに転送
scp -p /etc/corosync/authkey root@node_name2:/etc/corosync/authkey

# クラスタを起動(PacemakerとCorosync)
pcs cluster start --all 
# ※ corosync → pacemakerの順に起動される
# https://sky-joker.tech/2017/03/26/centos7にpacemakerをインストールしてみる/

node_name1 : Starting Cluster (corosync)...
node_name2 : Starting Cluster (corosync)...
node_name2 : Starting Cluster (pacemaker)...
node_name1 : Starting Cluster (pacemaker)...
```

## 参考

* [Pacemaker公式DOC](https://clusterlabs.org/developers.html)

* [Pacemaker公式Wiki](https://wiki.clusterlabs.org/wiki/Main_Page)

* [pcsコマンドマニュアル](https://www.mankier.com/8/pcs)

* REDHAT
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/high_availability_add-on_reference/index

* [Corosync:非公式日本語訳](
https://blog.3ware.co.jp/2015/05/corosync-conf-5/
)


### HAジャパン
* http://linux-ha.osdn.jp/wp/wp-content/uploads/076783ca53a363270d253bbb98b59e83.pdf
* https://linux-ha.osdn.jp/wp/manual/pacemaker_outline
* https://linux-ha.osdn.jp/wp/archives/4154

* [Pacemaker+PostgreSQLレプリケーションで共有ディスクレス高信頼クラスタの構築](https://www.slideshare.net/takmatsuo/osc-tokyospring2013-16694861)
* [HAクラスタで PostgreSQLを高可用化 (後編) ～ レプリケーション編 ～
](http://linux-ha.osdn.jp/wp/wp-content/uploads/20170805-OSC-Kyoto-2017.pdf)
http://linux-ha.org/doc/man-pages/re-ra-pgsql.html

### 構築手順

* [CentOS7.1でPacemaker+corosyncによるクラスタを構成](http://kan3aa.hatenablog.com/category/CentOS)
* [Pacemaker+Corosync(インストール編)](http://tech.furyu.jp/blog/?p=5839)
* [Pacemakerハマったところ](http://tech.furyu.jp/blog/?cat=103)

* [Quorumの計算方法、two_node](
https://sites.google.com/site/haaddon/failure-detection)

## pcsコマンド例など

* https://www.mankier.com/8/pcsd
* https://qiita.com/Qiwitaro/items/8f2143fff68982b9c9be

* http://infra.blog.shinobi.jp/Entry/107/

*  https://drbd.jp/pacemaker用guiwebツール「pcspcsd」
* http://www.asahi-net.or.jp/~aa4t-nngk/ultramonkeyl7.html

* postgres  + Pacemaker
https://icicimov.github.io/blog/database/PostgreSQL-High-Availibility-with-Pacemaker/