2021年1月17日日曜日

Omnibus Gitlab でロールごとにインスタンスを作成して連携する方法

概要

前回 Gitlab の各種ロールについて調べました
今回はロールごとにインスタンスを作成して連携する方法を紹介します

環境

  • Ubuntu 18.04
  • Gitlab-ee 13.7.3

postgres_role と redis_master_role インスタンスの作成

まず PostgreSQL と Redis を管理するインスタンスを作成します

Gitlab の構築

こちらを参考にまずは Gitlab を各インスタンスにインストールしてください
なお postgres_role を作成する場合は EXTERNAL_URL を設定しないで作成してください

PostgreSQL に接続する gitlab ユーザのパスワード設定

  • gitlab-ctl pg-password-md5 gitlab

生成されたパスワードは後で使うのでメモしておきます

設定ファイル変更

PostgreSQL と Redis を起動するための設定をします
外部から接続する想定なので listen_address や認証情報を設定します
sql_user_password には先程作成したパスワードのハッシュ文字列を入力してください
また PostgreSQL12 から repmgr が使えないので false にしておきます

  • vim /etc/gitlab/gitlab.rb
roles ['postgres_role', 'redis_master_role']

repmgr['enable'] = false

postgresql['listen_address'] = '0.0.0.0'
postgresql['port'] = 5432
postgresql['sql_user'] = "gitlab"
postgresql['sql_user_password'] = "335158fc1aa26a831656b369e233217d"
postgresql['trust_auth_cidr_addresses'] = %w(0.0.0.0/0)

redis['port'] = 6379
redis['bind'] = '0.0.0.0'


* gitlab-ctl reconfigure
* gitlab-ctl status

5432 と 6379 が 0.0.0.0 で LISTEN していることを確認しましょう
以下のようにプロセスが起動していることを確認します


run: consul: (pid 24806) 116s; run: log: (pid 24842) 113s
run: logrotate: (pid 24707) 140s; run: log: (pid 24715) 139s
run: node-exporter: (pid 24822) 114s; run: log: (pid 24746) 133s
run: postgres-exporter: (pid 24835) 113s; run: log: (pid 24787) 119s
run: postgresql: (pid 23639) 454s; run: log: (pid 23638) 454s
run: redis: (pid 20593) 1216s; run: log: (pid 20604) 1213s
run: redis-exporter: (pid 24828) 113s; run: log: (pid 24764) 127s

application_role インスタンスの作成

次に Rails アプリが動作するインスタンスを作成します

Gitlab の構築

こちらを参考にまずは Gitlab を各インスタンスにインストールしてください

application_role を設定する

事前に作成した PostgreSQL と Redis に接続します
また起動するロールは application_role にします
IP の部分は先程作成した postgres_roleredis_master_role のインスタンスの IP を指定しましょう

application_role のみだと nginx が起動しないので nginx は別途有効にします

  • vim /etc/gitlab/gitlab.rb
roles ['application_role']

nginx['enable'] = true

gitlab_rails['db_username'] = "gitlab"
gitlab_rails['db_password'] = "335158fc1aa26a831656b369e233217d"
gitlab_rails['db_host'] = "192.168.100.11"
gitlab_rails['redis_host'] = "192.168.100.11"


再起動してプロセスの確認をしましょう
8080 が 0.0.0.0 で LISTEN していることも確認します


* gitlab-ctl reconfigure
* gitlab-ctl status

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

動作確認

application_role にアクセスして正常に Gitlab が動作するか確認しましょう
nginx を有効にしているので application_role インスタンスの IP にアクセスすれば Gitlab が動作しているのが確認できると思います

最後に

application_rolepostgres_role, redis_master_role にインスタンスを分けて Gitlab を起動する方法を紹介しました
ロールごとにインスタンスを分けることで冗長化できる他管理も楽になるかなと思います

今回の構成であれば application_role を増やして LB を追加すればアプリケーションレイヤーのスケールは簡単にできるようになると思います

参考サイト

0 件のコメント:

コメントを投稿