{{< details >}}

  • Tier: 专业版, 旗舰版
  • Offering: 私有化部署

{{< /details >}}

如果您使用的 PostgreSQL 实例不是由 Linux 软件包管理的,本文件与您相关。这包括云管理实例或手动安装和配置的 PostgreSQL 实例。

确保您使用的是 Linux 软件包附带的 PostgreSQL 版本之一,以避免版本不匹配,以防需要重建 Geo 站点。

{{< alert type=”note” >}}

如果您正在使用极狐GitLab Geo,我们强烈建议使用通过 Linux 软件包安装的实例或使用验证过的云管理实例,因为我们会基于这些进行积极开发和测试。我们无法保证与其他外部数据库的兼容性。

{{< /alert >}}

站点

  1. SSH 进入主站点的 Rails 节点并以 root 身份登录:

    sudo -i
    
  2. 编辑 /etc/gitlab/gitlab.rb 并添加:

    ##
    ## Geo 主角色
    ## - 自动配置依赖标志以启用 Geo
    ##
    roles ['geo_primary_role']
    
    ##
    ## Geo 站点的唯一标识符。参见
    ## https://gitlab.cn/docs/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(访问控制列表)、子网和安全组,以便次要 Rails 节点可以访问数据库。

以下说明详细介绍了如何为常见云提供商创建只读副本:

  • Amazon RDS - 创建只读副本
  • Azure Database for PostgreSQL - 在 Azure Database for PostgreSQL 中创建和管理只读副本

设置好只读副本后,您可以跳到配置您的次要站点

{{< alert type=”warning” >}}

使用逻辑复制方法将本地主数据库复制到 RDS 次要数据库是不支持的。

{{< /alert >}}

手动配置主数据库以进行复制

geo_primary_role 配置 节点的数据库以通过对 pg_hba.confpostgresql.conf 的更改进行复制。手动对您的外部数据库配置进行以下配置更改,并确保随后重新启动 PostgreSQL 以使更改生效:

##
## Geo 主角色
## - 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 主角色
## - postgresql.conf
##
wal_level = hot_standby
max_wal_senders = 10
wal_keep_segments = 50
max_replication_slots = 1 # 次要实例的数量
hot_standby = on

次要站点

手动配置副本数据库

手动对外部副本数据库的 pg_hba.confpostgresql.conf 进行以下配置更改,并确保随后重新启动 PostgreSQL 以使更改生效:

##
## Geo 次要角色
## - 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 次要角色
## - postgresql.conf
##
wal_level = hot_standby
max_wal_senders = 10
wal_keep_segments = 10
hot_standby = on

配置次要站点以使用外部只读副本

在 Linux 软件包安装中,geo_secondary_role 具有三个主要功能:

  1. 配置副本数据库。
  2. 配置跟踪数据库。
  3. 启用 Geo 日志游标(本节不涉及)。

要配置连接到外部只读副本数据库并启用日志游标:

  1. SSH 进入您次要站点的 Rails、Sidekiq 和 Geo 日志游标节点,并以 root 身份登录:

    sudo -i
    
  2. 编辑 /etc/gitlab/gitlab.rb 并添加以下内容:

    ##
    ## Geo 次要角色
    ## - 自动配置依赖标志以启用 Geo
    ##
    roles ['geo_secondary_role']
    
    # 注意这是两个数据库共享的,
    # 确保在两个数据库中定义相同的密码
    gitlab_rails['db_password'] = '<your_primary_db_password_here>'
    
    gitlab_rails['db_username'] = 'gitlab'
    gitlab_rails['db_host'] = '<database_read_replica_host>'
    
    # 禁用捆绑的 Omnibus PostgreSQL,因为我们
    # 使用的是外部 PostgreSQL
    postgresql['enable'] = false
    
  3. 保存文件并重新配置极狐GitLab

配置跟踪数据库

次要站点使用单独的 PostgreSQL 安装作为跟踪数据库,以跟踪复制状态并自动从潜在的复制问题中恢复。当设置 roles ['geo_secondary_role'] 时,Linux 软件包会自动配置一个跟踪数据库。如果您希望在 Linux 软件包安装之外运行此数据库,请使用以下说明。

云管理的数据库服务

如果您使用云管理服务作为跟踪数据库,您可能需要为跟踪数据库用户(默认情况下为 gitlab_geo)授予其他角色:

  • Amazon RDS 需要 rds_superuser 角色。
  • Azure Database for PostgreSQL 需要 azure_pg_admin 角色。

这是用于在安装和升级期间安装扩展的。作为替代方案,请确保手动安装扩展,并阅读有关在未来极狐GitLab 升级期间可能出现的问题

{{< alert type=”note” >}}

如果您想使用 Amazon RDS 作为跟踪数据库,请确保它可以访问次要数据库。不幸的是,仅分配相同的安全组是不够的,因为出站规则不适用于 RDS PostgreSQL 数据库。因此,您需要在读取副本的安全组中显式添加一个入站规则,允许来自跟踪数据库的任何 TCP 流量通过端口 5432。

{{< /alert >}}

创建跟踪数据库

在您的 PostgreSQL 实例中创建并配置跟踪数据库:

  1. 根据数据库需求文档设置 PostgreSQL。
  2. 设置一个带有您选择的密码的 gitlab_geo 用户,创建 gitlabhq_geo_production 数据库,并将该用户设为数据库的所有者。您可以在自编译安装文档中看到此设置的示例。
  3. 如果您使用云管理的 PostgreSQL 数据库,请确保您的次要站点可以与跟踪数据库通信,方法是手动更改与您的跟踪数据库关联的 pg_hba.conf。请记得随后重新启动 PostgreSQL 以使更改生效:

    ##
    ## Geo 跟踪数据库角色
    ## - pg_hba.conf
    ##
    host    all         all               <trusted tracking IP>/32      md5
    host    all         all               <trusted secondary IP>/32     md5
    

配置极狐GitLab

配置极狐GitLab 以使用此数据库。这些步骤适用于 Linux 软件包和 Docker 部署。

  1. SSH 进入极狐GitLab 次要服务器并以 root 身份登录:

    sudo -i
    
  2. 编辑 /etc/gitlab/gitlab.rb,并为具有 PostgreSQL 实例的机器设置连接参数和凭据:

    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>      # 更改为正确的端口
    geo_postgresql['enable'] = false     # 不使用内部管理实例
    
  3. 保存文件并重新配置极狐GitLab

设置数据库架构

对于 Linux 软件包和 Docker 部署,上面的步骤 中的重新配置应该会自动处理这些步骤。

  1. 此任务创建数据库架构。它要求数据库用户为超级用户。

    sudo gitlab-rake db:create:geo
    
  2. 通过重新配置还执行 Rails 数据库迁移(架构和数据更新)。如果设置了 geo_secondary['auto_migrate'] = false,或架构是手动创建的,则需要此步骤:

    sudo gitlab-rake db:migrate:geo