rsyncでPostgreSQLサーバ移転

 本日ブログラのメインデータベース(登録ブログの情報やランキング情報)のサーバ移転を実施しました。サーバ移転というかサーバリプレイスが正しいのですが、スペックが上のハードウェアにデータベースサーバを移転しました。

 で、本来なら、PostgreSQLサーバを止めた上で旧サーバでdumpして、そのファイルを新サーバに持ってきてrestoreするのが普通のやり方なのですが、データベースクラスタだけで50GBもある状況でかなりの時間が掛かることが予想されたので、データベースクラスタをrsyncしておいて、最後にPostgreSQLサーバを止めて再度rsyncしてデータベースクラスタそのものを移動させるという荒技をやってみました。

参考1. バックアップの概要と方式一覧 2.3 オフライン・バックアップ
参考2. pgpool-IIによるレプリケーションとオンラインリカバリ 1.7.1 オンラインリカバリの仕組み

 ただ、このデータベースクラスタのコピーによるサーバ移転は、データベースのバージョンが一致していることが条件です。今回は事前に稼働サーバのバージョンを最新版にアップして、新旧サーバ間のバージョンを一致させておきました。あと、ハードウェアが全く異なっておりアーキテクチャも違うマシンでしたが、問題なく移転は終了しました。
 サーバ同士がローカル接続されていることもあり、作業時間は30分弱。直前にrsyncを完了していたということもあると思いますが、それでも30分くらいは時間が掛かるのですね。PostgreSQLのデータベースクラスタの構造について詳しくないので何とも言えないのですが、かなり多くのファイルが更新されているのでしょうね。

 というわけで、今後も大規模なサーバ移転の際はこのパターンでいきたいと思います。