1
0

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 3 years have passed since last update.

EDB Postgresで作る高可用性システム

Last updated at Posted at 2020-04-08

EDB Postgres Advanced Server(以下、EDP Postgres)がOracle互換のデータベースとして浸透しつつありますが、Oracle特有の機能はやはり便利でEDB Postgresが適さないケースもあります。

ORACLE RAC(Oracle Real Application Clusters)がその代表例です。

EDB Postgresには「Streaming Replication」でデータをレプリケートし、「Failover Manager」で監視しながら、スレーブへと仮想IP(VIP)を切り替えることで可用性を実現する仕組みがありますが、これにOracle RAC並みの可用性と拡張性を担保させるのはなかなか困難です。

rac.png

EDB Postgresの高可用性と拡張性を両立させてみる

副題はやや誇張です。RACの様にインスタンス間でデータ・ブロックのやり取りを行う「キャッシュ・フュージョン」の仕組みはやはりありませんので、更新処理はあくまで1サーバに紐づいたVIPに対してアクセスを行います。また、、各レプリケーション・サーバ自体は物理IPを保有しているので、物理IPを指定すればマスタ・サーバもスレーブ・サーバ自体は利用可能です。

したがって、更新処理はVIPを用いた1台に限定し、参照処理は複数のスレーブ・サーバにロードバランス(クライアント・ロードバランス)を行うことが理にかなっていますが、EDB社のODBCドライバには、クライアント・ロードバランスや複数サーバのフェイル・オーバ機能が実装されていないのです。

EDB Pgpoolを使うことも検討したいところですが、ここでは、よりシンプルに、EDB PostgresにOracle RAC並みの可用性と拡張性を持たせるため、サードパーティー製ドライバ Progress DataDirect for EDB Postgresを使い、クライアント側で参照のロードバランスを実施しながら可用性レベルを高めてみます。

DataDirectとのロードバランス設定

odbc.iniに設定するのみの簡単仕様です。

フェイルオーバの設定

AlternateServers=(HostName=SqlsServer:PortNumber=1433:Database=Sqlsdb1, HostName=255.201.11.24:PortNumber=1434:Database=Sqlsdb2)

ロードバランスの設定

LoadBalancing=1

これでAlternativeServersで指定したサーバへロードバランスを行えます。
詳細のパラメータについてはDataDirectのマニュアルをご覧ください。

DataDirectとEDB Postgres純正ドライバを比較してみる

EDBのODBCドライバには無い、クライアント・ロードバランス機能やフェイル・オーバ機能があるだけで、DataDirectは魅力的ですが、処理性能でもメリットがあります。

すべてのSQLで同じように処理性能が出るのかはわかりませんが、一度試してみるのも良いかと思います。
下のグラフは、EDB PostgreSQLをVirtualBox上のCentOSにデフォルト状態でインストールし、emp表の行数を徐々に増やして、全件検索していった結果です。

image.png

メモリ4GB、4コアのVirtualBox環境ですので、それほどスペックは良くありませんが、EDB ODBCドライバは2万行ぐらいから明らかにレスポンスが遅延してきます。(2万行の全件検索が適切かはさておき)

片やDataDirectは78万件ほどで、レスポンスが体感で遅延したように感じられますが、157万件でも5秒程度のレスポンスとなりました。これは、DataDirectの持つ「Wire Protocol」とネットワーク・ソケットの最適化機構によるものと思われます。

まとめ

Oracle RACとほぼ一緒とまでは行かないものの、これまで、Standard EditionでRACを組んでいた環境などは、もしかしたらEDB Failover ManagerとDataDirectで十分なケースもあるかもしれません。

特にBIツールからOracleを参照する際は、JDBCよりもODBCの方が一般的でしょうし、検索の結果セットが大きいというBIのアプリケーション特性から考えると、DataDirectはアドバンテージがありそうです。

参考サイト:DataDirect for PostgreSQL

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?