SRA OSS, Inc.
ホワイトペーパー
IBM Power Systems (Linux) における
PaceMaker/DRBD/PostgreSQL/pgpool-II
動作検証
2011 年 10 月 1 日 SRA OSS,Inc. 日本支社
目次
1はじめに...3 2検証環境および検証対象ソフトウェア...3 2.1 検証対象ソフトウェア...3 2.2 対象プラットフォーム...3 2.3OS 設定...4 3動作検証項目...4 3.1 サーバ構成...4 3.2 検証項目...5 3.2.1Linux-HA の動作検証...5 3.2.2DRBD の動作検証...5 3.2.3 クラスタ構成の動作検証...6 4Linux-HAの動作検証結果...6 4.1 ビルド...6 4.1.1RPM パッケージの作成...6 4.1.2RPM パッケージのインストール...7 4.2Heartbeat の設定...7 4.3 動作検証の実施...8 4.3.1 リソースの追加...8 4.3.2 障害時のフェイルオーバー...9 5DRBDの動作検証...10 5.1 ビルド...10 5.2 デバイス設定...10 5.3 動作確認...11 6クラスタ構成の動作検証...12 6.1DB の作成...12 6.2pgpool-II の設定...12 6.3Heartbeat の設定...13 6.4PostgreSQL のクラスタリング...13 6.4.1 リソース定義...13 6.4.2 正常時のリソース稼動状況...15 6.4.3 障害時のリソース稼働状況...16 6.5pgpool-II のクラスタリング...17 6.5.1pgpool-II むけリソースエージェント...17 6.5.2 リソース定義...17 6.5.3 正常時のリソース稼働状況...18 6.5.4 障害時のリソース稼働状況...20 7まとめ...211 はじめに
本書は、Power Linux システム上でのクラスタソフトウェアの動作検証結果について報告するもの です。本動作検証は、Power Linux 上でクラスタ環境を構築可能なことを確認することで、構成選択と インストール手順の参考にしていただくことを目的としています。本文書の内容は 2011 年 9 月に実施 した検証作業に基づいています。 本文書に記載されている会社名、製品名は各社の商標および登録商標です。個別の商標表記は割愛 させていただいております。2 検証環境および検証対象ソフトウェア
2.1 検証対象ソフトウェア
オープンソース RDBMS である PostgreSQL とオープンソース多機能ミドルウェア pgpool-II を対象 とし、クラスタソフトウェアには DRBD、Heartbeat、Pacemaker を使用します。詳細バージョンは以 下の通りです。 PostgreSQL 9.0.4 検証時点での PostgreSQL 9.0.x の最新版 pgpool-II 3.0.3 検証時点での pgpool-II 3.0.x の最新版 DRBD 8.3.11 検証時点での DRBD 8.3.x の 最新版 Heartbeat 3.0.5 検証時点での Heartbeat の最新安定版 Pacemaker 1.0.11 検証時点での Pacemaker 1.0.x の最新版2.2 対象プラットフォーム
IBM Power System 上の Red Hat Enterprise Linux (ppc64) を対象プラットフォームとします。本検 証用に Power 720 Express を使用し、以下の Logical Partition(LPAR)を作成しました。
2.3 OS 設定
PostgreSQL やクラスタソフトウェアの動作に必要な以下の設定を行っています。 • 共有メモリの最大サイズ # sysctl kernel.shmmax=12884901888 • PostgreSQL 動作用ユーザアカウント # useradd postgres • postgres ユーザによるパスフレーズ、パスワード入力なしでの ssh 接続3 動作検証項目
3.1 サーバ構成
今回の検証では、PostgreSQL と pgpool-II のクラスタリングを検証しました。PostgreSQL のクラスタリングでは、Heartbeat と Pacemaker を組み合わせて 2 台のサーバ
(ext611、ext612)にクラスタ環境を構築し、DRBD、仮想 IP アドレス、PostgreSQL を Pacemaker の制 御対象リソースとして定義しました(図 1 参照)。 図1: PostgreSQLのクラスタ環境 PostgreSQL DRBD Pacemaker Heartbeat Pacemaker Heartbeat データ領域 DRBD PostgreSQL 死活監視 データの同期 eth2 eth2 【ext611 】 【ext612 】 仮想IP 仮想IP eth1 eth1 データ領域 フェールオーバー
そして、pgpool-II のクラスタリングも同様に、Heartbeat と Pacemaker を組み合わせて 2 台のサー バ(ext611、ext612)にクラスタ環境を構築し、IP アドレス、pgpool-II を Pacemaker の制御対象リソー スとして定義しました(図 2 参照)。
図2:pgpool-II のクラスタ環境
pgpool-IIのクラスタリングは、本来的には、複数の PostgrSQL サーバを束ねる pgpool-II が単一障 害点とならないようにする目的で行われることが多いのですが、ここでは対象の PostgreSQL は一つだ けとしています。
3.2 検証項目
以下にあげる項目について検証を実施しました。3.2.1 Linux-HA の動作検証
• ビルド: RPM の作成・インストール • 動作テスト ◦ リソースの定義 ◦ 障害発生時のフェイルオーバー pgpool-II Pacemaker Heartbeat Pacemaker Heartbeat データ領域 pgpool-II PostgreSQL 死活監視 eth2 【ext611 】 【ext612 】 仮想IP 仮想IP eth1 eth1 フェールオーバー3.2.2 DRBD の動作検証
• ビルド: configure/make/make install • 動作テスト ◦ プライマリノードとセカンダリノードでのデータ同期3.2.3 クラスタ構成の動作検証
• PostgreSQL + DRBD + Linux-HAの動作テスト ◦ DRBD、仮想 IP アドレス、PostgreSQL のリソース定義 ◦ 正常時のリソース稼動状況 ◦ 障害時のリソース稼働状況 • pgpool-II + Linux-HAの動作テスト ◦ 仮想 IP アドレス、pgpool-II のリソース定義 ◦ 正常時のリソース稼動状況 ◦ 障害時のリソース稼働状況4 Linux-HA の動作検証結果
4.1 ビルド
4.1.1 RPM パッケージの作成
Linux-HA Japan から提供されているリポジトリパッケージ(pacemaker-1.0.11-1.2.1.el6.srpm.tar.gz )を利用して RPM パッケージを作成し、Heartbeat・Pacemaker を導入しました。リポジトリパッ ケージに含まれる以下のソース RPM を利用しました。 • cluster-glue-1.0.7-1.1.el6.src.rpm • heartbeat-3.0.5-1.1.el6.src.rpm • pacemaker-1.0.11-1.2.el6.src.rpm • pacemaker-mgmt-2.0-1.el6.src.rpm cluster-glue-1.0.7-1.el6.src.rpm については、既知のバグ1に対するパッチ2を適用しました。 1 Bug 457641 - glib-2.13.7: C++ conversion problem in gthread.h
https://bugzilla.gnome.org/show_bug.cgi?id=457641
また、RPM パッケージの作成時に以下のパッケージが必要となったため、CD-ROM または Red Hat CUSTOMER PORTALより取得し、インストールしました。 e2fsprogs net-snmp-devel e2fsprogs-devel net-snmp-libs e2fsprogs-libs openhpi-devel file-devel openhpi-libs help2man OpenIPMI libcom_err OpenIPMI-devel libcom_err-devel OpenIPMI-libs libibverbs perl-TimeDate libibverbs-devel postgresql libmthca postgresql-contrib librdmacm postgresql-docs librdmacm-devel postgresql-libs libss postgresql-server libtool-ltdl-devel PyXML libuuid-devel rpm-devel lm_sensors-devel tcp_wrappers-devel lm_sensors-libs uuid net-snmp
4.1.2 RPM パッケージのインストール
ソース RPM より作成された以下の RPM パッケージをインストールしました。 cluster-glue-1.0.7-1.1.el6.ppc64.rpm libesmtp-devel-1.0.4-5.el6.ppc64.rpm cluster-glue-libs-1.0.7-1.1.el6.ppc64.rpm pacemaker-1.0.11-1.2.el6.ppc64.rpm cluster-glue-libs-devel-1.0.7-1.1.el6.ppc64.rpm pacemaker-libs-1.0.11-1.2.el6.ppc64.rpm heartbeat-3.0.5-1.1.el6.ppc64.rpm pacemaker-libs-devel-1.0.11-1.2.el6.ppc64.rpm heartbeat-devel-3.0.5-1.1.el6.ppc64.rpm pacemaker-mgmt-2.0-1.el6.ppc64.rpm heartbeat-libs-3.0.5-1.1.el6.ppc64.rpm pacemaker-mgmt-client-2.0-1.el6.ppc64.rpm ldirectord-3.9.2-1.1.el6.ppc64.rpm pacemaker-mgmt-devel-2.0-1.el6.ppc64.rpm libesmtp-1.0.4-5.el6.ppc64.rpm resource-agents-3.9.2-1.1.el6.ppc64.rpm4.2 Heartbeat の設定
設定ファイルha.cf と認証用キーファイル authkeys を作成しました。(ext611・ext612 にて実施)
# vi /etc/ha.d/ha.cf pacemaker on logfacility local1 debug 0 udpport 694 keepalive 2 warntime 20 deadtime 24 initdead 48 bcast eth1 node ext611 node ext612 watchdog /dev/watchdog # vi /etc/ha.d/authkeys auth 1 1 sha1 ppckey
4.3 動作検証の実施
4.3.1 リソースの追加
Dummy リソースと IP リソースを追加して、それらが適切に稼動することを確認しました。 以下に作業手順を示します。(カッコ内は作業対象のマシンを表します) 1. Heartbeatの起動 (ext611・ext612)# service heartbeat start
2. リソースの追加 (ext611)
# crm
crm(live)# configure crm(live)configure#
crm(live)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"
crm(live)configure# primitive ip_resource ocf:heartbeat:IPaddr2 \ > params ip=133.137.177.10
crm(live)configure# commit
crm(live)configure# property $id="cib-bootstrap-options" \ > stonith-enabled="false" \ > no-quorum-policy="ignore" crm(live)configure# commit crm(live)exit 3. リソースの稼働状況の確認 (ext611) # crm_mon ============
Last updated: Thu Jul 28 17:39:33 2011 Stack: Heartbeat
Current DC: ext611 (2bf6bddd-3adb-4d80-8c04-ea6c5bc0d90e) - partition with quorum Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87
2 Nodes configured, unknown expected votes 2 Resources configured.
============
Online: [ ext611 ext612 ]
dummy-resource (ocf::pacemaker:Dummy): Started ext611 ip_resource (ocf::heartbeat:IPaddr2): Started ext612 # ping 133.137.177.10
PING 133.137.177.10 (133.137.177.10) 56(84) bytes of data. 64 bytes from 133.137.177.10: icmp_seq=1 ttl=64 time=0.028 ms 64 bytes from 133.137.177.10: icmp_seq=2 ttl=64 time=0.017 ms 64 bytes from 133.137.177.10: icmp_seq=3 ttl=64 time=0.015 ms
4.3.2 障害時のフェイルオーバー
クラスタノードに障害(ext611 の電源を落としすことで代用)が発生した場合、もう一方のノードに フェイルオーバーすることを確認しました。
以下に作業手順を示します。(カッコ内は作業対象のマシンを表します) 1. サーバの電源断 (ext611)
# crm_mon ============
Last updated: Thu Jul 28 18:05:27 2011 Stack: Heartbeat
Current DC: ext612 (a1d6ab3c-d06f-4aa1-a17a-972bf960d6b5) - partition with quorum Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87
2 Nodes configured, unknown expected votes 2 Resources configured.
============ Online: [ ext612 ] OFFLINE: [ ext611 ]
dummy-resource (ocf::pacemaker:Dummy): Started ext612 ip_resource (ocf::heartbeat:IPaddr2): Started ext612 # ping 133.137.177.10
PING 133.137.177.10 (133.137.177.10) 56(84) bytes of data. 64 bytes from 133.137.177.10: icmp_seq=1 ttl=64 time=0.028 ms 64 bytes from 133.137.177.10: icmp_seq=2 ttl=64 time=0.017 ms 64 bytes from 133.137.177.10: icmp_seq=3 ttl=64 time=0.015 ms
5 DRBD の動作検証
5.1 ビルド
LINBIT 社から公開されているソースコードだけでは、DRBD が正常に動作しなかったので、IBM 殿 から提供して頂いたパッチ(bitops.h.diff)を適用しました。 以下に作業手順を示します。(ext611・ext612 にて実施) # ls bitops.h.diff # wget http://oss.linbit.com/drbd/8.3/drbd-8.3.11.tar.gz # tar zxvf drdb-8.3.11.tar.gz # cd drbd-8.3.11 # patch -p0 < ../bitops.h.diff# ./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc --with-km –with-xen=no # make
# make install
5.2 デバイス設定
DRBD の下位デバイスとして、LVM の論理ボリュームを使用しました。 以下に作業手順を示します。(ext611・ext612 にて実施)
# vi /etc/drbd.d/r0.res resource r0 { protocol C; on ext611 { device minor 0; disk /dev/mapper/vg_lpar1-lv_home; meta-disk internal; address 192.168.40.2:7788; } on ext612 { device minor 0; disk /dev/mapper/vg_lpar5-lv_home; meta-disk internal; address 192.168.40.3:7788; } }
5.3 動作確認
ext611 をプライマリノードにして初期データの同期を行った後、適当なファイルを作成し、セカン ダリノードでそのファイルが参照できることを確認しました。 以下の作業手順を示します。(カッコ内は作業対象のマシンを表します) 1. カーネルモジュールのロード (ext611・ext612) # modprobe drbd # lsmod | grep drbd drbd 416441 0 # cat /proc/drbd version: 8.3.11 (api:88/proto:86-96)GIT-hash: 0de839cee13a4160eed6037c4bddd066645e23c5 build by root@ext611, 2011-07-14 16:46:10
2. DRBDの起動 (ext611・ext612)
# drbdadm up r0
3. 初期同期 (ext611)
# drbdadm -- --overwrite-data-of-peer primary r0 # drbd-overview
4. ファイルシステムの作成 (ext611) # mkfs.ext4 /dev/drbd0 # mkdir /mnt/drbd0 # mount /dev/drbd0 /mnt/drbd0 # ls /mnt/drbd0 lost+found 5. 同期確認 (ext611・ext612) // ext611 で実行
# echo test > /mnt/drbd0/test # umount /mnt/drbd0 # drbdadm secondary r0 // ext612 で実行 # drbdadm primary r0 # mount /dev/drbd0 /mnt/drbd0 # cat /mnt/drbd0/test test
6 クラスタ構成の動作検証
6.1 DB の作成
DRBD のプライマリノーにおいて、データベースクラスタを作成し、クライアントからの接続に関 わる設定のみ変更し、それ以外はデフォルトとしました。 # mkdir /mnt/drbd0/pg90 # chown postgres:postgres /mnt/drbd0/pg90 # su - postgres$ initdb -D /mnt/drbd0/pg90/data --no-locale --encoding=UTF-8 $ vi /mnt/drbd0/pg90/data/postgresql.conf
listen_address = '*'
$ vi /mnt/drbd0/pg90/data/pg_hba.conf
host all all 133.137.176.0/23 trust $ mkdir -p 700 /mnt/drbd0/pg90/data/pg_log
6.2 pgpool-II の設定
ext611、ext612 の両ノードにおいて、以下の通りに pgpool-II を設定しました。コネクションプーリ ングに必要なパラメータのみを設定し、それ以外はデフォルトとしました。
$ pg_md5 <スーパーユーザのパスワード> 5f4dcc3b5aa765d61d8327deb882cf99 $ vi pcp.conf
postgres:5f4dcc3b5aa765d61d8327deb882cf99
$ cp <pgpool-II のインストール先>/etc/pgpool.conf.sample pgpool.conf $ vi pgpool.conf listen_addresses = '*' health_check_user = 'postgres' backend_hostname0 = 'ext612.sra.co.jp' backend_port0 = 5432 backend_weight0 = 1 backend_data_directory0 = '/mnt/drbd0/pg90/data' $ vi pool_hba.conf
host all all 133.137.176.0/23 trust
6.3 Heartbeat の設定
ext611、ext612 の両ノードにおいて、以下の通りに Heartbeat を設定しました。 # vi /etc/ha.d/ha.cf crm on ucast eth2 192.168.140.2 ucast eth2 192.168.140.3 auto_failback on node ext611 node ext612 ping 133.137.160.16respawn root /usr/lib64/heartbeat/pingd -m 100 -a pingd
6.4 PostgreSQL のクラスタリング
6.4.1 リソース定義
DRBD、仮想 IP アドレス、PostgreSQL をそれぞれリソースとして定義しました。DRBD は ext611 をプライマリノードとし、仮想 IP アドレスと PostgreSQL はグループ化した上で、DRBD と同一マシ ンで動作するようにしました。 以下にリソース定義ファイル(crm-config.txt)の内容を示します。 property \primitive drbd0 ocf:linbit:drbd \ params \
drbd_resource="r0" \
op monitor role="Master" interval="60s" timeout="30s" \ op monitor role="Slave" interval="60s" timeout="30s" \ op start timeout="240s" \
op stop timeout="100s" # DRBD のスプリットブレイン防止 ms ms_drbd0 drbd0 \
meta master-max="1" master-node-max="1" clone-max="2" \ clone-node-max="1" notify="true" is-managed="true" \ target-role="Started"
# DRBD のプライマリ設定
location ms_drbd0_master ms_drbd0 rule role="Master" 100: \#uname eq ext611 # DRBD デバイスのマウント設定 primitive mnt_drbd0 ocf:heartbeat:Filesystem \ params \ fstype="ext4" \ directory="/mnt/drbd0" \ device="/dev/drbd0" \
op monitor timeout="40s" interval="40s" \ op start timeout="60s" \
op stop timeout="60s" # 仮想 IP の設定
primitive ipaddr ocf:heartbeat:IPaddr2 \ params \
nic="eth1" \
ip="133.137.176.217" \ cidr_netmask="23" \
op start timeout="90" start_delay="0" \ op stop timeout="100" start_delay="0" \
op monitor timeout="20" start_delay="1" interval="5" on_fail="restart" \ meta migration-threshold="3" # PostgreSQL の設定 primitive pgsql ocf:heartbeat:pgsql \ params \ pgctl="/usr/local/pg90/bin/pg_ctl" \ ctl_opt="-w" \ psql="/usr/local/pg90/bin/psql" \ pgdata="/mnt/drbd0/pg90/data" \ logfile="/mnt/drbd0/pg90/data/pg_log/postgresql.log" \ op start timeout="120s" \ op stop timeout="120s"
# グループ設定
group group1 ipaddr mnt_drbd0 pgsql \
meta is-managed="true" target-role="Started" # グループ 1 の起動条件 (DRBD のプライマリ側でグループ 1 を起動) colocation colocation1 inf: group1 ms_drbd0:Master # リソースの起動順序
order Order1 0: ms_drbd0:promote group1:start
6.4.2 正常時のリソース稼動状況
Heartbeat の起動直後は、DRBD のプライマリノードである ext611 上で各リソースが起動されてい ることを確認しました。また、pgbench を実行して、PostgreSQL が正常に利用できることを確認しま した。 以下に作業手順を示します。(カッコ内は作業対象のノードを表します) 1. Heartbeatの起動 (ext611・ext612)# service heartbeat start
2. Pacemakerのリソース追加 (ext611)
# crm configure < crm-config.txt # crm_mon -i 5
============
Last updated: Mon Sep 12 15:46:22 2011 Stack: Heartbeat
Current DC: ext612 (a1d6ab3c-d06f-4aa1-a17a-972bf960d6b5) - partition with quorum Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87
2 Nodes configured, unknown expected votes 2 Resources configured.
============
Online: [ ext611 ext612 ] Master/Slave Set: ms_drbd0 Masters: [ ext611 ] Slaves: [ ext612 ] Resource Group: group1
3. アクティブノードでのリソース稼動状況の確認 (ext611)
# drbd-overview
0:r0 Connected Primary/Secondary UpToDate/UpToDate C r--- /mnt/drbd0 ext4 138G 220M 131G 1%
# ip addr show eth1 | grep 133.137.176.217
inet 133.137.176.217/23 brd 133.137.177.255 scope global secondary eth1 # pstree | grep postgres
|-postgres---4*[postgres]
4. スタンバイノードでのリソース稼働状況の確認 (ext612)
# drbd-overview
0:r0 Connected Secondary/Primary UpToDate/UpToDate C r---# ip addr show eth1 | grep 133.137.176.217
# pstree | grep postgres
5. pgbenchの実行 (ext611) # su - postgres $ export PGHOST=133.137.176.217 $ /usr/local/pg90/bin/pgbench -i $ /usr/local/pg90/bin/pgbench -c 10 -t 1000 $ psql psql (9.0.4)
Type "help" for help.
postgres=# SELECT COUNT(*) FROM pgbench_accounts; count 100000 (1 row)
6.4.3 障害時のリソース稼働状況
アクティブノードに障害(Heartbeat の停止で代用)が発生した場合に、スタンバイノードにフェイル オーバーし、継続して PostgreSQL が利用できることを確認しました。 以下に作業手順を示します。(カッコ内は作業対象のマシンを表します) 1. アクティブノードの Heartbeat を停止 (ext611)# service heartbeat stop
Stopping High-Availability services: Done
2. リソース稼働状況の確認 (ext611)
# drbd-overview
0:r0 Unconfigured . . . .
# ip addr show eth1 | grep 133.137.176.217 # pstree | grep postgres
3. リソース稼働状況の確認 (ext612)
# drbd-overview
0:r0 WFConnection Primary/Unknown UpToDate/DUnknown C r--- /mnt/drbd0 ext4 138G 220M 131G 1%
# ip addr show eth1 | grep 133.137.176.217
inet 133.137.176.217/23 brd 133.137.177.255 scope global secondary eth1 # pstree | grep postgres
|-postgres---4*[postgres] 4. PostgreSQLの動作確認 (ext611) # su - postgres $ export PGHOST=133.137.176.217 # psql psql (9.0.4)
Type "help" for help.
postgres=# SELECT COUNT(*) FROM pgbench_accounts; count 100000 (1 row)
6.5 pgpool-II のクラスタリング
6.5.1 pgpool-II むけリソースエージェント
pgpool-II 用の RA(リソースエージェント)は、「pgpool-ha」という名前で pgFoundry サイトで pgpoolプロジェクトの一部として配布されています(http://pgfoundry.org/projects/pgpool/)。これを
(psql、pgpool にパスを通した状態で実行) $ ./configure
$ cd src ; make $ sudo make install
6.5.2 リソース定義
仮想 IP アドレス、pgpool-II をリソースとして定義しました。仮想 IP アドレスと pgpool はグループ 化した上で、初期状態では ext611 で稼動させるようにしました。
property \
stonith-enabled=”false”
primitive ipaddr ocf:heartbeat:IPaddr2 \ params \
nic=”eth1” \
ip=”133.137.176.217” \ cidr_netmask=”23” \
op start timeout=”90” start_delay=”0” \ op stop timeout=”100” start_delay=”0” \
op monitor timeout=”20” start_delay=”1” interval=”5” on_fail=”restart” \ meta migration-threashold=”3”
primitive pgpool2 ocf:heartbeat:pgpool \ params \ pgpoolconf=”pgpool.conf のパス” \ pcpconf=”pcp.conf のパス” \ hbaconf=”pool_hba.conf のパス” \ pidfile=”PID ファイルのパス” \ pgpooluser=”postgres” \
op start timeout=”20” start_delay=”0” \ op stop timeout=”20” start_delay=”0” \
op monitor timeout=”20” start_delay=”60” interval=”10” on_fail=”restart” \ meta migration-threshold=”3”
group group_pgpool2 ipaddr pgpool2
6.5.3 正常時のリソース稼働状況
Heartbeat の起動直後は、ext611 上で各リソースが起動されていることを確認しました。また、 pgbenchを実行して、pgpool-II および PostgreSQL が正常に利用できることを確認しました。 以下に作業手順を示します。(カッコ内は作業対象のノードを表します)
1. Heartbeatの起動 (ext611・ext612)
# service heartbeat start
2. Pacemakerのリソース追加 (ext611)
# crm configure < crm-config.txt # crm_mon -i 5
============
Last updated: Tue Sep 27 15:36:46 2011 Stack: Heartbeat
Current DC: ext612 (a1d6ab3c-d06f-4aa1-a17a-972bf960d6b5) - partition with quorum Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87
2 Nodes configured, unknown expected votes 1 Resources configured.
============
Online: [ ext611 ext612 ]
Resource Group: group_pgpool2
ipaddr (ocf::heartbeat:IPaddr2): Started ext611 pgpool2 (ocf::heartbeat:pgpool): Started ext611
3. アクティブノードでのリソース稼働状況の確認 (ext611)
# ip addr show eth1 | grep 133.137.176.217
inet 133.137.176.217/23 brd 133.137.177.255 scope global secondary eth1 # pstree | grep postgres
|-postgres---4*[postgres] # pstree | grep pgpool |-pgpool---34*[pgpool]
4. スタンバイノードでのリソース稼働状況の確認 (ext612)
# ip addr show eth1 | grep 133.137.176.217 # pstree | grep postgres
# su – postgres $ export PGHOST=133.137.176.217 $ export PGPORT=9999 $ pgbench -i $ pgbench -c 10 -t 1000 $ psql psql (9.0.4)
Type "help" for help.
postgres=# SELECT COUNT(*) FROM pgbench_accounts; count ---100000 (1 row)
6.5.4 障害時のリソース稼働状況
アクティブノードに障害(Heartbeat の停止で代用)が発生した場合に、スタンバイノードにフェイ ルオーバーし、継続して pgpool および PostgreSQL が利用できることを確認しました。 以下に作業手順を示します。(カッコ内は作業対象のマシンを表します) 1. アクティブノードの Heartbeat を停止 (ext611)# service heartbeat stop
Stopping High-Availability services: Done.
2. リソースの稼働状況の確認 (ext611)
# ip addr show eth1 | grep 133.137.176.217 # pstree | grep pgpool
3. リソースの稼働状況の確認 (ext612)
# ip addr show eth1 | grep 133.137.176.217
inet 133.137.176.217/23 brd 133.137.177.255 scope global secondary eth1 # pstree | grep pgpool
|-pgpool---34*[pgpool] 4. PostgreSQLの動作確認 (ext611) # su – postgres $ export PGHOST=133.137.176.217 $ export PGPORT=9999 $ psql
psql (9.0.4)
Type "help" for help.
postgres=# SELECT COUNT(*) FROM pgbench_accounts; count
100000 (1 row)
7 まとめ
Power System 上の Red Hat Enterprise Linux 6 (ppc64) で PostgreSQL と Linux-HA + DRBD の簡単 な動作検証を行いました。その結果、期待される通りの動作を確認できました。同様に、pgpool-II と Linux-HAの動作検証についても、期待される通りの動作を確認できました。
DRBD については、ソースコードへのパッチの適用が必要でしたが、それ以外については、ppc64 での固有の問題や、他アーキテクチャと比較して、設定や手順に特に差異はありませんでした。 なお、本検証で作成し、動作確認をした rpm ファイルは SRA OSS, Inc. 日本支社の Web サイトで公 開しています。