ゆるふわlinux-ha 〜postgresql編〜

61
ゆるふわLinux-HA PostgreSQL編~ Taro Matsuzawa (Georepublic Japan) #ssmjp

Upload: taro-matsuzawa

Post on 08-Jun-2015

6.780 views

Category:

Technology


0 download

DESCRIPTION

過去の仕事でPostgreSQLの冗長化をしたことがあってその時の話をささみ勉強会でお話しました。スライドの他に口頭で喋ってる部分が結構あるので、ちょっとアレですね!とりあえず、手順とかは参考になりますが、具体的な設定値などはちゃんと調べてくださいね!

TRANSCRIPT

Page 1: ゆるふわLinux-HA 〜PostgreSQL編〜

ゆるふわLinux-HA

~PostgreSQL編~Taro Matsuzawa (Georepublic Japan)

#ssmjp

Page 2: ゆるふわLinux-HA 〜PostgreSQL編〜

自己紹介(名前編)

• まつざわたろう aka. btm

• btm = Broken Taro Matsuzawa

• Twitter: smellman

• あだ名: 組長

• 過去にとある組織で組長をしていました

Page 3: ゆるふわLinux-HA 〜PostgreSQL編〜

自己紹介(執筆編)

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

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

• C Magazineの特集でFirefoxのソースコード解説

Page 4: ゆるふわLinux-HA 〜PostgreSQL編〜

自己紹介(趣味)• 音楽はエレクトロニカ、ブレイクコア中心

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

• ラノベ好き

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

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

• 怒首領蜂大復活クリアできない...orz

Page 5: ゆるふわLinux-HA 〜PostgreSQL編〜

所属• お仕事

• 合同会社Georepublic Japan

• プライベート

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

• 日本UNIXユーザ会幹事

• LL eventスタッフ

Page 6: ゆるふわLinux-HA 〜PostgreSQL編〜

職業的な話• 学生時代にアルバイトでGISプログラマ

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

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

• 現在三社目

• 地図系に戻りました(10年ぶり)

Page 7: ゆるふわLinux-HA 〜PostgreSQL編〜

エンジニアとして• Linux (1998~)

• Visual Basic(2002~2006)

• Java(2003~)

• Ruby(2009~)

• ちょっとしたネットワーク

Page 8: ゆるふわLinux-HA 〜PostgreSQL編〜

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

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

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

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

Page 9: ゆるふわLinux-HA 〜PostgreSQL編〜

今日のネタ

• PostgreSQL 9.1 の同期レプリケーションとLinux-HAを組み合わせて冗長化した時の話です。

Page 10: ゆるふわLinux-HA 〜PostgreSQL編〜

注意• 昨年の12月から今年の1月ごろに前職で実際に構築したネタを元に書いています。

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

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

Page 11: ゆるふわLinux-HA 〜PostgreSQL編〜

Linux-HAとは?

Page 12: ゆるふわLinux-HA 〜PostgreSQL編〜

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

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

Linux-HA

Page 13: ゆるふわLinux-HA 〜PostgreSQL編〜

Linux-HA Project以外

• 有名なところではPacemaker(http://

clusterlabs.org/)やDRBD(http://

www.drbd.org/)も一緒に扱われます。

• DRBDはLinux Kernelにマージされています。

Page 14: ゆるふわLinux-HA 〜PostgreSQL編〜

Linux-HA Japan

• 国内でLinux-HA関係のプロダクトの開発支援、普及活動を行なっている団体

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

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

• 日本語の情報はまずここを

Page 15: ゆるふわLinux-HA 〜PostgreSQL編〜

普及活動?

Page 16: ゆるふわLinux-HA 〜PostgreSQL編〜

まさかのCV付き

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

田中理恵 丹下桜 日高里菜日高里菜

Page 17: ゆるふわLinux-HA 〜PostgreSQL編〜

Linux-HAで何ができる?

Page 18: ゆるふわLinux-HA 〜PostgreSQL編〜

何ができる?• 高可用クラスタとして「サービスを止めないシステム」を構築できます。

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

• Arpanetの通説である核戦争が起きても通信ができるようにというのも一種ですよね...

