LoginSignup
11
13

More than 5 years have passed since last update.

【学習メモ】corosyncとheartbeatを動かして違いを感じる

Last updated at Posted at 2017-09-29

はじめに

冗長構成のためにcorosyncやheartbeatのを学ぼうと思いました。動作が良く分かっていないので、冗長構成を作りながら学んで行こうと思います。

CentOSで仮想IPを持たせ、Apacheの冗長構成を作成します。
コピペで後追い復習ができるようにしているので、Confや設定が多くなっています。

やること

仮想環境を4つ準備します。(CentOS6 Master/Slave, CentOS7 Master/Slave)
★ クラスタ制御をheartbeatとcorosyncで切り替えてみます。
◆ CentOS6と、Centos7のpacemaker+corosyncに違いがあるか確認します。

OS クラスタ制御 リソース制御 比較1 比較2
CentOS 6 heartbeat 3 pacemaker 1.0
CentOS 6 corosync 1 pacemaker 1.0
CentOS 7 corosync 2 pacemaker 1.1

コマンドの内容に関しては、本家の焼き直しです。

流れは以下の通りです。

  1. Vagrantを準備する
  2. Pacemakerを準備する
    1. CentOS6にheartbeat3とcorosync1とpacemaker1.0をインストールする
    2. CentOS7にcorosync2とpacemaker1.1をインストールする
  3. CentOS6でheartbeat3を動作させる
  4. CentOS6でpacemaker1.0を動作させる
  5. CentOS7でpacemaker1.1を動作させる
  6. 違いを感じる

環境は以下の通りです。

環境
Windows 8.1 Pro x64
vagrant : 2.0.0
Oracle VM VirtualBox : 5.1.26 r117224 (Qt5.6.2)
Virtual machine : CentOS 6.5
Virtual machine : CentOS 7.1.1503
Network
  ------------------------
  CentOS6
   Main              : 192.168.144.0/24
     VM-1            : 192.168.144.21
     VM-2            : 192.168.144.22
     VM1-HTTPD       : 192.168.144.20
   Cluster           : 192.168.145.0/24
     VM-1(eth2)      : 192.168.145.21   # Master
     VM-2(eth2)      : 192.168.145.22   # Slave
  ------------------------
  CentOS7
   Main              : 192.168.144.0/24
     VM-1            : 192.168.144.51
     VM-2            : 192.168.144.52
     VM1-HTTPD       : 192.168.144.50
   Cluster           : 192.168.145.0/24
     VM-1(eth2)      : 192.168.145.51   # Master
     VM-2(eth2)      : 192.168.145.52   # Slave
  ------------------------
Apache  : 2.4.27
OpenSSL : 1.0.2l

注意

分量がすごく多いです。回線速度にもよりますが、再現には最低でも1時間程度かかると思います。
学習時は、環境を1つに絞って実施したほうが効率が良いかもしれません。
特別な記述のない限り、記載された作業はMaster/Slaveの両方で実施します。

結論

やっていて気づいたことです。

heartbeatとcorosync
  • ノードの指定でheartbeat3は$idが必要ですが、corosyncは必要ないようです。$idはheartbeatのUUIDになります。
pacemaker1.0と1.1
  • crm node listrecourceなどのコマンドは、どちらも同じように使えるようです。
  • crm configure editで、CIBにダブルコーテーションを入力し保存しても、次に編集するときにダブルコーテーションが無くなっています。
  • corosync1+pacemaker1.0は、stackにopenaisと表示されます。corosync2+pacemaker1.1は、stackにcorosyncと表示されます。stackにはクラスタ制御部分が表示されるようで、どちらもcorosyncを使っているので、リソース制御にopenaisを使っていることを示しているわけではないと思いますが…リソース制御部にOpenAISもあるので少し心配になりました。
corosync1と2
  • Linux-ha Japan様の手続き上で見える違いですが、corosync1(+pacemaker1.0)ではcorosyncで認証キーの生成をしていません。corosync2(+pacemaker1.1)では、corosync-keygenで鍵を生成しています。corosync1(CentOS6)でも生成できますが、/dev/randomを使用するので、vagrant upしたばかりだとエントロピーが足りないと言われます。corosync2の手続きで認証キーを作成していますが、認証キーが無くても動作しました。
  • corosync1ではCIBのノード名がnode VM-1とhostnameのみ、corosync2ではnode 1084789043: VM-1のように、値が入ります。

Vagrantの準備

Vagrant、Virtualboxのインストールや、Vagrant boxの追加の説明は割愛します。
以下をVagrantfileに追加します。

Vagrantfileの例
### CentOS6 VM-1のとき
(前略)
  config.vm.network :forwarded_port, id: "ssh", guest: 22, host: 6122, host_ip: "127.0.0.1"
  config.vm.network "private_network", ip: "192.168.144.21", virtualbox__intnet: "intnet"
  config.vm.network "private_network", ip: "192.168.145.21", virtualbox__intnet: "intnet"

  config.vm.provider "virtualbox" do |vm|
  vm.memory = 512
  end
(後略)
  • endはファイル終端のendではありません。
  • リストに従い、VMによって割り振るIPアドレスを指定します。
  • SSHポートは任意の値で構いません。1,000の桁をOSのバージョン、100の桁をMaster/Slaveの情報を入れると分かりやすいと思います。(CentOS7 VM-2なら7222)

Pacemakerのインストール

リポジトリのダウンロード

リポジトリをダウンロードします
osdn.netからダウンロードできるツリーはRHELのバージョンで分かれています。
[1-01]がRHEL7系、[1-02]がRHEL6系、[1-03]がRHEL5系です。
Linux-HA-Japanの公式ページによると2017年9月現在、1.1系と1.0系があります。
Pacemaker1.1にはcorosync2系、
Pacemaker1.0にはheartbeat2系とあります。
1.0でダウンロードできるリポジトリにはheartbeat-3.0.5-1.1.el6.x86_64.rpmとあり、el5のリポジトリパッケージもheartbeat-3.0.5-1.1.el5.i386.rpm、インストール方法にもheartbeat3とあるので誤記かもしれません。

RHEL6系
### 両方ダウンロードします
# pacemaker 1.1.16 + corosync
wget -P /tmp https://ja.osdn.net/dl/linux-ha/pacemaker-repo-1.1.16-1.1.el6.x86_64.rpm

# pacemaker 1.0.13 + heartbeat
wget -P /tmp https://ja.osdn.net/dl/linux-ha/pacemaker-1.0.13-2.1.el6.x86_64.repo.tar.gz && \
tar xvf /tmp/pacemaker-1.0.13-2.1.el6.x86_64.repo.tar.gz -C /tmp && \
cp /tmp/pacemaker-1.0.13-2.1.el6.x86_64.repo/pacemaker.repo /etc/yum.repos.d/pacemaker.repo
RHEL7系
# pacemaker 1.1.16 + corosync
wget -P /tmp https://ja.osdn.net/dl/linux-ha/pacemaker-repo-1.1.16-1.1.el7.x86_64.rpm

# pacemaker 1.0.13 + heartbeat
RHEL7系のpacemakerは1.1.12からでこの組み合わせは選べないようです

Linux-HA Japan(ja.osdn.net)
OSDNのlinux-ha Japanのダウンロード一覧(linux-ha.osdn.jp)

CentOS-Base.repoの編集

事前にCentOS同梱のものと混在しないようにexcludeを設定します。

/etc/yum.repos.d/CentOS-Base.repo(CentOS6/7共通)
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
+ exclude=pacemaker* corosync* resource-agents* crmsh* cluster-glue* libqb* fence-agents* pcs*

#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
+ exclude=pacemaker* corosync* resource-agents* crmsh* cluster-glue* libqb* fence-agents* pcs*

#additional packages that may be useful

参考資料
3. インストール前の準備(linux-ha.osdn.jp)

インストール

ダウンロードしたリポジトリからインストールします。
heartbeatは自動起動しないように設定します。

CentOS6_Pacemaker_1.0
### 選択してインストールする
[root@VM-1]# yum -c /etc/yum.repos.d/pacemaker.repo install -y corosync.x86_64 heartbeat.x86_64 pacemaker.x86_64

### インストール後のchkconfig
[root@VM-1]# chkconfig | grep -E 'heartbeat|corosync'
corosync        0:off   1:off   2:off   3:off   4:off   5:off   6:off
heartbeat       0:off   1:off   2:on    3:on    4:on    5:on    6:off

### heartbeatの自動起動を無効化
[root@VM-1]# chkconfig --level 2345 heartbeat off
CentOS7_Pacemaker1.1
[root@VM-1]# yum install -y  /tmp/pacemaker-repo-1.1.16-1.1.el7.x86_64.rpm && \
yum install -y pacemaker-all

### 自動起動の確認(末尾のdisabled)
[root@VM-1]# systemctl status pacemaker | grep loaded
   Loaded: loaded (/usr/lib/systemd/system/pacemaker.service; disabled)
[root@VM-1]# systemctl status corosync | grep loaded
   Loaded: loaded (/usr/lib/systemd/system/corosync.service; disabled)
  • Linux-HA-Japanのインストール手順では、クラスタ制御の選択にかかわらず、heartbeatもcorosyncもインストールさせているようです。どちらのRA(Resource Agent)も使えるようにするためでしょうか。

インストールしたバージョンを確認します。

