12
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

NTTテクノクロスAdvent Calendar 2018

Day 23

PostgreSQLでOracle Data Guard 並みの高可用性を実現!PG-REXを使おう!

Last updated at Posted at 2018-12-22

この記事は 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のデータ同期機能によって「スレーブ」に反映されます。
pgrex_001.png

これによって、「マスタ」と「スレーブ」のデータベースは常に同じデータを保持するように維持されます。

障害発生時に、自動で切り替える!

★ PG-REXでは、障害が発生してもPostgreSQLを継続利用できます。

PG-REXでは、「マスタ」のPostgreSQLまたは「マスタ」のサーバに障害が発生した場合に、自動的に障害を検知し、「スレーブ」を「新マスタ」に切り替えます。
クライアントからの接続先はVIP(仮想IP)で提供するため、サーバが切り替わっても、クライアントからの接続先は変わりません。
pgrex_002.png

障害を検知するのは、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/)

それでは!

12
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?