外部の PostgreSQL インスタンスとの Geo
この文書は、Linux パッケージによって管理されていない PostgreSQL インスタンスを使用している場合に関連します。これには Amazon RDS のようなクラウドで管理されているインスタンスや、手動でインストールして設定した PostgreSQL インスタンスが含まれます。
Geoサイトを再構築しなければならない場合にバージョンの不一致を避けるために、Linuxパッケージが同梱しているPostgreSQLバージョンのいずれかを使用していることを確認してください。
プライマリサイト
-
プライマリサイトのRailsノードにSSH接続して、rootでログインします:
sudo -i
-
/etc/gitlab/gitlab.rb
を編集し、追加してください:## ## Geo Primary role ## - configure dependent flags automatically to enable Geo ## roles ['geo_primary_role'] ## ## The unique identifier for the Geo site. See ## https://docs.gitlab.com/ee/administration/geo_sites.html#common-settings ## gitlab_rails['geo_node_name'] = '<site_name_here>'
-
変更を有効にするには、Railsノードを再設定してください:
gitlab-ctl reconfigure
-
Railsノードで以下のコマンドを実行し、サイトをプライマリサイトとして定義します:
gitlab-ctl set-geo-primary-node
このコマンドは
/etc/gitlab/gitlab.rb
で定義したexternal_url
を使用します。
複製する外部データベースの設定
外部データベースを設定するには、次のいずれかを実行します:
- 自分でストリーミングレプリケーションを設定する(Amazon RDSやLinuxパッケージで管理されていないベアメタルなど)。
- 以下のように手動でLinuxパッケージのインストール設定を行います。
クラウドプロバイダーのツールを使用して、プライマリデータベースをレプリケートします。
RDSを使用するAWS EC2にプライマリサイトがセットアップされているとします。別のリージョンに読み取り専用のレプリカを作成するだけで、レプリケーションプロセスはAWSによって管理されます。セカンダリノードがデータベースにアクセスできるように、必要に応じてネットワークACL(アクセス制御リスト)、サブネット、セキュリティグループを設定してください。
以下の手順では、一般的なクラウドプロバイダの読み取り専用レプリカを作成する方法を詳しく説明します:
- Amazon RDS -読み取り専用レプリカの作成
- Azure Database for PostgreSQL -Azure Database for PostgreSQLでのリードレプリカの作成と管理
- Google Cloud SQL -リードレプリカの作成
読み取り専用レプリカの設定が完了したら、セカンダリサイトの設定に進むことができます。
手動でプライマリ・データベースをレプリケーション用に設定します。
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
セカンダリサイトが外部のread-replicaを使用するように設定してください。
Linuxパッケージインストールでは、geo_secondary_role
は主に3つの機能を持っています:
- レプリカデータベースの設定。
- トラッキングデータベースの設定
- Geo ログカーソルを有効にします。
外部のリード・レプリカ・データベースへの接続を設定し、ログ・カーソルを有効にします:
-
セカンダリサイトの 各Rails、Sidekiq、Geo Log Cursorノードに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インストールを追跡データベースとして使用します。Linuxパッケージでは、roles ['geo_secondary_role']
が設定されると、追跡データベースが自動的に設定されます。このデータベースをLinuxパッケージのインストールの外部で実行したい場合は、以下の手順を使用してください。
クラウド管理型データベースサービス
トラッキングデータベースにクラウドマネージドサービスを使用している場合、トラッキングデータベースユーザーに追加のロールを付与する必要があるかもしれません(デフォルトでは、gitlab_geo
):
- Amazon RDSでは、
rds_superuser
ロールが必要です。 - Azure Database for PostgreSQL には
azure_pg_admin
ロールが必要です。 - Google Cloud SQL には
cloudsqlsuperuser
ロールが必要です。
これは、インストールやアップグレードの際に拡張機能をインストールするためのものです。別の方法として、エクステンションが手動でインストールされていることを確認し、将来のGitLabアップグレード時に発生する可能性のある問題についてお読みください。
トラッキングデータベースの作成
PostgreSQL インスタンスにトラッキングデータベースを作成し、設定します:
- データベース要件文書に従って PostgreSQL をセットアップします。
-
gitlab_geo
ユーザーを任意のパスワードで設定し、gitlabhq_geo_production
データベースを作成し、そのユーザーをデータベースのオーナーにします。このセットアップの例は、セルフコンパイルのインストール・ドキュメントで見ることができます。 -
クラウドで管理されているPostgreSQLデータベースを使用していない場合、セカンダリサイトがトラッキングデータベースと通信できるように、トラッキングデータベースに関連付けられている
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 の設定
このデータベースを使うようにGitLabを設定します。これらの手順はLinuxパッケージとDockerデプロイのためのものです。
-
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_postgresql['enable'] = false # don't use internal managed instance
-
ファイルを保存してGitLab を再設定します。
データベーススキーマの設定
LinuxパッケージとDockerデプロイ用の上記のステップの再設定は、これらのステップを自動的に処理するはずです。
-
このタスクはデータベーススキーマを作成します。データベースユーザーがスーパーユーザーである必要があります。
sudo gitlab-rake db:create:geo
-
Railsデータベースマイグレーション(スキーマとデータの更新)の適用もreconfigureで行います。
geo_secondary['auto_migrate'] = false
が設定されているか、スキーマが手動で作成されている場合、このステップが必要になります:sudo gitlab-rake db:migrate:geo