この記事は NTTテクノクロス Advent Calendar 2018 の23日目の記事です。
はじめに
こんにちは!NTTテクノクロスで PostgreSQLを中心とした業務をこなしています 、中村です。
みなさんの PostgreSQLは今日も元気でしょうか?
システムの導入や移行などでデータベース製品を選定する際には、その製品がどの程度の可用性を担保できるのか、気にしますよね?
もちろん、PostgreSQLにも可用性を高めるためのやり方というものが存在します。
というわけで、今回は、そんなPostgreSQLの可用性を担う、PG-REX ソリューション について紹介していきたいと思います!
PG-REXとは?
PG-REXは、以下の製品の機能を組み合わせたソリューションです。
- PostgreSQL本体の**同期レプリケーション機能**
- Pacemakerの**障害監視およびフェイルオーバ機能**
PG-REXを導入することで、PostgreSQLの可用性を高めることができます。
また、このソリューションで使用する PostgreSQL、PacemakerともにOSS製品です。
PostgreSQL本体はコミュニティが提供している PostgreSQLのパッケージをそのまま使用しますので、PostgreSQL本体のバージョンアップは随時適用できます。
データを保護する!
★ PG-REXでは、データベースのデータを2重化することで、データの保護を行います。
PG-REXは「マスタ」「スレーブ」の2台のPostgreSQLで構成し、データの更新ができるのは「マスタ」のPostgreSQLのみです。「スレーブ」に対してデータの更新はできません。
「マスタ」に対して発生した更新は、PostgreSQLのデータ同期機能によって「スレーブ」に反映されます。
これによって、「マスタ」と「スレーブ」のデータベースは常に同じデータを保持するように維持されます。
障害発生時に、自動で切り替える!
★ PG-REXでは、障害が発生してもPostgreSQLを継続利用できます。
PG-REXでは、「マスタ」のPostgreSQLまたは「マスタ」のサーバに障害が発生した場合に、自動的に障害を検知し、「スレーブ」を「新マスタ」に切り替えます。
クライアントからの接続先はVIP(仮想IP)で提供するため、サーバが切り替わっても、クライアントからの接続先は変わりません。
障害を検知するのは、Pacemakerです。
Pacemakerでは、次の障害を検知し、自動的に「マスタ」を切り離し「スレーブ」を「新マスタ」に切り替えます。
PG-REXで検知する障害とは?
PG-REX で検知する障害は以下のとおりで、障害を検知するとフェイルオーバーします。
- ノード故障(停止)
- ディスク故障
- PostgreSQL停止
- LAN故障(接続障害)
LAN故障の場合は挙動のバリエーションがあり、クライアントからPostgreSQLへのアクセスに用いる「S-LAN(運用LAN)」の障害の場合は、フェイルオーバーを実施しますが、PG-REXのマスタノード・スレーブノード間でのみ使用するLANについては、障害を検知してもフェイルオーバーしません。
これは、「S-LAN」が故障してしまうと、PostgreSQLのサービスが使用できないためです。
PG-REXのマスタノード・スレーブノード間でのみ使用するLANとは、Pacemakerがお互いの死活監視を行うために使用する「IC-LAN(インターコネクトLAN)」と、PostgreSQLが同期レプリケーションのデータ転送ために使用する「D-LAN(DBレプリケーションLAN)」のことを指します。
Oracle Data Guard と PG-REX を比較してみた
PG-REXがリリースされて、個人的に最も大きなメリットとして感じたのは、「Oracle Data Guard を導入しているシステムの移行先として有力な候補ができた!」ということです。
ここで、Oracle Data Guard と PG-REX をちょっと比較してみましょう。
表:Oracle Data Guard と PG-REX の機能比較
比較項目 | Oracle Data Guard | PG-REX |
---|---|---|
データの同期 | 同期・非同期 | 同期 |
スレーブDBの参照 | 可能(参照専用) | 可能(参照専用) |
障害検知・切替え | 自動 | 自動 |
複数のスレーブ | 可能 | 可能(※1) |
ディザスタリカバリ | 可能 | 可能(※2) |
Oracle Data Guard を導入する主要な目的は、データベースノードの障害発生時に、サービスのダウンタイムを短くすることなので、Oracle Data Guard と PG-REX の機能はほぼ同等といえます。
Data Guard と同等の機能を利用できるなら、今までは難しいと思っていた運用用件もクリアでき、Oracle から PostgreSQL への移行も視野に入る可能性も広がるのではないでしょうか?
※1
複数のスレーブ(マルチスレーブ)の構成はPostgreSQL本体が提供する機能です。
※2
PG-REXのスレーブから、遠隔地のスレーブにカスケードレプリケーションします。
カスケードレプリケーションはPostgreSQL本体が提供する機能です。
まとめ
今回の記事ではPG-REXの概要を紹介しました。
PG-REX導入の際には、障害検知までの時間など、いくつかのパラメータのチューニングが必要ですが、数年間にわたる利用実績もあり、安心してオススメできるソリューションです。
PG-REXの資材やドキュメントは以下からダウンロードできますので、詳細を確認したい場合は、ドキュメントを参照してみてください。
[PG-REX プロジェクト日本語トップページ - OSDN] (https://ja.osdn.net/projects/pg-rex/)
それでは!