毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。
0. はじめに
Omnibus GitLabでバージョンGitLab 11.11より前にインストールされた方は、恐らくPostgreSQLが9.6.14であるかと思います。
しかし、以下のリリースノートを見て気がつきました。
GitLab 12.5 with EKS Cluster Creation & Environments Dashboard | GitLab
https://about.gitlab.com/blog/2019/11/22/gitlab-12-5-released/#planned-deprecation-of-postgresql-9.6-and-10.x-in-gitlab-13.0
GitLab 13では、PostgreSQL 9.6とPostgreSQL 10.xがサポートされなくなります!!!
これによると何やら、PostgreSQL 11のパーティショニングの性能がいいからGitLab 13.xではPostgreSQL11または12にバージョンアップすることを計画中で、GitLab 13からは、PostgreSQL 11が必須になる予定なんだそうです。ちなみに、GitLab 13は2020年05月22日にリリース予定です。
おやおや大変です。自前管理のGitLabを見て見てみましたが、上記のようにPostgreSQL 9.6.14です。
Database settings | GitLab
https://docs.gitlab.com/omnibus/settings/database.html#upgrade-packaged-postgresql-server
によると「バージョン12以降は、明示的に指定しないと自動的にアップグレードされる」とあります。
の筈なのですが、移行はされていないようです。
なので手動で移行してみます。
1. Postgresqlをバージョン10に移行する
1-1. ドキュメントをよく読む
まずは、ドキュメントをよく読みましょう。
Database settings | GitLab
https://docs.gitlab.com/omnibus/settings/database.html#upgrade-packaged-postgresql-server
Note:
- アップグレードする前にコマンドを確認する
- アップグレードするときのダウンタイムを考慮する
- バックアップを取る
アップグレード前に以下のことをチェックすることが推奨です。
- 最新版のGitLabがちゃんと動いていること
-
sudo gitlab-ctl reconfigure
が実行してもエラーが出ないこと - 移行できるだけのデータ領域が確保されていること
ダウンタイムが発生するというのは注意ポイントですね。
年末年始とかにやるとよいかもしれません。
1-2. 最新版のGitLabになっているか確認します。
1-3. reconfigureして問題ないことを確認
xxxx:/var/opt/gitlab/postgresql$ sudo gitlab-ctl reconfigure
Starting Chef Client, version 14.13.11
resolving cookbooks for run list: ["gitlab"]
---- <中略> ---
Running handlers:
Running handlers complete
Chef Client finished, 3/813 resources updated in 09 seconds
gitlab Reconfigured!
reconfigureできました。
1-4. Postgresql 10のバイナリが入っているか確認する
大丈夫だと思いますが、念のためPostgreSQL 10のバイナリがあるかどうか確認します。
~$ sudo ls -la /opt/gitlab/embedded/postgresql/
total 16
drwxr-xr-x 4 root root 4096 Jun 12 02:44 .
drwxr-xr-x 16 root root 4096 Dec 10 14:17 ..
drwxr-xr-x 5 root root 4096 May 23 2019 10
drwxr-xr-x 5 root root 4096 Dec 23 2018 9.6
~$ sudo ls -la /opt/gitlab/embedded/postgresql/10/bin/
total 11480
drwxr-xr-x 2 root root 4096 Dec 4 02:44 .
drwxr-xr-x 5 root root 4096 May 23 2019 ..
-rwxr-xr-x 1 root root 64056 Dec 3 21:07 clusterdb
-rwxr-xr-x 1 root root 63840 Dec 3 21:07 createdb
-rwxr-xr-x 1 root root 68616 Dec 3 21:07 createuser
-rwxr-xr-x 1 root root 59184 Dec 3 21:07 dropdb
-rwxr-xr-x 1 root root 59152 Dec 3 21:07 dropuser
-rwxr-xr-x 1 root root 941952 Dec 3 21:07 ecpg
-rwxr-xr-x 1 root root 132568 Dec 3 21:07 initdb
-rwxr-xr-x 1 root root 34128 Dec 3 21:07 oid2name
-rwxr-xr-x 1 root root 30640 Dec 3 21:07 pg_archivecleanup
-rwxr-xr-x 1 root root 116216 Dec 3 21:07 pg_basebackup
-rwxr-xr-x 1 root root 141112 Dec 3 21:07 pgbench
-rwxr-xr-x 1 root root 34152 Dec 3 21:07 pg_config
-rwxr-xr-x 1 root root 42952 Dec 3 21:07 pg_controldata
---- <中略> ---
*/opt/gitlab/embedded/postgresql/10/bin/*というPostgresql 10のディレクトリがあって、その下にバイナリが入っています。
問題なさそうです。
1-5. 移行できる容量があるか確認
※理由:古いデータを残したまま新しいDBを作るので2倍容量が必要になるから。
既存DBはこれぐらいですね。
~$ sudo du -sh /var/opt/gitlab/postgresql/data
310M /var/opt/gitlab/postgresql/data
Disk使用率はこんなものなので大丈夫でしょう。
~$ sudo df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvdb 20G 15G 5.8G 72% /var/opt/gitlab
1-6. バックアップ
何かあった時に戻せるようにバックアップをとりましょう。DB以外はスキップしていいので、以下のようにするとバックアップが楽にできるでしょう。
sudo gitlab-backup create SKIP=uploads,repositories,builds,artifacts,lfs,registry,pages
※注: GitLab 12.1以降
1-7. アップグレードコマンドを実行する
~$ sudo gitlab-ctl pg-upgrade
Checking for an omnibus managed postgresql: OK
Checking for a newer version of PostgreSQL to install
Upgrading PostgreSQL to 10.9
Checking if we already upgraded: NOT OK
Checking if PostgreSQL bin files are symlinked to the expected location: OK
Checking if postgresql['version'] is set: OK
Waiting 30 seconds to ensure tasks complete before PostgreSQL upgrade.
See https://docs.gitlab.com/omnibus/settings/database.html#upgrade-packaged-postgresql-server for details
If you do not want to upgrade the PostgreSQL server at this time, enter Ctrl-C and see the documentation for details
Please hit Ctrl-C now if you want to cancel the operation.
実行猶予が30秒与えられます。
あ~、バックアップ忘れてた、という場合にはCtrl-Cでキャンセルしましょう。
続きは以下です。
Toggling deploy page:cp /opt/gitlab/embedded/service/gitlab-rails/public/deploy.html /opt/gitlab/embedded/service/gitlab-rails/public/index.html
Toggling deploy page: OK
Toggling services:ok: down: alertmanager: 1s, normally up
ok: down: gitaly: 0s, normally up
ok: down: gitlab-exporter: 0s, normally up
ok: down: grafana: 0s, normally up
ok: down: logrotate: 1s, normally up
ok: down: mattermost: 0s, normally up
ok: down: node-exporter: 1s, normally up
ok: down: postgres-exporter: 0s, normally up
ok: down: prometheus: 0s, normally up
ok: down: redis-exporter: 1s, normally up
ok: down: registry: 0s, normally up
ok: down: sidekiq: 1s, normally up
Toggling services: OK
Running stop on postgresql:ok: down: postgresql: 0s, normally up
Running stop on postgresql: OK
Symlink correct version of binaries: OK
Creating temporary data directory: OK
Initializing the new database: OK
Upgrading the data: OK
Move the old data directory out of the way: OK
Rename the new data directory: OK
Configuring PostgreSQL
Starting Chef Client, version 14.13.11
resolving cookbooks for run list: ["gitlab::config", "postgresql::enable"]
これ以下は、通常のsudo gitlab-ctl reconfigure
と同じなので省略します。
通常のsudo gitlab-ctl reconfigure
と違うのは、
/var/opt/gitlab/postgresql/data/postgresql.conf が書き換わるのでDiffが盛大に出ます。
しかし、/etc/gitlab/gitlab.rbを元に再設定されるので気にしなくてOKです。
最後にこんなメッセージが出ます。
Running handlers:
Running handlers complete
Chef Client finished, 5/813 resources updated in 09 seconds
Running reconfigure: OK
Waiting for Database to be running.
Database upgrade is complete, running analyze_new_cluster.sh
Toggling deploy page:rm -f /opt/gitlab/embedded/service/gitlab-rails/public/index.html
Toggling deploy page: OK
Toggling services:ok: run: alertmanager: (pid 15506) 1s
ok: run: gitaly: (pid 15518) 0s
ok: run: gitlab-exporter: (pid 15538) 1s
ok: run: grafana: (pid 15547) 0s
ok: run: logrotate: (pid 15560) 0s
ok: run: mattermost: (pid 15567) 1s
ok: run: node-exporter: (pid 15575) 0s
ok: run: postgres-exporter: (pid 15585) 1s
ok: run: prometheus: (pid 15594) 0s
ok: run: redis-exporter: (pid 15678) 0s
ok: run: registry: (pid 15688) 1s
ok: run: sidekiq: (pid 15696) 0s
Toggling services: OK
==== Upgrade has completed ====
Please verify everything is working and run the following if so
sudo rm -rf /var/opt/gitlab/postgresql/data.9.6
動作に問題がなければ、/var/opt/gitlab/postgresql/data.9.6
は消しても問題ないようです。
1-8. データ確認
以下のディレクトリがどうなっているか確認しましょう。
/var/opt/gitlab/postgresql/
~$ sudo ls -la /var/opt/gitlab/postgresql/
total 28
drwxr-xr-x 4 gitlab-psql root 156 Dec 10 14:17 .
drwxr-xr-x 23 root root 4096 Dec 10 14:17 ..
-rwx------ 1 gitlab-psql gitlab-psql 795 Dec 10 14:17 analyze_new_cluster.sh
drwx------ 19 gitlab-psql gitlab-psql 4096 Dec 10 14:17 data
drwx------ 19 gitlab-psql root 4096 Dec 10 14:17 data.9.6
-rwx------ 1 gitlab-psql gitlab-psql 52 Dec 10 14:17 delete_old_cluster.sh
-rw------- 1 gitlab-psql root 52 Jul 23 2017 .profile
srwxrwxrwx 1 gitlab-psql gitlab-psql 0 Dec 10 14:17 .s.PGSQL.5432
-rw------- 1 gitlab-psql gitlab-psql 81 Dec 10 14:17 .s.PGSQL.5432.lock
dataとdata.9.6があります。
data.9.6が古いファイルです。
2. 動作確認
一通り挙動を確認しましょう。
3. 再起動してComponentsを確認
動作を確認したら、再起動してみます。
(ComponentsがPostgreSQL10にならなかったからです)
無事、PostgreSQL 10.9になりました。
4. 古いデータを削除
あとは古いデータを削除するだけなのですが、根っから小心者なので移動だけしておきます。
sudo mv /var/opt/gitlab/postgresql/data.9.6 /root/backup