Geo for multiple nodes

Geo for multiple nodes

本文档介绍了用于在多节点配置中运行 Geo 的最小参考架构. 如果您的多节点设置与所描述的不同,则可以根据需要调整这些说明.

diagram source - GitLab employees only

上面的拓扑假定主要辅助地理集群位于两个单独的位置,位于它们自己的具有专用 IP 地址的虚拟网络上. 网络配置为使一个地理位置内的所有计算机都可以使用其专用 IP 地址相互通信. 给出的 IP 地址只是示例,可能会因部署的网络拓扑而有所不同.

在上述示例中,访问这两个 Geo 部署的唯一外部方法是通过 HTTPS 分别位于和gitlab.eu.example.com .

注意: 主要辅助 Geo 部署必须能够通过 HTTPS 相互通信.

地理位置支持:

  • Redis 和 PostgreSQL 在为主节点上配置了多个节点.
  • Redis 在为多个节点配置的辅助节点上.

注意: 在多节点配置中在辅助节点上支持 PostgreSQL.

由于为 PostgreSQL 和 Redis 设置此配置涉及额外的复杂性,因此此 Geo 多节点文档未涵盖该配置.

有关使用 omnibus 软件包设置多节点 PostgreSQL 集群和 Redis 集群的更多信息,请分别参见PostgreSQL和的多节点文档.

注意:可以将云托管服务用于 PostgreSQL 和 Redis,但这不在本文档的范围之内.

一个群集将充当节点. 使用GitLab 多节点文档进行设置. 如果您已经有一个正在使用的工作 GitLab 实例,则可以将其用作primary .

The second cluster will serve as the secondary node. Again, use the to set this up. It’s a good idea to log in and test it, however, note that its data will be wiped out as part of the process of replicating from the primary.

通过以下步骤,GitLab 集群可以用作主节点.

  1. 编辑/etc/gitlab/gitlab.rb并添加以下内容:

进行这些更改后,请重新配置 GitLab,以使更改生效.

Step 2: Configure the primary database

  1. 编辑/etc/gitlab/gitlab.rb并添加以下内容:

    1. ##
    2. ## Configure the Geo primary role and the PostgreSQL role
    3. ##
    4. roles ['geo_primary_role', 'postgres_role']

辅助群集与任何其他 GitLab 多节点群集相似,但有两个主要区别:

  • 主 PostgreSQL 数据库是节点的 PostgreSQL 数据库的只读副本.
  • 辅助集群还有一个单独的 PostgreSQL 数据库,称为”跟踪数据库”,该数据库跟踪各种资源的同步状态.

因此,我们将一个接一个地设置多节点组件,并包括与常规多节点设置的偏差. 但是,我们强烈建议您首先配置一个全新的群集,就像它不是地理设置一样,以便可以对其进行测试和验证. 只有这样,才可以对其进行修改以用作 Geo 辅助对象 . 这有助于分离与地理设置无关的问题.

再次使用非 Geo 多节点文档配置以下服务:

注意: NFS可以代替 Gitaly 使用,但不建议使用.

Step 2: Configure the main read-only replica PostgreSQL database on the secondary node

注意:以下文档假定数据库将仅在单个节点上运行. 当前不支持 辅助节点上的多节点 PostgreSQL.

配置作为数据库的一个只读副本. 使用以下内容作为指导.

  1. 为数据库用户生成所需密码的 MD5 哈希,GitLab 应用程序将使用该密码来访问只读副本数据库:

    请注意,用户名(默认情况下为gitlab )已合并到哈希中.

    在下一步中使用此哈希值填写<md5_hash_of_your_password> .

  2. 在副本数据库计算机中编辑/etc/gitlab/gitlab.rb ,并添加以下内容:

    1. ##
    2. ## Configure the Geo secondary role and the PostgreSQL role
    3. ##
    4. roles ['geo_secondary_role', 'postgres_role']
    5. ##
    6. ## Secondary address
    7. ## - replace '<secondary_node_ip>' with the public or VPC address of your Geo secondary node
    8. ## - replace '<tracking_database_ip>' with the public or VPC address of your Geo tracking database node
    9. ##
    10. postgresql['listen_address'] = '<secondary_node_ip>'
    11. postgresql['md5_auth_cidr_addresses'] = ['<secondary_node_ip>/32', '<tracking_database_ip>/32']
    12. ##
    13. ## Database credentials password (defined previously in primary node)
    14. ## - replicate same values here as defined in primary node
    15. ##
    16. postgresql['sql_user_password'] = '<md5_hash_of_your_password>'
    17. gitlab_rails['db_password'] = '<your_password_here>'
    18. ##
    19. ## When running the Geo tracking database on a separate machine, disable it
    20. ## the tracking database IP is in postgresql['md5_auth_cidr_addresses'] above.
    21. ##
    22. geo_postgresql['enable'] = false
    23. ##
    24. ## Disable `geo_logcursor` service so Rails doesn't get configured here
    25. ##
    26. geo_logcursor['enable'] = false

进行这些更改后,请重新配置 GitLab,以使更改生效.

如果使用外部 PostgreSQL 实例,另请参阅使用外部 PostgreSQL 实例的 .

注意:本文档假定跟踪数据库将仅在一台计算机上运行,​​而不是作为 PostgreSQL 集群运行.

