外部の PostgreSQL インスタンスとの Geo
このドキュメントは、Omnibusによって管理されていないPostgreSQLインスタンスを使用している場合に関連します。 これには、AWS RDSのようなクラウド管理されたインスタンスや、手動でインストールして設定したPostgreSQLインスタンスが含まれます。
一次ノード
-
GitLabのプライマリアプリケーションサーバにSSHで接続し、rootでログインします:
sudo -i
-
/etc/gitlab/gitlab.rb
を編集し、ノードのユニークID(任意の値)を追加します:# The unique identifier for the Geo node. gitlab_rails['geo_node_name'] = '<node_name_here>'
-
変更を有効にするには、プライマリノードを再設定します:
gitlab-ctl reconfigure
-
以下のコマンドを実行して、ノードをプライマリ・ノードとして定義します:
gitlab-ctl set-geo-primary-node
このコマンドは
/etc/gitlab/gitlab.rb
で定義したexternal_url
を使用します。
複製する外部データベースの設定
外部データベースを設定するには、次のいずれかを実行します:
- 自分でストリーミングレプリケーションを設定します(例えばAWS RDSで)。
- Omnibusの設定は、以下のように手動で行います。
クラウド・プロバイダーのツールを活用して、プライマリー・データベースを複製します。
RDSを使用するAWS EC2上にプライマリノードがセットアップされている場合、別のリージョンに読み取り専用のレプリカを作成するだけで、レプリケーションプロセスはAWSによって管理されます。 必要に応じてネットワークACL、サブネット、セキュリティグループを設定し、セカンダリアプリケーションノードがデータベースにアクセスできるようにしてください。
以下の手順では、一般的なクラウドプロバイダの読み取り専用レプリカを作成する方法を詳しく説明します:
- Amazon RDS -リードレプリカの作成
- Azure Database for PostgreSQL -Azure Database for PostgreSQLでのリードレプリカの作成と管理
読み取り専用レプリカの設定が完了したら、セカンダリ・アプリケーション・ノードの設定に進むことができます。
レプリケーション用のプライマリ・データベースの手動設定
geo_primary_role
は、pg_hba.conf
とpostgresql.conf
に変更を加えることで、プライマリノードのデータベースがレプリケートされるように構成します。 外部データベース構成に対して以下の構成変更を手動で行い、その後にPostgreSQLを再起動して変更を有効にするようにしてください:
##
## Geo Primary Role
## - pg_hba.conf
##
host all all <trusted primary IP>/32 md5
host replication gitlab_replicator <trusted primary IP>/32 md5
host all all <trusted secondary IP>/32 md5
host replication gitlab_replicator <trusted secondary IP>/32 md5
##
## Geo Primary Role
## - postgresql.conf
##
wal_level = hot_standby
max_wal_senders = 10
wal_keep_segments = 50
max_replication_slots = 1 # number of secondary instances
hot_standby = on
二次ノード
レプリカデータベースの手動設定
外部レプリカデータベースのpg_hba.conf
、postgresql.conf
、以下の設定を手動で変更し、その後PostgreSQLを再起動して変更を有効にするようにしてください:
##
## Geo Secondary Role
## - pg_hba.conf
##
host all all <trusted secondary IP>/32 md5
host replication gitlab_replicator <trusted secondary IP>/32 md5
host all all <trusted primary IP>/24 md5
##
## Geo Secondary Role
## - postgresql.conf
##
wal_level = hot_standby
max_wal_senders = 10
wal_keep_segments = 10
hot_standby = on
外部リード・レプリカを使用するようにセカンダリ・アプリケーション・ノードを設定します。
Omnibusでは、geo_secondary_role
、主に3つの機能があります:
- レプリカデータベースを設定します。
- トラッキングデータベースを設定します。
- Geoログカーソルを有効にします(このセクションでは説明しません)。
外部リード・レプリカ・データベースへの接続を設定し、ログ・カーソルを有効にするには、以下の手順に従います:
-
GitLabセカンダリアプリケーションサーバにSSHで接続し、rootでログインします:
sudo -i
-
/etc/gitlab/gitlab.rb
を編集し、以下を追加します。## ## Geo Secondary role ## - configure dependent flags automatically to enable Geo ## roles ['geo_secondary_role'] # note this is shared between both databases, # make sure you define the same password in both gitlab_rails['db_password'] = '<your_password_here>' gitlab_rails['db_username'] = 'gitlab' gitlab_rails['db_host'] = '<database_read_replica_host>' # Disable the bundled Omnibus PostgreSQL, since we are # using an external PostgreSQL postgresql['enable'] = false
-
ファイルを保存し、GitLabを再設定します。
追跡データベースの設定
セカンダリノードでは、レプリケーションステータスを追跡し、潜在的なレプリケーションの問題から自動的に回復するために、別のPostgreSQLインストールを追跡データベースとして使用します。Omnibusでは、roles ['geo_secondary_role']
を設定すると、追跡データベースが自動的に設定されます。このデータベースをOmnibusの外部で実行する場合は、以下の手順に従ってください。
トラッキングデータベースにクラウドマネージドサービスを使用している場合、トラッキングデータベースユーザーに追加のロールを付与する必要があるかもしれません(デフォルトでは、gitlab_geo
):
- Amazon RDSには
rds_superuser
ロールが必要です。 - Azure Database for PostgreSQL には
azure_pg_admin
ロールが必要です。
トラッキング・データベースは、パフォーマンス向上のため、セカンダリ・レプリカ・データベースとの FDW接続が必要です。
トラッキング・データベースとして使用する外部データベースをお持ちの場合は、以下の手順に従ってください:
-
セカンダリノードが追跡データベースと通信できるように、追跡データベースに関連付けられている
pg_hba.conf
を手動で変更してください。 変更を有効にするために、PostgreSQL を再起動することを忘れないでください:## ## Geo Tracking Database Role ## - pg_hba.conf ## host all all <trusted tracking IP>/32 md5 host all all <trusted secondary IP>/32 md5
-
GitLabのセカンダリサーバにSSHで接続し、rootでログインします:
sudo -i
-
PostgreSQLインスタンスのあるマシンの接続パラメータと認証情報で
/etc/gitlab/gitlab.rb
:geo_secondary['db_username'] = 'gitlab_geo' geo_secondary['db_password'] = '<your_password_here>' geo_secondary['db_host'] = '<tracking_database_host>' geo_secondary['db_port'] = <tracking_database_port> # change to the correct port geo_secondary['db_fdw'] = true # enable FDW geo_postgresql['enable'] = false # don't use internal managed instance
-
ファイルを保存し、GitLabを再設定します。
-
トラッキングデータベースのマイグレーションを実行します:
gitlab-rake geo:db:create gitlab-rake geo:db:migrate
-
PostgreSQLFDW接続と認証情報を設定します:
以下のスクリプトを
/tmp/geo_fdw.sh
などのファイルに保存し、接続パラメータを環境にあわせて変更してください。 実行するとFDW接続が設定されます。#!/bin/bash # Secondary Database connection params: DB_HOST="<public_ip_or_vpc_private_ip>" DB_NAME="gitlabhq_production" DB_USER="gitlab" DB_PASS="<your_password_here>" DB_PORT="5432" # Tracking Database connection params: GEO_DB_HOST="<public_ip_or_vpc_private_ip>" GEO_DB_NAME="gitlabhq_geo_production" GEO_DB_USER="gitlab_geo" GEO_DB_PORT="5432" query_exec () { gitlab-psql -h $GEO_DB_HOST -U $GEO_DB_USER -d $GEO_DB_NAME -p $GEO_DB_PORT -c "${1}" } query_exec "CREATE EXTENSION postgres_fdw;" query_exec "CREATE SERVER gitlab_secondary FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '${DB_HOST}', dbname '${DB_NAME}', port '${DB_PORT}');" query_exec "CREATE USER MAPPING FOR ${GEO_DB_USER} SERVER gitlab_secondary OPTIONS (user '${DB_USER}', password '${DB_PASS}');" query_exec "CREATE SCHEMA gitlab_secondary;" query_exec "GRANT USAGE ON FOREIGN SERVER gitlab_secondary TO ${GEO_DB_USER};"
注意:上記のスクリプトテンプレートは、Geo マシンから実行することを想定しているためgitlab-psql
を使用していますが、psql
データベースにアクセスできる任意のマシンから実行psql
するように変更することができますpsql
。 またpsql
、AWS RDS 用にpsql
使用することをお勧めしますpsql
。 - ファイルを保存し、GitLabを再起動します。
-
FDWテーブルを入力します:
gitlab-rake geo:db:refresh_foreign_tables