※DRBDはLINBIT Information Technologies GmbHの登録商標です。

【入門】
PostgreSQL＋Pacemaker＋DRBDで高可用性構成を構築してみよう
オープンソースカンファレンス2014 Nagoya
2014年7月4日(金)SRA OSS, Inc. 日本支社
松坂 大地
matsusaka@sraoss.co.jp

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

1

はじめに
 どのような人に聞いてほしいか PostgreSQLを使っている人 PostgreSQLの可用性を上げたいと思っている人 可用性構成は難しそうだと思っている人 PostgreSQLの高可用性構成の構築手順を説明
 インストールについては概要だけにしておく とりあえず＝細かいことは置いておく

45分ということでスプリットブレイン、STONITHなど

 Pacemaker、HeartbeatについてはLinux-HA Japan Project、
DRBDについてはサードウェアにも話を聞こう PostgreSQLについてはSRA OSSも忘れないで リソース設定と動作デモ

 PostgreSQL+DRBD+Pacemaker構成の必要最低限の設定
 フェイルオーバなどの動作を確認
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

2高可用性とは システムをいかに止めずに動かし続けられるかの度合
い＝可用性が高いこと
 HA＝High Availabilityとも言う 可用性は稼働率や停止時間で計られるカーネルのアップデートでサー
バを再起動
0：00

サーバの障害に気づいて復旧を開始
12：00

サーバの障害が発生

24：00

サーバの復旧が完了

 稼働率は÷（＋）＝18÷（18＋6）＝75％
 停止時間は＝6時間／日≒91.25日／年
 日単位の停止時間を年単位に換算するのには無理があるがCopyright © 2014 SRA OSS, Inc. Japan All rights reserved.

3

PostgreSQLのHA構成

PostgreSQL高可用性構成の選択肢とトレンド
http://www.sraoss.co.jp/event_seminar/2013/20130212_pgha_seminar_sraoss.pdf
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

4

PostgreSQL＋Pacemaker＋DRBDで高可用性構成を構築してみよう

PacemakerとはCopyright © 2014 SRA OSS, Inc. Japan All rights reserved.

5

Pacemakerとは（1）Pacemaker誕生
 Heatbeatのリソース制御部分が独立
 Heartbeat
HAクラスタにおいて連結した複数サーバの死活監視を行う
ソフトウェア クラスタ制御
HAクラスタのノードを管理「ハートビート」と呼ばれるパケットを送信し死活監視Heartbeat 2.x
クラスタ制御リソース制御クライアント
アクセス

仮想 IP
稼動サーバ
Heartbeat

死活
監視

待機サーバ
Heartbeat リソース制御
Heartbeat 3.x
Activeなノードにて定義されたリソースを有効化
クラスタ制御Pacemaker

PostgreSQL

リソース制御Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

ファイルシステム

仮想IP
6Pacemakerとは（2）Pacemakerの構造
 広義の意味でのPacemaker Pacemaker と Heartbeat3 を使った構成をPacemakerと呼ぶ
Pacemaker
Pacemaker
Resource agents

リソース制御Cluster glue

共通
コンポーネント

Heartbeat

クラスタ制御Pacemaker
Pacemaker

リソース制御Resource agents
Cluster glue

共通
コンポーネント

Corosync

クラスタ制御 Heartbeat3の代わりにCorosyncを使う構成もある
 OpenAISのクラスタ制御部分⇒ 本日はHeatbeat3でのお話
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

7

PostgreSQL＋Pacemaker＋DRBDで高可用性構成を構築してみよう

DRBDとはCopyright © 2014 SRA OSS, Inc. Japan All rights reserved.

8

DRBDとは
 DRBDとは ネットワーク越しにHDDのミラーリングを行うソフトウェア
 ブロックデバイス（/dev/sda1など）の変更内容をミラーリング
稼動サーバ
データ書き込み

待機サーバ

ページキャッシュ
ファイルシステム

DRBD
ディスク

TCP/IPDRBD

TCP/IPディスク

 稼働サーバへの変更をTCP/IP経由でミラーリング
 ネットワークを介したRAID１のようなもの
 待機サーバではマウントできない
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

9

PostgreSQL＋Pacemaker＋DRBDで高可用性構成を構築してみよう

構成例

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

10ソフトウェア構成図
 PostgreSQL＋Pacemaker＋DRBD
SQL

クライアントACT

SBY

Pacemaker
HeartbeatPostgreSQL
DRBD

仮想IP切替ハートビート

Pacemaker
HeartbeatPostgreSQLDRBD$PGDATA$PGDATA

レプリケーション

 DRBDは同期モードでレプリケーション
 DRBDデバイス上にファイルシステムを作成しPostgreSQLデータベースクラスタを作成
 Pacemakerが全てのリソースを監視
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

11リソース構成図
 PostgreSQL＋Pacemaker＋DRBD
ACT

pgsql
IPaddr2
Filesystem

pgsql
IPaddr2
Filesystem

drbd

SBY

drbd
レプリケーション

 ４つのリソースは全て同じノードで起動するよう定義

IPaddr2
pgsql
Filesystem
drbd: 仮想IPアドレスの監視／付与／剥奪: PostgreSQLサーバの監視／起動／停止: ファイルシステムの監視／マウント／アンマウント: DRBDの監視／稼働ノード切り替え／起動／停止

 いずれかに障害が発生するとPacemakerがそれを検知して、全てのサービスをSBYへ切り替えることでサービスを継続
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

12

PostgreSQL＋Pacemaker＋DRBDで高可用性構成を構築してみよう

インストール
細かい説明は割愛します

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

13

PostgreSQLのインストール

ACT
SBY

 PGDGのリポジトリでPostgreSQLをインストール
 PGDGとは
 PostgreSQL Global Development Group PostgreSQLの開発コミュニティ
 http://www.postgresql.org/

1. リポジトリのパッケージをインストール## yumyum -y-y installinstall http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdghttp://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdgcentos93-9.3-1.noarch.rpm
centos93-9.3-1.noarch.rpm
（省略）
（省略）
Complete!
Complete!

 CentOS 6 x64以外については以下のURLを参照
 http://yum.postgresql.org/repopackages.php

2. PostgreSQLのパッケージをインストール## yumyum -y-y groupinstallgroupinstall "PostgreSQL"PostgreSQL Database
Database Server
Server 9.3
9.3 PGDG"
PGDG"
（省略）
（省略）
Complete!
Complete!

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

14

PacemakerとHeartbeatのインストール（1）ACTLinux-HA Japanリポジトリのダウンロード

SBY

 Linux-HA JapanのローカルリポジトリでPacemakerをインストール
 Linux-HA Japanとは
 LinuxでHAクラスタを実現するソフトに関する日本のコミュニティ
 http://linux-ha.sourceforge.jp/

