Personal tools

PostgreSQLのしくみ分科会のご紹介

NTT オープンソースソフトェアセンタ 坂田 哲夫

「PostgreSQLのしくみ分科会」って何?

この記事では、JPUG の分科会の一つである「PostgreSQL のしくみ分科会」をご紹介します(以下「しくみ分科会」と書きます)。

PostgreSQL を使っていく上で、さまざまな「わからないこと」に直面することがあります。そのような時には、マニュアルを見たり、インターネット検索したり、書籍をひも解いたりして、調べることでしょう。それでも疑問が残ってしまったら、どうすればいいのでしょうか?

PostgreSQL はオープンソースの DBMS ですから、ソースを読めば(ほぼ)全ての疑問が解決するはずです。が、PostgreSQL は80万行以上ある大きなソフトウェアですし、一人でコツコツ読んでいくのは大変です。また、ソースコードを読むには、DBMSの仕組みについての知識も必要でしょう。これらを一人で解決するのはなかなか大変です。けれども、同じニーズを持った人が集まって情報を交換すれば、ハードルを下げることができるでしょう。こうして PostgreSQL の内部の仕組みを勉強する分科会である「PostgreSQL のしくみ分科会」が生まれました。

しくみ分科会は何をしているの?

PostgreSQL の仕組みについて勉強するのが しくみ分科会 の役目です。各自が調べた内容を発表して勉強するのが勉強会で、これが しくみ分科会 の大事な活動です。第1回の勉強会を開催したのは2003年10月で、以来14回の勉強会を開きました。最初のころは、PostgreSQL の基本的な仕組みをテーマとした、内部構造についての発表が主体でした。2009年の春からは内部の仕組みに加えて、PostgreSQL をより良く利用する方法・ノウハウもテーマに組み入れて勉強会を企画しています。これまでの勉強会で発表された資料等については、しくみ分科会のページで公開されています。

勉強会の紹介

オープンソースの勉強会にはいろいろなやり方があると思いますが、しくみ分科会 の勉強会は講師が講演する「小さなカンファレンス」です。講師役の人は、(たいていの場合)PCを使ってプレゼンテーション形式で発表します。それほど形式ばってもいませんから、質問が割り込んだり議論になったりします。このほかに、デモが入ることもあります。時には、参加者は単に説明を聞くだけではなくて、実際にマシンを触ってみる「ハンズオン」形式のこともあります。

一件の発表の長さは質疑応答込みで大体30分~1時間です。一回の勉強会に2件くらいの発表があります。開催日時は土曜日の昼間~夕方のことが多いです。参加者のほとんどは仕事でデータベースを利用している方々で、30人くらいの参加者があります。

参加者へのアンケートによれば、多くの人が発表内容について「わかりやすく」「役に立つ」との感想を寄せています。

実際の勉強会の例

ここでは実際に勉強会の例として、 2009年2月に開催した勉強会を紹介しましょう。この日の大きなテーマは、信頼できるデータベースの運用ということで、2件の発表がありました。

  • pgpool-IIのオンラインリカバリ、およびPITRの概要(鈴木 啓修さん)
  • PostgreSQL の Log のしくみ(坂田)

前者は、PostgreSQL のコネクションプーリングやフェイルオーバクラスタに広く利用されている pgpool-II におけるリカバリ処理を取り上げました。後者は、PostgreSQL で信頼できるトランザクション処理を実現するために、どのようにログデータが生成され、ディスクに書き込まれるかを解説しました。この2つのテーマのうち、この日のメインであった pgpool-II を例に、実際の勉強会の様子を紹介しましょう。発表資料は しくみ分科会のアーカイブ にありますので、必要に応じてご覧ください。

pgpool-IIによる高可用化

鈴木さんの講演は、事前に用意された資料に沿って pgpool-II の機能のおさらいから始まりました。pgpool-IIの機能として、

  • コネクションプール機能
  • 負荷分散機能
  • 同期レプリケーション機能

の3種があるがあること、この日のテーマであるオンラインリカバリは pgpool-II ver2 から導入されたことが紹介されました。その上で、全ての基本となるコネクションプール機能を説明してから、信頼性と可用性を高めるための同期レプリケーションの概要を次のように説明しています(図1を参照。この図は鈴木さんの資料からトレースしました)。

(同期レプリケーションとは)各 pgpool プロセスが2台の PostgreSQL サーバに接続し、(1)アプリケーションから受け取った更新系のSQLを、(2)2台の PostgreSQL に転送する形式
sync_replication

