Wiki内検索
最近更新したページ
最新コメント
長崎旅行_200807 by awesome things!
OSC2007 Tokyo/Spring レポ by check it out
MenuBar1 by stunning seo guys
MenuBar1 by check it out
OSC2006 Tokyo/Fall レポ by check it out
OSC2006 Tokyo/Fall レポ by watch for this
DBMS本 by tips about seo
Menu
やばい、ラーメン・本・入浴録の更新が滞っている。
アーカイブブログを当ててロールフォワードしておかねば。(2009-02-05)

原付旅行記

スは原付(スクーター)のス
原付であちこちを彷徨った記録。
(一部、車に乗せてもらった旅行ログも含む)

原付の野望


まともな旅行記

原付旅だけでなく、みんなで普通に旅行に行くこともあります。

PostgreSQLあれこれ

ちょっとしたネタとか備忘録代わりに。

猫様ばんざい

猫がいる そばに いつもいる 僕も

読書ノート

読んだ本の感想とかを徒然なるままに。

映画あれこれ

あまり映画を見るほうではないがたまには見るので。

ラーメン録

食べよう、感電するほどのラーメンを!

ラーメン録/神奈川

ラーメン録/東京


カレー録

黄金のルーが、おお!おお!おお!

入浴録

麦酒をこころに、1,2と数えよ
近所の銭湯、スーパー銭湯、温泉巡りの備忘録。

Profile

まあどうでもいいんだが。
ちなみにblogはこっち。
http://blog.livedoor.jp/harada_toshi/
タグ

Slony-Iのレプリケーション方式

PostgreSQLの代表的な非同期レプリケータSlony-Iが実際にどうやってレプリケーションしているのか、SQLログと拙いソース読みで調査したときのメモ。

概要

  • レプリケーション設定はslonikコマンドで行う。
  • slonikコマンドでは、Slony-Iの動作を管理する情報を管理テーブルに設定する。
    • 管理テーブルはレプリケーション対象のDB内にSlony-I用のスキーマを構築し、その中に構築する。
  • 実際にレプリケーション動作を行うのはslonコマンド。
  • slonコマンド内で管理テーブルを参照し、変更内容に該当するクエリを作成してレプリケーションしている(はず)

調査環境

  • Slony-Iのバージョンは1.2.1
  • レプリケーション対象となるPostgreSQLのバージョンは8.1.5

レプリケーションの例

例えば、以下のような簡単な例、1つのDBクラスタ内でmasterからslaveにレプリケーションするケースを想定する。
拡大図
図のようにクラスタセットの設定は完了しており、また購読(subscribe)の設定も完了し、masterからslaveの方向にレプリケーションが行われる環境になっている。
また、masterに接続するslonプロセスとslaveに接続するslonプロセスも起動している。
この状態でユーザテーブルに1行レコードが挿入されるケースを考える。

レプリケーションの動き

  1. slave側のslonはslave側のsl_eventを参照してイベントが生成されてないかチェックする。
    1. イベントが生成されてなければrollbackする。
    2. この動作をslonプロセスの監視スレッド内で繰り返し行う。(たぶん)
  2. slave側のsl_action_seqを参照して(たぶん)シーケンス更新があったかチェックする。
  3. slaveからlistenステートメント発行。これはまだ不明。
  4. slave側でcon_timestampを参照。この目的は解析要。たぶんmaster(con_origin)とslave(con_recieve)の最新の更新状況を比較するためだと思うが・・・。
  5. masterがforwardConfirm()を発行。転送が確定したタイムスタンプ?を取得するのか。
  6. masterがcreateEvent()を発行。この中でおそらくイベントを生成し、sl_eventテーブルに書き込んでいるのであろう。
  7. masterがsl_eventを検索。ここで先に生成したイベントを検知すると思われる。見つからなかったらたぶん何もしないと思われる。
  8. masterでcon_timestampを参照。最新の更新状況の比較か?
  9. 以降、masterでは監視スレッドがsl_eventを再度監視し始める。
  10. slaveがsl_setsyncを参照。
  11. slaveがsl_tableを参照。
  12. slaveがsl_log_statusを参照。last_valueを取得しているので最新のステータス情報を得ているのか?
  13. slaveがレプリケーション用のinsert文を発行。これで一つのレプリケーションが完了する。

まだまだ解析すべき箇所が残っているが今日はここまで。
2007年02月18日(日) 17:47:51 Modified by harada_toshi

添付ファイル一覧(全1件)
5cd514ed1e253527.jpg (71.93KB)
Uploaded by harada_toshi 2007年02月18日(日) 16:50:57



スマートフォン版で見る