1. ローカルリポジトリをダウンロード「最新リリース情報」からOSに応じた「Pacemakerリポジ
トリパッケージ」を選ぶ



メニューの「ダウンロード＆インストール」から「LINUXHA JAPAN提供パッケージ
一覧」を選ぶRHEL 6系 x64

pacemaker-1.0.13-1.2.el6.x86_64.repo.tar.gz

RHEL 6系 x86

pacemaker-1.0.13-1.2.el6.i686.repo.tar.gz

RHEL 5系 x64

pacemaker-1.0.13-1.2.el5.x86_64.repo.tar.gz

RHEL 5系 x86

pacemaker-1.0.13-1.2.el5.i386.repo.tar.gz

OSのアーキテクチャに応じたローカルリポジトリのファ
イルを選んでダウンロード

15

PacemakerとHeartbeatのインストール（2）Linux-HA Japanリポジトリの設定

ACT
SBY

2. ローカルリポジトリを/tmpディレクトリに展開## cd
cd /tmp/tmp## tartar -xzf-xzf ~/Downloads/pacemaker-1.0.13-1.2.el6.x86_64.repo.tar.gz~/Downloads/pacemaker-1.0.13-1.2.el6.x86_64.repo.tar.gz

 ほかのディレクトリに展開した場合には、展開先のディレクトリ
に合わせてリポジトリの設定を変更## vimvim ./pacemaker-1.0.13-1.2.el6.x86_64.repo/pacemaker.repo./pacemaker-1.0.13-1.2.el6.x86_64.repo/pacemaker.repo[pacemaker][pacemaker]
name=pacemaker
name=pacemakerbaseurl=file:///tmp/pacemaker-1.0.13-1.2.el6.x86_64.repo/
baseurl=file:///tmp/pacemaker-1.0.13-1.2.el6.x86_64.repo/

3. OS標準のリポジトリからPacemaker関連のパッケージがインストールされないようにリポジトリの設定を変更## vimvim /etc/yum.repos.d/CentOS-Base.repo/etc/yum.repos.d/CentOS-Base.repo[base][base]（省略）（省略）
exclude=cluster-glue*
exclude=cluster-glue* corosync*
corosync* pacemaker*
pacemaker* resource-agents*
resource-agents*[updates][updates]（省略）（省略）
exclude=cluster-glue*
exclude=cluster-glue* corosync*
corosync* pacemaker*
pacemaker* resource-agents*
resource-agents*

PacemakerとHeartbeatのインストール（3）PacemakerとHeartbeatパッケージのインストール

ACT
SBY

4. PacemakerとHeartbeatのパッケージをインストール## cd
cd /tmp/pacemaker-1.0.13-1.2.el6.x86_64.repo/tmp/pacemaker-1.0.13-1.2.el6.x86_64.repo## yumyum -c-c pacemaker.repo
pacemaker.repo -y-y installinstall pacemakerpacemaker heartbeat
heartbeat（省略）（省略）Complete!
Complete!

 リポジトリに含まれるそのほかのパッケージ
パッケージ名説明
Excelなどの表計算ソフトで編集したCSVファイルからPacemakerの設定ファイルを生成するツール
ディスクにアクセスして読み取りを行うことでディスクの監視を行うリ
ソースエージェント

pm_crmgen
pm_diskd

pm_extras

NetVault Backupクライアント用のリソースエージェント（NVclient）、仮想IPアドレスの排他制御によるスプリットブレイン防止用のリソースエー
ジェント（VIPcheck）、ハートビート通信用のネットワークインタフェースの状態を表示する機能（ifcheckd）、STONITH実行時に停止するノードを判断するSTONITHモジュール（stonith-helper）

pm_kvm_tools

KVM上のPacemakerと仮想マシン上のPacemakerを連携する機能

pm_logconv-hb Pacemaker、Heartbeatのログメッセージを読みやすく変換する機能
vm-ctl仮想マシンリソースを制御するツール
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

17

DRBDのインストール（1）ELRepoリポジトリの設定

ACT
SBY

 ELRepoのリポジトリでDRBDをインストール
 ELRepoとは
 RHEL系のOS向けに標準でないパッケージを提供するプロジェクト
 http://elrepo.org/

1. 公開キーをインポート## rpmrpm --import--import http://www.elrepo.org/RPM-GPG-KEY-elrepo.org
http://www.elrepo.org/RPM-GPG-KEY-elrepo.org

 パッケージの署名をチェックするのに使う

2. リポジトリのパッケージをインストール## rpmrpm -ivh-ivh http://www.elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm
http://www.elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm
http://www.elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm
http://www.elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm を取得中
を取得中
準備中...
###########################################
準備中...
########################################### [100%][100%]
1:elrepo-release###########################################
1:elrepo-release########################################### [100%][100%]RHEL 6系

elrepo-release-6-6.el6.elrepo.noarch.rpm

RHEL 5系

elrepo-release-5-5.el5.elrepo.noarch.rpm

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

18

DRBDのインストール（2）ACTDRBDパッケージのインストール

SBY

3. DRBDのパッケージをインストール## yumyum -y-y kmod-drbd84
kmod-drbd84 drbd84-utils
drbd84-utils
（省略）
（省略）
Complete!
Complete!

4. DRBDはPacemakerによって起動されるので、OSの起動時に自動的に起動されないように設定を変更## chkconfig
chkconfig drbd
drbd off
off$$ chkconfig--listchkconfig --list drbd
drbd
drbd
0:off
drbd
0:off 1:off
1:off

2:off
2:off

3:off
3:off

4:off
4:off

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

5:off
5:off

6:off
6:off

19

PostgreSQL＋Pacemaker＋DRBDで高可用性構成を構築してみよう

OSの設定
細かい説明は割愛します

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

20

OSの設定（1）ACT

ファイアウォールの設定

SBY

 PostgreSQL、Heartbeat、DRBD サービス名 ポート
PostgreSQL 5432
で使うポートを開く
Heartbeat694

TCP

1. ファイアウォールの設定を行う

TCP

DRBD

7788

プロトコル
UDP

