sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQL用のトップPGクラスタリング高可用性ソリューション

    システムがPostgreSQLに依存しており、高可用性のクラスタリングソリューションを探している場合は、複雑な作業ですが、達成することは不可能ではないことを事前にお知らせします。

    フォールトトレランスの要件を考慮して、ここから選択できる高可用性クラスタリングソリューションをいくつか紹介します。

    PostgreSQLは、MySQLやOracleなどのマルチマスタークラスタリングソリューションをネイティブにサポートしていません。それでも、PostgreSQLのレプリケーションや負荷分散など、多くの商用およびコミュニティ製品がこの実装を提供しています。

    まず、いくつかの基本的な概念を確認しましょう。

    高可用性とは何ですか?

    高可用性とは、サービスが利用できる時間の長さを指し、通常、ビジネスで合意されたパフォーマンスのレベルによって定義されます。

    冗長性は高可用性の基盤です。インシデントが発生した場合でも、問題なくシステムの運用とアクセスを継続できます。

    継続的なリカバリ

    インシデントが発生したときに、バックアップを復元してからWAL(ログ先行書き込み)ログを適用する必要がある場合、リカバリ時間は非常に長くなり、可用性は高くなりません。

    ただし、バックアップとログを緊急サーバーにアーカイブしている場合は、到着時にログを適用できます。ログが1分ごとに送信および適用される場合、コンティンジェンシーベースは継続的に回復し、最大1分の生産に対して古い状態になります。

    スタンバイデータベース

    スタンバイデータベースの考え方は、常に同じデータを持ち、インシデントが発生した場合にすぐに使用できる本番データベースのコピーを保持することです。

    スタンバイデータベースを分類する方法はいくつかあります。

    レプリケーションの性質による:

    • フィジカルスタンバイ:ディスクブロックがコピーされます。

    • 論理スタンバイ:データ変更のストリーミング。

    トランザクションの同期性による:

    • 非同期:データが失われる可能性があります。

    • 同期:データが失われる可能性はありません。マスターのコミットは、スタンバイの応答を待ちます。

    使用法別:

    • ウォームスタンバイ:接続をサポートしていません。

    • ホットスタンバイ:読み取り専用接続をサポートします。

    クラスター

    クラスターは、一緒に動作し、1つと見なされるホストのグループです。これにより、サーバーを追加することで、水平方向のスケーラビリティとより多くの作業を処理する機能を実現できます。

    ノードの障害に抵抗し、透過的に動作し続けることができます。共有するものに応じて、2つのクラスターモデルがあります。

    • 共有ストレージ:すべてのノードが同じ情報で同じストレージにアクセスします。

    • シェアードナッシング:各ノードには独自のストレージがあり、他のノードと同じ情報がある場合とない場合がありますシステムの構造に応じて、ノード。

    PostgreSQLにあるクラスタリングオプションのいくつかを確認しましょう。

    分散複製ブロックデバイス

    DRBDは、ネットワークを使用して同期ブロックレプリケーションを実装するLinuxカーネルモジュールです。実際にはクラスターを実装せず、フェイルオーバーや監視を処理しません。そのためには、Corosync + Pacemaker+DRBDなどの補完的なソフトウェアが必要です。

    例:

    • Corosync:ホスト間のメッセージを処理します。

    • ペースメーカー:サービスを開始および停止し、1つのホストでのみ実行されるようにします。

    • DRBD:ブロックデバイスのレベルでデータを同期します。

    ClusterControl

    ClusterControlは、データベースクラスター用のエージェントレスの管理および自動化ソフトウェアです。データベースサーバー/クラスターをユーザーインターフェイスから直接展開、監視、管理、拡張するのに役立ちます。データベースサーバーまたはクラスターの保守に必要なほとんどの管理タスクを処理できます。

    ClusterControlを使用すると、次のことができます。

    • 選択したテクノロジースタックにスタンドアロン、レプリケート、またはクラスター化されたデータベースをデプロイします。

    • フェイルオーバー、リカバリ、および日常のタスクを、ポリグロットデータベースと動的インフラストラクチャ全体で均一に自動化します。

    • 完全バックアップまたは増分バックアップを手動で作成するか、スケジュールします。

    • データベースとサーバーインフラストラクチャ全体の統合された包括的なリアルタイム監視を実行します。

    • 単一のアクションでノードを簡単に追加または削除します。

    • クラスターを別のデータセンター/クラウドプロバイダーにクローンします

    PostgreSQLでインシデントが発生した場合、スタンバイノードを自動的にプライマリに昇格させることができます。

    これは、1枚のガラス板を通してフルオペレーションのライフサイクル管理と自動化を提供する完全なツールです。 ClusterControlは、30日間の無料試用版も提供しているため、文字列を添付せずに評価できます。

    Rubyrep

    Rubyrepは、非同期、マルチマスター、マルチプラットフォームのレプリケーション(RubyまたはJRubyで実装)およびマルチDBMS(MySQLまたはPostgreSQL)を提供するソリューションです。

    これはトリガーに基づいており、DDL、ユーザー、または許可をサポートしていません。使用と管理のシンプルさがその主な目的です。

    一部の機能は次のとおりです。

    • 簡単な構成

    • 簡単なインストール

    • プラットフォームに依存せず、テーブルのデザインに依存しません。

    Pgpool-II

    Pgpool-IIは、PostgreSQLサーバーとPostgreSQLデータベースクライアントの間で機能するミドルウェアです。

    一部の機能は次のとおりです。

    • 接続プール

    • レプリケーション

    • 負荷分散

    • 自動フェイルオーバー

    • 並列クエリ

    ストリーミングレプリケーションの上に構成できます:

    ブカルド

    Bucardoは、データベース内のトリガーとキューイングを使用した行ベースの非同期カスケードマスタースレーブレプリケーションと、トリガーとカスタマイズされた競合解決を使用した行ベースの非同期マスターマスターレプリケーションを提供します。

    >

    Bucardoには専用のデータベースが必要であり、このデータベースおよびレプリケーションに関係する他のすべてのデータベースと通信するPerlデーモンとして実行されます。マルチマスターまたはマルチスレーブとして実行できます。

    マスター/スレーブレプリケーションには、1つ以上のターゲットに向かう1つ以上のソースが含まれます。ソースはPostgreSQLである必要がありますが、ターゲットはPostgreSQL、MySQL、Redis、Oracle、MariaDB、SQLite、またはMongoDBである可能性があります。

    一部の機能は次のとおりです。

    • 負荷分散

    • スレーブは制約されておらず、書き込むことができます

    • 部分レプリケーション

    • オンデマンドのレプリケーション(変更は自動的に、または必要に応じてプッシュできます)

    • スレーブは、すばやくセットアップするために「事前にウォームアップ」できます

    欠点:

    • DDLを処理できません

    • 大きなオブジェクトを処理できません

    • 一意のキーがないとテーブルを段階的に複製できません

    • Postgres8より古いバージョンでは機能しません

    Postgres-XC

    Postgres-XCは、書き込みスケーラブル、同期、対称、および透過的なPostgreSQLクラスターソリューションを提供するオープンソースプロジェクトです。これは、複数のハードウェアまたは仮想マシンにインストールできる、緊密に結合されたデータベースコンポーネントのコレクションです。

    Write-scalableは、Postgres-XCを必要な数のデータベースサーバーで構成でき、単一のデータベースサーバーで実行できるものと比較してより多くの書き込み(SQLステートメントの更新)を処理できることを意味します。

    クライアントが接続する複数のデータベースサーバーを使用して、データベースの単一の一貫したクラスター全体のビューを提供できます。

    データベースサーバーからのデータベースの更新は、別のマスターで実行されている他のトランザクションにすぐに表示されます。

    透過的とは、データが複数のデータベースサーバーに内部的にどのように保存されているかを心配する必要がないことを意味します。

    複数のサーバーで実行するようにPostgres-XCを構成できます。データは、テーブルごとに選択したとおりに、パーティション化または複製された分散方法で保存されます。クエリを発行すると、Postgres-XCはターゲットデータが保存されている場所を特定し、ターゲットデータを含むサーバーに対応するクエリを発行します。

    シチュス

    Citusは、自動シャーディングやレプリケーションなどの高可用性機能が組み込まれたPostgreSQLのドロップイン代替品です。 Citusはデータベースをシャーディングし、コモディティノードのクラスター全体に各シャードの複数のコピーを複製します。クラスタ内のノードが使用できなくなった場合、Citusは、影響を受けたシャードのコピーを格納している他のノードの1つに書き込みまたはクエリを透過的にリダイレクトします。

    一部の機能は次のとおりです。

    • 自動論理シャーディング

    • 組み込みのレプリケーション

    • ディザスタリカバリのためのデータセンター対応のレプリケーション

    • 高度な負荷分散によるクエリ中のフォールトトレランス

    PostgreSQLを搭載したリアルタイムアプリケーションの稼働時間を増やし、ハードウェア障害によるパフォーマンスへの影響を最小限に抑えることができます。これは、コストがかかりエラーが発生しやすい手動による介入を最小限に抑える組み込みの高可用性ツールを使用して実現できます。

    PostgresXL

    PostgresXLは、シェアードナッシングのマルチマスタークラスタリングソリューションであり、一連のノードにテーブルを透過的に分散し、それらのノードと並行してクエリを実行できます。これには、クラスターのグローバルに一貫したビューを提供するためのGlobal Transaction Manager(GTM)と呼ばれる追加のコンポーネントがあります。

    PostgresXLは、水平方向にスケーラブルなオープンソースSQLデータベースクラスターであり、さまざまなデータベースワークロードを処理するのに十分な柔軟性を備えています。

    • OLTP書き込みの多いワークロード

    • MPP並列処理を必要とするビジネスインテリジェンス

    • 運用データストア

    • キー値ストア

    • GIS地理空間

    • 混合ワークロード環境

    • マルチテナントプロバイダーがホストする環境

    コンポーネント:

    • グローバルトランザクションモニター(GTM):グローバルトランザクションモニターは、クラスター全体のトランザクションの一貫性を保証します。

    • コーディネーター:コーディネーターはユーザーセッションを管理し、GTMおよびデータノードと対話します。

    • データノード:データノードは、実際のデータが保存される場所です。

    まとめ

    PostgreSQLの高可用性環境を実装するために利用できる製品は他にもたくさんありますが、次の点に注意する必要があります。

    • 新製品、十分にテストされていません

    • 廃止されたプロジェクト

    • 制限

    • ライセンス費用

    • 非常に複雑な実装

    • 安全でないソリューション

    使用するソリューションを選択するときは、インフラストラクチャも考慮に入れてください。アプリケーションサーバーが1つしかない場合は、データベースの高可用性をいくら構成しても、アプリケーションサーバーに障害が発生すると、アクセスできなくなります。インフラストラクチャの単一障害点を適切に分析し、それらを解決する必要があります。

    これらの点を考慮に入れると、頭痛の種がなく、ニーズと要件に適応する高可用性クラスターソリューションを見つけることができます。 PGデータベース用の追加のHAリソースを探している場合は、高可用性のためのPostgreSQLのデプロイに関するこの投稿を確認してください。

    データベース管理ソリューションとベストプラクティスの最新情報を入手するには、TwitterとLinkedInでフォローし、ニュースレターを購読してください。


    1. PostgreSQLはデータベースをどこに保存しますか?

    2. SSMSの結果をグリッドに-CRLFはコピー/貼り付けで保存されません-より良いテクニックはありますか?

    3. Oracleでエイリアスを定義するために「as」キーワードは必要ですか?

    4. MySQLストアドプロシージャ