0


gitlab之Gitaly 集群搭建

准备阶段

你需要配置的清单

Gitaly 实现了客户端-服务器架构:

Gitaly 仅管理极狐GitLab 的 Git 仓库访问。其他类型的极狐GitLab 数据不能使用 Gitaly 访问。

极狐GitLab 通过配置的仓库存储访问仓库。每个新仓库都根据它们的配置权重存储在其中一个仓库存储中。每个仓库存储:

  • 1 PostgreSQL数据库 节点:10.10.0.66
  • 至少 1 个 Praefect 节点(需要较少的存储空间):10.10.0.92
  • 3 个 Gitaly 节点(高 CPU、高内存、快速存储)- gitaly-1:10.10.0.67- gitaly-2:10.10.0.93- gitaly-3:10.10.0.68
  • 1 个 GitLab 服务器:10.10.0.91
  • Gitaly 提供对 Git 仓库的高级 RPC 访问。极狐GitLab 使用它来读取和写入 Git 数据。Gitaly 存在于每个极狐GitLab 安装实例中,并协调 Git 仓库的存储和检索。Gitaly 是:
  • 在单个 Omnibus GitLab 实例上运行的后台服务。
  • 根据扩展和可用性要求,分离到自己的实例并配置为完整的集群配置。
  • Gitaly 服务器是运行 Gitaly 本身的任何节点。
  • Gitaly 客户端是运行向 Gitaly 服务器发出请求的进程的任何节点。Gitaly 客户端也称为 Gitaly 消费者,包括: - Rails 应用- Shell- Workhorse- Elasticsearch Indexer
  • 使用存储路径直接访问仓库的 Gitaly 存储,其中每个仓库都存储在单个 Gitaly 节点上。所有请求都路由到此节点。
  • Gitaly 集群提供的一个虚拟存储,每个仓库可以存储在多个 Gitaly 节点上以实现容错。在 Gitaly 集群中: - 读取请求分布在多个 Gitaly 节点之间,可以提高性能。- 写请求被广播到仓库副本。
  • 注意Praefect 节点和3 个 Gitaly 节点都要安装gitlab(安装ce版本和gitlab-jh版本都可以) 还有这些服务器的时间必须一致不然会搭建失败> > ntpdate ntp1.aliyun.com #同步时间命令

数据库PostgreSQL部署 10.10.0.66

docker pull postgres
​
docker run -d --name postgres --restart always -e POSTGRES_PASSWORD='admin'   -e POSTGRES_USER='admin' -e ALLOW_IP_RANGE=0.0.0.0/0 -v /data/postgres/data:/var/lib/postgresql -p 5432:5432 -d postgres
#########解释
-name : 自定义容器名称
-e POSTGRES_PASSWORD: Postgresql数据库密码
-e POSTGRES_USER: Postgresql数据库账号
-e ALLOW_IP_RANGE=0.0.0.0/0,这个表示允许所有ip访问,如果不加,则非本机 ip 访问不了。
-v :   本地文件系统目录:容器内目录
-p: 映射端口,宿主机端口:容器端口
​
查看Postgresql容器状态
[root@docker ~]# docker ps
CONTAINER ID   IMAGE      COMMAND                  CREATED         STATUS         PORTS                                         NAMES
de5b3c8570a9   postgres   "docker-entrypoint.s…"   6 minutes ago   Up 6 minutes   0.0.0.0:5432->5432/tcp, :::5432->5432/tcp   postgres
​
psql客户端连接
#进入容器
docker exec -it de5b3c8570a9 bash
#然后登录数据库
psql -h127.0.0.1 -p 5432 -Uadmin -W
Password: 
psql (13.9, server 15.1 (Debian 15.1-1.pgdg110+1))
WARNING: psql major version 13, server major version 15.
         Some psql features might not work.
Type "help" for help.
​
admin=# 
##########

创建一个新用户

praefect

供 Praefect 使用

CREATE ROLE praefect WITH LOGIN PASSWORD 'PRAEFECT_SQL_PASSWORD';
##PRAEFECT_SQL_PASSWORD:Praefect 使用此密码连接到 PostgreSQL。
#创建一个praefect_production新数据库由praefect用户拥有。
CREATE DATABASE praefect_production WITH OWNER praefect ENCODING UTF8;

部署配置Praefect 节点

