Geo 与外部 PostgreSQL 实例
如果您使用不是由 Omnibus 管理的 PostgreSQL 实例,则适用本文档。 确保您使用 Linux 软件包附带的 PostgreSQL 版本之一,避免版本不匹配,防止必须重建 Geo 站点。
主要站点
-
通过 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_nodes.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
。
配置要复制的外部数据库
要设置外部数据库,您可以:
- 自行设置流复制。
- 手动执行 Linux 软件包配置,如下所示。
利用您的云提供商的工具来复制主数据库
假设您在 AWS EC2 上设置了一个使用 RDS 的主要站点。 您现在可以在不同区域创建只读副本,并且复制过程由 AWS 管理。确保您已根据需要设置网络 ACL(访问控制列表)、子网和安全组,以便次要 Rails 节点可以访问数据库。
设置只读副本后,您可以跳至配置次要站点。
手动配置主数据库以进行复制
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 Log Cursor(本节未介绍)。
配置与外部只读副本数据库的连接并启用 Log Cursor:
-
SSH 到您的次要站点上的每个 Rails、Sidekiq 和 Geo Log Cursor 节点,并以 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_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
-
保存文件并重新配置极狐GitLab。
配置跟踪数据库
次要站点使用单独的 PostgreSQL 安装作为跟踪数据库来跟踪复制状态,并自动从潜在的复制问题中恢复。当 roles ['geo_secondary_role']
设置时,Linux 软件包会自动配置跟踪数据库。
如果要在 Linux 软件包外部运行此数据库,请使用以下说明。
如果您为跟踪数据库使用云管理服务,您可能需要向跟踪数据库用户授予其他角色(默认情况为 gitlab_geo
)。
这是为了在安装和升级期间安装扩展。作为替代方案,确保手动安装扩展,并阅读未来极狐GitLab 升级期间可能出现的问题。
要设置外部跟踪数据库,请按照以下说明操作:
- 根据数据库需求文档设置 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
-
SSH 进入极狐GitLab 次要服务器并以 root 身份登录:
sudo -i
-
使用具有 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
-
保存文件并重新配置极狐GitLab。
-
重新配置应该自动创建数据库。如果需要,您可以手动执行此任务。此任务(无论是自行运行还是在重新配置期间运行)要求数据库用户是超级用户。
gitlab-rake db:create:geo
-
重新配置应自动迁移数据库。如果需要,您可以手动迁移数据库,例如
geo_secondary['auto_migrate'] = false
:gitlab-rake db:migrate:geo