リポジトリの保存パス

GitLab 8.10 で導入されました

GitLabでは、複数のマウントポイント間でストレージの負荷を分散するために、複数のリポジトリストレージパス(ストレージシャードと呼ばれることもあります)を定義することができます。

注:

  • defaultというストレージパスが少なくとも1つ必要です。
  • パスはキーと値のペアで定義されます。 キーには、ファイルパスの名前として任意の名前を指定します。
  • ターゲット・ディレクトリとそのサブパスは、シンボリックリンクであってはなりません。
  • ターゲット・ディレクトリが他のディレクトリのサブディレクトリになることはありません。

例:これでOKです:

default:
  path: /mnt/git-storage-1
storage2:
  path: /mnt/git-storage-2

これは、ストレージ・パスをネストしてしまうのでよくありません:

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

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という名前のマウントポイントを2つ追加しています。

注:この例ではNFSを使用しています。 GitLabのパフォーマンスに影響を与える可能性があるため、ストレージにEFSを使用することはお勧めしません。 詳細は関連ドキュメントを参照してください。

ソースからのインストールの場合

  1. gitlab.yml を編集し、ストレージパスを追加します:

    repositories:
      # Paths where repositories can be stored. Give the canonicalized absolute pathname.
      # NOTE: REPOS PATHS MUST NOT CONTAIN ANY SYMLINK!!!
      storages: # You must have at least a 'default' storage path.
        default:
          path: /home/git/repositories
        nfs_1:
          path: /mnt/nfs1/repositories
        nfs_2:
          path: /mnt/nfs2/repositories
    
  2. 変更を有効にするためにGitLabを再起動します。

注意:gitlab.ymlgitlab_shell: repos_path エントリ は、将来廃止され、repositories: storages に置き換えられる予定です。8.10 より前のバージョンからアップグレードする場合は、上記のステップで説明したように、必ず設定を追加してください。 変更を行い、動作することを確認したら、repos_path の行を削除してください。

オムニバス・インストール用

  1. デフォルトのパスに残りのパスを追加して、/etc/gitlab/gitlab.rb を編集します:

    git_data_dirs({
      "default" => { "path" => "/var/opt/gitlab/git-data" },
      "nfs_1" => { "path" => "/mnt/nfs1/git-data" },
      "nfs_2" => { "path" => "/mnt/nfs2/git-data" }
    })
    

    Omnibus はgit-data ディレクトリのrepositories サブディレクトリにリポジトリを保存することに注意してください。

新しいリポジトリの保存場所を選択します。

複数のストレージパスを設定したら、管理エリア > 設定 > リポジトリ > リポジトリストレージ > 新しいリポジトリのストレージノードで、新しいリポジトリの保存場所を選択できます。

各ストレージには、0~100の重みを割り当てることができます。 新しいプロジェクトを作成するとき、これらの重みは、リポジトリが作成されるストレージの場所を決定するために使用されます。

Choose repository storage path in Admin Area

GitLab 8.13.4から、複数のパスを選択できるようになりました。 新しいリポジトリは、選択したパスのいずれかにランダムに配置されます。