ゆるふわLinux-HA 〜PostgreSQL編〜

8,275 views

Published on

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

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
8,275
On SlideShare
0
From Embeds
0
Number of Embeds
113
Actions
Shares
0
Downloads
42
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

ゆるふわLinux-HA 〜PostgreSQL編〜

  1. 1. ゆるふわLinux-HA∼PostgreSQL編∼ Taro Matsuzawa (Georepublic Japan) #ssmjp
  2. 2. 自己紹介(名前編)• まつざわたろう aka. btm • btm = Broken Taro Matsuzawa• Twitter: smellman• あだ名: 組長 • 過去にとある組織で組長をしていました
  3. 3. 自己紹介(執筆編)• Firefox 3 Hacks, Firefox Hacks Rebooted (オライ リー・ジャパン)• Software Designで特集数回と半年間の連載• C Magazineの特集でFirefoxのソースコード解説
  4. 4. 自己紹介(趣味)• 音楽はエレクトロニカ、ブレイクコア中心 • Aphex Twin,Venetian Snares, Daedelus etc...• ラノベ好き • 年間100冊ぐらいしか読んでないけど• ゲームはシューティングとRPGが中心 • 怒首領蜂大復活クリアできない...orz
  5. 5. 所属• お仕事 • 合同会社Georepublic Japan• プライベート • スマートフォン勉強会(すまべん)@関東スタッフ • 日本UNIXユーザ会幹事 • LL eventスタッフ
  6. 6. 職業的な話• 学生時代にアルバイトでGISプログラマ• 他のアルバイトでデスマーチ経験 • キーボードの上を走る小人さんとか...• 現在三社目 • 地図系に戻りました(10年ぶり)
  7. 7. エンジニアとして• Linux (1998∼)• Visual Basic(2002∼2006)• Java(2003∼)• Ruby(2009∼)• ちょっとしたネットワーク
  8. 8. お断り• プログラマにネットワークエンジニアの真似 事をしてるぐらいの人間です。• ネットワークを本業としたことは無いです。• 開発案件のついでにネットワークをやってる だけです。 • 自宅のルータはTimeCapsuleですw
  9. 9. 今日のネタ• PostgreSQL 9.1 の同期レプリケーション とLinux-HAを組み合わせて冗長化した 時の話です。
  10. 10. 注意• 昨年の12月から今年の1月ごろに前職で実際に 構築したネタを元に書いています。• 覚えてる and 手元にログが残ってる範囲で書 いてます。• デモ機作ろうとしたけど体力がなかったので デモ機無しで行きます。
  11. 11. Linux-HAとは?
  12. 12. Linux-HA• Linux-HA Project(http://www.linux-ha.org/wiki/ Main_Page)が開発、メンテナンスをしている高 可用クラスタを構築するプロダクトを中心と した製品群のこと。• Linux-HA Project以外からリリースされている 製品も一般的には含まれます。
  13. 13. Linux-HA Project以外• 有名なところではPacemaker(http:// clusterlabs.org/)やDRBD(http:// www.drbd.org/)も一緒に扱われます。 • DRBDはLinux Kernelにマージされてい ます。
  14. 14. Linux-HA Japan• 国内でLinux-HA関係のプロダクトの開発支 援、普及活動を行なっている団体• 全国各地のOSCに出展・講演を行なっている • 他にも勉強会の実施、講師として参加など をしている• 日本語の情報はまずここを
  15. 15. 普及活動?
  16. 16. まさかのCV付き 橋本まい 福原香織 新谷良子田中理恵 日高里菜 丹下桜 日高里菜
  17. 17. Linux-HAで何ができる?
  18. 18. 何ができる?• 高可用クラスタとして「サービスを止めない システム」を構築できます。• サービスを止めないと言ってもいろいろあり ます。 • Arpanetの通説である核戦争が起きても通信 ができるようにというのも一種ですよね...
  19. 19. いろいろ• Linux-HAもいろんな止めないパターンがある• 僕が過去に扱ったのは2台でサービスを極力止 めないというパターンのみ • 3台以上とか予算ないもん...• あくまで僕がやった範囲で話をしますw
  20. 20. 極力止めない• 良い物はぶっちゃけ予算がかかる • サーバに監視ポートとか...• 案件や人の使い方によってとかも • タクシー代は出ますよね...• エンジニアスキルとも兼ね合いです • 僕には無理ですw
  21. 21. 冗長化の方法
  22. 22. DBの冗長化• PostgreSQLを例にとってもいくつかある • pg-pool IIなどのミドルウェアを利用 • DRBDを用いてディスクをまるごと冗長化 • PostgreSQL9.1からの同期レプリケーション とLinux-HAを併用するパターン
  23. 23. 特徴を知る• 冗長化の手段は一長一短 • 銀の弾丸は無い• システムにあったものを選択する • まぁ普通だよね...(白目
  24. 24. pg-pool IIの例 app書き込みを両方に行なう pg-pool pg pg
  25. 25. pg-pool IIの例 app検索は負荷分散できる pg-pool pg pg
  26. 26. pg-pool IIの例 app pg-poolが障害ポイントに pg-pool pg pg
  27. 27. DRBD appHDDまるごと 同期する vip HDD(master) HDD(slave) pg pg
  28. 28. DRBD appPostgreSQLに障害があったら vip HDD(master) HDD(slave) pg pg
  29. 29. DRBD同期を停止してSalve側のHDDを appマウントしてからPostgreSQLが起動 vip HDD(master) HDD(slave) pg pg
  30. 30. 同期レプリケーション 書き込みは appmasterを通して slaveへ vip pg pg
  31. 31. 同期レプリケーション appmasterに障害があったら vip pg pg
  32. 32. 同期レプリケーションレプリケーションを app 停止してvipを切り替えます vip pg pg
  33. 33. 切り替え• DRBDの図及び同期レプリケーションの図でリ ソースをスイッチさせるのがLinux-HAのプロダ クト • クラスタ制御部とリソース制御部を組み合 わせる
  34. 34. クラスタ制御部とリソース制御部
  35. 35. まず知っておくこと• Linux-HAでは現在クラスタ制御部とリ ソース制御部が分離されている • もともとはHeartbeatだけだった
  36. 36. 3つのプロダクト• Pacemaker • リソース制御部• Heartbeat • クラスタ制御部• Corosync • クラスタ制御部
  37. 37. 被ってる• HeartbeatとCorosyncが同じ役割... • Heartbeatの歴史を知るとわかりやす い
  38. 38. Heartbeat と CRM CRM Pacemaker Common Library HeartbeatHeartbeat V2 Heartbeat Corosync V1 V3
  39. 39. クラスタ制御部• HeartbeatとCorosyncはどちらを使って も良い • 特徴に合わせてどちらかを選ぶ
  40. 40. Heartbeat V3• わりと安定してる• 多ノードには向いてない • 3ノード以上は大変らしい• スプリットブレインに弱い
  41. 41. Corosync• 若干不安定• 多ノード構成に強い• スプリットブレインに強い
  42. 42. どちらを選ぶ?• 2ノードならHeartbeatがよいかも • 今回は触ってみたかった(本音)という理由で Corosyncを採用 • Heartbeat V1,V2やってたから飽きたんです よ...(もっと本音)
  43. 43. 実際に組んでみよう
  44. 44. 注意• 情報が古いです • 2011年12月ごろの情報にそってます• Linux-HA Japanのパッケージは使っていません • 理由は特に無いのですが...• Resource Agentは本家にはマージされています • あくまで参考程度です
  45. 45. ネットワーク vip(master) vip(slave) 192.168.1.103 192.168.1.104DB1 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. 46. 構築手順1. PostgreSQL 9.1をインストール2. heartbeat, corosync, pacemakerをインストール3. PostgreSQL 9.1用のResourceAgentをインストール4. レプリケーションの設定5. corosyncの設定6. crmコマンドからpacemakerの設定
  47. 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 initdbPostgreSQL自体が配布しているyumを使うと便利
  48. 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. 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. 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. 51. レプリケーションの設定• 下記手順で行ないます。1. 同期を行なうためのsshの 交換2. postgresql.confの修正3. pg_hba.confの修正
  52. 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. 53. 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 postgres@192.168.2.2:/var/lib/pgsql/9.1/data/pg_archive/%fmax_wal_senders = 5wal_keep_segments = 32replication_timeout = 5000hot_standby = onwal_receiver_status_interval = 2restart_after_crash = offinclude = /var/lib/pgsql/rep_mode.conf
  54. 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. 55. pg_hba.confhost all all 192.168.1.0/24 md5host replication all 192.168.2.0/24 trust replication用にtrustを指定しておく (たぶん他の逃げ方あると思う...)
  56. 56. corosync# vi /etc/corosync/corosync.conftotemのinterfaceのbindnetaddrを変更するはず... ...手元に記録がないので割愛...
  57. 57. pacemaker• crmコマンドで設定ファイルを流しこみます • 設定ファイルの例は長いのでt-matsuoさんの wikiを参考にしてください
  58. 58. やりかた# crmcrm(live)# configure crm(live)configure# (ここにコピペ)crm(live)configure# commit
  59. 59. ステータス(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.localdomainNode 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. 60. とりあえず• Masterを落とすとSlaveがMasterに昇格したりし ます。 • あたりまえだ• 元のMasterを復帰するのに一工夫必要 • http://d.hatena.ne.jp/smellman/ 20120105/1325711325
  61. 61. まとめ• 冗長化は怖くない! • 予算以外!• Linux-HAはどんどん進化している • Resource Agentを書くのは簡単だよ! • 書いたらgithubにpush request!

×