## vimvim /etc/sysconfig/iptables/etc/sysconfig/iptables-A-A INPUTINPUT -p-p icmp
icmp -j-j ACCEPTACCEPT-A-A INPUTINPUT -i
-i lo
lo -j
-j ACCEPTACCEPT
-A
INPUT
-m
state
--state-A INPUT -m state --state NEW
NEW -m-m tcptcp -p-p tcptcp --dport--dport 22
22 -j-j ACCEPTACCEPT-A-A INPUTINPUT -m-m statestate --state--state NEW
NEW -m-m tcptcp -p-p tcptcp --dport--dport 5432
5432 -j-j ACCEPTACCEPT-A-A INPUTINPUT -m-m statestate --state--state NEW
NEW -m-m udpudp -p-p udpudp --dport--dport 694
694 -j-j ACCEPTACCEPT
-A
INPUT
-m
state
--state
NEW
-m
tcp
-p
tcp
--dport7788-j-A INPUT -m state --state NEW -m tcp -p tcp --dport 7788 -j ACCEPTACCEPT-A-A INPUTINPUT -j
-j REJECTREJECT --reject-with--reject-with icmp-host-prohibited
icmp-host-prohibited-A
FORWARD-j
REJECT--reject-with-A FORWARD -j REJECT --reject-with icmp-host-prohibited
icmp-host-prohibited
COMMIT
COMMIT

2. ファイアウォールを再起動## service
service iptables
iptables restart
restartiptables:
iptables: ファイアウォールルールを消去中:
ファイアウォールルールを消去中:
iptables:
iptables: チェインをポリシー
チェインをポリシー ACCEPTACCEPT へ設定中filter
へ設定中filter
iptables:
iptables: モジュールを取り外し中:モジュールを取り外し中:
iptables:ファイアウォールルールを適用中:
iptables: ファイアウォールルールを適用中:
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

直接ファイルを編集せずに
system-config-firewallを使ってもOK

[[
[[
[[
[[

OK
OK
OK
OK
OK
OK
OK
OK

]]
]]
]]
]]
21

OSの設定（2）ACTSELinuxの設定

SBY

 SELinuxの設定は難しいので無効にする

 無効にしないと動かないわけではないが、ちゃんと設定してあげないと動かないこともある

1. SELinuxによるアクセス制御を一時的に無効にする## setenforce
setenforce 00

2. OSの起動時に完全に無効になるようにSELinuxの設定を変更## vimvim /etc/selinux/config/etc/selinux/config## SELINUX=SELINUX= cancan taketake one
one ofof these
these three
three values:
values:##enforcingenforcing -- SELinuxSELinux security
security policy
policy isis enforced.
enforced.
##permissive
SELinux
printswarnings
insteadpermissive - SELinux prints warnings instead ofof enforcing.
enforcing.
##disabled
disabled -- No
No SELinuxSELinux policy
policy isis loaded.
loaded.
SELINUX=disabled
SELINUX=disabled アクセス制御自体は無効になっているので、OSを再起動しなくてもOK

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

22

OSの設定（3）ACT

Syslogの設定

SBY

 PostgreSQL、Pacemaker、DRBDのログが専用のファイルに出力されるようにSyslog（rsyslog）の設定を行う
 Syslogの設定を行う## vimvim /etc/rsyslog.conf/etc/rsyslog.conf######## RULES
RULES ########
local0.*local0.*
&& ~~
:msg,
:msg, contains,contains, "drbd""drbd"
&& ~~
（省略）
（省略）
*.info;mail.none;authpriv.none;cron.none*.info;mail.none;authpriv.none;cron.none/var/log/ha-log/var/log/ha-log/var/log/ha-log/var/log/ha-log/var/log/messages/var/log/messages

 ファシリティがlocal0のログと「drbd」を含むログを取得

 Syslogを再起動## service
service rsyslog
rsyslog restart
restart
システムロガーを停止中:
システムロガーを停止中:
システムロガーを起動中:
システムロガーを起動中:

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

[[ OK
OK ]]
[[ OK
OK ]]

23

PostgreSQL＋Pacemaker＋DRBDで高可用性構成を構築してみよう

Heartbeatの設定
細かい説明は割愛します

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

24

Heartbeatの設定（1）

ACT

Heartbeatの設定
 テンプレートをコピーして設定ファイルを編集## cp
cp /usr/share/doc/heartbeat-3.0.5/ha.cf/usr/share/doc/heartbeat-3.0.5/ha.cf /etc/ha.d/etc/ha.d## vimvim /etc/ha.d/ha.cf/etc/ha.d/ha.cf
pacemaker
pacemaker respawn
respawn
logfacility
logfacility local0
local0#udpport#udpport 694
694
ucast
## alice
ucast eth0
eth0 192.168.137.101
192.168.137.101
alice
ucast
eth0
192.168.137.102#
bobucast eth0 192.168.137.102
# bob
node
node alice
alice
node
node bob
bob
（抜粋）
（抜粋）

 おもなパラメータ「#（番号記号）」から行末まではコメント pacemaker respawn
 Pacemakerといっしょに動かすかどうか（動かすならrespawn）を指定
 テンプレートに書かれていないのでパラメータ自体を追加

 log_facility local0
 Syslogファシリティを指定

 udpport 694
 ハートビート通信に使うポートを指定
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

25

Heartbeatの設定（2）

ACT

Heartbeatのおもなパラメータ おもなパラメータ（続き）

 ucast eth0 192.168.137.101
ucast eth0 192.168.137.102# alice# bob

 ユニキャストによるハートビート通信の設定としてデバイスと相手のIPア
ドレスを指定 自分のIPアドレスを指定する必要はないが、ノード間で設定ファイルを同じにしておいたほうが管理しやすい マルチキャスト（mcast）、ブロードキャスト（bcast）でも指定できる

 node alicenode bob クラスタに加えるノードを指定 ノード名は「uname -n」で返ってくるホスト名と同じでなければならない

 そのほかのパラメータについてはテンプレートのコメント
や「man ha.cf」でマニュアルを参照

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

26

Heartbeatの設定（3）

認証用キーの設定

ACT

 ハートビート通信でノードの認証に使うキーの設定を行う
1. 認証用キーファイルのテンプレートをコピー## cp
cp /usr/share/doc/heartbeat-3.0.5/authkeys/usr/share/doc/heartbeat-3.0.5/authkeys /etc/ha.d/etc/ha.d2.rootユーザにしか読めないようにアクセス権を変更## chmodchmod 0600
0600 /etc/ha.d/authkeys/etc/ha.d/authkeys

3. 認証用キーファイルを編集## vimvim /etc/ha.d/authkeys/etc/ha.d/authkeysauthauth 1111 sha1
sha1 1d55b4aa7fe26469aee71baacd6f8e26e51b7d5c
1d55b4aa7fe26469aee71baacd6f8e26e51b7d5c

 authの後にどの設定を使うかの番号を指定
 設定には番号、ハッシュ化方式、認証用キーを指定
 認証用キーは推測しにくいものであればOK## headhead -c-c 8k
8k /dev/urandom/dev/urandom || sha1sum
sha1sum
d04675e6abdcb49913a0f94a08d760953cbd9430
d04675e6abdcb49913a0f94a08d760953cbd9430 -Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

27

Heartbeatの設定（4）Heartbeatの起動
 設定ファイルを待機系ノードにコピーし、両方のノードでHeartbeatを起動