corosyncのバージョン確認(CentOS6)
[root@VM-1]# corosync -v
Corosync Cluster Engine, version '1.4.6'
Copyright (c) 2006-2009 Red Hat, Inc.
corosyncのバージョン確認(CentOS7)
[root@VM-1]# corosync -v
Corosync Cluster Engine, version '2.4.2'
Copyright (c) 2006-2009 Red Hat, Inc.
pacemakerのバージョン確認(CentOS6)
[root@VM-1]# /usr/lib64/heartbeat/crmd version
CRM Version: 1.0.13 (a83fae5)
pacemakerのバージョン確認(CentOS7)
[root@VM-1]# /usr/sbin/pacemakerd --version
Pacemaker 1.1.16-1.el7
Written by Andrew Beekhof

設定

CentOS6ではpacemaker1.0をheartbeat3とcorosync1から動作させます。ここではheartbeat、corosyncを設定します。
CentOS7ではpacemakerとcorosyncを設定します。
基本的にVM-1で作成・編集したものを、SCPを使ってVM-2側に上書きコピーします。

/etc/hosts

相互に名前で通信できるように設定します。

/etc/hosts(CentOS6/7共通)
# CentOS6
echo -e "192.168.144.21 VM-1\n\
192.168.144.22 VM-2\n\
192.168.144.20 VM1-HTTPD" >> /etc/hosts

# CentOS7
echo -e "192.168.144.51 VM-1\n\
192.168.144.52 VM-2\n\
192.168.144.50 VM1-HTTPD" >> /etc/hosts

[root@VM-1]# scp -p /etc/hosts root@VM-2:/etc/hosts

conf系の設定

Pacemaker

pacemaker1.1系のみ、追加の設定が必要です。
pacemakerの設定ファイルを設定します。

設定ファイル

/etc/sysconfig/pacemaker(1.0系/CentOS6)
# 不要、ファイルが無い
/etc/sysconfig/pacemaker(1.1系CentOS7)
[root@VM-1]# sed -ie 's:#\ PCMK_fail_fast=no:#\ PCMK_fail_fast=no\nPCMK_fail_fast=yes:g' /etc/sysconfig/pacemaker

[root@VM-1]# scp -p /etc/sysconfig/pacemaker root@VM-2:/etc/sysconfig/pacemaker
  • Pacemaker1.1系をCentOS6で利用するときは、修正内容が異なります。ここでは割愛します。linux-ha.osdn.jpのページを参照してください。

参考資料
5.3. pacemaker設定ファイルの設定(RHEL 7用)(linux-ha.osdn.jp)

起動スクリプト

Pacemakerの起動スクリプトを設定します。(CentOS7)

/usr/lib/systemd/system/pacemaker.service(CentOS7)
[root@VM-1]# cp -p /usr/lib/systemd/system/pacemaker.service \
/etc/systemd/system/pacemaker.service
[root@VM-1]# sed -ie "s:# ExecStopPost=/bin/sh -c 'pidof crmd || killall -TERM corosync':# ExecStopPost=/bin/sh -c 'pidof crmd || killall -TERM corosync'\nExecStopPost=/bin/sh -c 'pidof crmd || killall -TERM corosync':g" /etc/systemd/system/pacemaker.service

[root@VM-1]# scp -p /etc/systemd/system/pacemaker.service root@VM-2:/etc/systemd/system/pacemaker.service
  • Pacemaker1.1系をCentOS6で利用するときは、修正内容が異なります。ここでは割愛します。

参考資料
5.4.2. クラスタ起動スクリプトの設定(RHEL 7用)(linux-ha.osdn.jp)

corosync

corosyncの設定です。
corosync.confの作成と、corosync認証鍵ファイルの設定クラスタ起動スクリプトの設定が必要です。

confの作成

corosync1系と2系で若干異なるようです。

/etc/corosync/corosync.confの設定(CentOS6)
aisexec {
    user: root
    group: root
}
service {
    name: pacemaker
    ver: 0
    use_mgmtd: yes
}
totem {
    version: 2
    secauth: off
    threads: 0
    rrp_mode: active
    clear_node_high_bit: yes
    token: 4000
    consensus: 10000
    rrp_problem_count_timeout: 3000
    interface {
        ringnumber: 0
        bindnetaddr: 192.168.145.0
        mcastaddr: 226.94.1.1
        mcastport: 5405
    }
}
logging {
    fileline: on
    to_syslog: yes
    syslog_facility: local2
    syslog_priority: info
    debug: off
    timestamp: on
}
/etc/corosync/corosync.confの設定(CentOS7)
compatibility: whitetank
aisexec {
          user: root
          group: root
        }
service {
          name: pacemaker
          ver: 0
          use_mgmtd: yes
        }
amf     {
          mode: disabled
        }
totem   {
          version: 2
          secauth: off
          threads: 0
          rrp_mode: none
          clear_node_high_bit: yes
          token: 4000
          censensus: 10000
          join: 60
          interface {
                      member {
                               memberaddr: 192.168.145.51
                             }
                      member {
                               memberaddr: 192.168.145.52
                             }
                    ringnumber: 0
                    bindnetaddr: 192.168.145.0
                    mcastport: 5405
                    ttl: 1
                   }
        transport: udpu
        }
logging {
          fileline: off
          to_logfile: yes
          to_syslog: no
          logfile: /var/log/cluster/corosync.log
          debug: off
          timestamp: on
          syslog_facility: local2
          logger_subsys {
                          subsys: AMF
                          debug: off
                        }
        }
quorum {
          provider: corosync_votequorum
          expected_votes: 2
          two_node: 1
        }
/etc/corosync/corosync.confのコピー(CentOS6/7共通)
[root@VM-1]# scp -p /etc/corosync/corosync.conf root@VM-2:/etc/corosync/corosync.conf
  • { }が出てきたら必ず改行が必要です。中括弧を}}のように重複させてもエラーになります。
  • ディレクティブの行末に{は置けますが、ディレクティブの最後に}を置くことはできないようです。}は1行に1つそれだけを置く必要があります。
  • corosync1/2系とも同じ仕様のようです。
中括弧が問題で起動に失敗する例
### CentOS6
[root@VM-1]# service corosync start
Starting Corosync Cluster Engine (corosync):               [FAILED]

### CentOS7
[root@VM-1]# service corosync start
Job for corosync.service failed. See 'systemctl status corosync.service' and 'journalctl -xn' for details.

[root@VM-1]# jounalctl -xn 
(前略)
-- Unit corosync.service has begun starting up.
Sep 19 12:42:02 VM-1 corosync[25365]: [MAIN  ] parser error: Missing closing brace
Sep 19 12:42:02 VM-1 corosync[25365]: [MAIN  ] Corosync Cluster Engine exiting with status 8 at main.c:1230.
Sep 19 12:42:02 VM-1 corosync[25359]: Starting Corosync Cluster Engine (corosync): [FEHLGESCHLAGEN]
Sep 19 12:42:02 VM-1 systemd[1]: corosync.service: control process exited, code=exited status=1
Sep 19 12:42:02 VM-1 systemd[1]: Failed to start Corosync Cluster Engine.
-- Subject: Unit corosync.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit corosync.service has failed.
-- 
-- The result is failed.
Sep 19 12:42:02 VM-1 systemd[1]: Unit corosync.service entered failed state.
エラーが発生する設定ファイルの例
### Not Good
aisexec { user: root
          group: root }
### Good
aisexec {
          user: root
          group: root
}

参考資料
クラスタ制御部にCorosyncを使用する場合の設定(linux-ha.osdn.jp)
corosync.conf の各種項目を調べた(使うやつを中心に)(gist.github.com/inokappa)

認証鍵の作成

corosync認証鍵ファイルを設定します。
VM-1で認証鍵を生成し、SCPでVM-2へコピーします。

認証鍵の作成(CentOS7/pacemaker1.1+corosync2のみ)
鍵の生成
[root@VM-1]# corosync-keygen -l
Corosync Cluster Engine Authentication key generator.
Gathering 1024 bits for key from /dev/urandom.
Writing corosync key to /etc/corosync/authkey.

鍵のコピー(VM-1を操作してVM-1からVM-2へコピー)
[root@VM-1]# scp -p /etc/corosync/authkey root@VM-2:/etc/corosync/authkey
  • CentOS6/pacemaker1.0+corosync1でも、corosync-keygenコマンドが動作しますが、認証鍵を生成しなくても動作するようです。生成する場合は/dev/randomを使うため、環境を作成したばかりだとエントロピーが足りないといわれる場合があります。

クラスタ起動スクリプトの設定

CentOS7のみcorosyncの起動スクリプトを修正します。

/usr/lib/systemd/system/corosync.service(CentOS7)
[root@VM-1]# cp -p /usr/lib/systemd/system/corosync.service \
/etc/systemd/system/corosync.service
[root@VM-1]# sed -ie 's:#Restart=on-failure:#Restart=on-failure\nRestart=on-failure:g' /etc/systemd/system/corosync.service
[root@VM-1]# sed -ie 's:#RestartSec=70:#RestartSec=70\nRestartSec=70:g' /etc/systemd/system/corosync.service
[root@VM-1]# sed -ie 's:#ExecStartPre=/sbin/modprobe softdog soft_margin=60:#ExecStartPre=/sbin/modprobe softdog soft_margin=60\nExecStartPre=/sbin/modprobe\ softdog:g' /etc/systemd/system/corosync.service

heartbeat

heartbeatの設定です。CentOS6での作業です。
/etc/ha.d/ha.cfの作成と、認証キーファイルの配置が必要です。

ha.cfの作成

/etc/ha.d/ha.cfの設定(CentOS6)
pacemaker on
logfacility local1

debug 0
udpport 694 

keepalive 2
warntime 20
deadtime 24
initdead 48

bcast eth2

node VM-1
node VM-2
watchdog /dev/watchdog
/etc/ha.d/ha.cfのコピー(CentOS6)
[root@VM-1]# scp -p /etc/ha.d/ha.cf root@VM-2:/etc/ha.d/ha.cf
  • logfacility local1は、syslogまたはrsyslogでログを取るとき、既存の/var/log/messagesと分けるために設定します。
  • nodeにはhostnameの名前を指定します。

