Geo 与外部 PostgreSQL 实例

如果您使用不是由 Omnibus 管理的 PostgreSQL 实例,则适用本文档。 确保您使用 Linux 软件包附带的 PostgreSQL 版本之一,避免版本不匹配,防止必须重建 Geo 站点。

note 我们强烈建议运行 Linux 软件包托管的实例,因为它们正在积极开发和测试。我们的目标是与大多数外部(不由 Omnibus 管理)数据库兼容,但我们不保证兼容性。

主要站点

  1. 通过 SSH 连接到您的主要站点上的 Rails 节点,并以 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_nodes.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

配置要复制的外部数据库

要设置外部数据库,您可以:

  • 自行设置流复制
  • 手动执行 Linux 软件包配置,如下所示。

利用您的云提供商的工具来复制主数据库

假设您在 AWS EC2 上设置了一个使用 RDS 的主要站点。 您现在可以在不同区域创建只读副本,并且复制过程由 AWS 管理。确保您已根据需要设置网络 ACL(访问控制列表)、子网和安全组,以便次要 Rails 节点可以访问数据库。

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

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

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

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

使用 Linux 软件包时,geo_secondary_role 具有三个主要功能:

  1. 配置副本数据库。
  2. 配置跟踪数据库。
  3. 启用 Geo Log Cursor(本节未介绍)。

配置与外部只读副本数据库的连接并启用 Log Cursor:

  1. SSH 到您的次要站点上的每个 Rails、Sidekiq 和 Geo Log Cursor 节点,并以 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 安装作为跟踪数据库来跟踪复制状态,并自动从潜在的复制问题中恢复。当 roles ['geo_secondary_role'] 设置时,Linux 软件包会自动配置跟踪数据库。 如果要在 Linux 软件包外部运行此数据库,请使用以下说明。

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

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

要设置外部跟踪数据库,请按照以下说明操作:

  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
    
  4. SSH 进入极狐GitLab 次要服务器并以 root 身份登录:

    sudo -i
    
  5. 使用具有 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
    
  6. 保存文件并重新配置极狐GitLab

  7. 重新配置应该自动创建数据库。如果需要,您可以手动执行此任务。此任务(无论是自行运行还是在重新配置期间运行)要求数据库用户是超级用户。

    gitlab-rake db:create:geo
    
  8. 重新配置应自动迁移数据库。如果需要,您可以手动迁移数据库,例如 geo_secondary['auto_migrate'] = false

    gitlab-rake db:migrate:geo