ACT

ACT
SBY

## scpscp /etc/ha.d/ha.cf/etc/ha.d/ha.cf /etc/ha.d/authkeys/etc/ha.d/authkeys bob:/etc/ha.dbob:/etc/ha.droot@bob's
root@bob's password:
password: （パスワードを入力）（パスワードを入力）
ha.cf
100%
ha.cf
100% 10KB
10KB 10.4KB/s
10.4KB/s
authkeys
100%
0.7KB/sauthkeys
100% 700
700
0.7KB/s

00:00
00:00
00:00
00:00

## service
service heartbeat
heartbeat start
start
Starting
Starting High-Availability
High-Availability services:
services: Done.
Done.

 Heartbeatが起動していることを確認
ACT## crm_mon
crm_monVersion:
しばらく待って「Online」のVersion: 1.0.13-30bb726
1.0.13-30bb726
後にすべてのノードが表示
22 Nodesexpected
Nodes configured,configured, unknown
unknown
expected votes
votes
されればOK
00 Resources
configured.
Resources configured.
========================
Online:Online: [[ alice
alice bobbob ]]（Ctrl＋Cで終了）（Ctrl＋Cで終了）
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

28

PostgreSQL＋Pacemaker＋DRBDで高可用性構成を構築してみよう

DRBDの設定
細かい説明は割愛します

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

29

DRBDの設定（1）DRBD用パーティションの準備

ACT
SBY

 DRBD用のパーティションを準備 ディスクまたはパーティション（/dev/sdb1など）
 とりあえず試してみたいだけなら、ループバックデバイス（/dev/loop0など）でもOK## mkdirmkdir /srv/images/srv/images## dd
dd if=/dev/zero
if=/dev/zero of=/srv/images/pgsql-data.img
of=/srv/images/pgsql-data.img bs=1M
bs=1M count=1024
count=1024
1024+01024+0 records
records inin
1024+0recordsout
1024+0 records out
1073741824
1073741824 bytes
bytes (1.1
(1.1 GB)GB) copied,copied, 5.30452
5.30452 s,
s, 202202 MB/s
MB/s## losetup
losetup /dev/loop0/dev/loop0 /srv/images/pgsql-data.img/srv/images/pgsql-data.img## vim/etc/rc.local
vim /etc/rc.local
touch
touch /var/lock/subsys/local/var/lock/subsys/local
losetuplosetup /dev/loop0/dev/loop0 /srv/images/pgsql-data.img/srv/images/pgsql-data.img

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

30

DRBDの設定（2）ACT

DRBDリソースの設定

 DRBDリソースの設定ファイルを作成し、待機系ノードにコピー## vimvim /etc/drbd.d/pgsql.res/etc/drbd.d/pgsql.res
resource
resource pgsql
pgsql {{
protocolprotocol C;C;meta-disk
meta-disk internal;
internal;
disk
disk {{
resync-rate
resync-rate 40M;
40M;
}}
on
on alice
alice {{
devicedevice /dev/drbd0;/dev/drbd0;
disk
disk /dev/loop0;/dev/loop0;
address
address 192.168.137.101:7788;
192.168.137.101:7788;}}
on
on bobbob {{
devicedevice /dev/drbd0;/dev/drbd0;
disk
disk /dev/loop0;/dev/loop0;
address
address 192.168.137.102:7788;
192.168.137.102:7788;}}}}## scpscp /etc/drbd.d/pgsql.res/etc/drbd.d/pgsql.res bob:/etc/drbd.d
bob:/etc/drbd.d
root@bob's
root@bob's password:
password: （パスワードを入力）（パスワードを入力）
pgsql.res100%pgsql.res
100% 321
321

0.3KB/s
0.3KB/s

00:00
00:00

DRBDの設定（3）DRBDリソースの起動とデータの初期同期
 メタデータを作成し、DRBDリソースを起動
ACT
SBY## drbdadm
drbdadm create-md
create-md pgsql
pgsql
Writing
Writing meta
meta data...
data...
initializing
initializing activity
activity log
log
NOTinitializing
bitmap
NOT initializing bitmap
New
New drbd
drbd meta
meta data
data block
block successfully
successfully created.
created.
success
success## drbdadm
drbdadm up
up pgsql
pgsql

 データの初期同期を行う
ACT## drbdadm
drbdadm disk-options
disk-options --resync-rate=110M--resync-rate=110M pgsql
pgsql## drbd-overview
drbd-overview
0:pgsql/0
0:pgsql/0 Connected
Connected Secondary/Secondary
Secondary/Secondary Inconsistent/Inconsistent
Inconsistent/Inconsistent CC
r----r----## drbdadm
drbdadm primaryprimary --force--force pgsql
pgsql## drbd-overview
drbd-overview
0:pgsql/0
0:pgsql/0 SyncSource
SyncSource Primary/Secondary
Primary/Secondary UpToDate/Inconsistent
UpToDate/Inconsistent CC r----r----[=========>..........]
sync'ed:50.4%(524092/1048508)K[=========>..........] sync'ed: 50.4% (524092/1048508)K## drbd-overview
drbd-overview
0:pgsql/0
0:pgsql/0 Connected
Connected Primary/Secondary
Primary/Secondary UpToDate/UpToDate
UpToDate/UpToDate CC r----r----## drbdadm
adjustpgsql
drbdadm adjust pgsql

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

32

DRBDの設定（4）ファイルシステムの作成とマウント

ACT

 DRBDデバイスにファイルシステムを作成し、マウント## mkfs.ext4
mkfs.ext4 /dev/drbd0/dev/drbd0
mke2fsmke2fs 1.41.12
1.41.12 (17-May-2010)(17-May-2010)
Discarding
Discarding device
device blocks:
blocks: done
done
Filesystemlabel=
Filesystem label=
（省略）
（省略）
This
This filesystemfilesystem will
will bebe automaticallyautomatically checked
checked every
every 21
21 mounts
mounts oror
180
180 days,days, whichever
whichever comes
comes first.
first. Use
Use tune2fs
tune2fs -c
-c or
or -i
-i to
to override.
override.
## mkdirmkdir /mnt/pgsql-data/mnt/pgsql-data## mount-t
mount -t ext4
ext4 /dev/drbd0/dev/drbd0 /mnt/pgsql-data/mnt/pgsql-data## df
df
Filesystem
1K-ブロック
使用
Filesystem
1K-ブロック
使用 使用可使用可 使用%使用% マウント位置
マウント位置/dev/mapper/VolGroup-lv_root/dev/mapper/VolGroup-lv_root
14006192
14006192 5254108
5254108 8040612
8040612 40%
40% //
tmpfs
50620872506136
tmpfs
50620872506136 1%
1% /dev/shm/dev/shm/dev/sda149584473912
396332/dev/sda149584473912
396332 16%
16% /boot/boot/dev/drbd0103202017668
961928/dev/drbd0103202017668
961928 2%
2% /mnt/pgsql-data/mnt/pgsql-data

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

