2.7 KiB
Praefect
NOTE: Note: Praefect is an experimental service, and for testing purposes only at this time.
Omnibus
Architecture
For this document, the following network topology is assumed:
graph TB
GitLab --> Gitaly;
GitLab --> Praefect;
Praefect --> Preafect-Git-1;
Praefect --> Preafect-Git-2;
Praefect --> Preafect-Git-3;
Where GitLab
is the collection of clients that can request Git operations.
Gitaly
is a Gitaly server before using Praefect. The Praefect node has two
storage nodes attached. Praefect itself doesn't storage data, but connects to
three Gitaly nodes, Praefect-Git-1
, Praefect-Git-2
, and Praefect-Git-3
.
There should be no knowledge other than with Praefect about the existence of
the Praefect-Git-X
nodes.
Enable the daemon
Praefect is expected to run on their own host, this means that no other service other than the support services run on this machine.
Praefect is disabled by default, to enable praefect uncomment the following line
and set it to true
: # praefect['enable'] = false'
praefect['enable'] = true
By default praefect will listen on port :2305
. It's recommended to enable
prometheus to expose metrics. Uncomment the line so it looks like:
praefect['prometheus_listen_addr'] = "localhost:9652"
Preafect needs at least one storage to store the Git data on. This node should
run Gitaly and should not be listed as storage for GitLab itself, that is, the
only way it receives traffic is through Praefect and it's not listed in the
git_data_dirs
on any gitlab.rb
in your GitLab cluster.
To set the nodes as depicted in the diagram above, the configuration should look like:
praefect['storage_nodes'] = [
{
'storage' => 'praefect-git-1',
'address' => 'tcp://praefect-git-1.internal',
'primary' => true
}
{
'storage' => 'praefect-git-2',
'address' => 'tcp://praefect-git-2.internal'
},
{
'storage' => 'praefect-git-3',
'address' => 'tcp://praefect-git-3.internal'
}
]
Save the file, and run gitlab-ctl reconfigure
. To test if Praefect is running,
you could run gitlab-ctl status
which should list praefect as being up.
Enable Preafect as storage backend in GitLab
When Praefect is running, it should be exposed as a storage to GitLab. This
is done through setting the git_data_dirs
. Assuming the default storage
configuration is used, there would be two storages available to GitLab:
git_data_dirs({
"default" => {
"gitaly_address" => "tcp://gitaly.internal"
},
"praefect" => {
"gitaly_address" => "tcp://praefect.internal:2305"
}
})
Restart GitLab using gitlab-ctl restart
on the GitLab node.