正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

外部PostgreSQLインスタンスでのGitLab Geo

  • プラン: Premium、Ultimate
  • 提供形態: GitLab Self-Managed

このドキュメントは、Linuxパッケージによって管理されていないPostgreSQLデータベースのインスタンスを使用している場合に該当します。これには、クラウドで管理されたインスタンス、または手動でインストールおよび構成されたPostgreSQLデータベースのインスタンスが含まれます。

Geoサイトを再構築する必要がある場合にバージョンのミスマッチを回避するために、Linuxパッケージに同梱されている PostgreSQLデータベースのバージョンのいずれかを使用していることを確認してください。バージョンの不一致を回避するようにしてください。

GitLab Geoを使用している場合は、Linuxパッケージを使用するか、検証済みのクラウド管理インスタンスを使用してインストールされたインスタンスを実行することを強くお勧めします。これらに基づいて積極的に開発およびテストを行っているためです。他の外部データベースとの互換性は保証されていません。

プライマリサイト

  1. プライマリサイトのRailsノードにSSHで接続し、rootとしてログインします:

    sudo -i
  2. /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>'
  3. 変更を有効にするには、Rails node(Railsノード)を再構成します:

    gitlab-ctl reconfigure
  4. サイトをプライマリサイトとして定義するには、Rails node(Railsノード)で次のコマンドを実行します:

    gitlab-ctl set-geo-primary-node

    このコマンドは、external_urlで定義された/etc/gitlab/gitlab.rbを使用します。

外部データベースがレプリケーションされるように構成します

外部データベースをセットアップするには、次のいずれかを実行します:

  • 自分でストリーミングレプリケーションを設定します(たとえば、Amazon RDS、またはLinuxパッケージで管理されていないベアメタル)。
  • 次のように、Linuxパッケージインストールの設定を手動で実行します。

プライマリデータベースをレプリケートするために、クラウドプロバイダーのツールを活用する

RDSを使用するAWS EC2にプライマリサイトがセットアップされているとします。これで、別のリージョンに読み取り専用レプリカを作成でき、レプリケーションプロセスはAWSによって管理されます。セカンダリRailsノードがデータベースにアクセスできるように、必要に応じてネットワークACL(アクセス制御リスト)、サブネット、およびセキュリティグループを設定していることを確認してください。

次の手順では、一般的なクラウドプロバイダーの読み取り専用レプリカを作成する方法について詳しく説明します:

読み取り専用レプリカがセットアップされたら、セカンダリサイトを設定するに進むことができます

たとえば、オンプレミスのプライマリデータベースからRDSセカンダリにレプリケートするために、AWS PostgreSQLデータベース移行サービスGoogle Cloud 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

外部リードレプリカのデータベースを使用するようにセカンダリサイトを構成する

Linuxパッケージのインストールでは、geo_secondary_roleには3つの主な機能があります:

  1. レプリカデータベースを構成します。
  2. トラッキングデータベースを構成します。
  3. Geoログカーソルを有効にします(このセクションでは説明しません)。

外部リードレプリカのデータベースへの接続を構成し、ログカーソルを有効にするには:

  1. セカンダリサイトの各Rails、Sidekiq、Geo Log CursorノードにSSHで接続し、rootとしてログインします:

    sudo -i
  2. /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_primary_db_password_here>'
    
    gitlab_rails['db_username'] = 'gitlab'
    gitlab_rails['db_host'] = '<database_read_replica_host>'
    
    # Disable the bundled Omnibus PostgreSQL because we are
    # using an external PostgreSQL
    postgresql['enable'] = false
  3. ファイルを保存して、GitLabを再構成します

トラッキングデータベースを構成する

セカンダリサイトは、レプリケーションステータスを追跡し、潜在的なレプリケーションのイシューから自動的に回復するために、別のPostgreSQLデータベースインストールをトラッキングデータベースとして使用します。Linuxパッケージは、roles ['geo_secondary_role']が設定されている場合、自動的にトラッキングデータベースを構成します。このデータベースをLinuxパッケージのインストール以外で実行する場合は、次の手順を使用します。