33

PostgreSQL＋Pacemaker＋DRBDで高可用性構成を構築してみよう

PostgreSQLの設定
細かい説明は割愛します

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

34

PostgreSQLの設定（1）

ACT

データベースクラスタの作成

 DRBDデバイス上のファイルシステムにデータベースク
ラスタを作成## mkdirmkdir /mnt/pgsql-data/data/mnt/pgsql-data/data## chmodchmod 0700
0700 /mnt/pgsql-data/data/mnt/pgsql-data/data## chown
postgres:postgres
chown postgres:postgres /mnt/pgsql-data/data/mnt/pgsql-data/data## susu –– postgres
postgres$$ /usr/pgsql-9.3/bin/initdb/usr/pgsql-9.3/bin/initdb -A-A md5md5 -D-D /mnt/pgsql-data/data/mnt/pgsql-data/data -E-E UTF8
UTF8 \\>>--locale=C--locale=C -W
-W
（省略）
（省略）
新しいスーパーユーザのパスワードを入力してください:
新しいスーパーユーザのパスワードを入力してください: （パスワードを入力）（パスワードを入力）
再入力してください:
再入力してください: （もう一度パスワードを入力）（もう一度パスワードを入力）
（省略）
（省略）
成功しました。以下を使用してデータベースサーバを起動することができます。
成功しました。以下を使用してデータベースサーバを起動することができます。
/usr/pgsql-9.3/bin/postmaster/usr/pgsql-9.3/bin/postmaster -D-D /mnt/pgsql-data/data/mnt/pgsql-data/data
またはまたは/usr/pgsql-9.3/bin/pg_ctl/usr/pgsql-9.3/bin/pg_ctl -D-D /mnt/pgsql-data/data/mnt/pgsql-data/data -l-l logfile
logfile start
start
$$ ls
ls /mnt/pgsql-data/data/mnt/pgsql-data/data
PG_VERSIONPG_VERSION pg_hba.conf
pg_hba.confbase
pg_ident.confbase
pg_ident.conf
globalpg_multixact
globalpg_multixact
pg_clog
pg_notify
pg_clog
pg_notify

pg_serial
pg_serial
pg_snapshots
pg_snapshots
pg_stat
pg_stat
pg_stat_tmp
pg_stat_tmp

pg_subtranspg_subtrans postgresql.conf
postgresql.conf
pg_tblspc
pg_tblspc
pg_twophase
pg_twophase
pg_xlog
pg_xlog

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

35

PostgreSQLの設定（2）

ACT

PostgreSQLの設定

 リモートホストからの接続を監視し、Syslogでログを取得するようにPostgreSQLの設定を変更$$ vimvim /mnt/pgsql-data/data/postgresql.conf/mnt/pgsql-data/data/postgresql.conf
listen_addresses## whatlisten_addresses == '*''*'what IPIP address(es)address(es) toto listenlisten on;
on;
#port
## (change#port == 5432
5432
(change requires
requires restart)
restart)log_destination## Valid
log_destination == 'syslog''syslog'
Valid values
values areare combinations
combinations ofoflogging_collector## Enable
logging_collector == off
off
Enable capturing
capturing ofof stderr
stderr andand csvlog
csvlog#syslog_facility#syslog_facility == 'LOCAL0''LOCAL0'
log_line_prefix=''## special
log_line_prefix = ''special values:
values:（抜粋）（抜粋）

 同じネットワーク内から接続できるようにクライアント認証の設定を変更$$ vimvim /mnt/pgsql-data/data/pg_hba.conf/mnt/pgsql-data/data/pg_hba.conf## TYPEUSER
TYPE DATABASEDATABASE
USER
host
all
all
host
all
all

ADDRESSADDRESS
192.168.137.0/24
192.168.137.0/24## "local""local" isis forfor Unix
Unix domain
domain socket
socket connections
connections only
only
local
all
all
local
all
all

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

METHODMETHOD
md5
md5
md5
md5

36

PostgreSQLの設定（3）PostgreSQLの起動と停止

ACT

 PostgreSQLを起動し、ネットワーク越しに接続できることを確認し、停止$$ /usr/pgsql-9.3/bin/pg_ctl/usr/pgsql-9.3/bin/pg_ctl start
start -w
-w -D
-D /mnt/pgsql-data/data/mnt/pgsql-data/data
サーバの起動完了を待っています....LOG:
サーバの起動完了を待っています....LOG: ending
ending log
log output
output to
to stderr
stderrHINT:
Futurelog
output
will
go
to
log
destination"syslog".
HINT: Future log output will go to log destination "syslog".
完了
完了
サーバ起動完了
サーバ起動完了$$ psql
psql -h-h alicealice
パスワード:
パスワード: （パスワードを入力）（パスワードを入力）
psql
psql (9.3.3)(9.3.3)"help""help" でヘルプを表示します.
でヘルプを表示します.
=#
=# \q
\q
$$ /usr/pgsql-9.3/bin/pg_ctl/usr/pgsql-9.3/bin/pg_ctl stop
stop -D-D /mnt/pgsql-data/data/mnt/pgsql-data/data
サーバ停止処理の完了を待っています....完了
サーバ停止処理の完了を待っています....完了
サーバは停止しました
サーバは停止しました$$ exitexit

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

37

ACT pgsql

pgsql SBY
IPaddr2
Filesystem

IPaddr2
Filesystem
drbd

drbd
レプリケーション

PostgreSQL＋Pacemaker＋DRBDで高可用性構成を構築してみよう

Pacemakerの設定

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

38

Pacemakerの設定（1）

ACT

リソース全体の設定
 Pacemakerとリソースのデフォルト値の設定
 ファイルに記述してcrmコマンドで読み込む## vimvim pgsql.crm
pgsql.crm
property
property \\no-quorum-policy="ignore"
no-quorum-policy="ignore" \\stonith-enabled="false"
stonith-enabled="false" \\startup-fencing="false"startup-fencing="false"

no-quorum-policy
HAクラスタに参加しているノードの過半数のノードとハートビート通信できない場合のポリシー
2台構成ではignoreを指定する必要がある
stonith-enabled
STONITH機能を有効にするか

rsc_defaults
rsc_defaults \\resource-stickiness="INFINITY"
resource-stickiness="INFINITY" \\migration-threshold="2"
migration-threshold="2" \\failure-timeout="60s"
failure-timeout="60s"

startup-fencing
Paemaker起動時に相手が確認できない場合相手をフェンシングするか（次のページに続く）（次のページに続く）

