PostgreSQL 9.3.1でレプリケーション(ただしNetBSD)
2013/11/03(日) 19:03 NetBSD はてブ情報 はてブに登録 はてブ数

PostgreSQLのコア機能にレプリケーションが実装されてずいぶん経過し、機能も着々と増強されています。

そんなレプリケーション機能をNetBSDユーザとしてあれこれ使ってみました。
  • ビッグエンディアンマシンとリトルエンディアンマシンでレプリケーションできるのか?
  • 32bitアーキテクチャと64bitアーキテクチャでレプリケーションできるのか?
  • Intel以外のアーキテクチャでレプリケーションできるのか?
以上の三本でお送りします。

ビッグエンディアンマシンとリトルエンディアンマシンでレプリケーションできるのか?
結論から言うと、できません。

ちょっと詳しい人なら、そりゃそうだろうなと思うはずです。
ただ、どのレベルで動かないか気になりますよね!

では、実機で検証してみましょう。

まず、ビッグエンディアンマシンを用意します。今回はMac mini (PPC版)を使いました。SPARCマシンを引っ張り出すのも良いでしょう。

次にリトルエンディアンマシンを用意します。ここでは、USL-5Pを使います。USL-5PはCPUにSH4を搭載しています。ここは国産CPUアーキテクチャに頑張っていただきましょう。

PostgreSQLのインストールは大変簡単で、pkgsrcを導入してpkgsrc/databases/postgresql93-serverでmake installと打つだけです。ただし、USL-5PはCPU 266MHz、メモリ64MB、ストレージがCFというスペックですので、distccなどを使ってコンパイルを進めたほうが良いでしょう。セットアップしてコンパイルするのに丸々一日程度を見込んでおけばよいと思います。

今回は、Mac miniをマスター、USL-5Pをスレーブとして起動します。

すると、次のようなエラーを出力してスレーブ側が起動しません。
FATAL:  database files are incompatible with server
DETAIL:  The database cluster was initialized with PG_CONTROL_VERSION -1459421184 (0xa9030000), but the server was compiled with PG_CONTROL_VERSION 937 (0x000003a9).
HINT:  This could be a problem of mismatched byte ordering.  It looks like you need to initdb.
なるほど、PG_CONTROL_VERSIONが(0xa9030000)と(0x000003a9)ですから、まさにエンディアン依存していますね。

近所のPostgreSQLコミッターに聞いたところ、このバージョンチェックを外したとしても、さまざまな場所でエンディアン依存しているから、クイックハックでどうにかできる代物ではない、とのコメントをいただきました。

ビッグエンディアンマシンを多く抱えるNetBSDユーザとしては、残念な結果となりました。
32bitアーキテクチャと64bitアーキテクチャでレプリケーションできるのか?
結論から言うとできません(二回目)。

ちょっと詳しい人なら、そりゃそうだろうなと思うはずです。
ただ、どのレベルで動かないか気になりますよね!(二回目)

では、実機で検証してみましょう。

64bitアーキテクチャとしてVMwareにNetBSD/amd64をインストールして32bitアーキテクチャであるUSL-5Pとレプリケーションさせてみます。

これまた、スレーブ起動時に次のようなエラーが表示されます。
FATAL:  incorrect checksum in control file
エラーメッセージで検索すると、64bitと32bitの違いに触れたページがいくつかヒットします。多くの場合は、マシンの移行に伴うもののようですが、レプリケーションも同様の理由で失敗するのでしょう。

エンディアンはともかくとして、チェックサムぐらいは同じにしてくれればいいのになとは思ったりするところです。

Intel以外のアーキテクチャでレプリケーションできるのか?
結論から言うと、できます。

ただし、先の例にもあるとおり、エンディアンが同じであったり、CPUのビット長が同じであるという前提条件を満たす必要があります。

今回は、32bitでリトルエンディアンをいくつかテストしました。

成功した組合せを列挙しておきます。
  • NetBSD/i386 on VMware(32bit)とNetBSD/landisk on USL-5P
  • NetBSD/i386 on VMware(32bit)とNetBSD/evbarm on Raspberry PI
Raspberry PIもPostgreSQLのコンパイルには時間がかかるので覚悟が必要ですね。
まとめ
PostgreSQLのコア機能によるレプリケーションを行う際には、エンディアンやビット長に注意する必要があることがわかりました。

しかし、エンディアンやビット長が違うマシン間でレプリケーションを行うことができないかというとそうではなく、マシン間でSQLを飛ばすタイプのSlony-Iを採用するなど、広い視点で検討を行う必要があるといえます。

また、今回の趣旨とは外れますが、PostgreSQLはIntel系のCPU以外でも問題なく動作することが確認できました。PowerPCでもARMでもSuperHでも動作しましたからね。今回は時間切れでMIPSは試せず、無念です。

なお、今回の実機検証ではNetBSDの6.1.2を使いました。

名前:  非公開コメント   

  • TB-URL  http://www.tokuda.net/diary/0801/tb/