LoginSignup
17
16

More than 5 years have passed since last update.

LinuxHA Japan の CentOS 7 のリポジトリで Pacemaker/Corosync を試す

Posted at

LinuxHA Japan で RHEL/CentOS 7 リポジトリパッケージがリリースされたようなので、CentOS 7 で Pacemaker/Corosync を試してみました。

なお、Corosync を使うのははじめてです(Heartbeat しか使ったことありませんでした)。

Vagrant

次のような Vagrant 環境で試しました。

Vagrant.configure(2) do |config|

  config.vm.box = "your-centos7-box"

  config.vm.define "pm1" do |cfg|
    cfg.vm.hostname = "pm1"
    cfg.vm.network "private_network", ip: "192.168.33.11", virtualbox__intnet: "pacemaker"
  end

  config.vm.define "pm2" do |cfg|
    cfg.vm.hostname = "pm2"
    cfg.vm.network "private_network", ip: "192.168.33.12", virtualbox__intnet: "pacemaker"
  end

end

自作の CentOS 7 の box を使っているのですが、git や epel を追加しているだけの普通の CentOS 7 なので、適当な box に読み替えてください。

インストール

LinuxHA Japan のリポジトリを rpm で追加します。

yum -y install http://iij.dl.sourceforge.jp/linux-ha/63398/pacemaker-repo-1.1.12-1.1.el7.x86_64.rpm

rpm -ql pacemaker-repo でインストールされたものを見てみると・・・

リポジトリそのものがローカルにインストールされるようです。

/etc/yum.repos.d/pacemaker.repo
/opt/linux-ha
/opt/linux-ha/pacemaker
/opt/linux-ha/pacemaker/repodata
:
/opt/linux-ha/pacemaker/rpm/pm_logconv-cs-2.0-1.el7.noarch.rpm
/opt/linux-ha/pacemaker/rpm/pssh-2.3.1-5.el7.noarch.rpm
/opt/linux-ha/pacemaker/rpm/resource-agents-3.9.5-1.589.b6443.el7.x86_64.rpm

幾つかのパッケージが CentOS 7 の extra リポジトリの同名パッケージと競合するため、yum-plugin-priorities をインストールして LinuxHA Japan のリポジトリを優先するように設定します。

yum -y install yum-plugin-priorities ansible
yum-config-manager --setopt=linux-ha-ja-pacemaker.priority=10 --save

Pacemaker/Corosync をインストールします。pacemaker-all パッケージをインストールすると必要なものが一式入ります。

yum -y install pacemaker-all

設定

Corosync の設定ファイルを作成します。

すべてのノードで設定ファイルの内容は同じなので、片方のノードで設定ファイルを編集してもう片方のノードに転送するとよいでしょう。

サンプルの設定ファイルをコピーして編集します。

cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf
vim /etc/corosync/corosync.conf

bindnetaddr をネットワークアドレスに書き換えます。

    bindnetaddr: 192.168.33.0

quorum のところに下記を追記します。

    provider: corosync_votequorum
    expected_votes: 2
    two_node: 1

設定ファイルをもう片方のノードにコピーします。

rsync /etc/corosync/corosync.conf 192.168.33.12:/ -Rav

起動

pacemaker の systemd のユニットを見てみると、

grep corosync /usr/lib/systemd/system/pacemaker.service

次のようになっているので、

After=corosync.service
Requires=corosync.service

pacemaker だけ起動します(corosync は勝手に起動する)。

systemctl start pacemaker.service

しばらく待ってから crm_mon を実行し、Online: [ pm1 pm2 ] みたな表示があれば正常に起動しています。

crm_mon -1

ちなみに corosync じゃなくて pacemaker を起動しなければならないことに気がつくまで数時間試行錯誤しました。heartbeat のときは heartbeat の方を起動するようになっていたので・・・

Pacemaker の設定

ここまでくれば、あとは Pacemaker/Heartbeat のときと同じでいいのでしょうかね?
ためしに vip を付与してみます。

crm configure でインタラクティブに設定します。

crm configure

次のように設定します。

property stonith-enabled="false"
property start-failure-is-fatal="false"

