Repository storage paths

原文:https://docs.gitlab.com/ee/administration/repository_storage_paths.html

Repository storage paths

在 GitLab 8.10 中引入 .

GitLab 允许您定义多个存储库存储路径(有时称为存储碎片),以在多个安装点之间分配存储负载.

Notes:

  • 您必须至少有一个名为default存储路径.
  • 路径在键值对中定义. 密钥是一个任意名称,您可以选择该名称来命名文件路径.
  • 目标目录及其任何子路径不得为符号链接.
  • 目标目录不能是另一个目录的子目录. 没有嵌套.

示例:这可以:

  1. default:
  2. path: /mnt/git-storage-1
  3. storage2:
  4. path: /mnt/git-storage-2

这不行,因为它嵌套了存储路径:

  1. default:
  2. path: /mnt/git-storage-1
  3. storage2:
  4. path: /mnt/git-storage-1/git-storage-2 # <- NOT OK because of nesting

Configure GitLab

警告:为了使备份正常工作,存储路径不得为挂载点,并且 GitLab 用户应对该路径的父目录具有正确的权限. 在 Omnibus GitLab 中,这是自动处理的,但是对于源代码安装,您应该格外小心.

事实是,出于兼容性原因, gitlab.yml与 Omnibus 具有不同的结构. 在gitlab.yml您指示存储库的路径,例如/home/git/repositories ,而在 Omnibus 中,您指示git_data_dirs ,对于上面的示例,它是/home/git . 然后,Omnibus 将在该路径下创建一个repositories目录,以与gitlab.yml一起使用.

这个小细节很重要,因为在还原备份时, /home/git/repositories的当前内容已移至 /home/git/repositories.old ,因此,如果/home/git/repositories是安装点,则mv会移动挂载点之间发生故障,并且可能发生不良情况. 理想情况下, /home/git是挂载点,因此事情将在同一挂载点内移动. Omnibus 安装可以保证这一点(因为它们没有指定完整的存储库路径,而是指定父路径),但对于源安装则没有保证.

现在,您已经阅读了上面的警告提示,让我们编辑配置文件并添加备用存储库存储路径的完整路径. 在下面的示例中,我们添加了另外两个挂载点,分别称为nfs_1nfs_2 .

Note: This example uses NFS. We do not recommend using EFS for storage as it may impact GitLab’s performance. See the relevant documentation for more details.

对于源安装

  1. 编辑gitlab.yml并添加存储路径:

    1. repositories:
    2. # Paths where repositories can be stored. Give the canonicalized absolute pathname.
    3. # NOTE: REPOS PATHS MUST NOT CONTAIN ANY SYMLINK!!!
    4. storages: # You must have at least a 'default' storage path.
    5. default:
    6. path: /home/git/repositories
    7. nfs_1:
    8. path: /mnt/nfs1/repositories
    9. nfs_2:
    10. path: /mnt/nfs2/repositories
  2. 重新启动 GitLab,以使更改生效.

注: gitlab_shell: repos_path条目gitlab.yml将被弃用,取而代之的是repositories: storages在未来,所以如果你是从之前的版本升级 8.10,确保如在上述步骤中所描述的添加配置. 进行更改并确认它们可以使用之后,可以删除repos_path行.

对于所有安装

  1. 通过将其余路径附加到默认路径中来编辑/etc/gitlab/gitlab.rb

    1. git_data_dirs({
    2. "default" => { "path" => "/var/opt/gitlab/git-data" },
    3. "nfs_1" => { "path" => "/mnt/nfs1/git-data" },
    4. "nfs_2" => { "path" => "/mnt/nfs2/git-data" }
    5. })

    请注意,Omnibus 将存储库存储在git-data目录的repositories子目录中.

Choose where new repositories will be stored

设置了多个存储路径后,您可以在管理区域>设置>存储库>存储库存储>新存储库的存储节点下选择新存储库的存储位置 .

可以为每个存储分配 0 到 100 的权重. 创建新项目时,将使用这些权重来确定将在其上创建存储库的存储位置.

Choose repository storage path in Admin Area

从 GitLab 8.13.4 开始,可以选择多个路径. 新存储库将随机放置在所选路径之一上.