resource-stickness
自動フェイルバックの設定（無効：INFINITY, 有効：1）
migration-threshold
フェイルオーバーを実行するリソース故障検知数（フェイルオーバしない：0）
failure-timeout
リソース故障判定のデフォルトタイムアウト時間

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

39

Pacemakerの設定（2）ACT

DRBDリソースの設定
 「primitiveリソース」

ACT

SBY

 すべてのリソースの最小単位
drbd
drbd
 クラスタ全体のうち1ノードのみで動作させるリソースを定義 リソースの設定オプションは「crm ra info リソース名」で確認

 DRBDリソース
primitive
primitive drbd
drbd ocf:linbit:drbd
ocf:linbit:drbd \\paramsparams \\drbd_resource="pgsql"
drbd_resource="pgsql" \\op
op start
start timeout="240s"
timeout="240s" \\op
op stopstop timeout="100s"
timeout="100s" \\op
op monitor
monitor interval="10s"interval="10s" timeout="20s"timeout="20s" on_fail="restart"
on_fail="restart" role="Master"\role="Master"\op
op monitor
monitor interval="20s"interval="20s" timeout="20s"timeout="20s" on_fail="restart"
on_fail="restart" role="Slave"role="Slave" \\op
op promote
promote timeout="90s"timeout="90s" \\op
op demotedemote timeout="90s"timeout="90s"（次のページに続く）（次のページに続く）

 op には各監視項目の設定を記述
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

40

Pacemakerの設定（3）ACT

マスタスレーブリソースの設定
 「master/slaveリソース」
 稼働系と待機系の状態がある
リソースはprimitiveリソースとして定義した後にmaster/slave化する
ms
ms ms_drbd
ms_drbd drbd
drbd \\
meta
meta \\
master-max="1"master-max="1" \\master-node-max="1"master-node-max="1" \\clone-max="2"clone-max="2" \\clone-node-max="1"clone-node-max="1" \\notify="true"
notify="true"（次のページに続く）（次のページに続く）

ACT

SBY

drbd

drbd

MasterSlavemaster-max
クラスタ全体のマスタ最大数
master-node-max
ノードあたりのマスタ最大数
clone-maxprimitiveリソースをクローンする数
clone-node-max
ノードあたりのクローン最大数
notifyDRBDリソースではtrueに

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

41

Pacemakerの設定（4）ACT

リソース設定 ファイルシステムリソース
 仮想IPリソース

ACT

SBY

IPaddr2
Filesystem

IPaddr2
Filesystem

drbd

drbd

MasterSlaveprimitive
primitive filesystemfilesystem ocf:heartbeat:Filesystem
ocf:heartbeat:Filesystem \\paramsparams \\device="/dev/drbd0"
device="/dev/drbd0" \\directory="/mnt/pgsql-data"
directory="/mnt/pgsql-data" \\fstype="ext4"
fstype="ext4" \\op
op start
start timeout="60s"
timeout="60s" \\op
op stopstop timeout="60s"
timeout="60s" \\op
op monitor
monitor interval="20s"interval="20s" timeout="40s"timeout="40s" on_fail="restart"
on_fail="restart"
primitive
primitive ipaddr
ipaddr ocf:heartbeat:IPaddr2
ocf:heartbeat:IPaddr2 \\paramsparams \\ip="192.168.137.201"
ip="192.168.137.201" \\nic="eth0"
nic="eth0" \\cidr_netmask="24"
cidr_netmask="24" \\op
op start
start timeout="20s"timeout="20s" \\op
op stopstop timeout="20s"timeout="20s" \\op
op monitor
monitor interval="10s"interval="10s" timeout="20s"timeout="20s" on_fail="restart"
on_fail="restart"（次のページに続く）（次のページに続く）
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

42

Pacemakerの設定（5）

ACT

PostgreSQLグループリソース設定
 PostgreSQLリソースを作成
 グループ制約
 指定したリソースは同ノードで起動
 指定した順序で起動

ACT pgsql

IPaddr2
Filesystem

pgsql SBY
IPaddr2
Filesystem

drbd

drbd

MasterSlaveprimitive
primitive pgsql
pgsql ocf:heartbeat:pgsql
ocf:heartbeat:pgsql \\paramsparams \\pgctl="/usr/pgsql-9.3/bin/pg_ctl"
pgctl="/usr/pgsql-9.3/bin/pg_ctl" \\start_opt="-pstart_opt="-p 5432"
5432" \\
psql="/usr/bin/psql"
psql="/usr/bin/psql" \\pgdba="postgres"pgdba="postgres" \\pgdata="/mnt/pgsql-data/data"
pgdata="/mnt/pgsql-data/data" \\pgport="5432"
pgport="5432" \\monitor_user="postgres"monitor_user="postgres" \\monitor_password="password"
monitor_password="password" \\op
op start
start timeout="120s"
timeout="120s" \\op
op stopstop timeout="120s"
timeout="120s" \\op
op monitor
monitor interval="30s"interval="30s" timeout="30s"
timeout="30s" on_fail="restart"
on_fail="restart"
group
group group_pgsql
group_pgsql \\filesystemfilesystem ipaddr
ipaddr pgsql
pgsql（次のページに続く）（次のページに続く）
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

43

Pacemakerの設定（6）ACT

DRBDリソースの制約設定
 コロケーション制約

ACT pgsql

 グループリソースと
DRBDリソースのマスタが同一ノードで起動するよう設定

IPaddr2
Filesystem

pgsql SBY
IPaddr2
Filesystem

drbd

drbd

MasterSlave オーダー制約 リソースの起動順序をdrbdマスタ、グループリソースに設定
colocation
colocation group_pgsql_and_ms_drbd_mastergroup_pgsql_and_ms_drbd_master \\inf:
inf: group_pgsql
group_pgsql ms_drbd:Master
ms_drbd:Masterorder
order ms_drbd_promote_before_group_pgsql_start
ms_drbd_promote_before_group_pgsql_start \\inf:
inf: ms_drbd:promote
ms_drbd:promote group_pgsql:startgroup_pgsql:start msリソースは、グループ制約に含められないため、
上記２つの制約にて設定
 起動順序： DRBD → Filesystem → IPaddr2 → pgsql
 停止順所： 起動の逆順
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

44

Pacemakerの設定（7）ACT