rsc_defaults migration-threshold="5"
rsc_defaults resource-stickiness="INFINITY"
rsc_defaults failure-timeout="3600s"

verify
commit

primitive vip1 ocf:heartbeat:IPaddr2 \
  params ip="192.168.33.21" cidr_netmask="24" nic="enp0s8" \
  op monitor interval="10" timeout="20" on-fail="restart" \
  op start interval="0" timeout="20" \
  op stop interval="0" timeout="20"

primitive vip2 ocf:heartbeat:IPaddr2 \
  params ip="192.168.33.22" cidr_netmask="24" nic="enp0s8" \
  op monitor interval="10" timeout="20" on-fail="restart" \
  op start interval="0" timeout="20" \
  op stop interval="0" timeout="20"

primitive vip3 ocf:heartbeat:IPaddr2 \
  params ip="192.168.33.23" cidr_netmask="24" nic="enp0s8" \
  op monitor interval="10" timeout="20" on-fail="restart" \
  op start interval="0" timeout="20" \
  op stop interval="0" timeout="20"

group vips vip1 vip2 vip3

verify
commit

quit

ip アドレスを確認します。

ip -f inet addr show dev enp0s8

片方のノードに仮想IPが付与されました。

3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    inet 192.168.33.11/24 brd 192.168.33.255 scope global enp0s8
       valid_lft forever preferred_lft forever
    inet 192.168.33.21/24 brd 192.168.33.255 scope global secondary enp0s8
       valid_lft forever preferred_lft forever
    inet 192.168.33.22/24 brd 192.168.33.255 scope global secondary enp0s8
       valid_lft forever preferred_lft forever
    inet 192.168.33.23/24 brd 192.168.33.255 scope global secondary enp0s8
       valid_lft forever preferred_lft forever

おもむろにサーバを停止してみます。

shutdown -h now

もう片方のサーバで仮想IPアドレスを確認します。

ip -f inet addr show dev enp0s8

仮想IPがフェイルオーバーしてます。

3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    inet 192.168.33.12/24 brd 192.168.33.255 scope global enp0s8
       valid_lft forever preferred_lft forever
    inet 192.168.33.21/24 brd 192.168.33.255 scope global secondary enp0s8
       valid_lft forever preferred_lft forever
    inet 192.168.33.22/24 brd 192.168.33.255 scope global secondary enp0s8
       valid_lft forever preferred_lft forever
    inet 192.168.33.23/24 brd 192.168.33.255 scope global secondary enp0s8
       valid_lft forever preferred_lft forever

シャットダウンしたノードをもう一度起動します。

vagrant up pm1
vagrant ssh pm1

pacemaker を起動します(自動起動を設定してなかったので)

systemctl start pacemaker.service

crm_mon でクラスタの状態を確認します。

crm_mon -1

クラスタに復帰しています。

Online: [ pm1 pm2 ]

 Resource Group: group_vip
     vip1       (ocf::heartbeat:IPaddr2):       Started pm2 
     vip2       (ocf::heartbeat:IPaddr2):       Started pm2 
     vip3       (ocf::heartbeat:IPaddr2):       Started pm2 

おもむろに Vagrant のホスト側から pm2 を強制終了します。

vagrant halt -f pm2

pm1 で crm_mon を確認します。

crm_mon -1

フェイルオーバーしてます。

Online: [ pm1 ]
OFFLINE: [ pm2 ]

 Resource Group: group_vip
     vip1       (ocf::heartbeat:IPaddr2):       Started pm1 
     vip2       (ocf::heartbeat:IPaddr2):       Started pm1 
     vip3       (ocf::heartbeat:IPaddr2):       Started pm1 

さいごに

LinuxHA Japan の yum リポジトリを使って、Pacemaker/Corosync クラスタをアクティブ/スタンバイの2台で構成し、仮想 IP のフェイルオーバーを試してみました。

Pacemaker/Heartbeat と比べるとクラスタの起動が異様に早いように感じました(pacemaker を起動してから crm_mon でクラスタへのジョインが確認できるまでの時間)。

なお、他にもいろいろ設定しなければならない項目があるようなので(pacemaker の環境変数とか)、もうちょっといろいろ弄ってみます。

参考サイト

17
16
1

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
17
16