KEMBAR78
ゆるふわLinux-HA 〜PostgreSQL編〜 | PDF
ゆるふわLinux-HA
∼PostgreSQL編∼
 Taro Matsuzawa (Georepublic Japan)
              #ssmjp
自己紹介(名前編)

•   まつざわたろう aka. btm

    •   btm = Broken Taro Matsuzawa

•   Twitter: smellman

•   あだ名: 組長

    •   過去にとある組織で組長をしていました
自己紹介(執筆編)

•   Firefox 3 Hacks, Firefox Hacks Rebooted (オライ
    リー・ジャパン)

•   Software Designで特集数回と半年間の連載

•   C Magazineの特集でFirefoxのソースコード解説
自己紹介(趣味)
•   音楽はエレクトロニカ、ブレイクコア中心

    •   Aphex Twin,Venetian Snares, Daedelus etc...

•   ラノベ好き

    •   年間100冊ぐらいしか読んでないけど

•   ゲームはシューティングとRPGが中心

    •   怒首領蜂大復活クリアできない...orz
所属
•   お仕事

    •   合同会社Georepublic Japan

•   プライベート

    •   スマートフォン勉強会(すまべん)@関東スタッフ

    •   日本UNIXユーザ会幹事

    •   LL eventスタッフ
職業的な話
•   学生時代にアルバイトでGISプログラマ

•   他のアルバイトでデスマーチ経験

    •   キーボードの上を走る小人さんとか...

•   現在三社目

    •   地図系に戻りました(10年ぶり)
エンジニアとして
•   Linux (1998∼)

•   Visual Basic(2002∼2006)

•   Java(2003∼)

•   Ruby(2009∼)

•   ちょっとしたネットワーク
お断り
•   プログラマにネットワークエンジニアの真似
    事をしてるぐらいの人間です。

•   ネットワークを本業としたことは無いです。

•   開発案件のついでにネットワークをやってる
    だけです。

    •   自宅のルータはTimeCapsuleですw
今日のネタ


• PostgreSQL 9.1 の同期レプリケーション
 とLinux-HAを組み合わせて冗長化した
 時の話です。
注意
•   昨年の12月から今年の1月ごろに前職で実際に
    構築したネタを元に書いています。

•   覚えてる and 手元にログが残ってる範囲で書
    いてます。

•   デモ機作ろうとしたけど体力がなかったので
    デモ機無しで行きます。
Linux-HAとは?
Linux-HA

•   Linux-HA Project(http://www.linux-ha.org/wiki/
    Main_Page)が開発、メンテナンスをしている高
    可用クラスタを構築するプロダクトを中心と
    した製品群のこと。

•   Linux-HA Project以外からリリースされている
    製品も一般的には含まれます。
Linux-HA Project以外

• 有名なところではPacemaker(http://
 clusterlabs.org/)やDRBD(http://
 www.drbd.org/)も一緒に扱われます。

 • DRBDはLinux Kernelにマージされてい
   ます。
Linux-HA Japan
•   国内でLinux-HA関係のプロダクトの開発支
    援、普及活動を行なっている団体

•   全国各地のOSCに出展・講演を行なっている

    •   他にも勉強会の実施、講師として参加など
        をしている

•   日本語の情報はまずここを
普及活動?
まさかのCV付き

       橋本まい           福原香織 新谷良子




田中理恵     日高里菜   丹下桜      日高里菜
Linux-HAで
何ができる?
何ができる?
•   高可用クラスタとして「サービスを止めない
    システム」を構築できます。

•   サービスを止めないと言ってもいろいろあり
    ます。

    •   Arpanetの通説である核戦争が起きても通信
        ができるようにというのも一種ですよね...
いろいろ
•   Linux-HAもいろんな止めないパターンがある

•   僕が過去に扱ったのは2台でサービスを極力止
    めないというパターンのみ

    •   3台以上とか予算ないもん...

•   あくまで僕がやった範囲で話をしますw
極力止めない
•   良い物はぶっちゃけ予算がかかる

    •   サーバに監視ポートとか...

•   案件や人の使い方によってとかも

    •   タクシー代は出ますよね...

•   エンジニアスキルとも兼ね合いです

    •   僕には無理ですw
