Pacemaker †
Memo/Linux/HeartbeatのRA(リソースエージェント)部分が分離したもの。
面倒なxml設定をcrmを使って割と容易に行える。
- いくつか組み合わせパターンがある
- Pacemaker + Corosync
- Pacemaker + Heartbeat(3以降あまり更新されていない)
Pacemaker1.0 + corosync1.4 を使う場合 †
CentOS6.3 + Pacemaker1.0 + Heartbeat3.0 + DRDB8.4 + MySQL5.5 †
- 環境
- VMware 上で2台用意
- CentOS6.3 x86_64
- ha01.localdomain プライマリサーバ
- eth1:10.0.1.101 バックグランド通信用
- ha02.localdomain セカンダリサーバ
- eth1:10.0.1.102 バックグランド通信用
- ha01, ha02共に /dev/sdb をDRDBで同期する事にするので、空きパーティションの確保や追加HDD等で用意
- サービス用仮想IP: eth0:10.0.0.100
- MySQL: データベースサーバ
- 127.0.0.1, ::1 からは認証なしでアクセスできる必要がある
- 死活監視用のtimeoutが60s(デフォルト)なので、それ以上にする必要がある
- 死活監視がされるのでアクセスログを取る場合に肥大する場合がある
- tcp/3306
- DRBD: 2台以上のサーバで、ネットワーク越しのブロックデバイス(/dev/sdb1等)の同期を行う、分散ストレージシステム。GPLv2
- Pacemaker:RA(リソースエージェント)に対し、リソースの起動(start)、停止(stop)、監視(monitor)の指示を行う。heartbeatのCRM部分が分割
- Heartbeat: ノード死活監視、管理。同等機能の他ソフトとして「Corosync」がある
- ファイルシステムのマウント(ha01)
mount /mnt/drbd/mysql
- Heartbeatのインストール。yumリポジトリがtar.gzであるので入れる(ha01, ha02) バージョンを指定必須
cd /tmp
wget -O pacemaker-1.0.12-1.1.el6.x86_64.repo.tar.gz "http://sourceforge.jp/frs/redir.php?m=iij&f=%2Flinux-ha%2F55568%2Fpacemaker-1.0.12-1.1.el6.x86_64.repo.tar.gz"
tar xvfz pacemaker-1.0.12-1.1.el6.x86_64.repo.tar.gz
cd pacemaker-1.0.12-1.1.el6.x86_64.repo
yum -c pacemaker.repo install heartbeat-3.0.5 pacemaker-1.0.12 pm_extras-1.2 pm_logconv-hb-1.1 -y
- 標準リポジトリにあるバージョンで更新されないように無視設定(ha01, ha02)
vi /etc/yum.repos.d/CentOS-Base.repo
----
[base]
...
exclude=pacemaker pacemaker-libs corosync cluster-glue heartbeat resource-agents
----
- ha.cfの設定。マルチキャストまたはブロードキャストをサポートしない環境(Amazon VPC等)向けに、ユニキャスト(ucast)で直接IPアドレス指定(ha01, ha02)
- エディタで設定の編集モード
crm configure edit
- バッチモードで現在の設定を確認する場合
crm configure show
- heartbeatのテスト
crm_mon -i1 -f -A
Online: [ ha02.localdomain ha01.localdomain ]
Master/Slave Set: ms_drbd_mysql
Masters: [ ha01.localdomain ]
Slaves: [ ha02.localdomain ]
Resource Group: mysql
fs_mysql (ocf::heartbeat:Filesystem): Started ha01.localdomain
mysqld (lsb:mysqld): Started ha01.localdomain
Node Attributes:
* Node ha02.localdomain:
+ ha01.localdomain-eth0 : up
+ master-drbd_mysql:0 : 5
* Node ha01.localdomain:
+ ha02.localdomain-eth0 : up
+ master-drbd_mysql:1 : 5
# Ctrl-Cで中断
# ha01に /mnt/drbd/mysql がマウントされている
[root@ha01 ~]#
[root@ha01 ~]# df -h
Filesystem Size Used Avail Use% マウント位置
/dev/mapper/vg_centos6-lv_root
28G 2.7G 24G 11% /
tmpfs 497M 0 497M 0% /dev/shm
/dev/sda1 485M 52M 408M 12% /boot
/dev/drbd0 1008M 18M 940M 2% /mnt/drbd/mysql
# ha01のheartbeatを止めて、故障状態にしてみる
service heartbeat stop
# ha02での表示(ha01がOFFLINEになっている)
crm_mon -i1 -f -A
Online: [ ha02.localdomain ]
OFFLINE: [ ha01.localdomain ]
Master/Slave Set: ms_drbd_mysql
Masters: [ ha02.localdomain ]
Stopped: [ drbd_mysql:1 ]
Resource Group: mysql
fs_mysql (ocf::heartbeat:Filesystem): Started ha02.localdomain
mysqld (lsb:mysqld): Started ha02.localdomain
Node Attributes:
* Node ha02.localdomain:
+ ha01.localdomain-eth0 : up
+ master-drbd_mysql:0 : 5
# ha02に /mnt/drbd/mysql がマウントされている
df -h
Filesystem Size Used Avail Use% マウント位置
/dev/mapper/vg_centos6-lv_root
28G 2.7G 24G 11% /
tmpfs 497M 0 497M 0% /dev/shm
/dev/sda1 485M 52M 408M 12% /boot
/dev/drbd0 1008M 47M 911M 5% /mnt/drbd/mysql
# ha02でmysqlも稼働している
mysql -e "show databases;"
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
# failcountの表示。
# ha01のheartbeat再開させてみる
service heartbeat start
# ha01がオンラインにはなったが、ha02がマスターのまま
crm_mon -i1 -f -A
Online: [ ha02.localdomain ha01.localdomain ]
Master/Slave Set: ms_drbd_mysql
Masters: [ ha02.localdomain ]
Slaves: [ ha01.localdomain ]
Resource Group: mysql
fs_mysql (ocf::heartbeat:Filesystem): Started ha02.localdomain
mysqld (lsb:mysqld): Started ha02.localdomain
Node Attributes:
* Node ha02.localdomain:
+ ha01.localdomain-eth0 : up
+ master-drbd_mysql:0 : 5
* Node ha01.localdomain:
+ ha02.localdomain-eth0 : up
+ master-drbd_mysql:1 : 5
# MySQLグループをha01に変える。
# move と unmove はセット
crm resource move mysql ha01.localdomain force
# ha01:"inf", ha02:"-inf" オプションが付いた
crm configure show | grep -i inf:
rule $id="cli-prefer-rule-mysql" inf: #uname eq ha01.localdomain
rule $id="cli-standby-rule-mysql" -inf: #uname eq ha02.localdomain
# リソース移動制約の解除。この状態でha01が故障すると、"-inf"が付いたha02へリソースの移動ができないため "-inf"を削除する
crm resource unmove mysql
- crm_monを1回実行してすぐ終了させたい場合 "-1"オプション
crm_mon -fA -1