在Praefect节点上:

  1. 通过编辑/etc/gitlab/gitlab.rb
# Disable all other services on the Praefect node
gitaly['enable'] = false
postgresql['enable'] = false
redis['enable'] = false
nginx['enable'] = false
puma['enable'] = false
sidekiq['enable'] = false
gitlab_workhorse['enable'] = false
prometheus['enable'] = false
alertmanager['enable'] = false
grafana['enable'] = false
gitlab_exporter['enable'] = false
gitlab_kas['enable'] = false
​
# Praefect Configuration
praefect['enable'] = true
praefect['listen_addr'] = '0.0.0.0:2305' # praefect监听端口
praefect['auto_migrate'] = true
praefect['database_sslmode'] = 'disable'
​
​
gitlab_rails['rake_cache_clear'] = false
gitlab_rails['auto_migrate'] = false
​
praefect['auth_token'] = 'PRAEFECT_EXTERNAL_TOKEN' # Praefect集群上的存储库只能由携带此令牌的 Gitaly 客户端访问
praefect['prometheus_listen_addr'] = '0.0.0.0:9652' # 配置普罗米修斯
#连接数据库PostgreSQL
praefect['database_host'] = '10.10.0.66'
praefect['database_port'] = 5432
praefect['database_user'] = 'praefect'
praefect['database_password'] = 'praefect6'
praefect['database_dbname'] = 'praefect_production'
praefect['database_direct_host'] = '10.10.0.66'
praefect['database_direct_port'] = 5432
#配置虚拟存储 PRAEFECT_INTERNAL_TOKEN:Praefect 在与集群中的 Gitaly 节点通信时使用的密码
praefect['virtual_storages'] = {
  'default' => {
    'nodes' => {
      'gitaly-1' => {
        'address' => 'tcp://10.10.0.67:8075',
        'token'   => 'PRAEFECT_INTERNAL_TOKEN'
      },
      'gitaly-2' => {
        'address' => 'tcp://10.10.0.93:8075',
        'token'   => 'PRAEFECT_INTERNAL_TOKEN'
      },
      'gitaly-3' => {
        'address' => 'tcp://10.10.0.68:8075',
        'token'   => 'PRAEFECT_INTERNAL_TOKEN'
      },
    }
  }
}

2.保存配置文件,并重新配置

gitlab-ctl reconfigure

注意:将praefect[‘auto_migrate’]的值从false改为true为确保数据库仅在重新配置期间运行migrate,而不是在升级时,请配置:

sudo touch /etc/gitlab/skip-auto-reconfigure

然后运行:

gitlab-ctl reconfigure

请重启Praefect

gitlab-ctl restart praefect

验证 Praefect 是否可以访问 PostgreSQL

sudo -u git /opt/gitlab/embedded/bin/praefect -config /var/opt/gitlab/praefect/config.toml sql-ping
#输出这个 praefect sql-ping: OK 说明成功

部署配置Gitaly

  1. 编辑配置文件/etc/gitlab/gitlab.rb
PRAEFECT_INTERNAL_TOKEN

:Praefect 在与集群中的 Gitaly 节点通信时使用的密码,用于 Praefect 集群内的复制流量

