リポジトリの保存パス
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_1
とnfs_2
という名前のマウントポイントを2つ追加しています。
ソースからのインストールの場合
-
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
-
変更を有効にするためにGitLabを再起動します。
注意:
gitlab.yml
のgitlab_shell: repos_path
エントリ は、将来廃止され、repositories: storages
に置き換えられる予定です。8.10 より前のバージョンからアップグレードする場合は、上記のステップで説明したように、必ず設定を追加してください。 変更を行い、動作することを確認したら、repos_path
の行を削除してください。
オムニバス・インストール用
-
デフォルトのパスに残りのパスを追加して、
/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の重みを割り当てることができます。 新しいプロジェクトを作成するとき、これらの重みは、リポジトリが作成されるストレージの場所を決定するために使用されます。
GitLab 8.13.4から、複数のパスを選択できるようになりました。 新しいリポジトリは、選択したパスのいずれかにランダムに配置されます。