Geo 与外部 PostgreSQL 实例
- 版本:Premium, Ultimate
- 产品:GitLab Self-Managed
本文档适用于使用不由 Linux 软件包管理的 PostgreSQL 实例的情况。这包括 云托管实例, 或手动安装和配置的 PostgreSQL 实例。
请确保您使用的是 Linux 软件包附带 的 PostgreSQL 版本之一,以便在需要重建 Geo 站点时避免版本不匹配。
如果您正在使用 GitLab Geo,我们强烈建议您运行通过 Linux 软件包安装的实例,或使用 已验证的云托管实例, 因为我们的主动开发和测试都基于这些实例。 我们无法保证与其他外部数据库的兼容性。
主站点
-
通过 SSH 登录到您主站点上的 Rails 节点并以 root 用户身份登录:
sudo -i -
编辑
/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>' -
重新配置 Rails 节点以使更改生效:
gitlab-ctl reconfigure -
在 Rails 节点上执行以下命令,将该站点定义为主站点:
gitlab-ctl set-geo-primary-node此命令会使用您在
/etc/gitlab/gitlab.rb中定义的external_url。
配置外部数据库以进行复制
要设置外部数据库,您可以:
- 自己设置流复制(例如 Amazon RDS,或不由 Linux 软件包管理的裸机)。
- 按照以下说明手动配置您的 Linux 软件包安装。
利用您的云提供商工具复制主数据库
假设您已在 AWS EC2 上设置了使用 RDS 的主站点。 现在,您只需在不同区域创建一个只读副本,复制过程将由 AWS 管理。请确保您已根据需要设置了网络 ACL(访问控制列表)、子网和安全组,以便辅助站点的 Rails 节点可以访问数据库。
以下说明详细介绍了如何为常见的云提供商创建只读副本:
- Amazon RDS - 创建只读副本
- Azure Database for PostgreSQL - 在 Azure Database for PostgreSQL 中创建和管理只读副本
- Google Cloud SQL - 创建只读副本
当您的只读副本设置完成后,您可以跳转到配置您的辅助站点
不支持使用逻辑复制方法,例如 AWS Database Migration Service 或 Google Cloud Database Migration Service,来将本地主数据库复制到 RDS 辅助数据库等场景。
手动配置主数据库以进行复制
geo_primary_role
通过修改 pg_hba.conf 和 postgresql.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.conf 和 postgresql.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
具有三个主要功能:
- 配置副本数据库。
- 配置跟踪数据库。
- 启用 Geo 日志游标(本节不涉及)。
要配置到外部只读副本数据库的连接并启用日志游标:
-
通过 SSH 登录到您辅助站点上的每个 Rails、Sidekiq 和 Geo 日志游标节点,并以 root 用户身份登录:
sudo -i -
编辑
/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_primary_db_password_here>' gitlab_rails['db_username'] = 'gitlab' gitlab_rails['db_host'] = '<database_read_replica_host>' # Disable the bundled Omnibus PostgreSQL because we are # using an external PostgreSQL postgresql['enable'] = false -
保存文件并重新配置 GitLab
配置跟踪数据库
辅助站点使用一个独立的 PostgreSQL 安装作为跟踪
数据库,以跟踪复制状态并自动从潜在的复制问题中恢复。当设置 roles ['geo_secondary_role'] 时,Linux 软件包会自动配置一个跟踪数据库。
如果您希望将此数据库运行在 Linux 软件包安装之外,请使用以下说明。
了解内部和外部跟踪数据库
您可以将跟踪数据库配置为:
- 内部 (
geo_postgresql['enable'] = true):跟踪数据库作为受管理的 PostgreSQL 实例,与 Rails 应用程序在同一台服务器上运行。这是默认设置。 - 外部 (
geo_postgresql['enable'] = false):跟踪数据库在独立的服务器上运行,或作为云托管服务运行。
在多节点辅助站点设置中,如果您在一个 Rails 节点上启用了跟踪数据库,那么对于该站点内的所有其他 Rails 节点来说,它就变成了“外部”数据库。所有其他 Rails 节点都必须设置 geo_postgresql['enable'] = false 并指定连接详细信息以连接到该跟踪数据库。
云托管数据库服务
如果您为跟踪数据库使用云托管服务,则可能需要为您的跟踪数据库用户(默认为
gitlab_geo)授予额外的角色:
- Amazon RDS 需要
rds_superuser角色。 - Azure Database for PostgreSQL 需要
azure_pg_admin角色。 - Google Cloud SQL 需要
cloudsqlsuperuser角色。
这是为了在安装和升级期间安装扩展。作为替代方案, 请确保手动安装扩展,并阅读在未来的 GitLab 升级中可能出现的问题。
如果您想使用 Amazon RDS 作为跟踪数据库,请确保它可以访问辅助数据库。不幸的是,仅分配相同的安全组是不够的,因为出站规则不适用于 RDS PostgreSQL 数据库。因此,您需要向只读副本的安全组显式添加一条入站规则,允许来自跟踪数据库在端口 5432 上的任何 TCP 流量。
创建跟踪数据库
在您的 PostgreSQL 实例中创建并配置跟踪数据库:
-
根据数据库要求文档设置 PostgreSQL。
-
设置一个
gitlab_geo用户,使用您选择的密码,创建gitlabhq_geo_production数据库,并使该用户成为数据库的所有者。 您可以在自编译安装文档中看到此设置的示例。 -
如果您未使用云托管的 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 # In multi-node setups, add entries for all Rails nodes that will connect
配置 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> # change to the correct port geo_postgresql['enable'] = false # don't use internal managed instance在多节点设置中,将此配置应用于每个需要连接到外部跟踪数据库的 Rails 节点。
-
保存文件并重新配置 GitLab
设置数据库模式
对于 Linux 软件包和 Docker 部署,前面步骤中的 reconfigure 命令应会自动处理这些步骤。
-
此任务会创建数据库模式。它要求数据库用户是超级用户。
sudo gitlab-rake db:create:geo -
应用 Rails 数据库迁移(模式和数据更新)也由 reconfigure 执行。如果设置了
geo_secondary['auto_migrate'] = false,或者模式是手动创建的,则需要执行此步骤:sudo gitlab-rake db:migrate:geo