つまり、同期レプリケーションによって、2つのデータベースには同じデータが書き込まれ、その結果として同期した(どの時点においても外部から見て同じ内容を持つ)状態になります。同一の情報を2つのデータベースに格納するので、どちらか一方が故障しても、残ったデータベースでサービスを継続すれば、ユーザからは故障しているように見えなくなります。このようにして、可用性を高めるのです。

では、故障してしまったサーバを再び pgpool-II で使えるようにする(フェイルバック)にはどうすればいいのでしょうか? フェイルバックに時間がかかりすぎたり、運用に支障がでたりしない方式が望まれます。これがこの講演の主題の「オンラインリカバリ」です。

故障したサーバは、まず PostgreSQL が単体で正常に動作するように(サーバの再起動や壊れたパーツの交換などの)処置してから待機させます。オンラインリカバリは、現在稼働中のサーバのデータベースと同じ内容を持つよう、以下のように動作します(図2を参照;同じく鈴木さん資料からトレース)。

  • 稼働中のサーバのデータベースファイルを全て待機側にコピーして、データベースファイルの中身を同期させます。この処理を「フェイズ1」と呼びます。コピーする直前にチェックポイントを実行することで、データベースファイルになるべく多くの情報を書き込みます。
  • フェイズ1の実行中もコピー元のデータベースサーバは更新処理を受け付けており、データベースの内容は刻々と変わっていきます。そこで、この差分を反映させるために、以下の「フェイズ2」処理を行います。
    1. 稼働中のサーバに対して更新処理をリクエストするのを止めます (pgpool-IIに更新リクエストを出すと、ブロックされます)。
    2. 先ほどのチェックポイント以後に実行された更新を反映するため、アーカイブログを待機側にコピーします。
    3. 待機側ではPITR(point in time recovery)と同様のリカバリ処理を行い、稼働中データベースへの変更内容を全て反映します。
  • フェイズ2が完了すると、2つのデータベースは再び同期レプリケーション で動作するようになります。
online_recovery

このように、オンラインリカバリというのは、PostgreSQL の PITR のメカニズムを使って、異なるサーバ上にデータベースを構築する方法とも言えます。この処理によって、故障してしまったサーバも再びpgpool-IIによって利用できるようになります。オンラインリカバリの際には、時間がかかるデータベースファイルのコピーの際にも、稼働中のサービスを止める必要がないので、システム全体でみたダウンタイムの短縮に貢献しています。

講師の説明が一通り終わると、参加者との質疑に入ります。この講演のテーマは、信頼性や可用性を向上させるソリューションとして pgpool-II を取り上げたので、現実の運用で発生しそうな状況でのシステムの挙動に関する質問が多いようでした。

  • リカバリ動作のときに、長い時間動作している仕掛かり中のトランザクションがあると、どうなるのか?
  • リカバリの期間中、アプリケーションから見て、pgpool-II への接続が全て切断される瞬間があるのか? あるとして、その長さはどれくらいか?

実際にデータベースを運用するときには、このような動作や設定の細部に関する疑問を抱くことがしばしばあります。マニュアルに直接の答えが載っていることもありますが、時には行間を読んだり実験して確認したり、という作業が必要となることもあります。オープンソースだから、というわけではないのでしょうが、往々にして自己解決が必要になります。

こうした疑問であっても、勉強会では講師がその場で答えてくれることがあります。また、参加者も実際にPostgreSQLを使っている人が多く、議論の中から答えや重要なヒントが出てくることも多いものです。分厚い解説書が多数出ている商用ソフトと違い、オープンソースの場合、「かゆい所に手が届く」ドキュメントはまだまだ少ないのが現状でしょう。そういう点でも、勉強会での情報交換は大いに活用したいものです。

さて、しくみ分科会に限らず、勉強会には懇親会が付きものです。この日も、勉強会の後には懇親会が開かれ、30人近い方が参加されました。勉強会のときとは違う雰囲気の中で、その日のテーマについての議論や、今後取り上げてみたいテーマを肴にして盛り上がりました。むしろ、こちらの方が"潤滑油"があるだけ、議論は白熱していたかもしれません。

まとめ

このサイト Let's Postgres の狙いの一つは、PostgreSQL の利用情報やノウハウの共有です。今回は、そうした情報が得られる所として、しくみ分科会をご紹介しました。みなさんも、機会があれば参加してみてはいかがでしょうか。ネット上の情報も便利で良いものですが、直接に会って議論をすることで、より広く・より深い知識が得られるでしょう。


(2009年8月31日 公開)

 

You are here: Home 読み物 イベントレポート しくみ分科会 PostgreSQLのしくみ分科会のご紹介