# external_url 'http://gitlab.example.com' # 此配置需要注释
postgresql['enable'] = false
redis['enable'] = false
nginx['enable'] = false
grafana['enable'] = false
puma['enable'] = false
sidekiq['enable'] = false
gitlab_workhorse['enable'] = false
prometheus_monitoring['enable'] = false
gitlab_kas['enable'] = false
​
# Enable only the Gitaly service
gitaly['enable'] = true
​
# Enable Prometheus if needed
prometheus['enable'] = true
​
# Disable database migrations to prevent database connections during 'gitlab-ctl reconfigure'
gitlab_rails['auto_migrate'] = false
​
​
gitaly['listen_addr'] = '10.10.0.67:8075' # 配置gitaly监听端口
gitaly['prometheus_listen_addr'] = '10.10.0.67:9236'
gitaly['auth_token'] = 'PRAEFECT_INTERNAL_TOKEN'
gitlab_rails['internal_api_url'] = 'http://10.10.0.91'
#配置git仓库数据库存储位置
git_data_dirs({
  "gitaly-1" => {
    "path" => "/var/opt/gitlab/git-data"
  },
  "gitaly-2" => {
    "path" => "/var/opt/gitlab/git-data"
  },
  "gitaly-3" => {
    "path" => "/var/opt/gitlab/git-data"
  }
})
​
################################################################################################################################
#注意其他两台只需该ip地址即可填写自己本机ip
gitaly['listen_addr'] = '本机ip:8075' # 配置gitaly监听端口
gitaly['prometheus_listen_addr'] = '本机ip:9236'
​
internal_api_url,这是git push操作依赖的配置。
gitlab_rails['internal_api_url'] = 'http://10.10.0.91'  填写gilab那台的ip地址
#官网对git_data_dirs配置解释
与其为每个 Gitaly 节点单独配置 git_data_dirs,通常更容易在每个 Gitaly 节点上包含所有 Gitaly 节点的配置。这是支持的,因为 Praefect virtual_storages 配置将每个存储名称(例如 gitaly-1)映射到特定节点,并相应地路由请求。这意味着您的 fleet 中的每个 Gitaly 节点都可以共享相同的配置。 
  1. 保存配置并重新配置gitlab-ctl reconfigure
  2. 拷贝Praefect节点上的/etc/gitlab/gitlab-secrets.json文件到每个Gitaly节点相同路径上。scp /etc/gitlab/gitlab-secrets.json ip:/etc/gitlab/
  3. 重启gitalygitlab-ctl restart gitaly

必须为每个 Gitaly 节点完成上述步骤!

连接到praefect集群并运行检查程序就是再praefect节点服务器上执行

sudo /opt/gitlab/embedded/bin/praefect -config /var/opt/gitlab/praefect/config.toml dial-nodes

如上说明成功

配置Gitlab

1.编辑配置文件/etc/gitlab/gitlab.rb

PRAEFECT_EXTERNAL_TOKEN

: Praefect 集群上的存储库只能由此密码的 Gitaly 客户端访问

external_url 'http://10.10.0.91'
gitaly['enable'] = false
git_data_dirs({
  "default" => {
    "gitaly_address" => "tcp://10.10.0.92:2305",
    "gitaly_token" => 'PRAEFECT_EXTERNAL_TOKEN'
  }
})
​
prometheus['scrape_configs'] = [
  {
    'job_name' => 'praefect',
    'static_configs' => [
      'targets' => [
        '10.10.0.92:9652', # praefect-1
      ]
    ]
  },
  {
    'job_name' => 'praefect-gitaly',
    'static_configs' => [
      'targets' => [
        '10.10.0.67:9236', # gitaly-1
        '10.10.0.93:9236', # gitaly-2
        '10.10.0.68:9236', # gitaly-3
      ]
    ]
  }
]
#时区设置
gitlab_rails['time_zone'] = 'Asia/Shanghai'
#开启gitlab ssh端口
gitlab_rails['gitlab_shell_ssh_port'] = 22

2.拷贝Praefect节点上的/etc/gitlab/gitlab-secrets.json文件到Gitlab节点相同路径上。

scp /etc/gitlab/gitlab-secrets.json ip:/etc/gitlab/ 

3.在每个Gitaly节点上验证Git Hooks对Gitlab可达,在每个Gitaly节点上运行

  • 对于 GitLab 15.3 及更高版本,运行sudo /opt/gitlab/embedded/bin/gitaly check /var/opt/gitlab/gitaly/config.toml.
  • 对于 GitLab 15.2 及更早版本,运行sudo /opt/gitlab/embedded/bin/gitaly-hooks check /var/opt/gitlab/gitaly/config.toml.

4.验证 GitLab 是否可以到达 Praefect:

gitlab-rake gitlab:gitaly:check

  1. 最后登录Gitlab进行验证看看一切是否顺利

部署集群参考的连接

[分享]为Omnibus Gitlab配置独立的Gitaly集群 - 技术分享 - 极狐GitLab论坛_GitLab论坛_GitLab社区_Gitlab官方论坛-GitLab中文官方论坛

配置 Gitaly 集群 | 极狐GitLab

Gitaly 和 Gitaly 集群 | 极狐GitLab

标签: gitlab

本文转载自: https://blog.csdn.net/Operational_0624/article/details/134929484
版权归原作者 李淳罡会k8s 所有, 如有侵权,请联系我们删除。

“gitlab之Gitaly 集群搭建”的评论:

还没有评论