認証キーの作成

認証キーファイルの作成と配置(CentOS6)
鍵の生成
[root@VM-1]# echo -e "auth 1\n1 sha1 abcdefg" > /etc/ha.d/authkeys && \
chown root:root /etc/ha.d/authkeys && \
chmod 600 /etc/ha.d/authkeys

 鍵のコピー(VM-1を操作してVM-1からVM-2へコピー)
[root@VM-1]# scp -p /etc/ha.d/authkeys root@VM-2:/etc/ha.d/authkeys
authkeysの設定を忘れてheartbeatを起動したときのエラー
[root@VM-1]# service heartbeat start
Starting High-Availability services:  Heartbeat failure [rc=6]. Failed.

heartbeat[5207]: 2017/09/14_00:36:24 info: Pacemaker support: on
heartbeat: udpport setting must precede media statementsheartbeat[5207]: 2017/09/14_00:36:24 ERROR: Cannot open keyfile [/etc/ha.d//authkeys].  Stop.
heartbeat[5207]: 2017/09/14_00:36:24 ERROR: Authentication configuration error.
heartbeat[5207]: 2017/09/14_00:36:24 ERROR: Configuration error, heartbeat not started.

参考資料
クラスタ制御部にHeartbeat3を使用する場合の設定(linux-ha.osdn.jp)

ログの設定

これまで設定では、heartbeatはsyslogにファシリティlocal1、corosyncはlocal2で保存するように設定しています。

クラスタ制御 リソース制御 ログの設定 ディレクティブ
heartbeat3 pacemaker1.0 ha.cf logfacility
corosync1 pacemaker1.0 corosync.conf to_syslog syslog_facility
corosync2 pacemaker1.1 corosync.conf to_syslog syslog_facility

他のログ/var/log/messagesと分けて保存したいので、syslogのconfigを修正します。

syslog.confの設定(CentOS6/7共通)
下記のどちらか
/etc/syslog.conf
/etc/rsyslog.conf

#### RULES ####

# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
- *.info;mail.none;authpriv.none;cron.none                /var/log/messages
+ *.info;mail.none;authpriv.none;cron.none;local1.none;local2.none    /var/log/messages

(中略)

+ # Heartbeat messages
+ local1.*                                                /var/log/ha-log

+ # corosync messages
+ local2.*                                                /var/log/corosync.log
syslog.conf設定のコピー(CentOS6/7共通)
# syslogのとき
[root@VM-1]# scp -p /etc/syslog.conf root@VM-2:/etc/syslog.conf

# rsyslogのとき
[root@VM-1]# scp -p /etc/rsyslog.conf root@VM-2:/etc/rsyslog.conf
  • ここではheartbeatをlocal1へ、corosyncをlocal2へ出力するようにします。

参考資料
syslogを押さえよう!-ログの出力方法(thinkit.co.jp)
SYSLOGのファシリティとは?(www.furukawa.co.jp)

疎通の確認

heartbeatやcorosyncが起動する準備が整いました。
heartbeatやcorosyncを起動して、Master/Slave間で認識されるか確認します。

クラスタの起動と状態確認

CentOS6 heartbeatのパターンを試します。

heartbeatを起動します。

CentOS6_heartbeatのとき
# --------------- VM-1側 ---------------
[root@VM-1]# service heartbeat start
Starting High-Availability services: Done.

# --------------- VM-2側 ---------------
[root@VM-2]# service heartbeat start
Starting High-Availability services: Done.

  • heartbeatは起動後、1分程度経たないとcrm_monから確認できません。
起動後すぐにcrm_monを起動したときのエラー
[root@VM-1]# crm_mon -Afro1

Connection to cluster failed: connection failed

heartbeatの状態を確認します。

CentOS6_heartbeatのとき
# --------------- VM-1側 ---------------
[root@VM-1]# crm_mon -Afro1
============
Last updated: Thu Sep 28 08:25:11 2017
Stack: Heartbeat
Current DC: vm-1 (6dfd3382-eddc-4762-84d5-2c047475b88c) - partition with quorum
Version: 1.0.13-a83fae5
1 Nodes configured, 2 expected votes
0 Resources configured.
============

Online: [ vm-1 ]

Full list of resources:


Node Attributes:
* Node vm-1:

Operations:
* Node vm-1:

# --------------- VM-2側 ---------------
[root@VM-2]# crm_mon -Afro1
============
Last updated: Thu Sep 28 08:25:13 2017
Stack: Heartbeat
Current DC: vm-2 (962ec26d-9e70-45a1-a93a-0a5455486024) - partition with quorum
Version: 1.0.13-a83fae5
1 Nodes configured, 2 expected votes
0 Resources configured.
============

Online: [ vm-2 ]

Full list of resources:


Node Attributes:
* Node vm-2:

Operations:
* Node vm-2:

CentOS7 corosyncのパターンを試します。

CentOS7_corosyncのとき
# --------------- VM-1側 ---------------
[root@VM-1]# systemctl start pacemaker
[root@VM-1]# crm_mon -Afro1
Stack: corosync
Current DC: VM-1 (version 1.1.16-1.el7-94ff4df) - partition WITHOUT quorum
Last updated: Thu Sep 28 13:20:23 2017
Last change: Thu Sep 28 13:19:34 2017 by hacluster via crmd on VM-1

1 node configured
0 resources configured

Online: [ VM-1 ]

No resources


Node Attributes:
* Node VM-1:

Operations:
* Node VM-1:

# --------------- VM-2側 ---------------
[root@VM-2]# systemctl start pacemaker
Stack: corosync
Current DC: VM-2 (version 1.1.16-1.el7-94ff4df) - partition WITHOUT quorum
Last updated: Thu Sep 28 13:20:54 2017
Last change: Thu Sep 28 13:19:36 2017 by hacluster via crmd on VM-2

1 node configured
0 resources configured

Online: [ VM-2 ]

No resources


Node Attributes:
* Node VM-2:

Operations:
* Node VM-2:
起動直後でノードを認識していないとき
[root@VM-1]# crm_mon -Afro1
Stack: unknown
Current DC: NONE
Last updated: Thu Sep 28 13:19:19 2017          Last change: 

0 nodes configured
0 resources configured


No resources


Node Attributes:

Operations:

  • heartbeat, corosync, どちらも、自分自身の端末を認識しているようです。
  • CentOS7でcorosync2+pacemaker1.1を起動するときは、pacemakerのサービスのみ起動させます。
  • mv /etc/corosync/authkey /etc/corosync/back.authkey.upのように、認証キーファイルが無い状態でも動作します。

IP疎通の確認

ネットワークが正常につながっているか確認します。
CentOS7の記述は割愛します。

VM-1側(CentOS6)
[root@VM-1]# ip a | grep -E 'inet |^[0-9]'
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    inet 192.168.144.21/24 brd 192.168.144.255 scope global eth1
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    inet 192.168.145.21/24 brd 192.168.145.255 scope global eth2
VM-2側(CentOS6)
[root@VM-2]# ip a | grep -E 'inet |^[0-9]'
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    inet 192.168.144.22/24 brd 192.168.144.255 scope global eth1
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    inet 192.168.145.22/24 brd 192.168.145.255 scope global eth2
VM-1からVM-2へping(CentOS6)
[root@VM-1]# ping 192.168.144.22 -c1
PING 192.168.144.22 (192.168.144.22) 56(84) bytes of data.
64 bytes from 192.168.144.22: icmp_seq=1 ttl=64 time=0.204 ms

--- 192.168.144.22 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.204/0.204/0.204/0.000 ms
  • pingは通ります。

ポートが塞がっている可能性があるので、iptablesを止めてみます。

iptablesの停止
# CentOS6
service iptables stop
chkconfig --level 2345 iptables off

# CentOS7
systemctl stop firewalld
systemctl disable firewalld
クラスタの確認
### CentOS6 heartbeat3 + pacemaker1.0
[root@VM-1]# crm_mon -Afro1
============
Last updated: Thu Sep 28 08:27:59 2017
Stack: Heartbeat
Current DC: vm-2 (962ec26d-9e70-45a1-a93a-0a5455486024) - partition with quorum
Version: 1.0.13-a83fae5
2 Nodes configured, 2 expected votes
0 Resources configured.
============

Online: [ vm-1 vm-2 ]

Full list of resources:


Node Attributes:
* Node vm-1:
* Node vm-2:

Operations:
* Node vm-1:
* Node vm-2:

### CentOS7 corosync2 + pacemaker1.1
[root@VM-1]# crm_mon -Afro1
Stack: corosync
Current DC: VM-1 (version 1.1.16-1.el7-94ff4df) - partition with quorum
Last updated: Thu Sep 28 13:23:08 2017
Last change: Thu Sep 28 13:22:42 2017 by hacluster via crmd on VM-2

2 nodes configured
0 resources configured

Online: [ VM-1 VM-2 ]

No resources


Node Attributes:
* Node VM-1:
* Node VM-2:

Operations:
* Node VM-2:
* Node VM-1:

Master/Slave間で認識するようになりました。
Firewallが必要な環境ではポートを空けます。

リソースの準備

仮想IPとApacheを準備します。

仮想IP

仮想IPはIPaddr2のリソースエージェントを使用するので、
IPアドレスを決めておくだけです。

Apache

Apacheはソースからインストールします。
デフォルトではMPM eventなので、preforkにするときはコンパイルに--with-mpm=preforkを追加します。

インストールのコピペ用(CentOS6/7共通)
### expat-develのインストール
    yum install -y expat-devel gcc pcre pcre-devel && \
### ダウンロード openssl apr apr-util apache
    wget -P /tmp https://www.openssl.org/source/openssl-1.0.2l.tar.gz && \
    wget -P /tmp http://ftp.jaist.ac.jp/pub/apache//apr/apr-1.6.2.tar.gz && \
    wget -P /tmp http://ftp.jaist.ac.jp/pub/apache//apr/apr-util-1.6.0.tar.gz && \
    wget -P /tmp http://ftp.jaist.ac.jp/pub/apache//httpd/httpd-2.4.27.tar.gz && \
### ダウンロードしたファイルの展開
    tar xf /tmp/openssl-1.0.2l.tar.gz -C /tmp && \
    tar xf /tmp/apr-1.6.2.tar.gz -C /tmp && \
    tar xf /tmp/apr-util-1.6.0.tar.gz -C /tmp && \
    tar xf /tmp/httpd-2.4.27.tar.gz -C /tmp && \
### 展開したファイルをVM-1用にコピー
    cp -rp /tmp/openssl-1.0.2l /tmp/openssl-1.0.2l_vm1 && \
    cp -rp /tmp/apr-1.6.2 /tmp/apr-1.6.2_vm1 && \
    cp -rp /tmp/apr-util-1.6.0 /tmp/apr-util-1.6.0_vm1 && \
    cp -rp /tmp/httpd-2.4.27 /tmp/httpd-2.4.27_vm1 && \
### インストール
    cd /tmp/openssl-1.0.2l_vm1 ; /tmp/openssl-1.0.2l_vm1/config --prefix=/opt/openssl-1.0.2l_vm1 shared zlib -fPIC && \
    make depend -I /tmp/openssl-1.0.2l && \
    make -I /tmp/openssl-1.0.2l && make test -I /tmp/openssl-1.0.2l_vm1 && \
    make install -I /tmp/openssl-1.0.2l_vm1 && \
    cd /tmp/apr-1.6.2_vm1 ; /tmp/apr-1.6.2_vm1/configure --prefix=/opt/apr-1.6.2_vm1 && \
    make -I /tmp/apr-1.6.2_vm1 && \
    make install -I /tmp/apr-1.6.2_vm1 && \
    cd /tmp/apr-util-1.6.0_vm1 ; /tmp/apr-util-1.6.0_vm1/configure --prefix=/opt/apr-util-1.6.0_vm1 --with-apr=/opt/apr-1.6.2_vm1 && \
    make -I /tmp/apr-util-1.6.0_vm1 && make test -I /tmp/apr-util-1.6.0_vm1 && \
    make install -I /tmp/apr-util-1.6.0_vm1 && \
    cd /tmp/httpd-2.4.27_vm1 ; /tmp/httpd-2.4.27_vm1/configure \
     --prefix=/opt/apache-2.4.27_vm1 \
     --enable-ssl --with-ssl=/opt/openssl-1.0.2l_vm1 \
     --with-apr=/opt/apr-1.6.2_vm1 \
     --with-apr-util=/opt/apr-util-1.6.0_vm1 \
     --enable-mpms-shared=all && \
    make -I /tmp/httpd-2.4.27_vm1 && \
    make install -I /tmp/httpd-2.4.27_vm1
CentOS7のみ追加
### mod_systemdの適用
    yum install --downloadonly --downloaddir=/tmp httpd && \
    cd /tmp && \
    rpm2cpio /tmp/httpd-2.4*el7.centos*x86_64.rpm | cpio -id  ./usr/lib64/httpd/modules/mod_systemd.so && \
cp /tmp/usr/lib64/httpd/modules/mod_systemd.so /opt/apache-2.4.27_vm1/modules/mod_systemd.so && \
sed -i -e 's/<IfModule\ unixd_module>/LoadModule\ systemd_module\ modules\/mod_systemd.so\n<IfModule\ unixd_module>/g' /opt/apache-2.4.27_vm1/conf/httpd.conf

httpd.confの設定

httpd.confを編集します。
Listenディレクティブに仮想IPを指定します。
ServerNameには/etc/hostsで設定した名前を指定します。

httpd.confの設定(CentOS6/7)
### CentOS6
(前略)
#Listen 12.45.56.78:80
- Listen 80
+ Listen 192.168.144.20:80
(中略)

### CentOS7
(前略)
#Listen 12.45.56.78:80
- Listen 80
+ Listen 192.168.144.50:80
(中略)

### 共通
#ServerName www.example.com:80
+ ServerName VM1-HTTPD:80
(後略)

# 設定のコピー
[root@VM-1]# scp -p /opt/apache-2.4.27_vm1/conf/httpd.conf root@VM-2:/opt/apache-2.4.27_vm1/conf/httpd.conf

起動用ファイルの設定

起動用の設定ファイルを設置します。
ここではhttpd_vm1とします。

CentOS6系
/etc/init.d/httpd_vm1の作成
cp -p /tmp/httpd-2.4.27_vm1/build/rpm/httpd.init /etc/init.d/httpd_vm1
/etc/init.d/httpd_vm1の編集
(前略)
- httpd=${HTTPD-/usr/sbin/httpd}
+ #httpd=${HTTPD-/usr/sbin/httpd}
+ httpd=/opt/apache-2.4.27_vm1/bin/httpd

- pidfile=${PIDFILE-/var/run/${prog}.pid}
+ #pidfile=${PIDFILE-/var/run/${prog}.pid}
+ pidfile=/opt/apache-2.4.27_vm1/logs/httpd.pid

(中略)
check13 () {
-        CONFFILE=/etc/httpd/conf/httpd.conf
+        #CONFFILE=/etc/httpd/conf/httpd.conf
+        CONFFILE=/opt/apache-2.4.27_vm1/conf/httpd.conf
(後略)


[root@VM-1]# scp -p /etc/init.d/httpd_vm1 root@VM-2:/etc/init.d/httpd_vm1
  • pidfileは直接設定、lockfileはデフォルト。
CentOS7系
/usr/lib/systemd/system/httpd_vm1.serviceの作成
echo -e "[Unit]\n\
Description=The Apache HTTP Server\n\
After=network.target remote-fs.target nss-lookup.target\n\
Documentation=man:httpd(8)\n\
Documentation=man:apachectl(8)\n\n\
[Service]\n\
Type=forking\n\
ExecStart=/opt/apache-2.4.27_vm1/bin/apachectl start \n\
ExecReload=/opt/apache-2.4.27_vm1/bin/apachectl graceful\n\
ExecStop=/opt/apache-2.4.27_vm1/bin/apachectl stop\n\
# We want systemd to give httpd some time to finish gracefully, but still want\n\
# it to kill httpd after TimeoutStopSec if something went wrong during the\n\
# graceful stop. Normally, Systemd sends SIGTERM signal right after the\n\
# ExecStop, which would kill httpd. We are sending useless SIGCONT here to give\n\
# httpd time to finish.\n\
KillSignal=SIGCONT\n\
PrivateTmp=true\n\n\
[Install]\n\
WantedBy=multi-user.target" >> /usr/lib/systemd/system/httpd_vm1.service

[root@VM-1]# scp -p /usr/lib/systemd/system/httpd_vm1.service root@VM-2:/usr/lib/systemd/system/httpd_vm1.service

以上でApacheリソースの準備が完了しました。

冗長構成へ組み込む

リソースがそろったので、それぞれの環境で動作させます。
名前の混同を避けるため、マシン名を斜体、それ以外を太字で記述します。

ここでは、CentOS6で以下の流れで確認します。
リソースの追加、crm/*.rawファイルの確認、CIBへApacheとIPAddrの追加、リソースの起動、リソースの切り替えを行います。

CentOS7は冗長構成へ組み込む#2になります。

Heartbeat

CentOS6です。

リソース稼働の確認

Dummyリソース

Dummyリソースを作成し、正常に稼働するか確認します。
heartbeatをVM-1VM-2で起動します。

heartbeatのステータス確認と起動(CentOS6)
# ------ 起動中のとき ------
[root@VM-1]# service heartbeat status
heartbeat OK [pid 5403 et al] is running on vm-1 [vm-1]...

# ------ 停止しているとき ------
[root@VM-1]# service heartbeat status
heartbeat is stopped. No process

[root@VM-1]# service heartbeat start
Starting High-Availability services: Done.

hostnameがha.cfのnodeと違うと以下のエラーが出て起動しません。

hostnameとha.cfのが異なるときのエラー(抜粋)
info: By default, cluster nodes are named by `uname -n` and must be declared with a 'node' directive in the ha.cf file.

heartbeatの設定をします。

heartbeatは/var/lib/heartbeat/crm/cib.xmlファイルで設定を保持しています。
cib.xmlの一部を確認します。

VM-1とVM-2でファイル構成が同じ
### 後でファイルを調べるために余計なファイルを一度消去します
# --------------- VM-1側 ---------------
[root@VM-1]# rm -f /var/lib/heartbeat/crm/cib-*
[root@VM-1]# ls -l /var/lib/heartbeat/crm
total 12
-rw-r--r-- 1 hacluster haclient   2 Sep 28 08:27 cib.last
-rw------- 1 hacluster haclient 813 Sep 28 08:27 cib.xml
-rw-r--r-- 1 hacluster haclient  32 Sep 28 08:27 cib.xml.sig

# --------------- VM-2側 ---------------
[root@VM-2]# rm -f /var/lib/heartbeat/crm/cib-*
[root@VM-2]# ls -l /var/lib/heartbeat/crm
total 12
-rw-r--r-- 1 hacluster haclient   2 Sep 28 08:27 cib.last
-rw------- 1 hacluster haclient 813 Sep 28 08:27 cib.xml
-rw-r--r-- 1 hacluster haclient  32 Sep 28 08:27 cib.xml.sig
[root@VM-1]# cat /var/lib/heartbeat/crm/cib.xml | grep uuid
<cib epoch="6" num_updates="0" admin_epoch="0" validate-with="pacemaker-1.0" crm_feature_set="3.0.1" have-quorum="1" dc-uuid="962ec26d-9e70-45a1-a93a-0a5455486024" cib-last-written="Thu Sep 28 08:27:54 2017">

[root@VM-2]# cat /var/lib/heartbeat/crm/cib.xml | grep uuid
<cib epoch="6" num_updates="0" admin_epoch="0" validate-with="pacemaker-1.0" crm_feature_set="3.0.1" have-quorum="1" dc-uuid="962ec26d-9e70-45a1-a93a-0a5455486024" cib-last-written="Thu Sep 28 08:27:48 2017">
  • 属性の順番がVM-1VM-2で異なるときがありますが、同じ内容が保たれているようです。

設定のcib.xmlを編集します。
crm configure editはviでClusterInformation Base(CIB)を編集するモードです。

heartbeatの設定
[root@VM-1]# crm configure edit

node $id="6dfd3382-eddc-4762-84d5-2c047475b88c" VM-1
node $id="962ec26d-9e70-45a1-a93a-0a5455486024" VM-2
+ primitive VM-dummy ocf:pacemaker:Dummy \
+  op start interval="0s" timeout="90s" \
+  op monitor interval="3s" timeout="20s" \
+  op stop interval="0s" timeout="100s"
property $id="cib-bootstrap-options" \
        dc-version="1.0.13-a83fae5" \
-        cluster-infrastructure="Heartbeat"
+        cluster-infrastructure="Heartbeat" \
+       stonith-enabled="false" \
+       no-quorum-policy="ignore"
  • +と-は視認性のものなので、実際には入力しません。

:wqの上書き保存で抜けたあと、リソースを確認します。INFO: building help indexと出る場合があるようです。

dummyリソースの確認
[root@VM-1]# crm configure edit
INFO: building help index
[root@VM-1]# crm_mon -Afro1
============
Last updated: Thu Sep 28 08:58:24 2017
Stack: Heartbeat
Current DC: vm-2 (962ec26d-9e70-45a1-a93a-0a5455486024) - partition with quorum
Version: 1.0.13-a83fae5
2 Nodes configured, unknown expected votes
1 Resources configured.
============

Online: [ vm-1 vm-2 ]

Full list of resources:

 VM-dummy       (ocf::pacemaker:Dummy): Started vm-2

Node Attributes:
* Node vm-1:
* Node vm-2:

Operations:
* Node vm-1:
* Node vm-2:
   VM-dummy: migration-threshold=1000000
    + (3) start: rc=0 (ok)
    + (4) monitor: interval=3000ms rc=0 (ok)
  • VM-2が Current DC となっており、VM-dummyリソースがVM-2で稼働しています。

cib.xml以外は?

crm configure editで編集していくと、/var/lib/heartbeat/crm/の中身がどんどん増えていきます。一体何が起きているのかを確認します。

/var/lib/heartbeat/crm/の中身を確認
[root@VM-1]# ls -l /var/lib/heartbeat/crm
total 20
-rw------- 1 hacluster haclient  813 Sep 28 08:27 cib-5.raw
-rw-r--r-- 1 hacluster haclient   32 Sep 28 08:27 cib-5.raw.sig
-rw-r--r-- 1 hacluster haclient    1 Sep 28 08:57 cib.last
-rw------- 1 hacluster haclient 1411 Sep 28 08:57 cib.xml
-rw-r--r-- 1 hacluster haclient   32 Sep 28 08:57 cib.xml.sig

[root@VM-2]# ls -l /var/lib/heartbeat/crm/
total 20
-rw------- 1 hacluster haclient  813 Sep 28 08:27 cib-4.raw
-rw-r--r-- 1 hacluster haclient   32 Sep 28 08:27 cib-4.raw.sig
-rw-r--r-- 1 hacluster haclient    1 Sep 28 08:57 cib.last
-rw------- 1 hacluster haclient 1411 Sep 28 08:57 cib.xml
-rw-r--r-- 1 hacluster haclient   32 Sep 28 08:57 cib.xml.sig
  • Dummyリソースを追加したあと、cib.xmlが更新され、VM-1ではcib-5.rawが、VM-2ではcib-4.rawが追加されています。ファイルサイズからすると、編集前のcib.xmlと一致しそうです。

増えた他のファイルを見てみます。

cib-*.sigとcib.last
[root@VM-1]# cat /var/lib/heartbeat/crm/cib-5.raw.sig
ba7d98aeb04d9e36b39a36c19ee42dee
[root@VM-1]# cat /var/lib/heartbeat/crm/cib.last
6

[root@VM-2]# cat /var/lib/heartbeat/crm/cib-4.raw.sig
b29823d7a2d250a300a34ebce29f1f64
[root@VM-2]# cat /var/lib/heartbeat/crm/cib.last
5
  • .sigは何かのハッシュ値でしょうか。
  • cib.lastは、直前のrawの値に+1しているように見えます。

MD5ハッシュかどうか確認します。

VM-1側でcib-5.raw.sigの値と一致するものがあるか確認
[root@VM-1]# cat /var/lib/heartbeat/crm/cib-5.raw.sig
ba7d98aeb04d9e36b39a36c19ee42dee

[root@VM-1]# md5sum /var/lib/heartbeat/crm/cib*                                                             
188e4b4e9b6247b9ca14dbf9f8b9e11f  /var/lib/heartbeat/crm/cib-5.raw
3df0f8bb96b4e051c17c0c8c2622b86c  /var/lib/heartbeat/crm/cib-5.raw.sig
1679091c5a880faf6fb5e6087eb1b2dc  /var/lib/heartbeat/crm/cib.last
917e62d6445e44b5824160ea0634de31  /var/lib/heartbeat/crm/cib.xml
a2768f34ed12868a3e819d84dce8dc3d  /var/lib/heartbeat/crm/cib.xml.sig
  • どれも当てはまりません。MD5ではないようです。諦めました。

cib.lastは本当に直前のcib-[]の値に+1しているのか確認します。
VM-dummyリソースを停止状態にしてみます。

VM-dummyリソースを停止(VM-1で操作します)
[root@VM-1]# crm resource stop VM-dummy

もしくは

[root@VM-1]# crm configure edit
(中略)
primitive VM-dummy ocf:pacemaker:Dummy \
        op start interval="0s" timeout="90s" \
        op monitor interval="3s" timeout="20s" \
-       op stop interval="0s" timeout="100s"
+       op stop interval="0s" timeout="100s" \
+       meta target-role="Stopped"

リソースが停止していることを確認します。

リソースの停止を確認(VM-1で操作します)
[root@VM-1]# crm_mon -Afro1
(前略)
 VM-dummy       (ocf::pacemaker:Dummy): Stopped 
(中略)
Operations:
* Node vm-1: 
* Node vm-2: 
   VM-dummy: migration-threshold=1000000
    + (3) start: rc=0 (ok)
    + (4) monitor: interval=3000ms rc=0 (ok)
    + (5) stop: rc=0 (ok)

増えたファイルを確認します。

増えたファイルの確認(VM-1)
[root@VM-1]# ls -l /var/lib/heartbeat/crm/
total 28
-rw------- 1 hacluster haclient  813 Sep 28 08:27 cib-5.raw
-rw-r--r-- 1 hacluster haclient   32 Sep 28 08:27 cib-5.raw.sig
-rw------- 1 hacluster haclient 1411 Sep 28 08:57 cib-6.raw
-rw-r--r-- 1 hacluster haclient   32 Sep 28 08:57 cib-6.raw.sig
-rw-r--r-- 1 hacluster haclient    1 Sep 28 09:06 cib.last
-rw------- 1 hacluster haclient 1592 Sep 28 09:06 cib.xml
-rw-r--r-- 1 hacluster haclient   32 Sep 28 09:06 cib.xml.sig
[root@VM-1]# cat /var/lib/heartbeat/crm/cib-6.raw.sig 
bdfdf7c98398fc73f126a0ed6672d4f6
[root@VM-1]# cat /var/lib/heartbeat/crm/cib.last
7
  • 増えています。cib.lastは使用中のcib.xmlの世代を示しているようです。cib-00.rawの00の部分が世代を表し、直前に使用されたcib.xmlは、cib.lastの値から1を引いた数のrawファイルになると思われます。

Apacheリソース

クラスタ管理が正常に稼働することがわかったので、apacheを管理するVM-1-apacheリソースを追加します。
ついでに、VM-dummyを削除し、VM-1-apacheVM-1gへグルーピングします。
VM-1-apacheVM-1をメインとして動いて欲しいので、VM-1lというlocationも設定します。

VM-dummyを削除しapache・グループ・ロケーションを追加する
[root@VM-1]# crm resource stop VM-dummy

もしくは ```meta target-role="Stopped"```を
リソースの末尾に記載して停止します。


[root@VM-1]# crm configure edit
node $id="6dfd3382-eddc-4762-84d5-2c047475b88c" VM-1
node $id="962ec26d-9e70-45a1-a93a-0a5455486024" VM-2

+ # VM-1-apacheリソースをストップ状態で追加
+ primitive VM-1-apache lsb:httpd_vm1 \
+       op start interval="0s" timeout="90s" \
+       op monitor interval="3s" timeout="20s" \
+       op stop interval="0s" timeout="100s" standby="on" \
+         meta target-role="Stopped"

- # VM-dummyを削除
- primitive VM-dummy ocf:pacemaker:Dummy \
-        op start interval="0s" timeout="90s" \
-        op monitor interval="3s" timeout="20s" \
-        op stop interval="0s" timeout="100s" standby="on" \
-        meta target-role="Stopped"

+ # VM-1gグループへVM-1-apacheの2つのリソースを追加します
+ group VM-1g VM-1-apache

property $id="cib-bootstrap-options" \
        dc-version="1.0.13-a83fae5" \
        cluster-infrastructure="Heartbeat" \
        stonith-enabled="false" \
        no-quorum-policy="ignore"

どのようになるか確認します。

apache追加+グルーピングの設定後
[root@VM-1]# crm_mon -Afro1
============
Last updated: Thu Sep 28 09:13:33 2017
Stack: Heartbeat
Current DC: vm-2 (962ec26d-9e70-45a1-a93a-0a5455486024) - partition with quorum
Version: 1.0.13-a83fae5
2 Nodes configured, unknown expected votes
1 Resources configured.
============

Online: [ vm-1 vm-2 ]

Full list of resources:

 Resource Group: VM-1g
     VM-1-apache        (lsb:httpd_vm1):        Stopped 

Node Attributes:
* Node vm-1:
* Node vm-2:

Operations:
* Node vm-1: 
* Node vm-2: 
   VM-dummy: migration-threshold=1000000
    + (3) start: rc=0 (ok)
    + (5) stop: rc=0 (ok)
  • リソースグループVM-1gの下にVM-1-apacheが、停止状態で存在することが確認できます。
  • また、OperationsのNode VM-2 に、VM-dummyが残っており、Stop状態から比較すると、+ (4) monitor: interval=3000ms rc=0 (ok)が消えています。

参考資料
動かして理解するPacemaker ~CRM設定編~ その2(linux-ha.osdn.jp)
動かして理解するPacemaker ~CRM設定編~ その3(linux-ha.osdn.jp)

VM-1上でapacheを起動する準備が整いました。

IPaddr2

IPaddr2を使い、仮想IPのリソースをVM-1-VIPとして設定します。
Apacheで追加したVM-1gグループと、VM-1lロケーションに追加します。
crmの設定には他にもcolocationやorderがあります。

location →場所:どのノードで起動するか?
colocation→同居:どのリソースと一緒に起動するか?
order   →順序:どのリソースの前/後に起動するか?

どう組み合わせればよいか迷ってしまいますが、

例えば、「group grp1 resource1 resource2」は「resource1と2は必ず同居し」、「resource1→resource2の順序で起動」を定義します。

とあるため、groupを使えば、colocationとorderを別途使う必要がないようです。

参考資料
動かして理解するPacemaker ~CRM設定編~ その3(linux-ha.osdn.jp)

ここでは、VM-1をMasterとして、仮想IPとApacheを起動さます。
Apacheのhttpd.confのListenディレクティブで、仮想IPを指定しているため、仮想IPを持っていない状態でApacheは起動しません。
それを踏まえて、仮想IPが設定されたあとにApacheが起動するようにします。
groupの定義では、Apacheの前に仮想IPのリソースを追加します。

VirtualIPとGroupの設定追加
[root@VM-1]# crm configure edit

node $id="6dfd3382-eddc-4762-84d5-2c047475b88c" VM-1
node $id="962ec26d-9e70-45a1-a93a-0a5455486024" VM-2

+ # IPaddr2のVM-1-VIPリソースをStopped状態で追加
+ primitive VM-1-VIP ocf:heartbeat:IPaddr2 \
+       params \
+       ip="192.168.144.20" \
+       cidr_netmask="24" \
+       op start interval="0s" timeout="60s" on-fail="restart" \
+       op monitor interval="10s" timeout="60s" on-fail="restart" \
+       op stop interval="0s" timeout="60s" on-fail="block" \
+       meta target-role="Stopped"

primitive VM-1-apache lsb:httpd_vm1 \
        op start interval="0s" timeout="90s" \
        op monitor interval="3s" timeout="20s" \
        op stop interval="0s" timeout="100s" standby="on" \
        meta target-role="Stopped"

+ # group VM-1gにVM-1-VIPリソースを追加
- group VM-1g VM-1-apache
+ group VM-1g VM-1-VIP VM-1-apache

property $id="cib-bootstrap-options" \
        dc-version="1.0.13-a83fae5" \
        cluster-infrastructure="Heartbeat" \
        stonith-enabled="false" \
        no-quorum-policy="ignore

設定された内容を確認します。

VirtualIPとapacheの関係
[root@VM-1]# crm_mon -ro1
(前略)
Full list of resources:

 Resource Group: VM-1g
     VM-1-VIP   (ocf::heartbeat:IPaddr2):       Stopped
     VM-1-apache        (lsb:httpd_vm1):        Stopped

Operations:
* Node vm-1: 
* Node vm-2: 
   VM-dummy: migration-threshold=1000000
    + (3) start: rc=0 (ok)
    + (5) stop: rc=0 (ok)
  • まだOperationにVM-2でVM-dummyが稼働していた履歴?が残っています。

VM-2で稼働していたVM-dummyリソースの履歴を削除します。
VM-2側でモニターしながら確認します。

VM-2側でモニターする
[root@VM-2]# crm_mon -Afro
VM-2のVM-dummyリソースをクリーンアップ
[root@VM-1]# crm resource cleanup VM-dummy VM-2
Cleaning up VM-dummy on VM-2
Waiting for 2 replies from the CRMd..

# --- 失敗するとき
No messages received in 60 seconds.. aborting
  • 削除に成功するときはメッセージはありません。VM-2でモニターしていると、VM-dummyが削除されるのが確認できます。
  • 削除に失敗したときは、VM-1VM-2でheartbeatを再起動します。
  • Operationsからリソースの履歴?が削除されました。

VM-1gの起動順と、crm_monで表示される序列が一致しているか確認します。
上記設定では、apacheが起動したあと、仮想IPが割り振られる順序となっているため、apacheの起動に失敗します。
httpd.confのListenで仮想IPアドレスを指定しているので、仮想IPを持っていないマシンでapacheは起動しません。
仮想IPが割り振られたあと、apacheが起動する順序に修正します。

groupのVM-1-VIPとVM-1-apacheを入れ替える

[root@VM-1]# crm configure edit
(中略)
- group VM-1g VM-1-VIP VM-1-apache
+ group VM-1g VM-1-apache VM-1-VIp
(後略)

# 順序が入れかわっているか確認する
[root@VM-1]# crm_mon -r1
(前略)
Full list of resources:

 Resource Group: VM-1g
     VM-1-apache        (lsb:httpd_vm1):        Stopped 
     VM-1-VIP   (ocf::heartbeat:IPaddr2):       Stopped 
(後略)

# もとに戻す
[root@VM-1]# crm configure edit
(中略)
- group VM-1g VM-1-apache VM-1-VIp
+ group VM-1g VM-1-VIP VM-1-apache
(後略)
  • crm_monで確認できる並び順は起動順と同じで、視覚的に確認できることがわかりました。

グループVM-1gVM-1で稼働させたいので、ロケーションを設定します。

ロケーションの追加
[root@VM-1]# crm configure edit

node $id="6dfd3382-eddc-4762-84d5-2c047475b88c" VM-1
node $id="962ec26d-9e70-45a1-a93a-0a5455486024" VM-2
primitive VM-1-VIP ocf:heartbeat:IPaddr2 \
       params \
       ip="192.168.144.20" \
       cidr_netmask="24" \
       op start interval="0s" timeout="60s" on-fail="restart" \
       op monitor interval="10s" timeout="60s" on-fail="restart" \
       op stop interval="0s" timeout="60s" on-fail="block" \
       meta target-role="Stopped"
primitive VM-1-apache lsb:httpd_vm1 \
        op start interval="0s" timeout="90s" \
        op monitor interval="3s" timeout="20s" \
        op stop interval="0s" timeout="100s" standby="on" \
        meta target-role="Stopped"
 group VM-1g VM-1-VIP VM-1-apache

+ # VM-1lロケーションへVM-1gグループを追加します
+ location VM-1l VM-1g \
+       rule 200: #uname eq VM-1 \
+       rule 100: #uname eq VM-2

property $id="cib-bootstrap-options" \
        dc-version="1.0.13-a83fae5" \
        cluster-infrastructure="Heartbeat" \
        stonith-enabled="false" \
        no-quorum-policy="ignore
  • ロケーションの情報はcrm_monから確認することができません。

参考資料
月刊あんどりゅーくん(12月号)(linux-ha.osdn.jp)
Pacemaker/Heartbeat で良く使うクラスタ操作コマンド(ngyuki.hatenablog.com)

稼働の確認

リソースが揃ったので、稼働させてみます。

仮想IPの有効化

仮想IP(192.168.144.20/24)が振られていないことを確認します。

IPの確認
[root@VM-1]# ip a | grep 144                                                                                
    inet 192.168.144.21/24 brd 192.168.144.255 scope global eth1
  • VM-1-VIPでnicを指定していないので、VM-1-VIPのparamで設定しているネットワークと同じネットワークのIPアドレスを持つNICに、仮想IPが割り振られるようです。
  • 同じネットワークのNICが2つ以上ある場合はどこに振られるかわかりません。

VM-1-VIPを有効化し、IPアドレスを確認します。

VM-1-VIPの有効化とIPアドレスの再確認
[root@VM-1]# crm resource start VM-1-VIP

[root@VM-1]# ip a | grep 144                                                                              
    inet 192.168.144.21/24 brd 192.168.144.255 scope global eth1
    inet 192.168.144.20/24 brd 192.168.144.255 scope global secondary eth1

IPアドレスが割り振られていることが確認できました。

crm_monからもリソースがスタートしていることを確認できます。

IPaddr2が動作している状態
============
Last updated: Thu Sep 28 09:43:50 2017
Stack: Heartbeat
Current DC: vm-2 (962ec26d-9e70-45a1-a93a-0a5455486024) - partition with quorum
Version: 1.0.13-a83fae5
2 Nodes configured, unknown expected votes
1 Resources configured.
============

Online: [ vm-1 vm-2 ]

Full list of resources:

 Resource Group: VM-1g
     VM-1-VIP   (ocf::heartbeat:IPaddr2):       Started vm-1
     VM-1-apache        (lsb:httpd_vm1):        Stopped     

Node Attributes:
* Node vm-1:
* Node vm-2:

Operations:
* Node vm-1: 
   VM-1-VIP: migration-threshold=1000000
    + (4) start: rc=0 (ok)
    + (5) monitor: interval=10000ms rc=0 (ok)
* Node vm-2: 

Apacheの起動

apacheが起動していないことを確認します。

apacheが起動していないことを確認
[root@VM-1]# ps aux | grep httpd | grep -v grep

apacheのリソースを起動します。

apacheのリソース起動
[root@VM-1]# crm resource start VM-1-apache
リソースが起動したか確認
[root@VM-1]# crm_mon -f1
============
Last updated: Thu Sep 28 09:54:01 2017
Stack: Heartbeat
Current DC: vm-2 (962ec26d-9e70-45a1-a93a-0a5455486024) - partition with quorum
Version: 1.0.13-a83fae5
2 Nodes configured, unknown expected votes
1 Resources configured.
============

Online: [ vm-1 vm-2 ]

 Resource Group: VM-1g
     VM-1-VIP   (ocf::heartbeat:IPaddr2):       Started vm-1
     VM-1-apache        (lsb:httpd_vm1):        Started vm-1

Migration summary:
* Node vm-1:
* Node vm-2: 
httpdプロセスが動いているか確認(VM-1)
[root@VM-1]# ps ax | grep httpd | grep -v grep
18932 ?     Ss  0:00 /opt/apache-2.4.27_vm1/bin/httpd
18934 ?     Sl  0:00 /opt/apache-2.4.27_vm1/bin/httpd
18935 ?     Sl  0:00 /opt/apache-2.4.27_vm1/bin/httpd
18936 ?     Sl  0:00 /opt/apache-2.4.27_vm1/bin/httpd
VM-1とVM-2からcurlでHTTP接続できるか確認
[root@VM-1]# curl VM1-HTTPD
<html><body><h1>It works!</h1></body></html>

[root@VM-2]# curl VM1-HTTPD
<html><body><h1>It works!</h1></body></html>

切り替え

稼働が確認できましたので、リソースをVM-1からVM-2へ移してみます。

VM-2側で、常にリソースの状態を確認しておきます。

[root@VM-2] crm_mon -Afro
(前略)
Online: [ vm-1 vm-2 ]

 Resource Group: VM-1g
     VM-1-VIP   (ocf::heartbeat:IPaddr2):       Started vm-1
     VM-1-apache        (lsb:httpd_vm1):        Started vm-1
(後略)

VM-1のheartbeatを停止します。

VM-1のheartbeat停止
[root@VM-1]# service heartbeat stop
Stopping High-Availability services: Done.
VM-1-VIPの消失を再確認
[root@VM-1]# ip a | grep 144                                                                              
    inet 192.168.144.21/24 brd 192.168.144.255 scope global eth1
VM-2のモニタリング状況
(前略)
Online: [ vm-2 ]
OFFLINE: [ vm-1 ]

Full list of resources:

 Resource Group: VM-1g
     VM-1-VIP   (ocf::heartbeat:IPaddr2):       Started vm-2
     VM-1-apache        (lsb:httpd_vm1):        Started vm-2
(後略)
  • VM-1がオフラインとなり、VM-2でリソースが稼働していることがわかります。

VM-1のときと同様に、curlで確認します。

VM-1から確認
[root@VM-1]# curl VM1-HTTPD
<html><body><h1>It works!</h1></body></html>
  • VM-2側で正常にApacheが起動しているようです。

VM-1のheartbeatを起動し、VM-1へリソースが戻るか確認します。

VM-1のheartbeat起動
[root@VM-1]# service heartbeat start
Starting High-Availability services: Done.
  • VM-2側で起動していたリソースが、再度VM-2側に起動することがわかります。
  • httpdプロセスやIPアドレスの確認は割愛します。

以上で、heartbeat3+pacemaker1.0の動作確認が完了しました。

corosync

引き続き、CentOS6上でcorosync1+pacemaker1.0の動作を確認します。

設定の確認

VM-1VM-2のheartbeatを停止します。

heartbeatの停止
[root@VM-1]# service heartbeat stop                                                                       
Stopping High-Availability services: Done.

[root@VM-2]# service heartbeat stop                                                                       
Stopping High-Availability services: Done.

corosyncを起動します。

corosyncの起動
[root@VM-1]# service corosync start
Starting Corosync Cluster Engine (corosync):               [  OK  ]

[root@VM-2]# service corosync start
Starting Corosync Cluster Engine (corosync):               [  OK  ]

crm_monで状況を確認します。

状況の確認
[root@VM-1]# crm_mon -Afro1
============
Last updated: Thu Sep 28 10:16:59 2017
Stack: openais
Current DC: VM-1 - partition with quorum
Version: 1.0.13-a83fae5
4 Nodes configured, 2 expected votes
1 Resources configured.
============

Online: [ VM-1 VM-2 ]
OFFLINE: [ vm-1 vm-2 ]

Full list of resources:

 Resource Group: VM-1g
     VM-1-VIP   (ocf::heartbeat:IPaddr2):       Started VM-1
     VM-1-apache        (lsb:httpd_vm1):        Started VM-1

Node Attributes:
* Node VM-1:
* Node VM-2:

Operations:
* Node VM-1: 
   VM-1-apache: migration-threshold=1000000
    + (6) start: rc=0 (ok)
    + (7) monitor: interval=3000ms rc=0 (ok)
   VM-1-VIP: migration-threshold=1000000
    + (4) start: rc=0 (ok)
    + (5) monitor: interval=10000ms rc=0 (ok)
* Node VM-2: 
  • 先ほどと同じようですが、オンラインにVM-1VM-2がいるようですが、vm-1vm-2がオフラインになっているようです。

確認します。

[root@VM-1]# crm configure show
node $id="6dfd3382-eddc-4762-84d5-2c047475b88c" vm-1
node $id="962ec26d-9e70-45a1-a93a-0a5455486024" vm-2
node VM-1
node VM-2
primitive VM-1-VIP ocf:heartbeat:IPaddr2 \
        params ip="192.168.144.20" cidr_netmask="24" \
        op start interval="0s" timeout="60s" on-fail="restart" \
        op monitor interval="10s" timeout="60s" on-fail="restart" \
        op stop interval="0s" timeout="60s" on-fail="block" \
        meta target-role="Started"
primitive VM-1-apache lsb:httpd_vm1 \
        op start interval="0s" timeout="90s" \
        op monitor interval="3s" timeout="20s" \
        op stop interval="0s" timeout="100s" standby="on" \
        meta target-role="Started"
group VM-1g VM-1-VIP VM-1-apache
location VM-1l VM-1g \
        rule $id="VM-1l-rule" 200: #uname eq VM-1 \
        rule $id="VM-1l-rule-0" 100: #uname eq VM-2
property $id="cib-bootstrap-options" \
        dc-version="1.0.13-a83fae5" \
        cluster-infrastructure="openais" \
        stonith-enabled="false" \
        no-quorum-policy="ignore" \
        expected-quorum-votes="2"
  • どうやらnodeが4つ登録されているようです。heartbeatでは$idのあるノードでしたが、corosyncではhostnameだけでノードを管理しているようです。

heartbeatで使用していたと思われるノードを削除します。

ノードの削除
# ノードの確認
[root@VM-1]# crm node list
VM-1: normal
VM-2: normal
vm-1(6dfd3382-eddc-4762-84d5-2c047475b88c): normal 
vm-2(962ec26d-9e70-45a1-a93a-0a5455486024): normal

# ノードの削除
[root@VM-1]# crm node delete vm-1
INFO: node vm-1 not found by crm_node
INFO: node vm-1 deleted
[root@VM-1]# crm node delete vm-2
INFO: node vm-2 not found by crm_node
INFO: node vm-2 deleted

どうなったか確認します。

[root@VM-1]#  crm status
============
Last updated: Thu Sep 28 10:25:50 2017
Stack: openais
Current DC: VM-1 - partition with quorum
Version: 1.0.13-a83fae5
2 Nodes configured, 2 expected votes
1 Resources configured.
============

OFFLINE: [ VM-1 VM-2 ]
  • どうやら認識しているノードを削除してしまったようです。

もう一度削除してみます。

[root@VM-1]# crm node delete VM-1
INFO: node VM-1 appears to be still active
INFO: check output of crm_node -l
ERROR: failed to delete node VM-1
  • 削除できないようです。

手動で削除します。

VM-1とVM-2をクラスタ構成から削除する
[root@VM-1]# crm configure edit

- node VM-1
- node VM-2
(後略)

状況を確認します。

ノードが0の状態での確認
[root@VM-1]# crm status
============
Last updated: Thu Sep 28 10:39:12 2017
Stack: openais
Current DC: VM-1 - partition with quorum
Version: 1.0.13-a83fae5
2 Nodes configured, 2 expected votes
1 Resources configured.
============

Online: [ VM-1 VM-2 ]

 Resource Group: VM-1g
     VM-1-VIP   (ocf::heartbeat:IPaddr2):       Started VM-1
     VM-1-apache        (lsb:httpd_vm1):        Started VM-1
  • 自動的にノードが追加され、VM-1でリソースが稼働しているようです。

切り替え

heartbeatのときと同様に、VM-1でcorosyncを停止させ、VM-2にリソースが移行するか確認します。

VM-2側でリソースの状態を確認しておきます。

[root@VM-2] crm_mon -Afro
(前略)
Online: [ VM-1 VM-2 ]

Full list of resources:

 Resource Group: VM-1g
     VM-1-VIP   (ocf::heartbeat:IPaddr2):       Started VM-1
     VM-1-apache        (lsb:httpd_vm1):        Started VM-1

(後略)

VM-1のcorosyncを停止します。

[root@VM-1]# service corosync stop
Signaling Corosync Cluster Engine (corosync) to terminate: [  OK  ]
Waiting for corosync services to unload:....             [  OK  ]
crm_monの状態
Online: [ VM-2 ]
OFFLINE: [ VM-1 ]

Full list of resources:

 Resource Group: VM-1g
     VM-1-VIP   (ocf::heartbeat:IPaddr2):       Started VM-2
     VM-1-apache        (lsb:httpd_vm1):        Started VM-2

  • 無事切り替わりました。curl VM1-HTTPDを実行しても、正常にかえってきます。
  • 切替りにかかる時間は、crm_monを見る限りcorosyncのほうが圧倒的に少ないようです。

当然といえば当然ですが、リソース管理はpacemakerで行っているので、リソース管理部分の書式は同一でも動作しました。
ノードの管理方法がheartbeat3とcorosync1っているので、ノードの記述が異なっていたのは当然といえば当然かもしれません。

さて、crm statusコマンドで、heartbeatとcorosyncで異なっていました。

heartbeat稼働時
Stack: Heartbeat

corosync稼働時
Stack: openais
  • Stackの部分が、corosyncではなくopenaisになっています。前身のOpenAISプロジェクトの名残でしょうか。

冗長構成へ組み込む#2

CentOS7でcorosyncを動作させます。
この段階で、CentOS7にcorosync、pacemaker、Apache、Apacheの起動スクリプトがインストールされているはずです。

pacemakerの状態を確認し、起動します。

pacemakerを起動
### 状態を確認
# 停止しているとき
[root@VM-1]# systemctl status pacemaker | grep Active                                                            
   Active: inactive (dead)
# 起動しているとき
[root@VM-1]# systemctl status pacemaker | grep Active
   Active: active (running) since Do 2017-09-28 13:19:14 CEST; 22min ago  

# 起動
[root@VM-1]# systemctl start pacemaker
crmへリソース管理を追加
[root@VM-1]# crm configure edit

node 1084789043: VM-1
node 1084789044: VM-2
+ primitive VM-1-VIP ocf:heartbeat:IPaddr2 \
+         params ip=192.168.144.20 cidr_netmask=24 \
+         op start interval=0s timeout=60s on-f ail=restart \ 
+         op monitor interval=10s timeout=60s on- fail=restart \
+         op stop interval=0s timeout=60s on-fail=block \
+         meta target-role=Stopped
+ primitive VM-1-apache systemd:httpd_vm1 \
+         op start interval=0s timeout=90s \
+         op monitor interval=3s timeout=20s \
+         op stop interval=0s timeout=100s standby=on \
+         meta target-role=Stopped
+ group VM-1g VM-1-VIP VM-1-apache
+ location VM-1l VM-1g \
+         rule 200: #uname eq VM-1 \
+         rule 100: #uname eq VM-2
property cib-bootstrap-options: \
        have-watchdog=false \
        dc-version=1.1.16-1.el7-94ff4df \
-       cluster-infrastructure=corosync
+       cluster-infrastructure=corosync \
+       stonith-enabled=false \
+       no-quorum-policy=ignore \
+       expected-quorum-votes=2
# vim: st filetype=pcmk:
  • nodeの表示され方が違うようです。
  • $idの指定がありません。
  • CentOS7はlsbではなくsystemdを使用します。
  • コメントが残るようです。
  • ダブルコーテーションは自動的に削除されます。

状態の確認

[root@VM-1]# crm_mon -fr1
Stack: corosync
Current DC: VM-1 (version 1.1.16-1.el7-94ff4df) - partition with quorum
Last updated: Thu Sep 28 14:02:10 2017
Last change: Thu Sep 28 13:58:56 2017 by root via cibadmin on VM-1

2 nodes configured
2 resources configured (4 DISABLED)

Online: [ VM-1 VM-2 ]

Full list of resources:

 Resource Group: VM-1g
     VM-1-VIP   (ocf::heartbeat:IPaddr2):       Stopped (disabled)
     VM-1-apache        (systemd:httpd_vm1):    Stopped (disabled)

Migration Summary:
* Node VM-2:
* Node VM-1:
  • Stoppedの横にdisabledがついています。
  • なぜか 4 DISABLEDとなっています。

稼働の確認

リソースを有効にします。

リソースの有効化
[root@VM-1]# crm resource start VM-1-VIP
[root@VM-1]# crm resource start VM-1-apache

# crm_mon 推移の例
 Resource Group: VM-1g
     VM-1-VIP   (ocf::heartbeat:IPaddr2):       Stopped (disabled)
     VM-1-apache        (systemd:httpd_vm1):    Stopped (disabled)
                                                   ↓
 Resource Group: VM-1g
     VM-1-VIP   (ocf::heartbeat:IPaddr2):       Stopped
     VM-1-apache        (systemd:httpd_vm1):    Stopped (disabled)
                                                   ↓
 Resource Group: VM-1g
     VM-1-VIP   (ocf::heartbeat:IPaddr2):       Started VM-1
     VM-1-apache        (systemd:httpd_vm1):    Stopped
                                                   ↓
 Resource Group: VM-1g
     VM-1-VIP   (ocf::heartbeat:IPaddr2):       Started VM-1
     VM-1-apache        (systemd:httpd_vm1):    Started VM-1  
  • 状態はStopped (disabled)からStoppedを経由し、Started VM-1と変化しました。3パターンあるようです。

切り替え

VM-1のpacemakerを停止し、リソースをVM-2で起動するようにします。

VM-1のpacemakerを停止しリソースが移ったか確認する
[root@VM-1]# systemctl stop pacemaker
[root@VM-1]# curl VM1-HTTPD
<html><body><h1>It works!</h1></body></html>
VM-2側でリソースを確認する
[root@VM-2]# crm_mon -fr1
Stack: corosync
Current DC: VM-2 (version 1.1.16-1.el7-94ff4df) - partition with quorum
Last updated: Thu Sep 28 14:16:24 2017
Last change: Thu Sep 28 14:04:35 2017 by root via cibadmin on VM-2

2 nodes configured
2 resources configured

Online: [ VM-2 ]
OFFLINE: [ VM-1 ]

Full list of resources:

 Resource Group: VM-1g
     VM-1-VIP   (ocf::heartbeat:IPaddr2):       Started VM-2
     VM-1-apache        (systemd:httpd_vm1):    Started VM-2

Migration Summary:
* Node VM-2:
  • 正常に切り替わっているようです。

CentOS7でcorosync2+pacemaker1.1で冗長構成が正常に動作することが確認できました。

cibのしくみ

heartbeat3では/var/lib/heartbeat/crmにcibファイルが増えていきましたが、corosync2ではどうなるのか確認してみます。
確認してみると、/var/libの中でそれらしいpacemaker/cib/というディレクトリの中にcibファイルが見つかりました。

cib.lastを見て、ディレクトリ内のcib-00.rawのもっとも大きい値に+1されているか確認します。

cib.lastの値を見る
[root@VM-1]# cat /var/lib/pacemaker/cib/cib.last
  • heartbeat3のときと比べると、保存先が異なるだけでやっている内容は同じのようです。

corosync1+pacemaker1.0ではどうでしょうか。
上記で作成したCentOS6で確認してみます。

cib.lastの値を見る(CentOS6)
[root@VM-1]# cat /var/lib/pacemaker/cib/cib.last                                                    
cat: /var/lib/pacemaker/cib/cib.last: No such file or directory

ディレクトリが無いといわれるので、heartbeat3で使用していた/var/lib/heartbeat/crmを確認します

/var/lib/heartbeat/crm
[root@VM-1]# service corosync start
Starting Corosync Cluster Engine (corosync):      [  OK 
 ]
[root@VM-1]# cat /var/lib/heartbeat/crm/cib.last
53

# ダミーリソースを追加して cib.lastの値が増えることを確認する

[root@VM-1]# crm configure primitive dummy-resource ocf:pacemaker:Dummy \
 op start interval="0s" timeout="90s" \
 op monitor interval="3s" timeout="20s" \
 op stop interval="0s" timeout="100s" \
 meta target-role="Stopped"
[root@VM-1]# cat /var/lib/heartbeat/crm/cib.last
54

# ダミーリソースを削除する
[root@VM-1]# crm configure delete dummy-resource
  • /var/lib/heartbeat/crm/ディレクトリを使用していることがわかりました。同じpacemaker1.0を使用しているので当然といえば当然です。

以上で、作業は終わりです。

学習できたcrmコマンド
crm configure [リソースの定義]     # リソースの追加
crm configure delete [リソース名]  # リソースの削除
crm resource start                # リソースの開始
crm resource stop                 # リソースの停止
crm resource cleanup [リソース名] [ノード名]
                                  # 故障履歴の削除
crm node list                     # ノードの一覧
crm node delete [ノード名]         # ノードの削除

タイトルにある違いを感じるは、実施しているうちに感じ取れましたので、結論にまとめています。

11
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
13