このドキュメントでは、本番環境用に Cloud SQL for PostgreSQL を設定する方法について説明します。Cloud SQL for PostgreSQL は、Google Cloud エコシステムと統合されているフルマネージド RDBMS サービスです。Cloud SQL for PostgreSQL には、次のような特長と機能があります。
- VPC、保存データと転送中のデータの自動暗号化など、Google Cloud のマネージド セキュリティ機能を使用して、複数のアプリケーションとユーザーに対してグローバルにサービスを提供しています。
- プライマリ インスタンスとスタンバイ インスタンスを使用する高可用性アーキテクチャと、インスタンス間の自動フェイルオーバーをサポートします。
- 同じデータベース クラスタにあるマスターノードとリードレプリカとの間の読み取りと書き込みの分離を有効にすることによる、分散化されたデータベース ワークロードをサポートします。
- Cloud Storage と自動化されたデータベース メンテナンスに統合されている自動バックアップをサポートします。
- さまざまなオンライン トランザクション処理(OLTP)ワークロードをサポートします。
Cloud SQL for PostgreSQL インスタンスのデプロイ
Cloud SQL for PostgreSQL インスタンスは、Google Cloud Console または Google Cloud CLI を使用して簡単に設定できます。ここでは、両方の方法について説明します。
コンソール
Google Cloud コンソールで、[SQL] > [インスタンス] ページに移動します。
[インスタンスを作成] をクリックしてから、[PostgreSQL を選択] をクリックします。
[PostgreSQL インスタンスの作成] ページで、次の詳細情報を入力します。
- インスタンス ID: インスタンスの名前を入力します。インスタンス名は永続的であり、後から変更することはできません。
- デフォルトのユーザー パスワード: デフォルトの管理者アカウントとして postgres ユーザーのパスワードを選択します(PostgreSQL インスタンスのデプロイ後に、追加のユーザーを作成できます)。
- リージョンとゾーン: リージョンとゾーンを選択します。関連する Google Cloud サービス(アプリケーションなど)と同じリージョンか、地理的にユーザーに近い場所に PostgreSQL インスタンスをデプロイし、データ処理のレイテンシを短縮することをおすすめします。選択したリージョンを後で変更することはできません。
- データベースのバージョン: 最新バージョンを選択します。または、必要に応じて使用可能な最新バージョンを選択することもできます。
[作成] をクリックして、PostgreSQL インスタンスをデプロイします。または、[設定オプションを表示] をクリックして、追加構成を設定します。
追加の構成オプション
接続: 一般に、PostgreSQL インスタンスはパブリック IP アドレス、プライベート IP アドレス、承認済みネットワークを経由してネットワークに接続します。承認済みネットワークは、リモートからの接続を確立するために設定できる、許可される接続です。たとえば、クライアントの特定の IP アドレスからの接続を許可します。
マシンタイプとストレージ: 割り当てられているリソース(vCPU、RAM)、ストレージ タイプ(SSD または HDD)、ストレージの種類(SSD または HDD)、ストレージの容量に基づいてマシンタイプを選択します。ストレージ容量を増やすと、データベースでサポートされるディスク スループット(MB/秒)と読み取りと書き込みの IOP も増加します。予想されるディスク スループットと IOP の要件に基づいて、ストレージ容量を調整します。
自動バックアップと高可用性: デフォルトで有効になっている自動バックアップ機能を使用して、自動バックアップを実行する時間枠を定義します。さらに、リードレプリカの作成には、ログ先行書き込みを使用するポイントインタイム リカバリ オプションも必要です。これらのログは定期的に更新され、保存容量を使用します。予期しないストレージの問題を回避するには、ポイントインタイム リカバリの使用時にストレージの自動増量を有効にすることをおすすめします。高可用性はデフォルトで無効になっています(マルチゾーン)。自動フェイルオーバーを有効にするには、[高可用性(リージョン)] オプションを選択します。
フラグ: この設定は、インスタンスの設定とパラメータを制御する Cloud SQL メソッドを指定します。これは、非マネージド PostgreSQL インスタンスの
postgresql.conf
ファイルと同等です。完全なリストについては、プロダクトのドキュメントをご覧ください。フラグの値を変更するか、新しいフラグを設定すると、インスタンスの再起動が必要になる場合があります。メンテナンス: このセクションでは、バグの修正やマイナー バージョンのアップグレードなど、メンテナンス タスクを実行する優先時間枠を指定します。通常、メンテナンス オペレーションではインスタンスの再起動が必要になるため、サービスが一時的に中断する可能性があります。今後のメンテナンス イベントの通知をメールで受け取るように登録できます。
ラベル: このセクションでは、Key-Value ペアを定義して PostgreSQL インスタンスを分類します。次に例を示します。
gcloud
PostgreSQL インスタンスを作成します。
gcloud sql instances create postgresql01 \ --cpu=2 \ --memory=7680MB \ --region=us-central1 --zone=us-central1-a
PostgreSQL のデフォルト ユーザーにパスワードを割り当てます(構文の例)。
gcloud sql users set-password postgres \ --instance INSTANCE_NAME \ --password PASSWORD
以下の追加オプションを指定できます。
- データベースのバージョン: サポートされている PostgreSQL のバージョンのいずれか。
- ストレージ タイプ: SSD または HDD のいずれかのストレージ タイプ。
- ストレージ容量: インスタンスの初期のストレージ設定です。
- ストレージの自動増量: 空き容量が少なくなった場合にストレージを追加する Cloud SQL の自動化機能。
- 高可用性: Cloud SQL の高可用性。
- 自動バックアップ: バックアップの開始時間枠。
- ポイントインタイム リカバリ: ポイントインタイム リカバリとログ先行書き込み。
- メンテナンスの時間枠: Cloud SQL で中断を伴うメンテナンスを実行できる 1 時間の時間枠。
- メンテナンスのタイミング: PostgreSQL インスタンスで更新を実行する場合に優先されるタイミング。以前の更新についてはプレビューを指定し、後で更新する場合は本番環境を指定します。
- データベース フラグ: 設定とパラメータを制御する PostgreSQL データベース フラグ。
次の
gcloud
コマンドは、追加のオプションを指定して Cloud SQL for PostgreSQL インスタンスを作成します。gcloud sql instances create postgresql01 \ --cpu=2 \ --memory=7680MB \ --region=us-central1 \ --zone=us-central1-a \ --database-version=POSTGRES_12 \ --storage-type=SSD \ --storage-size=100 \ --storage-auto-increase \ --availability-type=regional \ --backup-start-time=23:30 \ --enable-point-in-time-recovery \ --maintenance-window-day=sun \ --maintenance-window-hour=11 \ --maintenance-release-channel=production \ --database-flags max_connections=100
詳細については、インスタンスの作成をご覧ください。
インスタンスの選択
インスタンスの選択またはサイズ設定には、Cloud SQL for PostgreSQL の Oracle® ワークロードをサポートするマシンタイプを選択します。インスタンス タイプは、次の 2 つのメイングループに分かれています。
- 共有コアマシン - 費用対効果に優れています。
- 専用コア インスタンス: 複数の vCPU とメモリ比率をサポートします。
インスタンス タイプの詳細については、Cloud SQL の料金をご覧ください。
インスタンスのサイズを調整するには、まずソース データベースに割り当てられて使用されているリソースを分析します。Oracle データベース リソースの設定は、V$OSSTAT
システムビューまたは Oracle AWR レポートから取得できます(次の例を参照)。
物理メモリ(データベース サーバーの物理メモリの総バイト数):
SQL> SELECT ROUND(MAX(VALUE)/1024/1024/1024) AS MEM_SIZE_GB
FROM V$OSSTAT
WHERE STAT_NAME = 'PHYSICAL_MEMORY_BYTES';
割り当てられたメモリ:
SQL> SELECT NAME, VALUE, DISPLAY_VALUE FROM V$PARAMETER
WHERE NAME LIKE '%sga%' OR NAME LIKE '%memory%';
CPU コア(利用可能な CPU コア数)
SQL> SELECT VALUE FROM V$OSSTAT
WHERE STAT_NAME = 'NUM_CPU_CORES';
CPU コア(V$LICENSE
ビューを使用する Oracle インスタンスが識別):
SQL> SELECT CPU_CORE_COUNT_CURRENT FROM V$LICENSE;
Oracle AWR レポート リソースの例(Oracle AWR レポートは、特定の Oracle インスタンスのワークロード特性に関する追加の分析情報を表示できます)。
ソース データベースのリソース情報がある場合、最も近い Cloud SQL インスタンス タイプを選択し、いくつかのベンチマークを実行することをおすすめします。ベンチマークの結果は、インスタンスの選択を確定する際に有用です。
高可用性の構成
Oracle の Data Guard と同様に、障害復旧ソリューションを実装することを目的として、Cloud SQL for PostgreSQL は、クラスタのプライマリ インスタンスからスタンバイ インスタンスへの自動フェイルオーバーを実現する高可用性機能を備えています。スタンバイ インスタンスは、プライマリ インスタンスと同じリージョン内の別のゾーンに配置されています。プライマリ インスタンスとスタンバイ インスタンスの永続ディスク間の同期レプリケーションによって、スタンバイ インスタンスは同期された状態で維持されます。この方法では、プライマリへのデータ変更もすべてスタンバイに適用されます。
応答しないインスタンスやゾーンレベルの障害などのプライマリでの障害が発生した場合、Cloud SQL は自動フェイルオーバーを実行します。プライマリ インスタンスは(1 秒間隔の)ハートビートでモニタリングされています。プライマリ インスタンスからハートビートが受信されなくなってから約 60 秒が経過すると、フェイルオーバーがアクティブになります。この時点でプライマリ インスタンスはスタンバイ インスタンスにフェイルオーバーされ、アプリケーションとクライアントは透過的にデータにアクセスできる一方、既存のリードレプリカはそのまま動作し続けます。Active Data Guard とは異なり、スタンバイ インスタンスはスタンバイとして動作する間、読み取り用に開かれていません。Cloud SQL では、リードレプリカはプライマリからの読み込みをオフロードするためにのみ使用できます。
Cloud SQL for PostgreSQL 高可用性(HA)機能は、インスタンスの作成時か、または既存の PostgreSQL インスタンスで有効にできます。手順は次のとおりです。
コンソール
- インスタンスの作成ページで、[設定オプションを表示] > [自動バックアップと高可用性] > [可用性] をクリックしてから、[高可用性(リージョン)] オプションを選択します。
- 既存の PostgreSQL インスタンスの場合は、前述の手順に沿って PostgreSQL インスタンスを編集します。この場合は、データベースを再起動する必要があります。
テストのフェイルオーバーを開始するには、[Cloud SQL] ページに移動し、[フェイルオーバー] をクリックします。
フェイルバックも同じ方法で有効にできます。
gcloud
availability-type
パラメータをregional
に設定して HA を有効にします。gcloud sql instances create postgresql01 \ --cpu=2 \ --memory=7680MB \ --region=us-central1 \ --zone=us-central1-a \ --availability-type=regional
既存の PostgreSQL インスタンスに HA が構成されているかどうかを確認します。
gcloud sql instances describe INSTANCE_NAME
このコマンドの出力に
availabilityType: REGIONAL
が含まれている場合、HA はすでに有効になっています。出力にavailabilityType: ZONAL
が含まれている場合、HA は構成されておらず、patch
コマンドを使用して有効にできます。gcloud sql instances patch INSTANCE_NAME --availability-type REGIONAL
プライマリからスタンバイへのフェイルオーバー テストを開始します。
gcloud sql instances failover PRIMARY_INSTANCE_NAME
フェイルバックするには、新しいプライマリで同じフェイルオーバー コマンドを実行します。
管理ユーザーとアカウント
2 つのデフォルトの PostgreSQL ユーザー アカウントには、初期状態ですべての Cloud SQL for PostgreSQL がインストールされています。これらのアカウントは postgres
と cloudsqlimportexport
です。
postgres アカウント
postgres
アカウントは管理者アカウントであり、Cloud PaaS の Oracle の SYS
ユーザーまたは SYSTEM
ユーザーと同等です。Cloud SQL for PostgreSQL はマネージド サービスであるため、postgres
のユーザーは Oracle の SYS
ユーザーや SYSTEM
ユーザーとは異なり、高度な権限を必要とする特定のシステム プロシージャとテーブルへのアクセスを制限します。
postgres
ユーザーは cloudsqlsuperuser
ロールに含まれ、CREATEROLE
、CREATEDB
、LOGIN
属性(特権)を持っています。SUPERUSER
または REPLICATION
属性は持っていません。
cloudsqlimportexport アカウント
CSV のインポート / エクスポート オペレーションに必要な最小限の権限セットを使用して、cloudsqlimportexport
アカウントが作成されます。これらのオペレーションを実行する独自のユーザーを作成することもできますが、作成しない場合はデフォルトの cloudsqlimportexport
ユーザーが使用されます。cloudsqlimportexport
ユーザーはシステム ユーザーであり、ユーザーが直接使用することはできません。
アカウントの管理(パスワードの追加、削除、変更)
アカウント管理では、新しいユーザー アカウントの作成、既存アカウントのパスワードの変更、不要になったアカウントの削除を行います。これらのアカウントの操作は、Google Cloud コンソール、gcloud
ツール、PostgreSQL クライアントから実行できます。
コンソール
Google Cloud コンソールから既存のアカウントを一覧表示します。手順は次のとおりです。Cloud SQL コンソールに移動 > PostgreSQL インスタンスを選択 > [ユーザー] を選択
アカウントのパスワードを変更するか、アカウントの横にある 3 つの点(その他)アイコンをクリックしてアカウントを完全に削除します。
この画面で、[ユーザー アカウントを作成] をクリックして、新しい PostgreSQL ユーザーを作成できます。
gcloud
既存のユーザー アカウントの一覧を表示します。
gcloud sql users list --instance=postgresql01
出力は次のようになります。
NAME HOST Postgres
appuser
ユーザー アカウントを作成し、パスワードを設定して、appuser
を削除します。gcloud sql users create appuser \ --instance=postgresql01 --password=PASSWORD gcloud sql users set-password appuser \ --host=% --instance=postgresql01 --prompt-for-password gcloud sql users delete appuser --instance=postgresql01
PostgreSQL
モニタリングとアラート
Cloud Logging は、Google Cloud におけるメインのロギングツールです。このツールは、Cloud SQL for PostgreSQL などのリソースのモニタリング ログの収集と表示に使用されます。
Cloud Logging では、次のスクリーンショットのように、イベントレベル(重大、エラー、警告など)、イベントの期間、およびフリーテキスト検索でフィルタリングされた Cloud SQL for PostgreSQL のログを確認できます。
PostgreSQL データベース インスタンスのモニタリング
Oracle の主なモニタリング ツールは、Enterprise Manager と Grid / Cloud Control です。これらのツールを使用すると、データベース セッションと SQL ステートメント レベルで、データベース インスタンスをリアルタイムでモニタリングできます。
Cloud SQL for PostgreSQL は、Google Cloud コンソールを介した同等のモニタリング機能を備えています。この画面で、CPU 使用率、ストレージ使用量、メモリ使用量、読み取り / 書き込みオペレーション、アクティブな接続、1 秒あたりのトランザクション数、上り(内向き) / 下り(外向き)バイト数など、データベース インスタンスの要約ビューを確認できます。Google Cloud Observability は、プライマリ レプリカとリードレプリカ間の自動フェイルオーバー リクエストやレプリケーション ラグなど、Cloud SQL for PostgreSQL を対象とする追加のモニタリング指標を備えています。
次のサンプルグラフは、過去 6 時間の 1 秒あたりのトランザクション数のグラフを示しています。
リードレプリカのモニタリング
プライマリ インスタンスをモニタリングするのと同じ方法で、Google Cloud コンソールからリードレプリカをモニタリングできます。プライマリ インスタンスとリードレプリカ インスタンス間のレプリケーション ステータスを確認する特定の指標があります。これらの指標は、Google Cloud コンソールのリードレプリカ インスタンスの概要ページに入力するために使用されます。
また、コマンドラインからレプリケーションのステータスを確認することもできます。
gcloud sql instances describe REPLICA_NAME
3 つ目の方法は、PostgreSQL クライアントを介してレプリケーションのステータスを確認することです。次の PostgreSQL コマンドでは、リードレプリカのステータスを確認します。
postgres=> \x on Expanded display is on. postgres=> select * from pg_stat_replication; -[ RECORD 1 ]----+------------------------------------------- pid | 74733 usesysid | 16388 usename | cloudsqlreplica application_name | PROJECT_ID:REPLICA_NAME client_addr | REPLICA_IP client_hostname | client_port | 41660 backend_start | 2020-09-28 06:59:38.783981+00 backend_xmin | state | streaming sent_lsn | 0/2939FFA8 write_lsn | 0/2939FFA8 flush_lsn | 0/2939FFA8 replay_lsn | 0/2939FFA8 write_lag | flush_lag | replay_lag | sync_priority | 0 sync_state | async reply_time | 2020-09-28 07:17:52.714969+00 postgres=>
PostgreSQL データベースのモニタリング
このセクションでは、PostgreSQL DBA のルーティンとみなされる追加モニタリング タスクについて説明します。
セッション モニタリング
Oracle セッションは、V$ ビューと呼ばれる動的パフォーマンス ビューに対してクエリを実行することでモニタリングされます。SQL ステートメントによる現在のデータベース アクティビティに関する分析情報をリアルタイムで確認するには、一般に V$SESSION
と V$PROCESS
のビューを使用します。PostgreSQL コマンドと SQL ステートメントの両方を使用して、同様の方法で PostgreSQL のセッション アクティビティをモニタリングできます。
PostgreSQL の pg_stat_activity
動的ビューは、現在のデータベース セッション アクティビティに関する詳細情報を表示します。
postgres=> \x on postgres=> select * from pg_stat_activity where backend_type = 'client backend' and usename != 'cloudsqladmin'; -[ RECORD 1 ]----+----------------------------------------------------------------------------------------------------- datid | 14052 datname | postgres pid | 74750 usesysid | 16389 usename | postgres application_name | psql client_addr | CLIENT_IP client_hostname | client_port | 51904 backend_start | 2020-09-28 07:01:30.214099+00 xact_start | 2020-09-28 07:28:48.982115+00 query_start | 2020-09-28 07:28:48.982115+00 state_change | 2020-09-28 07:28:48.982117+00 wait_event_type | wait_event | state | active backend_xid | backend_xmin | 88513 query | select * from pg_stat_activity where backend_type = 'client backend' and usename != 'cloudsqladmin'; backend_type | client backend postgres=>
長時間トランザクションのモニタリング
パフォーマンスの問題につながる可能性がある長時間実行トランザクションを特定するには、pg_stat_activity
動的ビューに対してクエリを実行します。長時間実行クエリを識別するには、列に query_start
や state
などの適切なフィルタを適用します。
ロックのモニタリング
pg_locks
動的ビューを使用してデータベース ロックをモニタリングできます。このビューで、パフォーマンスの問題につながる可能性のあるロック競合に関するリアルタイムの情報を確認できます。
アラート
モニタリングとロギングに加えて、アラートを使用できます。条件に対するアラートを作成することもできます。
スケーリング
Cloud SQL for PostgreSQL は、垂直方向と水平方向の両方のスケーリング オプションをサポートしています。
インスタンスに割り当てられる CPU とメモリの数を増やすなど、Cloud SQL インスタンスにリソースを追加して、垂直方向にスケーリングします。インスタンスのネットワーク スループットは、CPU とメモリに選択した値によって異なります。
Cloud SQL は最大 30 TB のストレージ容量をサポートしています。一般的に、ストレージ容量を追加すると、インスタンスのスループットとディスク IOP が増加します。Cloud SQL インスタンスのネットワーク スループットには、データの読み取り / 書き込み(ディスク スループット)、クエリの内容、計算、データベースに格納されないその他のデータも含まれます。Cloud SQL インスタンスを垂直方向にスケーリングするときは、これらの要因を考慮することが重要です。
リードレプリカを作成して、水平方向にスケーリングします。リードレプリカを使用すると、プライマリ インスタンスのパフォーマンスと可用性に影響を与えることなく、読み取りワークロードを別の Cloud SQL インスタンスにスケーリングできます。
バックアップとリカバリ
Cloud SQL for PostgreSQL には、オンデマンドと自動の 2 つのデータベースのバックアップ方法があります。オンデマンド バックアップはいつでも実行でき、削除するまで保持されます。自動バックアップでは 4 時間のバックアップ期間が使用され、7 日間保持されます。
Cloud SQL for PostgreSQL データベースのバックアップは、同じインスタンスに復元、既存データの上書きによって復元、または新しいインスタンスに復元できます。また、Cloud SQL for PostgreSQL では、ポイントインタイム リカバリが有効になっており、自動バックアップ オプションが有効になっている限り、特定の時点に PostgreSQL データベースを復元できます。
Cloud SQL for PostgreSQL は、データベースのクローン作成機能を備えています。クローンは、プライマリ インスタンスから作成する必要があります(つまり、レプリカから作成することはできません)。データベースのバックアップ、復元、クローン作成は Google Cloud コンソールまたは gcloud CLI から実行できます。
自動化
Cloud SQL Admin API を使用すると、Cloud SQL for PostgreSQL インスタンスの管理を完全に自動化できます。Cloud SQL Admin API は、インスタンス、データベース、ユーザー、フラグ、オペレーション、SslCerts、Tiers、BackupRuns などのさまざまな種類のリソースを制御する REST API です。詳細については、API ドキュメントをご覧ください。
次のステップ
- Cloud SQL for PostgreSQL ユーザー アカウントの詳細について確認する。
- Oracle ユーザー向け Cloud SQL for PostgreSQL の詳細について確認する。
- Google Cloud に関するリファレンス アーキテクチャ、図、ベスト プラクティスを確認する。Cloud アーキテクチャ センターをご覧ください。