准备阶段
你需要配置的清单
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节点上:
- 通过编辑/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
- 编辑配置文件/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 节点都可以共享相同的配置。
- 保存配置并重新配置
gitlab-ctl reconfigure
- 拷贝Praefect节点上的/etc/gitlab/gitlab-secrets.json文件到每个Gitaly节点相同路径上。
scp /etc/gitlab/gitlab-secrets.json ip:/etc/gitlab/
- 重启gitaly
gitlab-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
- 最后登录Gitlab进行验证看看一切是否顺利
部署集群参考的连接
[分享]为Omnibus Gitlab配置独立的Gitaly集群 - 技术分享 - 极狐GitLab论坛_GitLab论坛_GitLab社区_Gitlab官方论坛-GitLab中文官方论坛
配置 Gitaly 集群 | 极狐GitLab
Gitaly 和 Gitaly 集群 | 极狐GitLab
版权归原作者 李淳罡会k8s 所有, 如有侵权,请联系我们删除。