冗長化の方法
DBの冗長化
•   PostgreSQLを例にとってもいくつかある

    •   pg-pool IIなどのミドルウェアを利用

    •   DRBDを用いてディスクをまるごと冗長化

    •   PostgreSQL9.1からの同期レプリケーション
        とLinux-HAを併用するパターン
特徴を知る

•   冗長化の手段は一長一短

    •   銀の弾丸は無い

•   システムにあったものを選択する

    •   まぁ普通だよね...(白目
pg-pool IIの例
          app
書き込みを
両方に行なう
         pg-pool




  pg               pg
pg-pool IIの例
         app
検索は負荷
分散できる
        pg-pool




  pg              pg
pg-pool IIの例
             app
 pg-poolが
障害ポイントに
            pg-pool




    pg                pg
DRBD
                       app
HDDまるごと
 同期する
                 vip



   HDD(master)               HDD(slave)

       pg                        pg
DRBD
                          app
PostgreSQLに
障害があったら
                    vip



      HDD(master)               HDD(slave)

          pg                        pg
DRBD
同期を停止して
Salve側のHDDを          app

マウントしてから
PostgreSQLが起動              vip



      HDD(master)                HDD(slave)

          pg                         pg
同期レプリケーション

 書き込みは                app

masterを通して
  slaveへ        vip




           pg               pg
同期レプリケーション

                       app
masterに障害
があったら
                 vip




            pg               pg
同期レプリケーション

レプリケーションを     app

  停止して
vipを切り替えます          vip




         pg               pg
切り替え

•   DRBDの図及び同期レプリケーションの図でリ
    ソースをスイッチさせるのがLinux-HAのプロダ
    クト

    •   クラスタ制御部とリソース制御部を組み合
        わせる
クラスタ制御部と
リソース制御部
まず知っておくこと

• Linux-HAでは現在クラスタ制御部とリ
 ソース制御部が分離されている

 • もともとはHeartbeatだけだった
3つのプロダクト
•   Pacemaker

    •   リソース制御部

•   Heartbeat

    •   クラスタ制御部

•   Corosync

    •   クラスタ制御部
被ってる

• HeartbeatとCorosyncが同じ役割...
 • Heartbeatの歴史を知るとわかりやす
  い
Heartbeat と CRM

              CRM             Pacemaker


                           Common Library
            Heartbeat
Heartbeat      V2       Heartbeat
                                    Corosync
   V1                      V3
クラスタ制御部

• HeartbeatとCorosyncはどちらを使って
 も良い

 • 特徴に合わせてどちらかを選ぶ
Heartbeat V3

• わりと安定してる
• 多ノードには向いてない
 • 3ノード以上は大変らしい
• スプリットブレインに弱い
Corosync

• 若干不安定
• 多ノード構成に強い
• スプリットブレインに強い
どちらを選ぶ?

•   2ノードならHeartbeatがよいかも

    •   今回は触ってみたかった(本音)という理由で
        Corosyncを採用

        •   Heartbeat V1,V2やってたから飽きたんです
            よ...(もっと本音)
実際に組んでみよう
注意
•   情報が古いです

    •   2011年12月ごろの情報にそってます

•   Linux-HA Japanのパッケージは使っていません

    •   理由は特に無いのですが...

•   Resource Agentは本家にはマージされています

    •   あくまで参考程度です
ネットワーク
             vip(master)      vip(slave)
            192.168.1.103   192.168.1.104

DB1                                                DB2
          eth0                         eth0
      192.168.1.101                192.168.1.102



          eth1                         eth1
       192.168.2.1                  192.168.2.2



          eth2                         eth2
       192.168.3.1                  192.168.3.2



          eth3                         eth3
       192.168.4.1                  192.168.4.2
構築手順
1. PostgreSQL 9.1をインストール

2. heartbeat, corosync, pacemakerをインストール

3. PostgreSQL 9.1用のResourceAgentをインストール

4. レプリケーションの設定

5. corosyncの設定

6. crmコマンドからpacemakerの設定
PostgreSQLをインストール

#	 wget	 http://yum.postgresql.org/9.1/redhat/
rhel-6-x86_64/pgdg-centos91-9.1-4.noarch.rpm
#	 rpm	 -ivh	 pgdg-centos91-9.1-4.noarch.rpm
#	 yum	 update
#	 yum	 install	 postgresql91-server.x86_64
#	 /etc/init.d/postgresql-9.1	 initdb

PostgreSQL自体が配布しているyumを使うと便利
heartbeat, corosync,
            pacemaker
#	 wget	 http://ftp.yz.yamagata-u.ac.jp/pub/linux/
fedora/epel/6/x86_64/epel-release-6-5.noarch.rpm
#	 rpm	 -ivh	 epel-release-6-5.noarch.rpm	 
#	 yum	 install	 corosync.x86_64	 heartbeat.x86_64	 
pacemaker.x86_64

  Resource Agentの多くがheartbeatパッケージに
       依存しているため、heartbeatが必要
Resource Agent

#	 wget	 https://github.com/t-matsuo/resource-
agents/raw/pgsql91/heartbeat/pgsql
#	 mv	 /usr/lib/ocf/resource.d/heartbeat/pgsql	 /usr/
lib/ocf/resource.d/heartbeat/pgsql.bak
#	 install	 -m	 755	 pgsql	 /usr/lib/ocf/resource.d/
heartbeat/
ここから先
•   ここから先は、PostgreSQL 9.1対応のResource Agentの作者である
    t-matsuoさんの PostgreSQL 9.1 ストリーミングレプリケーション
    対応 リソースエージェント https://github.com/t-matsuo/resource-
    agents/wiki/PostgreSQL-9.1-%E3%82%B9%E3%83%88%E3%83%AA
    %E3%83%BC%E3%83%9F%E3%83%B3%E3%82%B0%E3%83%AC
    %E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC
    %E3%82%B7%E3%83%A7%E3%83%B3%E5%AF%BE%E5%BF%9C-
    %E3%83%AA%E3%82%BD%E3%83%BC
    %E3%82%B9%E3%82%A8%E3%83%BC
    %E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88 に沿っています

    •   Linux-HA Japanのパッケージを使っていないなどの差異があり
        ます
レプリケーションの設定

• 下記手順で行ないます。
1. 同期を行なうためのsshの        交換

2. postgresql.confの修正

3. pg_hba.confの修正
交換
  (DB1からDB2へ鍵を生成してコピー)
  #	 su	 -	 postgres
  $	 ssh-keygen	 
  $	 scp	 .ssh/id_rsa.pub	 root@192.168.2.2:/tmp/
  db1.pub
  (DB2で登録)
  #	 chmod	 666	 /tmp/db1.pub
  #	 su	 -	 postgres
  $	 cat	 /tmp/db1.pub	 >	 .ssh/authorized_keys
  $	 chmod	 600	 .ssh/authorized_keys

.sshは存在すると仮定、同じ作業をDB2からDB1へも
postgresql.conf(1)
                     DB1では下記内容を追加
listen_addresses	 =	 '*'
wal_level	 =	 hot_standby
synchronous_commit	 =	 on
archive_mode	 =	 on
archive_command	 =	 'cp	 %p	 /var/lib/pgsql/9.1/data/pg_archive/%f	 &&	 scp	 -q	 %p	 
postgres@192.168.2.2:/var/lib/pgsql/9.1/data/pg_archive/%f'
max_wal_senders	 =	 5
wal_keep_segments	 =	 32
replication_timeout	 =	 5000
hot_standby	 =	 on
wal_receiver_status_interval	 =	 2
restart_after_crash	 =	 off
include	 =	 '/var/lib/pgsql/rep_mode.conf'
postgresql.conf(2)
DB2へscpでコピーしてから archive_commandを編集

archive_command	 =	 'cp	 %p	 /var/lib/pgsql/9.1/data/pg_archive/%f	 &&	 scp	 -q	 %p	 
postgres@192.168.2.1:/var/lib/pgsql/9.1/data/pg_archive/%f'



  ようするにscpする向き先が変わるという感じ
pg_hba.conf

host	 	 all	 	 	 	 	 	 	 	 	 all	 192.168.1.0/24	 md5
host	 	 replication	 all	 192.168.2.0/24	 trust


        replication用にtrustを指定しておく
         (たぶん他の逃げ方あると思う...)
corosync
#	 vi	 /etc/corosync/corosync.conf

totemのinterfaceのbindnetaddrを変更するはず...


          ...手元に記録がないので割愛...
pacemaker

•   crmコマンドで設定ファイルを流しこみます

    •   設定ファイルの例は長いのでt-matsuoさんの
        wikiを参考にしてください
やりかた

#	 crm
crm(live)#	 configure	 
crm(live)configure#	 (ここにコピペ)

crm(live)configure#	 commit
ステータス(crm_mon -A)
============
Last	 updated:	 Wed	 Apr	 11	 16:28:58	 2012
Last	 change:	 Thu	 Apr	 	 5	 01:44:51	 2012	 via	 crm_attribute	 on	 db1.localdomain
Stack:	 openais
Current	 DC:	 db1.localdomain	 -	 partition	 with	 quorum
Version:	 1.1.6-3.el6-a02c0f19a00c1eb2527ad38f146ebc0834814558
2	 Nodes	 configured,	 2	 expected	 votes
7	 Resources	 configured.
============

Online:	 [	 db1.localdomain	 db2.localdomain	 ]

vip-slave	 	 	 	 	 	 	 (ocf::heartbeat:IPaddr2):	 	 	 	 	 	 	 Started	 db2.localdomain
	 Master/Slave	 Set:	 msPostgresql	 [postgresql]
	 	 	 	 	 Masters:	 [	 db1.localdomain	 ]
	 	 	 	 	 Slaves:	 [	 db2.localdomain	 ]
	 Clone	 Set:	 clnPingCheck	 [pingCheck]
	 	 	 	 	 Started:	 [	 db2.localdomain	 db1.localdomain	 ]
	 Resource	 Group:	 master-group
	 	 	 	 	 vip-master	 (ocf::heartbeat:IPaddr2):	 	 	 	 	 	 	 Started	 db1.localdomain
	 	 	 	 	 vip-rep	 	 	 	 (ocf::heartbeat:IPaddr2):	 	 	 	 	 	 	 Started	 db1.localdomain

Node	 Attributes:
*	 Node	 db1.localdomain:
	 	 	 	 +	 default_ping_set	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 :	 100
	 	 	 	 +	 master-postgresql:1	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 :	 1000
	 	 	 	 +	 pgsql-data-status	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 :	 LATEST	 	 	 	 
	 	 	 	 +	 pgsql-master-baseline	 	 	 	 	 	 	 	 	 	 	 	 	 :	 12:0000000030000000
	 	 	 	 +	 pgsql-status	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 :	 PRI
*	 Node	 db2.localdomain:
	 	 	 	 +	 default_ping_set	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 :	 100
	 	 	 	 +	 master-postgresql:0	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 :	 100
	 	 	 	 +	 pgsql-data-status	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 :	 STREAMING|SYNC
	 	 	 	 +	 pgsql-status	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 :	 HS:sync
とりあえず
•   Masterを落とすとSlaveがMasterに昇格したりし
    ます。

    •   あたりまえだ

•   元のMasterを復帰するのに一工夫必要

    •   http://d.hatena.ne.jp/smellman/
        20120105/1325711325
まとめ
•   冗長化は怖くない!

    •   予算以外!

•   Linux-HAはどんどん進化している

    •   Resource Agentを書くのは簡単だよ!

        •   書いたらgithubにpush request!

ゆるふわLinux-HA 〜PostgreSQL編〜

  • 1.
  • 2.
    自己紹介(名前編) • まつざわたろう aka. btm • btm = Broken Taro Matsuzawa • Twitter: smellman • あだ名: 組長 • 過去にとある組織で組長をしていました
  • 3.
    自己紹介(執筆編) • Firefox 3 Hacks, Firefox Hacks Rebooted (オライ リー・ジャパン) • Software Designで特集数回と半年間の連載 • C Magazineの特集でFirefoxのソースコード解説
  • 4.
    自己紹介(趣味) • 音楽はエレクトロニカ、ブレイクコア中心 • Aphex Twin,Venetian Snares, Daedelus etc... • ラノベ好き • 年間100冊ぐらいしか読んでないけど • ゲームはシューティングとRPGが中心 • 怒首領蜂大復活クリアできない...orz
  • 5.
    所属 • お仕事 • 合同会社Georepublic Japan • プライベート • スマートフォン勉強会(すまべん)@関東スタッフ • 日本UNIXユーザ会幹事 • LL eventスタッフ
  • 6.
    職業的な話 • 学生時代にアルバイトでGISプログラマ • 他のアルバイトでデスマーチ経験 • キーボードの上を走る小人さんとか... • 現在三社目 • 地図系に戻りました(10年ぶり)
  • 7.
    エンジニアとして • Linux (1998∼) • Visual Basic(2002∼2006) • Java(2003∼) • Ruby(2009∼) • ちょっとしたネットワーク
  • 8.
    お断り • プログラマにネットワークエンジニアの真似 事をしてるぐらいの人間です。 • ネットワークを本業としたことは無いです。 • 開発案件のついでにネットワークをやってる だけです。 • 自宅のルータはTimeCapsuleですw
  • 9.
    今日のネタ • PostgreSQL 9.1の同期レプリケーション とLinux-HAを組み合わせて冗長化した 時の話です。
  • 10.
    注意 • 昨年の12月から今年の1月ごろに前職で実際に 構築したネタを元に書いています。 • 覚えてる and 手元にログが残ってる範囲で書 いてます。 • デモ機作ろうとしたけど体力がなかったので デモ機無しで行きます。
  • 11.
  • 12.
    Linux-HA • Linux-HA Project(http://www.linux-ha.org/wiki/ Main_Page)が開発、メンテナンスをしている高 可用クラスタを構築するプロダクトを中心と した製品群のこと。 • Linux-HA Project以外からリリースされている 製品も一般的には含まれます。
  • 13.
    Linux-HA Project以外 • 有名なところではPacemaker(http:// clusterlabs.org/)やDRBD(http:// www.drbd.org/)も一緒に扱われます。 • DRBDはLinux Kernelにマージされてい ます。
  • 14.
    Linux-HA Japan • 国内でLinux-HA関係のプロダクトの開発支 援、普及活動を行なっている団体 • 全国各地のOSCに出展・講演を行なっている • 他にも勉強会の実施、講師として参加など をしている • 日本語の情報はまずここを
  • 15.
  • 16.
    まさかのCV付き 橋本まい 福原香織 新谷良子 田中理恵 日高里菜 丹下桜 日高里菜
  • 17.
  • 18.
    何ができる? • 高可用クラスタとして「サービスを止めない システム」を構築できます。 • サービスを止めないと言ってもいろいろあり ます。 • Arpanetの通説である核戦争が起きても通信 ができるようにというのも一種ですよね...
  • 19.
    いろいろ • Linux-HAもいろんな止めないパターンがある • 僕が過去に扱ったのは2台でサービスを極力止 めないというパターンのみ • 3台以上とか予算ないもん... • あくまで僕がやった範囲で話をしますw
  • 20.
    極力止めない • 良い物はぶっちゃけ予算がかかる • サーバに監視ポートとか... • 案件や人の使い方によってとかも • タクシー代は出ますよね... • エンジニアスキルとも兼ね合いです • 僕には無理ですw
  • 21.
  • 22.
    DBの冗長化 • PostgreSQLを例にとってもいくつかある • pg-pool IIなどのミドルウェアを利用 • DRBDを用いてディスクをまるごと冗長化 • PostgreSQL9.1からの同期レプリケーション とLinux-HAを併用するパターン
  • 23.
    特徴を知る • 冗長化の手段は一長一短 • 銀の弾丸は無い • システムにあったものを選択する • まぁ普通だよね...(白目
  • 24.
    pg-pool IIの例 app 書き込みを 両方に行なう pg-pool pg pg
  • 25.
    pg-pool IIの例 app 検索は負荷 分散できる pg-pool pg pg
  • 26.
    pg-pool IIの例 app pg-poolが 障害ポイントに pg-pool pg pg
  • 27.
    DRBD app HDDまるごと 同期する vip HDD(master) HDD(slave) pg pg
  • 28.
    DRBD app PostgreSQLに 障害があったら vip HDD(master) HDD(slave) pg pg
  • 29.
    DRBD 同期を停止して Salve側のHDDを app マウントしてから PostgreSQLが起動 vip HDD(master) HDD(slave) pg pg
  • 30.
    同期レプリケーション 書き込みは app masterを通して slaveへ vip pg pg
  • 31.
    同期レプリケーション app masterに障害 があったら vip pg pg
  • 32.
    同期レプリケーション レプリケーションを app 停止して vipを切り替えます vip pg pg
  • 33.
    切り替え • DRBDの図及び同期レプリケーションの図でリ ソースをスイッチさせるのがLinux-HAのプロダ クト • クラスタ制御部とリソース制御部を組み合 わせる
  • 34.
  • 35.
  • 36.
    3つのプロダクト • Pacemaker • リソース制御部 • Heartbeat • クラスタ制御部 • Corosync • クラスタ制御部
  • 37.
    被ってる • HeartbeatとCorosyncが同じ役割... •Heartbeatの歴史を知るとわかりやす い
  • 38.
    Heartbeat と CRM CRM Pacemaker Common Library Heartbeat Heartbeat V2 Heartbeat Corosync V1 V3
  • 39.
  • 40.
    Heartbeat V3 • わりと安定してる •多ノードには向いてない • 3ノード以上は大変らしい • スプリットブレインに弱い
  • 41.
  • 42.
    どちらを選ぶ? • 2ノードならHeartbeatがよいかも • 今回は触ってみたかった(本音)という理由で Corosyncを採用 • Heartbeat V1,V2やってたから飽きたんです よ...(もっと本音)
  • 43.
  • 44.
    注意 • 情報が古いです • 2011年12月ごろの情報にそってます • Linux-HA Japanのパッケージは使っていません • 理由は特に無いのですが... • Resource Agentは本家にはマージされています • あくまで参考程度です
  • 45.
    ネットワーク vip(master) vip(slave) 192.168.1.103 192.168.1.104 DB1 DB2 eth0 eth0 192.168.1.101 192.168.1.102 eth1 eth1 192.168.2.1 192.168.2.2 eth2 eth2 192.168.3.1 192.168.3.2 eth3 eth3 192.168.4.1 192.168.4.2
  • 46.
    構築手順 1. PostgreSQL 9.1をインストール 2.heartbeat, corosync, pacemakerをインストール 3. PostgreSQL 9.1用のResourceAgentをインストール 4. レプリケーションの設定 5. corosyncの設定 6. crmコマンドからpacemakerの設定
  • 47.
    PostgreSQLをインストール # wget http://yum.postgresql.org/9.1/redhat/ rhel-6-x86_64/pgdg-centos91-9.1-4.noarch.rpm # rpm -ivh pgdg-centos91-9.1-4.noarch.rpm # yum update # yum install postgresql91-server.x86_64 # /etc/init.d/postgresql-9.1 initdb PostgreSQL自体が配布しているyumを使うと便利
  • 48.
    heartbeat, corosync, pacemaker # wget http://ftp.yz.yamagata-u.ac.jp/pub/linux/ fedora/epel/6/x86_64/epel-release-6-5.noarch.rpm # rpm -ivh epel-release-6-5.noarch.rpm # yum install corosync.x86_64 heartbeat.x86_64 pacemaker.x86_64 Resource Agentの多くがheartbeatパッケージに 依存しているため、heartbeatが必要
  • 49.
    Resource Agent # wget https://github.com/t-matsuo/resource- agents/raw/pgsql91/heartbeat/pgsql # mv /usr/lib/ocf/resource.d/heartbeat/pgsql /usr/ lib/ocf/resource.d/heartbeat/pgsql.bak # install -m 755 pgsql /usr/lib/ocf/resource.d/ heartbeat/
  • 50.
    ここから先 • ここから先は、PostgreSQL 9.1対応のResource Agentの作者である t-matsuoさんの PostgreSQL 9.1 ストリーミングレプリケーション 対応 リソースエージェント https://github.com/t-matsuo/resource- agents/wiki/PostgreSQL-9.1-%E3%82%B9%E3%83%88%E3%83%AA %E3%83%BC%E3%83%9F%E3%83%B3%E3%82%B0%E3%83%AC %E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC %E3%82%B7%E3%83%A7%E3%83%B3%E5%AF%BE%E5%BF%9C- %E3%83%AA%E3%82%BD%E3%83%BC %E3%82%B9%E3%82%A8%E3%83%BC %E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88 に沿っています • Linux-HA Japanのパッケージを使っていないなどの差異があり ます
  • 51.
  • 52.
    交換 (DB1からDB2へ鍵を生成してコピー) # su - postgres $ ssh-keygen $ scp .ssh/id_rsa.pub root@192.168.2.2:/tmp/ db1.pub (DB2で登録) # chmod 666 /tmp/db1.pub # su - postgres $ cat /tmp/db1.pub > .ssh/authorized_keys $ chmod 600 .ssh/authorized_keys .sshは存在すると仮定、同じ作業をDB2からDB1へも
  • 53.
    postgresql.conf(1) DB1では下記内容を追加 listen_addresses = '*' wal_level = hot_standby synchronous_commit = on archive_mode = on archive_command = 'cp %p /var/lib/pgsql/9.1/data/pg_archive/%f && scp -q %p postgres@192.168.2.2:/var/lib/pgsql/9.1/data/pg_archive/%f' max_wal_senders = 5 wal_keep_segments = 32 replication_timeout = 5000 hot_standby = on wal_receiver_status_interval = 2 restart_after_crash = off include = '/var/lib/pgsql/rep_mode.conf'
  • 54.
    postgresql.conf(2) DB2へscpでコピーしてから archive_commandを編集 archive_command = 'cp %p /var/lib/pgsql/9.1/data/pg_archive/%f && scp -q %p postgres@192.168.2.1:/var/lib/pgsql/9.1/data/pg_archive/%f' ようするにscpする向き先が変わるという感じ
  • 55.
    pg_hba.conf host all all 192.168.1.0/24 md5 host replication all 192.168.2.0/24 trust replication用にtrustを指定しておく (たぶん他の逃げ方あると思う...)
  • 56.
  • 57.
    pacemaker • crmコマンドで設定ファイルを流しこみます • 設定ファイルの例は長いのでt-matsuoさんの wikiを参考にしてください
  • 58.
    やりかた # crm crm(live)# configure crm(live)configure# (ここにコピペ) crm(live)configure# commit
  • 59.
    ステータス(crm_mon -A) ============ Last updated: Wed Apr 11 16:28:58 2012 Last change: Thu Apr 5 01:44:51 2012 via crm_attribute on db1.localdomain Stack: openais Current DC: db1.localdomain - partition with quorum Version: 1.1.6-3.el6-a02c0f19a00c1eb2527ad38f146ebc0834814558 2 Nodes configured, 2 expected votes 7 Resources configured. ============ Online: [ db1.localdomain db2.localdomain ] vip-slave (ocf::heartbeat:IPaddr2): Started db2.localdomain Master/Slave Set: msPostgresql [postgresql] Masters: [ db1.localdomain ] Slaves: [ db2.localdomain ] Clone Set: clnPingCheck [pingCheck] Started: [ db2.localdomain db1.localdomain ] Resource Group: master-group vip-master (ocf::heartbeat:IPaddr2): Started db1.localdomain vip-rep (ocf::heartbeat:IPaddr2): Started db1.localdomain Node Attributes: * Node db1.localdomain: + default_ping_set : 100 + master-postgresql:1 : 1000 + pgsql-data-status : LATEST + pgsql-master-baseline : 12:0000000030000000 + pgsql-status : PRI * Node db2.localdomain: + default_ping_set : 100 + master-postgresql:0 : 100 + pgsql-data-status : STREAMING|SYNC + pgsql-status : HS:sync
  • 60.
    とりあえず • Masterを落とすとSlaveがMasterに昇格したりし ます。 • あたりまえだ • 元のMasterを復帰するのに一工夫必要 • http://d.hatena.ne.jp/smellman/ 20120105/1325711325
  • 61.
    まとめ • 冗長化は怖くない! • 予算以外! • Linux-HAはどんどん進化している • Resource Agentを書くのは簡単だよ! • 書いたらgithubにpush request!