概要
Omunibus インストールした Gitlab では Gitlab にロールを設定することができます
ロールは簡単に言うと「アプリだけ」「データベースだけ」「キャッシュだけ」という感じでロール単体で動作させることができロールごとにインスタンスを準備することで HighAvailability を実現することができます
今回は導入という意味でまずロールの種類とロールに紐付いて動作するプロセスについて調べてみました
環境
- Ubuntu 18.04
- Gitlab-ee 13.7.3
Omunibus インストールした Gitlab を各ロールのみにするにはまず普通に Gitlab をインストールし reconfigure する必要があります
まずは過去の記事を参考に Gitlab をインストールします
* apt -y update
* apt install -y curl openssh-server ca-certificates
* curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
* EXTERNAL_URL="http://192.168.100.10" apt -y install gitlab-ee
ここから各種ロールを試していきたいと思います
Gitlab をロール化するには /etc/gitlab/gitlab.rb
の role セクションを変更していきます
変更後に reconfigure をかけて動作しているプロセスを調べてみました
redis_sentinel_role にする
vim /etc/gitlab/gitlab.rb
roles ['redis_sentinel_role']
redis['master_ip'] = '192.168.100.10'
redis['master_password'] = 'pass'
run: logrotate: (pid 88362) 3368s; run: log: (pid 22584) 57365s
run: node-exporter: (pid 23113) 57246s; run: log: (pid 22616) 57359s
run: sentinel: (pid 92832) 5s; run: log: (pid 91962) 393s
生成される sentinel のログと設定ファイルのパスは以下の通りです
ls /var/opt/gitlab/sentinel/sentinel.conf
ls /var/log/gitlab/sentinel/current
redis_master_role にする
vim /etc/gitlab/gitlab.rb
roles ['redis_master_role']
run: logrotate: (pid 92869) 48s; run: log: (pid 22584) 57645s
run: node-exporter: (pid 23113) 57526s; run: log: (pid 22616) 57639s
run: redis: (pid 93107) 30s; run: log: (pid 93106) 30s
run: redis-exporter: (pid 93123) 24s; run: log: (pid 93122) 24s
生成される sentinel のログと設定ファイルのパスは以下の通りです
ls /var/opt/gitlab/redis/redis.conf
ls /var/log/gitlab/redis/current
redis_replica_role にする
vim /etc/gitlab/gitlab.rb
roles ['redis_replica_role']
redis['master_ip'] = '192.168.100.10'
redis['master_password'] = 'pass'
run: logrotate: (pid 93574) 2104s; run: log: (pid 22584) 63301s
run: node-exporter: (pid 23113) 63182s; run: log: (pid 22616) 63295s
run: redis: (pid 93554) 3518s; run: log: (pid 93106) 5686s
run: redis-exporter: (pid 93123) 5680s; run: log: (pid 93122) 5680s
生成される sentinel のログと設定ファイルのパスは以下の通りです
ls /var/opt/gitlab/redis/redis.conf
ls /var/log/gitlab/redis/current
geo_primary_role にする
vim /etc/gitlab/gitlab.rb
roles ['geo_primary_role']
run: alertmanager: (pid 94196) 45s; run: log: (pid 94195) 45s
run: gitaly: (pid 93896) 77s; run: log: (pid 93895) 77s
run: gitlab-exporter: (pid 94162) 53s; run: log: (pid 94161) 53s
run: gitlab-workhorse: (pid 94124) 61s; run: log: (pid 94123) 61s
run: grafana: (pid 94219) 42s; run: log: (pid 94218) 42s
run: logrotate: (pid 93574) 2487s; run: log: (pid 22584) 63684s
run: nginx: (pid 94149) 55s; run: log: (pid 94148) 55s
run: node-exporter: (pid 23113) 63565s; run: log: (pid 22616) 63678s
run: postgres-exporter: (pid 94208) 44s; run: log: (pid 94207) 44s
run: postgresql: (pid 94013) 71s; run: log: (pid 94012) 71s
run: prometheus: (pid 94174) 51s; run: log: (pid 94173) 51s
run: puma: (pid 94105) 65s; run: log: (pid 94104) 65s
run: redis: (pid 93885) 80s; run: log: (pid 93106) 6069s
run: redis-exporter: (pid 93123) 6063s; run: log: (pid 93122) 6063s
run: sidekiq: (pid 94112) 63s; run: log: (pid 94111) 63s
デフォルトではすべてのプロセスが動作するようです
geo_secondary_role にする
vim /etc/gitlab/gitlab.rb
roles ['geo_secondary_role']
run: alertmanager: (pid 94196) 462s; run: log: (pid 94195) 462s
run: geo-logcursor: (pid 95654) 118s; run: log: (pid 95541) 142s
run: geo-postgresql: (pid 95424) 151s; run: log: (pid 95435) 150s
run: gitaly: (pid 93896) 494s; run: log: (pid 93895) 494s
run: gitlab-exporter: (pid 94162) 470s; run: log: (pid 94161) 470s
run: gitlab-workhorse: (pid 94124) 478s; run: log: (pid 94123) 478s
run: grafana: (pid 94219) 459s; run: log: (pid 94218) 459s
run: logrotate: (pid 93574) 2904s; run: log: (pid 22584) 64101s
run: nginx: (pid 94149) 472s; run: log: (pid 94148) 472s
run: node-exporter: (pid 23113) 63982s; run: log: (pid 22616) 64095s
run: postgres-exporter: (pid 94208) 461s; run: log: (pid 94207) 461s
run: postgresql: (pid 94013) 488s; run: log: (pid 94012) 488s
run: prometheus: (pid 94174) 468s; run: log: (pid 94173) 468s
run: puma: (pid 95694) 112s; run: log: (pid 94104) 482s
run: redis: (pid 93885) 497s; run: log: (pid 93106) 6486s
run: redis-exporter: (pid 93123) 6480s; run: log: (pid 93122) 6480s
run: sidekiq: (pid 95679) 114s; run: log: (pid 94111) 480s
geo_primary_role
と比べて geo-logcursor
と geo-postgresql
が動作しているようです
postgres_role にする
vim /etc/gitlab/gitlab.rb
roles ['postgres_role']
run: consul: (pid 97826) 2682s; run: log: (pid 97840) 2681s
run: logrotate: (pid 98390) 2405s; run: log: (pid 22584) 67202s
run: node-exporter: (pid 23113) 67083s; run: log: (pid 22616) 67196s
run: postgres-exporter: (pid 94208) 3562s; run: log: (pid 94207) 3562s
run: postgresql: (pid 102922) 21s; run: log: (pid 102921) 21s
down: repmgrd: 0s, normally up, want up; run: log: (pid 103040) 15s
Gitlab 13 からは PostgreSQL 13 が使われており repmgrd が廃止になり Patroni を使うようになっているので有効にする必要があります
consul_role にする
vim /etc/gitlab/gitlab.rb
roles ['consul_role']
run: consul: (pid 97826) 2884s; run: log: (pid 97840) 2883s
run: logrotate: (pid 98390) 2607s; run: log: (pid 22584) 67404s
run: node-exporter: (pid 23113) 67285s; run: log: (pid 22616) 67398s
application_role にする
vim /etc/gitlab/gitlab.rb
roles ['application_role']
run: gitaly: (pid 103720) 29s; run: log: (pid 103719) 29s
run: gitlab-exporter: (pid 103881) 13s; run: log: (pid 103880) 13s
run: gitlab-workhorse: (pid 103857) 19s; run: log: (pid 103856) 19s
run: logrotate: (pid 98390) 2737s; run: log: (pid 22584) 67534s
run: node-exporter: (pid 23113) 67415s; run: log: (pid 22616) 67528s
run: puma: (pid 103888) 11s; run: log: (pid 103839) 23s
run: sidekiq: (pid 103898) 6s; run: log: (pid 103846) 21s
monitoring_role にする
vim /etc/gitlab/gitlab.rb
roles ['monitoring_role']
run: alertmanager: (pid 104334) 12s; run: log: (pid 104333) 12s
run: grafana: (pid 104346) 11s; run: log: (pid 104345) 11s
run: logrotate: (pid 98390) 2923s; run: log: (pid 22584) 67720s
run: node-exporter: (pid 23113) 67601s; run: log: (pid 22616) 67714s
run: prometheus: (pid 104322) 18s; run: log: (pid 104321) 18s
Tips: 存在しないロールを指定した場合
The following invalid roles have been set in 'roles': monitoring_role_dummy
というエラーになります
Tips: ロールをしていしない場合のプロセス
un: alertmanager: (pid 104334) 339s; run: log: (pid 104333) 339s
run: gitaly: (pid 104690) 54s; run: log: (pid 104689) 54s
run: gitlab-exporter: (pid 104954) 30s; run: log: (pid 104953) 30s
run: gitlab-workhorse: (pid 104917) 38s; run: log: (pid 104916) 38s
run: grafana: (pid 104346) 338s; run: log: (pid 104345) 338s
run: logrotate: (pid 98390) 3250s; run: log: (pid 22584) 68047s
run: nginx: (pid 104941) 32s; run: log: (pid 104940) 32s
run: node-exporter: (pid 23113) 67928s; run: log: (pid 22616) 68041s
run: postgres-exporter: (pid 104984) 22s; run: log: (pid 104983) 22s
run: postgresql: (pid 104806) 48s; run: log: (pid 104805) 48s
run: prometheus: (pid 104322) 345s; run: log: (pid 104321) 345s
run: puma: (pid 104898) 42s; run: log: (pid 104897) 42s
run: redis: (pid 104679) 56s; run: log: (pid 104678) 56s
run: redis-exporter: (pid 104965) 28s; run: log: (pid 104964) 28s
run: sidekiq: (pid 104905) 40s; run: log: (pid 104904) 40s
まとめ
node-exporter
, logrotate
は必ず動作する模様
redis_master_role
と redis_replica_role
では動作するプロセスは同じ
postgres_role
は PostgreSQL 12 から Patroni を使って冗長化するようになっている
- 一番設定が面倒なロールは
postgres_role
かもしれない
参考サイト