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 まとめ...21
1 はじめに 本書は 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) を作成しました ホスト名 OS メモリ ディスク クラスタノード 1 ext611 RHEL6(ppc64) 8GB 214.7GB クラスタノード 2 ext612 RHEL6(ppc64) 8GB 214.7GB
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 参照 ) ext611 eth1 ext612 eth1 仮想 IP PostgreSQL DRBD Pacemaker Heartbeat データの同期 eth2 死活監視 eth2 仮想 IP PostgreSQL DRBD Pacemaker Heartbeat フェールオーバー データ領域 データ領域 図 1: PostgreSQL のクラスタ環境
そして pgpool-ii のクラスタリングも同様に Heartbeat と Pacemaker を組み合わせて 2 台のサー バ (ext611 ext612) にクラスタ環境を構築し IP アドレス pgpool-ii を Pacemaker の制御対象リソー スとして定義しました ( 図 2 参照 ) ext611 eth1 ext612 eth1 仮想 IP pgpool-ii Pacemaker Heartbeat PostgreSQL 死活監視 eth2 仮想 IP pgpool-ii Pacemaker Heartbeat フェールオーバー データ領域 図 2:pgpool-II のクラスタ環境 pgpool-ii のクラスタリングは 本来的には 複数の PostgrSQL サーバを束ねる pgpool-ii が単一障 害点とならないようにする目的で行われることが多いのですが ここでは対象の PostgreSQL は一つだ けとしています 3.2 検証項目 以下にあげる項目について検証を実施しました 3.2.1 Linux-HA の動作検証 ビルド : RPM の作成 インストール 動作テスト リソースの定義 障害発生時のフェイルオーバー
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 2 http://bugzilla-attachments.gnome.org/attachment.cgi?id=158740
また RPM パッケージの作成時に以下のパッケージが必要となったため CD-ROM または Red Hat CUSTOMER PORTAL より取得し インストールしました e2fsprogs e2fsprogs-devel e2fsprogs-libs file-devel help2man libcom_err libcom_err-devel libibverbs libibverbs-devel libmthca librdmacm librdmacm-devel libss libtool-ltdl-devel libuuid-devel lm_sensors-devel lm_sensors-libs net-snmp net-snmp-devel net-snmp-libs openhpi-devel openhpi-libs OpenIPMI OpenIPMI-devel OpenIPMI-libs perl-timedate postgresql postgresql-contrib postgresql-docs postgresql-libs postgresql-server PyXML rpm-devel tcp_wrappers-devel uuid 4.1.2 RPM パッケージのインストール ソース RPM より作成された以下の RPM パッケージをインストールしました cluster-glue-1.0.7-1.1.el6.ppc64.rpm cluster-glue-libs-1.0.7-1.1.el6.ppc64.rpm cluster-glue-libs-devel-1.0.7-1.1.el6.ppc64.rpm heartbeat-3.0.5-1.1.el6.ppc64.rpm heartbeat-devel-3.0.5-1.1.el6.ppc64.rpm heartbeat-libs-3.0.5-1.1.el6.ppc64.rpm ldirectord-3.9.2-1.1.el6.ppc64.rpm libesmtp-1.0.4-5.el6.ppc64.rpm libesmtp-devel-1.0.4-5.el6.ppc64.rpm pacemaker-1.0.11-1.2.el6.ppc64.rpm pacemaker-libs-1.0.11-1.2.el6.ppc64.rpm pacemaker-libs-devel-1.0.11-1.2.el6.ppc64.rpm pacemaker-mgmt-2.0-1.el6.ppc64.rpm pacemaker-mgmt-client-2.0-1.el6.ppc64.rpm pacemaker-mgmt-devel-2.0-1.el6.ppc64.rpm resource-agents-3.9.2-1.1.el6.ppc64.rpm
4.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) 2. リソースの稼働状況の確認 (ext612)
# 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 0:r0 SyncSource Primary/Secondary UpToDate/Inconsistent C r----- [===================>] sync'ed:100.0% (0/142908)M
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.16 respawn 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 \ stonith-enabled="false" # DRBD の設定
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 ipaddr (ocf::heartbeat:ipaddr2): Started ext611 mnt_drbd0 (ocf::heartbeat:filesystem): Started ext611 pgsql (ocf::heartbeat:pgsql): Started ext611
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 location location_group_pgpool2 group_pgpool2 inf: ext611
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 # pstree grep pgpool 5. pgbench の実行 (ext611)
# 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 サイトで公 開しています http://www.sraoss.co.jp/prod_serv/support/pgsql-mainte-packages.php