Page 19: ゆるふわLinux-HA 〜PostgreSQL編〜

いろいろ

• Linux-HAもいろんな止めないパターンがある

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

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

• あくまで僕がやった範囲で話をしますw

Page 20: ゆるふわLinux-HA 〜PostgreSQL編〜

極力止めない• 良い物はぶっちゃけ予算がかかる

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

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

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

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

• 僕には無理ですw

Page 21: ゆるふわLinux-HA 〜PostgreSQL編〜

冗長化の方法

Page 22: ゆるふわLinux-HA 〜PostgreSQL編〜

DBの冗長化

• PostgreSQLを例にとってもいくつかある

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

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

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

Page 23: ゆるふわLinux-HA 〜PostgreSQL編〜

特徴を知る

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

• 銀の弾丸は無い

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

• まぁ普通だよね...(白目

Page 24: ゆるふわLinux-HA 〜PostgreSQL編〜

pg-pool IIの例

pg pg

pg-pool

app

書き込みを両方に行なう

Page 25: ゆるふわLinux-HA 〜PostgreSQL編〜

pg-pool IIの例

pg pg

pg-pool

app

検索は負荷分散できる

Page 26: ゆるふわLinux-HA 〜PostgreSQL編〜

pg-pool IIの例

pg pg

pg-pool

app

pg-poolが障害ポイントに

Page 27: ゆるふわLinux-HA 〜PostgreSQL編〜

HDD(master)

DRBD

pg

app

HDD(slave)

pg

HDDまるごと同期する

vip

Page 28: ゆるふわLinux-HA 〜PostgreSQL編〜

HDD(master)

DRBD

pg

app

HDD(slave)

pg

PostgreSQLに障害があったら

vip

Page 29: ゆるふわLinux-HA 〜PostgreSQL編〜

HDD(master)

DRBD

pg

app

HDD(slave)

pg

同期を停止してSalve側のHDDをマウントしてからPostgreSQLが起動 vip

Page 30: ゆるふわLinux-HA 〜PostgreSQL編〜

同期レプリケーション

app

vip

pg pg

書き込みはmasterを通して

slaveへ

Page 31: ゆるふわLinux-HA 〜PostgreSQL編〜

同期レプリケーション

app

pg pg

masterに障害があったら

vip

Page 32: ゆるふわLinux-HA 〜PostgreSQL編〜

同期レプリケーション

app

pg pg

レプリケーションを停止して

vipを切り替えます vip

Page 33: ゆるふわLinux-HA 〜PostgreSQL編〜

切り替え

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

• クラスタ制御部とリソース制御部を組み合わせる

Page 34: ゆるふわLinux-HA 〜PostgreSQL編〜

クラスタ制御部とリソース制御部

Page 35: ゆるふわLinux-HA 〜PostgreSQL編〜

まず知っておくこと

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

• もともとはHeartbeatだけだった

Page 36: ゆるふわLinux-HA 〜PostgreSQL編〜

3つのプロダクト• Pacemaker

• リソース制御部

• Heartbeat

• クラスタ制御部

• Corosync

• クラスタ制御部

Page 37: ゆるふわLinux-HA 〜PostgreSQL編〜

被ってる

• HeartbeatとCorosyncが同じ役割...

• Heartbeatの歴史を知るとわかりやすい

Page 38: ゆるふわLinux-HA 〜PostgreSQL編〜

Heartbeat と CRM

HeartbeatV1

HeartbeatV2

CRM

HeartbeatV3

Pacemaker

Corosync

Common Library

Page 39: ゆるふわLinux-HA 〜PostgreSQL編〜

クラスタ制御部

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

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

Page 40: ゆるふわLinux-HA 〜PostgreSQL編〜

Heartbeat V3

• わりと安定してる

• 多ノードには向いてない

• 3ノード以上は大変らしい

• スプリットブレインに弱い

Page 41: ゆるふわLinux-HA 〜PostgreSQL編〜

Corosync

• 若干不安定

• 多ノード構成に強い

• スプリットブレインに強い

Page 42: ゆるふわLinux-HA 〜PostgreSQL編〜

どちらを選ぶ?

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

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

• Heartbeat V1, V2やってたから飽きたんですよ...(もっと本音)

Page 43: ゆるふわLinux-HA 〜PostgreSQL編〜

実際に組んでみよう

Page 44: ゆるふわLinux-HA 〜PostgreSQL編〜

注意• 情報が古いです

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

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

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

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

• あくまで参考程度です

Page 45: ゆるふわLinux-HA 〜PostgreSQL編〜

ネットワーク

DB1 DB2eth0

192.168.1.101

eth1192.168.2.1

eth2192.168.3.1

eth3192.168.4.1

eth0192.168.1.102

eth1192.168.2.2

eth2192.168.3.2

eth3192.168.4.2

vip(master)192.168.1.103

vip(slave)192.168.1.104

Page 46: ゆるふわLinux-HA 〜PostgreSQL編〜

1. PostgreSQL 9.1をインストール

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

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

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

5. corosyncの設定

6. crmコマンドからpacemakerの設定

構築手順

Page 47: ゆるふわLinux-HA 〜PostgreSQL編〜

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を使うと便利

Page 48: ゆるふわLinux-HA 〜PostgreSQL編〜

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が必要

Page 49: ゆるふわLinux-HA 〜PostgreSQL編〜

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/

Page 50: ゆるふわLinux-HA 〜PostgreSQL編〜

ここから先• ここから先は、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のパッケージを使っていないなどの差異があります

Page 51: ゆるふわLinux-HA 〜PostgreSQL編〜

レプリケーションの設定

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

2. postgresql.confの修正

3. pg_hba.confの修正

Page 52: ゆるふわLinux-HA 〜PostgreSQL編〜

鍵交換(DB1からDB2へ鍵を生成してコピー)# su - postgres$ ssh-keygen $ scp .ssh/id_rsa.pub [email protected]:/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へも

Page 53: ゆるふわLinux-HA 〜PostgreSQL編〜

postgresql.conf(1)

DB1では下記内容を追加listen_addresses = '*'wal_level = hot_standbysynchronous_commit = onarchive_mode = onarchive_command = 'cp %p /var/lib/pgsql/9.1/data/pg_archive/%f && scp -q %p [email protected]:/var/lib/pgsql/9.1/data/pg_archive/%f'max_wal_senders = 5wal_keep_segments = 32replication_timeout = 5000hot_standby = onwal_receiver_status_interval = 2restart_after_crash = offinclude = '/var/lib/pgsql/rep_mode.conf'

Page 54: ゆるふわLinux-HA 〜PostgreSQL編〜

postgresql.conf(2)

DB2へscpでコピーしてから archive_commandを編集

archive_command = 'cp %p /var/lib/pgsql/9.1/data/pg_archive/%f && scp -q %p [email protected]:/var/lib/pgsql/9.1/data/pg_archive/%f'

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

Page 55: ゆるふわLinux-HA 〜PostgreSQL編〜

pg_hba.conf

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

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

Page 56: ゆるふわLinux-HA 〜PostgreSQL編〜

corosync

# vi /etc/corosync/corosync.conf

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

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

Page 57: ゆるふわLinux-HA 〜PostgreSQL編〜

pacemaker

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

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

Page 58: ゆるふわLinux-HA 〜PostgreSQL編〜

やりかた

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

crm(live)configure# commit

Page 59: ゆるふわLinux-HA 〜PostgreSQL編〜

ステータス(crm_mon -A)============Last updated: Wed Apr 11 16:28:58 2012Last change: Thu Apr 5 01:44:51 2012 via crm_attribute on db1.localdomainStack: openaisCurrent DC: db1.localdomain - partition with quorumVersion: 1.1.6-3.el6-a02c0f19a00c1eb2527ad38f146ebc08348145582 Nodes configured, 2 expected votes7 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

Page 60: ゆるふわLinux-HA 〜PostgreSQL編〜

とりあえず• Masterを落とすとSlaveがMasterに昇格したりします。

• あたりまえだ

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

• http://d.hatena.ne.jp/smellman/20120105/1325711325

Page 61: ゆるふわLinux-HA 〜PostgreSQL編〜

まとめ• 冗長化は怖くない!

• 予算以外!

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

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

• 書いたらgithubにpush request!