{{< details >}}
- Tier: 专业版, 旗舰版
- Offering: 私有化部署
{{< /details >}}
如果您使用的 PostgreSQL 实例不是由 Linux 软件包管理的,本文件与您相关。这包括云管理实例或手动安装和配置的 PostgreSQL 实例。
确保您使用的是 Linux 软件包附带的 PostgreSQL 版本之一,以避免版本不匹配,以防需要重建 Geo 站点。
{{< alert type=”note” >}}
如果您正在使用极狐GitLab Geo,我们强烈建议使用通过 Linux 软件包安装的实例或使用验证过的云管理实例,因为我们会基于这些进行积极开发和测试。我们无法保证与其他外部数据库的兼容性。
{{< /alert >}}
主站点
-
SSH 进入主站点的 Rails 节点并以 root 身份登录:
sudo -i
-
编辑
/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>'
-
重新配置 Rails 节点以使更改生效:
gitlab-ctl reconfigure
-
在 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.conf
和 postgresql.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.conf
和 postgresql.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
具有三个主要功能:
- 配置副本数据库。
- 配置跟踪数据库。
- 启用 Geo 日志游标(本节不涉及)。
要配置连接到外部只读副本数据库并启用日志游标:
-
SSH 进入您次要站点的 Rails、Sidekiq 和 Geo 日志游标节点,并以 root 身份登录:
sudo -i
-
编辑
/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
-
保存文件并重新配置极狐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 实例中创建并配置跟踪数据库:
- 根据数据库需求文档设置 PostgreSQL。
- 设置一个带有您选择的密码的
gitlab_geo
用户,创建gitlabhq_geo_production
数据库,并将该用户设为数据库的所有者。您可以在自编译安装文档中看到此设置的示例。 -
如果您不使用云管理的 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 部署。
-
SSH 进入极狐GitLab 次要服务器并以 root 身份登录:
sudo -i
-
编辑
/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 # 不使用内部管理实例
-
保存文件并重新配置极狐GitLab。
设置数据库架构
对于 Linux 软件包和 Docker 部署,上面的步骤 中的重新配置应该会自动处理这些步骤。
-
此任务创建数据库架构。它要求数据库用户为超级用户。
sudo gitlab-rake db:create:geo
-
通过重新配置还执行 Rails 数据库迁移(架构和数据更新)。如果设置了
geo_secondary['auto_migrate'] = false
,或架构是手动创建的,则需要此步骤:sudo gitlab-rake db:migrate:geo