外部の PostgreSQL インスタンスとの Geo

この文書は、Linux パッケージによって管理されていない PostgreSQL インスタンスを使用している場合に関連します。これには Amazon RDS のようなクラウドで管理されているインスタンスや、手動でインストールして設定した PostgreSQL インスタンスが含まれます。

Geoサイトを再構築しなければならない場合にバージョンの不一致を避けるために、Linuxパッケージが同梱しているPostgreSQLバージョンのいずれかを使用していることを確認してください。

note
Linux パッケージを使用してインストールされたインスタンスは活発に開発され、テストされているため、Linux パッケージを使用してインストールされたインスタンスを実行することを強くお勧めします。ほとんどの外部(Omnibus が管理していない)データベースとの互換性を目指していますが、互換性を保証するものではありません。

プライマリサイト

  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ノードを再設定してください:

    gitlab-ctl reconfigure
    
  4. Railsノードで以下のコマンドを実行し、サイトをプライマリサイトとして定義します:

    gitlab-ctl set-geo-primary-node
    

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

複製する外部データベースの設定

外部データベースを設定するには、次のいずれかを実行します:

  • 自分でストリーミングレプリケーションを設定する(Amazon RDSやLinuxパッケージで管理されていないベアメタルなど)。
  • 以下のように手動でLinuxパッケージのインストール設定を行います。

クラウドプロバイダーのツールを使用して、プライマリデータベースをレプリケートします。

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

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

読み取り専用レプリカの設定が完了したら、セカンダリサイトの設定に進むことができます。

手動でプライマリ・データベースをレプリケーション用に設定します。

geo_primary_role は、pg_hba.confpostgresql.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.confpostgresql.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つの機能を持っています:

  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_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
    
  3. ファイルを保存してGitLab を再設定します。

トラッキングデータベースの設定

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

クラウド管理型データベースサービス

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

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

note
Amazon RDSをトラッキングデータベースとして使いたい場合は、セカンダリデータベースにアクセスできるようにしてください。残念ながら、RDSのPostgreSQLデータベースには送信ルールが適用されないため、同じセキュリティグループを割り当てるだけでは十分ではありません。したがって、read-replicaのセキュリティグループに、ポート5432上の追跡データベースからのTCPトラフィックを許可するインバウンドルールを明示的に追加する必要があります。

トラッキングデータベースの作成

PostgreSQL インスタンスにトラッキングデータベースを作成し、設定します:

  1. データベース要件文書に従って PostgreSQL をセットアップします。
  2. gitlab_geo ユーザーを任意のパスワードで設定し、gitlabhq_geo_production データベースを作成し、そのユーザーをデータベースのオーナーにします。このセットアップの例は、セルフコンパイルのインストール・ドキュメントで見ることができます。
  3. クラウドで管理されている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デプロイのためのものです。

  1. GitLabのセカンダリサーバにSSHで入り、rootでログインします:

    sudo -i
    
  2. 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
    
  3. ファイルを保存してGitLab を再設定します。

データベーススキーマの設定

LinuxパッケージとDockerデプロイ用の上記のステップの再設定は、これらのステップを自動的に処理するはずです。

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

    sudo gitlab-rake db:create:geo
    
  2. Railsデータベースマイグレーション(スキーマとデータの更新)の適用もreconfigureで行います。geo_secondary['auto_migrate'] = false が設定されているか、スキーマが手動で作成されている場合、このステップが必要になります:

    sudo gitlab-rake db:migrate:geo