内部および外部トラッキングデータベースについて

トラッキングデータベースは、次のいずれかになるように構成できます:

  • 内部(geo_postgresql['enable'] = true): トラッキングデータベースPostgreSQLデータベースインスタンスとして実行されます。これはデフォルトです。これはデフォルトです。
  • 外部(geo_postgresql['enable'] = false): トラッキングデータベースは、別のサーバー上、またはクラウド管理サービスとして実行されます。

マルチノードセカンダリサイトのセットアップでは、1つのRailsノードでトラッキングデータベースを有効にすると、サイト内の他のすべてのRailsノードに対して「外部」になります。他のすべてのRailsノードは、geo_postgresql['enable'] = falseを設定し、そのトラッキングデータベースに接続するための接続詳細を指定する必要があります。

クラウドプロバイダー管理データベースサービス

トラッキングデータベースにクラウド管理サービスを使用している場合は、トラッキングデータベースユーザーに追加のロールを付与する必要がある場合があります(デフォルトではgitlab_geoです):

これは、インストールとアップグレード中に拡張機能をインストールするためです。別の方法として、拡張機能が手動でインストールされていることを確認し、将来のGitLabアップグレード中に発生する可能性のある問題についてお読みください

Amazon RDSをトラッキングデータベースとして使用する場合は、セカンダリデータベースへのアクセス権があることを確認してください。残念ながら、送信ルールはRDS PostgreSQLデータベースには適用されないため、同じセキュリティグループを割り当てるだけでは十分ではありません。したがって、ポート5432のトラッキングデータベースTCPトラフィックを許可する受信ルールを、読み取り専用のセキュリティグループに明示的に追加する必要があります。

トラッキングデータベースを作成する

PostgreSQLインスタンスでトラッキングデータベースを作成および構成します:

  1. データベース要件に関するドキュメントに従ってPostgreSQLをセットアップします。

  2. 任意のパスワードを持つgitlab_geoユーザーをセットアップし、gitlabhq_geo_productionデータベースを作成して、ユーザーをデータベースのオーナーにします。このセットアップの例は、セルフコンパイルインストールのドキュメントにあります。

  3. クラウドプロバイダー管理のPostgreSQLデータベースを使用not(していない)場合は、セカンダリサイトがトラッキングデータベースと関連付けられている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
    # In multi-node setups, add entries for all Rails nodes that will connect

GitLabを設定する

このデータベースを使用するようにGitLabを構成します。これらの手順は、LinuxパッケージおよびDockerデプロイ用です。

  1. GitLab セカンダリサーバーにSSHで接続し、rootとしてログインします:

    sudo -i
  2. PostgreSQLインスタンスを備えたマシンの接続パラメータと認証情報を使用して/etc/gitlab/gitlab.rbを編集します:

    geo_secondary['db_username'] = 'gitlab_geo'
    geo_secondary['db_password'] = '<your_tracking_db_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

    マルチノードのセットアップでは、外部トラッキングデータベースへの接続が必要な各Railsノードにこの設定を適用します。

  3. ファイルを保存して、GitLabを再構成します

データベーススキーマをセットアップする

LinuxパッケージおよびDockerデプロイの以前にリストされた手順の再構成コマンドは、これらの手順を自動的に処理する必要があります。

  1. このタスクは、データベーススキーマを作成します。データベースユーザーがスーパーユーザーである必要があります。

    sudo gitlab-rake db:create:geo
  2. Railsデータベースの移行(スキーマとデータの更新)の適用も、再構成によって実行されます。geo_secondary['auto_migrate'] = falseが設定されている場合、またはスキーマが手動で作成された場合、この手順が必要になります:

    sudo gitlab-rake db:migrate:geo