設定のロード ファイルから設定をロードしてリソースを作成## crmcrm configure
configure loadload replace
replace pgsql.crm
pgsql.crm
crm_verify[2199]:
crm_verify[2199]: 2014/02/27_14:50:29
2014/02/27_14:50:29 WARN:WARN: unpack_nodes:
unpack_nodes: Blind
Blind faith:faith:
notnot fencing
fencing unseen
unseen nodes
nodes## crm_mon-r
crm_mon -r========================
Last
Last updated:
updated: Thu
Thu FebFeb 2727 14:51:25
14:51:25 2014
2014
Stack:
Heartbeat
Stack: Heartbeat
Current
Current DC:
DC: bobbob (e6cb12d9-acdc-45c7-ab3c-6f969e9d1665)(e6cb12d9-acdc-45c7-ab3c-6f969e9d1665) -- partition
partition with
with quorum
quorumVersion:
1.0.13-30bb726
Version: 1.0.13-30bb726
22 NodesNodes configured,configured, unknown
unknown expected
expected votes
votes
22 Resources
Resources configured.
configured.
========================
Online:Online: [[ alice
alice bobbob ]]
Resource
Resource Group:Group: group_pgsql
group_pgsql
filesystem(ocf::heartbeat:Filesystem):Startedfilesystem (ocf::heartbeat:Filesystem):Started bob
bob
ipaddr(ocf::heartbeat:IPaddr2):
Startedbob
ipaddr(ocf::heartbeat:IPaddr2):
Started bob
pgsql(ocf::heartbeat:pgsql):
pgsql(ocf::heartbeat:pgsql): Started
Started bobbob
Master/Slave
Master/Slave Set:
Set: ms_drbd
ms_drbd
Masters:
Masters: [[ bobbob ]]
Slaves:Slaves: [[ alice
alice ]]
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

45

PostgreSQL＋Pacemaker＋DRBDで高可用性構成を構築してみよう

デモ

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

46

構築デモ（1）PowerGres HA Pacemaker版

PowerGresでPostgreSQLの信頼性をより高めようhttp://www.sraoss.co.jp/event_seminar/2013/20131127_powergres-plus-and-ha.pdf
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

47

構築デモ（2）

