StackGresを使用したOCI Kubernetesクラスタへの高可用性PostgreSQLスタックのデプロイ
PostgreSQLをクラウドにデプロイする場合、Oracle Cloud Infrastructure (OCI)は、サーバーレスでスケーラブルで可用性の高いマイクロサービスのためのOracle Container Engine for Kubernetesを備えた理想的な環境を提供します。StackGresは、簡単なデプロイメント・ユニットにパックされたKubernetesのフル・スタックのPostgreSQLディストリビューションを提供します。
StackGresには、接続プーリング、自動バックアップ、監視、一元化されたロギング、フル機能の管理Webコンソールが含まれます。StackGresは、Postgres: Patroniの最も有名な本番テスト済の高可用性ソフトウェアを統合します。
- 完全に統合されています。障害が発生した場合、クラスタは人的介入なしで自動的に修復されます。
- StackGresは、アプリケーションに対して1つの読取り/書込み接続と1つの読取り専用接続を公開し、中断が発生すると自動的に更新されます。
エンタープライズグレードのPostgreSQLスタックには、他のいくつかのエコシステム・コンポーネントと大幅なチューニングが必要です。これには、接続プーリング、自動フェイルオーバーおよびHA、監視、バックアップおよびDRが必要です。このソリューション・プレイブックに示されているStackGresパッケージとOCIコンポーネントは、低コストでスケーラブルで可用性の高いデプロイメントを提供します。
アーキテクチャ
このアーキテクチャは、Oracle Container Engine for KubernetesクラスタにPostgreSQLをデプロイする方法を示しています。このアーキテクチャは、PostgreSQL機能を利用する本番対応環境に使用します。
- ベンダー・ロックインなし: PostgreSQLはすべてのKubernetes環境で機能します。
- フル機能のWebコンソールが含まれています。
- Postgresプラットフォームは、世界で最も多くの拡張機能を備えています。
- x86-64およびARM64 Kubernetesワーカー・ノードで実行されます。
- 完全オープン・ソース(無料の「コミュニティ」と高価な「エンタープライズ」バージョンとの間に分割なし)。
- 使用されるコアに基づいたサポートと更新の価格。
- 「vanilla」PostgresおよびBabelfish (SQL Serverの互換性を提供する)が含まれます。
次の図は、このリファレンス・アーキテクチャを示しています。
アーキテクチャには、次のコンポーネントがあります。
- テナント
テナンシは、Oracle Cloud Infrastructureへのサインアップ時にOracleがOracle Cloud内で設定するセキュアで分離されたパーティションです。テナンシ内のOracle Cloudでリソースを作成、編成および管理できます。テナンシは、会社または組織と同義です。通常、会社は単一のテナンシを持ち、そのテナンシ内の組織構造を反映します。通常、単一のテナンシは単一のサブスクリプションに関連付けられ、単一のサブスクリプションには1つのテナンシのみが含まれます。
- リージョン
Oracle Cloud Infrastructureリージョンは、可用性ドメインと呼ばれる1つ以上のデータ・センターを含むローカライズされた地理的領域です。リージョンは他のリージョンから独立しており、広大な距離で(複数の国または複数の大陸にまたがる)リージョンを分離できます。
- コンパートメント
コンパートメントは、Oracle Cloud Infrastructureテナンシ内のリージョン間論理パーティションです。コンパートメントを使用して、Oracle Cloudでリソースを編成、リソースへのアクセスを制御および使用割当てを設定します。特定のコンパートメント内のリソースへのアクセスを制御するには、誰がリソースにアクセスできるか、どのアクションを実行できるかを指定するポリシーを定義します。
- 可用性ドメイン
可用性ドメインは、リージョン内の独立したスタンドアロン・データ・センターです。各可用性ドメイン内の物理リソースは、他の可用性ドメイン内のリソースから分離されているため、フォルト・トレランスが提供されます。可用性ドメインどうしは、電力や冷却、内部可用性ドメイン・ネットワークなどのインフラを共有しません。そのため、ある可用性ドメインでの障害がリージョン内の他の可用性ドメインに影響することはほとんどありません。
1つの可用性ドメインが表示されますが、本番要件に応じて複数の可用性ドメインにデプロイできます。
- フォルト・ドメイン
フォルト・ドメインは、可用性ドメイン内のハードウェアおよびインフラストラクチャのグループです。各アベイラビリティ・ドメインに3つのフォルト・ドメインがあり、それぞれ独立した電源とハードウェアがあります。複数のフォルト・ドメインにリソースを分散すると、アプリケーションは、フォルト・ドメイン内の物理サーバー障害、システム・メンテナンスおよび電源障害を許容できます。
1つのフォルト・ドメインが表示されますが、本番要件に応じて複数のフォルト・ドメインにデプロイできます。
- 仮想クラウド・ネットワーク(VCN)およびサブネット
VCNは、Oracle Cloud Infrastructureリージョンで設定する、カスタマイズ可能なソフトウェア定義のネットワークです。VCNは、従来のデータ・センター・ネットワークと同様に、ネットワーク環境の完全な制御を可能にします。VCNには重複しない複数のCIDRブロックを含めることができ、VCNの作成後にそれらを変更できます。VCNをサブネットにセグメント化して、そのスコープをリージョンまたは可用性ドメインに設定できます。各サブネットは、VCN内の他のサブネットと重複しない連続した範囲のアドレスで構成されます。サブネットのサイズは、作成後に変更できます。サブネットはパブリックにもプライベートにもできます。
- ロード・バランサ
Oracle Cloud Infrastructure Load Balancingサービスは、単一のエントリ・ポイントからバックエンドの複数のサーバーへの自動トラフィック分散を提供します。
- Bastionサービス
Oracle Cloud Infrastructure Bastionは、パブリック・エンドポイントがなく、ベア・メタルや仮想マシン、Oracle MySQL Database Service、Autonomous Transaction Processing (ATP)、Oracle Container Engine for Kubernetes (OKE)、およびSecure Shell Protocol (SSH)アクセスを許可するその他のリソースなど、厳密なリソース・アクセス制御を必要とするリソースへの制限および時間制限付きのセキュア・アクセスを提供します。Oracle Cloud Infrastructure Bastionサービスでは、ジャンプ・ホストをデプロイおよび保守せずにプライベート・ホストへのアクセスを有効にできます。さらに、アイデンティティ・ベースの権限と集中管理された監査済および期限付きSSHセッションにより、セキュリティ・ポスチャが向上します。Oracle Cloud Infrastructure Bastionを使用すると、要塞アクセス用のパブリックIPが不要になり、リモート・アクセスを提供する際の手間や潜在的な攻撃対象領域が排除されます。
- セキュリティ・リスト
サブネットごとに、サブネットの内外で許可する必要があるトラフィックのソース、宛先およびタイプを指定するセキュリティ・ルールを作成できます。
- ネットワーク・アドレス変換(NAT)ゲートウェイ
NATゲートウェイを使用すると、VCN内のプライベート・リソースは、受信インターネット接続にそれらのリソースを公開することなく、インターネット上のホストにアクセスできます。
- サービス・ゲートウェイ
サービス・ゲートウェイは、VCNからOracle Cloud Infrastructure Object Storageなどの他のサービスへのアクセスを提供します。The traffic from the VCN to the Oracle service travels over the Oracle network fabric and never traverses the internet.
- Dynamic routing gateway (DRG)
DRGは、VCNとリージョン外部のネットワーク(別のOracle Cloud InfrastructureリージョンのVCN、オンプレミス・ネットワーク、別のクラウド・プロバイダ内のネットワークなど)間の、同じリージョン内のVCN間のプライベート・ネットワーク・トラフィックのパスを提供する仮想ルーターです。
- オブジェクト・ストレージ
オブジェクト・ストレージでは、データベースのバックアップ、分析データ、イメージやビデオなどのリッチ・コンテンツなど、あらゆるコンテンツ・タイプの構造化データおよび非構造化データにすばやくアクセスできます。インターネットから直接またはクラウド・プラットフォーム内から、安全かつセキュアにデータを格納し、取得できます。パフォーマンスやサービスの信頼性を損なうことなく、シームレスにストレージを拡張できます。迅速、即時、頻繁にアクセスする必要があるホット・ストレージには、標準ストレージを使用します。長期間保持し、ほとんどまたはほとんどアクセスしないコールド・ストレージには、アーカイブ・ストレージを使用します。
- インターネット・ゲートウェイ
インターネット・ゲートウェイにより、VCN内のパブリック・サブネットとパブリック・インターネットの間のトラフィックが許可されます。
- FastConnect
Oracle Cloud Infrastructure FastConnectは、データ・センターとOracle Cloud Infrastructureの間に専用のプライベート接続を簡単に作成する方法を提供します。FastConnectは、インターネットベースの接続と比較して、高帯域幅のオプションとより信頼性の高いネットワーク・エクスペリエンスを提供します。
- ローカル・ピアリング・ゲートウェイ(LPG)
LPGを使用すると、1つのVCNを同じリージョン内の別のVCNとピア接続できます。ピアリングとは、VCNが、インターネットを経由するトラフィックやオンプレミス・ネットワークを介するルーティングを必要とせずに、プライベートIPアドレスを使用して通信することを意味します。
- Container Engine for Kubernetes
Oracle Cloud Infrastructure Container Engine for Kubernetesは、コンテナ化されたアプリケーションをクラウドにデプロイするために使用できる、完全に管理されたスケーラブルで可用性の高いサービスです。アプリケーションで必要なコンピュート・リソースを指定すると、Container Engine for KubernetesがそれらをOracle Cloud Infrastructureの既存のテナンシにプロビジョニングします。Container Engine for KubernetesはKubernetesを使用して、ホストのクラスタ間でコンテナ化されたアプリケーションのデプロイメント、スケーリングおよび管理を自動化します。
- PostgreSQL
PostgreSQLは、拡張性が高くスケーラブルなオープンソースのリレーショナル・データベース管理システム(RDBMS)です。SQL (リレーショナル)およびJSON (非リレーショナル)問合せをサポートしています。
- StackGres
StackGresは、簡単なデプロイメント・ユニットにパックされた、Kubernetesのフル・スタックのPostgreSQLディストリビューションです。これには、慎重に選択およびチューニングされた、周囲のPostgreSQLコンポーネントのセットが含まれます。
- クラウド・ガード
Oracle Cloud Guardを使用して、Oracle Cloud Infrastructure内のリソースのセキュリティをモニターおよびメンテナンスできます。クラウド・ガードでは、ディテクタ・レシピを使用して、リソースでセキュリティの弱点を調べ、オペレータおよびユーザーにリスクのあるアクティビティを監視するために定義できます。構成の誤りやセキュアでないアクティビティが検出されると、クラウド・ガードは、定義できるレスポンダ・レシピに基づいて、修正処理を推奨し、それらのアクションの実行を支援します。
- 分散型サービス拒否(DDoS)保護
分散型サービス拒否(DDoS)攻撃は、圧倒的な量の受信トラフィックで企業サーバーを洪水する攻撃者によって犯される深刻なサイバー犯罪です。この圧倒的な量のトラフィックは、膨大な数のソースとジオロケーションから発生し、ユーザーは会社のサービスおよびサイトにアクセスできません。すべてのOracle Cloudデータ・センターに、高ボリューム・レイヤー3または4のDDoS攻撃に対するDDoS攻撃の検出と軽減機能があります。Oracle CloudからのこれらのDDoS保護サービスは、持続的なレイヤー3または4攻撃であっても、Oracleネットワーク・リソースの可用性を確保するのに役立ちます。
- アイデンティティおよびアクセス管理(IAM)
Oracle Cloud Infrastructure Identity and Access Management (IAM) is the access control plane for Oracle Cloud Infrastructure (OCI) and Oracle Cloud Applications.IAM APIおよびユーザー・インタフェースを使用すると、アイデンティティ・ドメインおよびアイデンティティ・ドメイン内のリソースを管理できます。各OCI IAMアイデンティティ・ドメインは、スタンドアロンのアイデンティティおよびアクセス管理ソリューションまたは異なるユーザー人口を表します。
- ロギングLoggingは、クラウド内のリソースから次のタイプのログへのアクセスを提供する高度にスケーラブルで完全管理型のサービスです:
- 監査ログ: Auditサービスによって発行されるイベントに関連するログ。
- サービス・ログ: APIゲートウェイ、イベント、ファンクション、ロード・バランシング、オブジェクト・ストレージ、VCNフロー・ログなどの個々のサービスによって発行されたログ。
- カスタム・ログ: カスタム・アプリケーション、他のクラウド・プロバイダまたはオンプレミス環境からの診断情報を含むログ。
- 監査
Oracle Cloud Infrastructure Auditサービスでは、Oracle Cloud Infrastructureのサポートされるすべてのパブリック・アプリケーション・プログラミング・インタフェース(API)エンドポイントへのコールがログ・イベントとして自動的に記録されます。現在、すべてのサービスがOracle Cloud Infrastructure Auditによるロギングをサポートしています。
推奨事項
- VCN
VCNを作成するときには、必要なCIDRブロックの数を決定し、VCN内のサブネットにアタッチする予定のリソースの数に基づいて各ブロックのサイズを決定します。標準プライベートIPアドレス空間内のCIDRブロックを使用します。
プライベート接続を設定する他のネットワーク(Oracle Cloud Infrastructure、オンプレミス・データ・センターまたは別のクラウド・プロバイダ)と重複しないCIDRブロックを選択します。
VCNを作成した後、そのCIDRブロックを変更、追加および削除できます。
サブネットを設計するときには、トラフィック・フローおよびセキュリティ要件を考慮してください。特定の層またはロール内のすべてのリソースを同じサブネットに接続し、セキュリティ境界として機能できます。
リージョナル・サブネットを使用します。
- クラウド・ガード
Oracleによって提供されるデフォルトのレシピをクローニングおよびカスタマイズして、カスタム・ディテクタおよびレスポンダ・レシピを作成します。これらのレシピを使用すると、警告を生成するセキュリティ違反のタイプと、そのレシピに対して実行できるアクションを指定できます。たとえば、表示がパブリックに設定されているオブジェクト・ストレージ・バケットを検出できます。
クラウド・ガードをテナンシ・レベルで適用して、範囲を広げ、複数の構成を維持する管理上の負担を軽減します。
管理対象リスト機能を使用して、特定の構成をディテクタに適用することもできます。
- セキュリティ・ゾーン
最大限のセキュリティが必要なリソースの場合、Oracleではセキュリティ・ゾーンを使用することをお薦めします。セキュリティ・ゾーンは、ベスト・プラクティスに基づくセキュリティ・ポリシーのOracle定義レシピに関連付けられたコンパートメントです。たとえば、セキュリティ・ゾーン内のリソースにはパブリック・インターネットからアクセスできず、顧客管理キーを使用して暗号化する必要があります。When you create and update resources in a security zone, Oracle Cloud Infrastructure validates the operations against the policies in the security-zone recipe, and denies operations that violate any of the policies.
- ネットワーク・セキュリティ・グループ(NSG)
NSGを使用して、特定のVNICに適用されるイングレスおよびエグレス・ルールのセットを定義できます。NSGではVCNのサブネット・アーキテクチャをアプリケーションのセキュリティ要件から分離できるため、セキュリティ・リストではなくNSGを使用することをお薦めします。
- ロード・バランサの帯域幅
ロード・バランサの作成時に、固定帯域幅を提供する事前定義済のシェイプを選択するか、帯域幅範囲を設定するカスタム(フレキシブル)シェイプを指定して、トラフィック・パターンに基づいてサービスで帯域幅を自動的にスケーリングできます。どちらの方法でも、ロード・バランサの作成後にいつでもシェイプを変更できます。
考慮事項
このアーキテクチャをデプロイするときは、次のオプションを考慮してください。
- ARMプロセッサによるホモロジー
StackGresはARM (Ampere A1 Compute)で実行できます。
- アーキテクチャ・オプション
このドキュメントのアーキテクチャは提案であり、プロジェクトのニーズに応じて変更できます。
- Postgres拡張機能
使用できる130を超えるPostgres拡張のStackGresソース。
- ユーザー権限
最小特権のセキュリティーベストプラクティスの使用: rootまたはスーパーユーザー特権へのアカウントアクセスを、実際に必要な場合にのみ制限します。
- モニタリング
OCIイベント、OCIロギング、OCIモニタリングなどのOCIサービスに加えて、PrometheusまたはGrafanaを使用して監視できます。
- バックアップ
StackGresには、データ損失ゼロ・リカバリを可能にする継続的なアーカイブベースのバックアップが含まれています。
バックアップは、現在使用可能な最も耐久性のあるメディア(OCI Object Storage)に常に格納されます。
以下のベスト・プラクティスにしたがってください。
- データベースをインターネットに公開しないでください。
- 可能な場合は、Stackgresで使用されるクラスタからアプリケーション・クラスタを分離します。
- 同じクラスタにアプリケーションを作成する場合は、Oracleではアプリケーションに別のネームスペースを作成することを強くお薦めします。
- Intel、AMDまたはARMプロセッサを選択する際、Postgres環境をアンダースコアにしないようにワークロードのサイズを考慮します。
必要な製品およびロールについて
このソリューションには、次の製品とロールが必要です。
-
Oracle Cloud Infrastructure
-
Oracle Cloud Infrastructure Cloud Shell
-
PostgreSQL
-
スタック
各サービスに必要なロールは次のとおりです。
サービス名: ロール | 必要... |
---|---|
OCI: Administrator |
コンピュート、ネットワーク、可観測性および管理サービス、OCI Cloud Shellなどのリソースへの完全なアクセス。 |
Oracle Cloud Infrastructure Cloud Shell OCI Cloud Shellを使用するには、テナンシのルート・コンパートメントに管理者が記述したポリシーで必要なアクセスのタイプが付与されている必要があります。 |
kubectlコマンドライン・ユーティリティを使用して、StackGresのKubernetesクラスタを構成します。 |
必要なものを取得するには、Oracle製品、ソリューションおよびサービスを参照してください。