配置跟踪数据库.

  1. Generate an MD5 hash of the desired password for the database user that the GitLab application will use to access the tracking database:

    在下一步中,使用此哈希值填写<tracking_database_password_md5_hash> .

  2. 在跟踪数据库计算机中编辑/etc/gitlab/gitlab.rb ,并添加以下内容:

    1. ##
    2. ## Enable the Geo secondary tracking database
    3. ##
    4. geo_postgresql['enable'] = true
    5. geo_postgresql['listen_address'] = '<ip_address_of_this_host>'
    6. geo_postgresql['sql_user_password'] = '<tracking_database_password_md5_hash>'
    7. ##
    8. ## Configure FDW connection to the replica database
    9. ##
    10. geo_secondary['db_fdw'] = true
    11. geo_postgresql['fdw_external_password'] = '<replica_database_password_plaintext>'
    12. gitlab_rails['db_host'] = '<replica_database_ip>'
    13. # Prevent reconfigure from attempting to run migrations on the replica DB
    14. gitlab_rails['auto_migrate'] = false
    15. ##
    16. ## Disable all other services that aren't needed, since we don't have a role
    17. ## that does this.
    18. ##
    19. alertmanager['enable'] = false
    20. consul['enable'] = false
    21. gitaly['enable'] = false
    22. gitlab_exporter['enable'] = false
    23. gitlab_workhorse['enable'] = false
    24. nginx['enable'] = false
    25. node_exporter['enable'] = false
    26. pgbouncer_exporter['enable'] = false
    27. postgresql['enable'] = false
    28. prometheus['enable'] = false
    29. redis['enable'] = false
    30. redis_exporter['enable'] = false
    31. repmgr['enable'] = false
    32. sidekiq['enable'] = false
    33. puma['enable'] = false

进行这些更改后,请重新配置 GitLab,以使更改生效.

如果使用外部 PostgreSQL 实例,另请参阅使用外部 PostgreSQL 实例的 .

Step 4: Configure the frontend application servers on the secondary node

在体系结构概述中,有两台机器运行 GitLab 应用程序服务. 这些服务在配置中有选择地启用.

在之后, 配置应用程序服务器,然后进行以下修改:

  1. 辅助集群中的每个应用程序服务器上编辑/etc/gitlab/gitlab.rb ,并添加以下内容:

注意:如果使用 omnibus 软件包设置了 PostgreSQL 集群,并且设置了postgresql['sql_user_password'] = 'md5 digest of secret'设置,请记住gitlab_rails['db_password']geo_secondary['db_password']上面提到的包含明文密码. 这用于让 Rails 服务器连接到数据库.注意:确保在远程数据库的postgresql['md5_auth_cidr_addresses']设置中列出了当前节点 IP.

进行这些更改后,请以使更改生效.

在辅助服务器上,将启用以下 GitLab 前端服务:

  • geo-logcursor
  • gitlab-pages
  • gitlab-workhorse
  • logrotate
  • nginx
  • registry
  • remote-syslog
  • sidekiq
  • puma

通过在前端应用程序服务器上运行sudo gitlab-ctl status来验证这些服务.

在这种拓扑中,每个地理位置都需要一个负载平衡器,以将流量路由到应用程序服务器.

有关更多信息,请参见具有多个节点的 GitLab 的 Load Balancer .

Step 6: Configure the backend application servers on the secondary node

上面的最小参考体系结构图显示了在同一台计算机上一起运行的所有应用程序服务. 但是,对于多个节点,我们强烈建议单独运行所有服务 .

例如,可以将 Sidekiq 服务器配置为与上面的前端应用程序服务器类似,但要进行一些更改以仅运行sidekiq服务:

  1. 辅助群集中的每个 Sidekiq 服务器上编辑/etc/gitlab/gitlab.rb ,并添加以下内容:

    1. ##
    2. ## Enable the Geo secondary role
    3. ##
    4. roles ['geo_secondary_role']
    5. ## Enable the Sidekiq service
    6. ##
    7. sidekiq['enable'] = true
    8. ##
    9. ## Ensure unnecessary services are disabled
    10. ##
    11. alertmanager['enable'] = false
    12. consul['enable'] = false
    13. gitaly['enable'] = false
    14. gitlab_exporter['enable'] = false
    15. gitlab_workhorse['enable'] = false
    16. nginx['enable'] = false
    17. node_exporter['enable'] = false
    18. pgbouncer_exporter['enable'] = false
    19. postgresql['enable'] = false
    20. prometheus['enable'] = false
    21. redis['enable'] = false
    22. redis_exporter['enable'] = false
    23. repmgr['enable'] = false
    24. puma['enable'] = false
    25. ##
    26. ## The unique identifier for the Geo node.
    27. ##
    28. gitlab_rails['geo_node_name'] = '<node_name_here>'
    29. ##
    30. ## Disable automatic migrations
    31. ##
    32. gitlab_rails['auto_migrate'] = false
    33. ##
    34. ## Configure the connection to the tracking DB. And disable application
    35. ## servers from running tracking databases.
    36. ##
    37. geo_secondary['db_host'] = '<geo_tracking_db_host>'
    38. geo_secondary['db_password'] = '<geo_tracking_db_password>'
    39. geo_postgresql['enable'] = false
    40. ##
    41. ## Configure connection to the streaming replica database, if you haven't
    42. ## already
    43. ##
    44. gitlab_rails['db_host'] = '<replica_database_host>'
    45. gitlab_rails['db_password'] = '<replica_database_password>'
    46. ##
    47. ## Configure connection to Redis, if you haven't already
    48. ##
    49. gitlab_rails['redis_host'] = '<redis_host>'
    50. gitlab_rails['redis_password'] = '<redis_password>'
    51. ##
    52. ## If you are using custom users not managed by Omnibus, you need to specify
    53. ## UIDs and GIDs like below, and ensure they match between servers in a
    54. ## cluster to avoid permissions issues
    55. ##
    56. user['uid'] = 9000
    57. user['gid'] = 9000
    58. web_server['uid'] = 9001
    59. web_server['gid'] = 9001
    60. registry['gid'] = 9002

    这些服务器不需要连接到负载平衡器.