ACTheartbeat設定

 PowerGres HA Pacemaker版管理ツールによる構成

 PowerGres HA Pacemaker版がインストールされた状態にてheartbeatの設定までを対話的に[root@alice[root@alice ~]#~]# pwg_clumgr
pwg_clumgr init-cluster
init-cluster
HeartbeatHeartbeat 設定ファイルを作成しています...
設定ファイルを作成しています...
syslog
ファシリティを入力してください
syslog ファシリティを入力してください (local0(local0 -- local7)
local7) [local0]:[local0]:
ノードを追加しています...
ノードを追加しています...
ノード名を入力してください
ノード名を入力してください ("."("." でキャンセルします):でキャンセルします): alice
alice
ノードの追加を継続しますか
ノードの追加を継続しますか (y/n)(y/n) [y]:[y]:ノード名を入力してください
ノード名を入力してください ("."("." でキャンセルします):でキャンセルします): bob
bob
ノードの追加を継続しますか
(y/n)
[y]:
n
ノードの追加を継続しますか (y/n) [y]: n
SSH
SSH 鍵を作成しています...
鍵を作成しています...
パスフレーズを入力してください
パスフレーズを入力してください (パスフレーズなしにするには空にしてください):(パスフレーズなしにするには空にしてください):
同じパスフレーズを再度入力してください:
同じパスフレーズを再度入力してください:
SSH
SSH 鍵をコピーしています...
鍵をコピーしています...
(省略)
(省略)
コミュニケーションパスを追加しています...
コミュニケーションパスを追加しています...
ネットワークインタフェース名を入力してください
ネットワークインタフェース名を入力してください ("."("." でキャンセルします)でキャンセルします) [eth0]:[eth0]:
コミュニケーションパスの追加を継続しますか
コミュニケーションパスの追加を継続しますか (y/n)(y/n) [y]:[y]: yy
ネットワークインタフェース名を入力してください
ネットワークインタフェース名を入力してください ("."("." でキャンセルします)でキャンセルします) [eth1]:[eth1]:
コミュニケーションパスの追加を継続しますか
コミュニケーションパスの追加を継続しますか (y/n)(y/n) [y]:[y]: nn
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

48

構築デモ（3）ACTheartbeat設定========================
Last
Last updated:
updated: Tue
Tue JunJun 1717 17:03:24
17:03:24 2014
2014
Stack:
Stack: Heartbeat
HeartbeatCurrent
Current DC:
DC: bobbob (cef37169-ad1a-4b63-ad9b-b915b7c890be)(cef37169-ad1a-4b63-ad9b-b915b7c890be) -- partition
partition with
withquorumquorumVersion:Version: 1.0.13-30bb726
1.0.13-30bb726
22 Nodesconfigured,Nodes configured, unknown
unknown expected
expected votes
votes
00 Resources
Resources configured.
configured.
========================
Online:Online: [[ alice
alice bobbob ]]
Full
Full list
list ofof resources:
resources:
Node
Node Attributes:
Attributes:** NodeNode alice:
alice:++ bob-eth0
bob-eth0++ bob-eth1
bob-eth1** NodeNode bob:bob:++ alice-eth0
alice-eth0++ alice-eth1
alice-eth1

:: up
up
:: up
up
:: up
up
:: up
up

Migration
Migration summary:summary:** Nodealice:
Node alice:** NodeNode bob:bob:
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

49

構築デモ（4）

ACT

リソース設定 各リソース設定を対話的に[root@alice[root@alice ~]#~]# pwg_clumgr
pwg_clumgr create-service
create-service powergres
powergres
サービスタイプを入力してください[pgsql-drbd]:
サービスタイプを入力してください [pgsql-drbd]:
pg_ctlpg_ctl コマンドのパスを入力してください
コマンドのパスを入力してください [/opt/powergres91/bin/pg_ctl]:[/opt/powergres91/bin/pg_ctl]:
psql
コマンドのパスを入力してください[/opt/powergres91/bin/psql]:
psql コマンドのパスを入力してください [/opt/powergres91/bin/psql]:
PostgreSQL
PostgreSQL のスーパーユーザ名を入力してくださいのスーパーユーザ名を入力してください [postgres]:[postgres]:
スーパーユーザのパスワードを入力してください
スーパーユーザのパスワードを入力してください (パスワードなしにするには空にしてください):(パスワードなしにするには空にしてください):
同じパスワードを再度入力してください:
同じパスワードを再度入力してください:
マウント先ディレクトリを入力してください:
マウント先ディレクトリを入力してください: /disk/disk
データディレクトリを入力してください
データディレクトリを入力してください [/disk/data]:[/disk/data]:
PostgreSQLのポート番号を入力してください
PostgreSQL のポート番号を入力してください (1024(1024 -- 65535)
65535) [5432]:[5432]:
syslog
ファシリティを入力してください(local0
local7)[local0]:syslog ファシリティを入力してください (local0 - local7) [local0]:DRBD
DRBD サービス
サービス "powergres_drbd""powergres_drbd" を作成しています...
を作成しています...
ファイルシステムタイプを入力してください
ファイルシステムタイプを入力してください [ext4]:[ext4]:
DRBD
ブロックデバイスのマイナー番号を入力してください
DRBD ブロックデバイスのマイナー番号を入力してください (0(0 -- 1048576)
1048576) [0]:[0]:ディスクのブロックデバイス名を入力してください
ディスクのブロックデバイス名を入力してください [/dev/sdb]:[/dev/sdb]:
レプリケーションパスのネットワークインタフェース名を入力してください
レプリケーションパスのネットワークインタフェース名を入力してください [eth0]:[eth0]: eth1
eth1
レプリケーションパスのポート番号を入力してください
レプリケーションパスのポート番号を入力してください (7788(7788 -- 7799)
7799) [7788]:[7788]:
ファイルをノード
ファイルをノード "alice""alice" にコピーしています...
にコピーしています...
powergres_drbd.res
100%
0.4KB/spowergres_drbd.res
100% 443
443
0.4KB/s 00:00
00:00
ファイルをノード"bob"にコピーしています...
ファイルをノード "bob" にコピーしています...
powergres_drbd.res
100%
0.4KB/spowergres_drbd.res
100% 443
443
0.4KB/s 00:00
00:00
仮想
IP
アドレスサービス"powergres_ipaddr"を作成しています...
仮想 IP アドレスサービス "powergres_ipaddr" を作成しています...
IP
IP アドレスを入力してください:
アドレスを入力してください: 192.168.100.110
192.168.100.110
ファイルシステムがマウントされるのを待機しています...
ファイルシステムがマウントされるのを待機しています... 完了。
完了。
データベースクラスタを作成しています...
データベースクラスタを作成しています... 完了。
完了。
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

50

構築デモ（5）ACTheartbeat設定
(省略)
(省略)
Online:Online: [[ alice
alice bobbob ]]
Full
Full list
list ofof resources:
resources:

Master/Slave
Master/Slave Set:
Set: powergres_drbd.drbd.ms_drbd
powergres_drbd.drbd.ms_drbd
Masters:[
alice
Masters: [ alice ]]Slaves:Slaves: [[ bobbob ]]
Resource
Resource Group:Group: powergres.pgsql-drbd.group_pgsql
powergres.pgsql-drbd.group_pgsql
powergres_drbd.drbd.filesystem(ocf::heartbeat:Filesystem):Startedpowergres_drbd.drbd.filesystem(ocf::heartbeat:Filesystem):Started alice
alice
powergres_ipaddr.ipaddr(ocf::heartbeat:IPaddr2):
Startedalice
powergres_ipaddr.ipaddr(ocf::heartbeat:IPaddr2):
Started alice
powergres.pgsql-drbd.pgsql(ocf::heartbeat:pgsql):
Startedalice
powergres.pgsql-drbd.pgsql (ocf::heartbeat:pgsql): Started alice
Node
Node Attributes:
Attributes:** NodeNode alice:
alice:++ bob-eth0:: up
bob-eth0up++ bob-eth1:: upbob-eth1up++ master-powergres_drbd.drbd.drbd:1
master-powergres_drbd.drbd.drbd:1 :: 10000
10000** Nodebob:
Node bob:++ alice-eth0:: up
alice-eth0
up++ alice-eth1:
up
alice-eth1: up++ master-powergres_drbd.drbd.drbd:0:
master-powergres_drbd.drbd.drbd:0 : 10000
10000
Migration
Migration summary:summary:** Nodealice:
Node alice:** NodeNode bob:bob:
Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

51

デモ（1）

リソースを動かしてみる 稼働系のファイルシステム停止[root@alice[root@alice ~]#~]# crm
crm
crm(live)#
resourcecrm(live)# resource stop
stop リソース名
リソース名
crm(live)#
resourcestart
crm(live)# resource start リソース名
リソース名

alice pgsql

IPaddr2
Filesystem

bob
pgsql
IPaddr2
Filesystem

drbd

drbd

MasterSlave

 group制約によりIPaddr2とpgsqlも停止

 稼働系をaliceからbobに移行

location制約を追加する操作

crm(live)#crm(live)# resource
resource migratemigrate リソース名
リソース名



alice pgsql

IPaddr2
Filesystem

pgsql bob
IPaddr2
Filesystem

drbd

スイッチオーバ後は制約を削除する必要がある

drbd

Slave

Mastercrm(live)#crm(live)# resource
resource unmigrate
unmigrate リソース名
リソース名



再びaliceを稼働系へ

crm(live)#crm(live)# resource
resource migratemigrate リソース名
リソース名
crm(live)#
resource
unmigrate
crm(live)# resource unmigrate リソース名
リソース名

alice pgsql

IPaddr2
Filesystem

bob
pgsql
IPaddr2
Filesystem

drbd

drbd

MasterCopyright © 2014 SRA OSS, Inc. Japan All rights reserved.

Slave
52

デモ（2）

障害を発生させてみる
 PostgreSQLのマスタープロセスを落としてみる[root@alice[root@alice ~]#~]# kill
kill 41157
41157

ACT pgsql

IPaddr2
Filesystem

pgsql SBY
IPaddr2
Filesystem

drbd

drbd

Master 1回目の故障検知は再起動

Slave fail-count: 故障回数
 migration-threshold: フェイルオーバ実行閾値
Migration
Migration summary:summary:** NodeNode alice:
alice:
powergres.pgsql-drbd.pgsql:
powergres.pgsql-drbd.pgsql: migration-threshold=2
migration-threshold=2 fail-count=1
fail-count=1 last-failure='Wedlast-failure='Wed Jun
Jun 1818 14:03:53
14:03:53 2014'2014'** Nodebob:
Node bob: 2回目の故障でフェイルオーバ
Migration
Migration summary:summary:** NodeNode alice:
alice:
powergres.pgsql-drbd.pgsql:
powergres.pgsql-drbd.pgsql: migration-threshold=2
migration-threshold=2 fail-count=2
fail-count=2 last-failure='Wedlast-failure='Wed Jun
Jun 1818 14:13:26
14:13:26 2014'2014'** Nodebob:
Node bob:
FailedFailed actions:actions:
powergres.pgsql-drbd.pgsql_monitor_30000
powergres.pgsql-drbd.pgsql_monitor_30000 (node=alice,(node=alice, call=77,
call=77, rc=7,
rc=7, status=complete):status=complete): not
not runningrunning Failed actionsを消すにはcleanup fail-countもゼロに[root@alice[root@alice ~]#~]# crm
crm
crm(live)#
resourcecrm(live)# resource cleanup
cleanup

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

53

PowerGres HA Pacemaker版

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

54

オープンソースとともに

Copyright © 2014 SRA OSS, Inc. Japan All rights reserved.

55