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