毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。
0. はじめに
GitLab 12.10がリリースされましたね!
そのリリースノートの内容に何やら以下のような話が書いてありました。
PostgreSQL 11 is now the default version of PostgreSQL for GitLab Self-Managed
https://about.gitlab.com/releases/2020/04/22/gitlab-12-10-released/#postgresql-11-is-now-the-default-version-of-postgresql-for-gitlab-self-managed
簡単に言うと、**GitLab 12.10からはデフォルトでインストールされるPostgreSQLのバージョンは、11になりました。
**ということでした。PostgreSQL 11にすることでパフォーマンスがアップしてCPU使用率が下がったぜ!みたいなことも書いてあるのですが、それよりも気になるのは以下の内容でした。
Note that PostgreSQL 9.6 and PostgreSQL 10 will no longer be supported as of GitLab 13.0.
You will need to upgrade your PostgreSQL version prior to upgrading to 13.0.
GitLab 13からは、**PostgreSQL 9.6と10はサポートされない!
**とあります。
Upgradeにも**GitLab 13.0ではPostgreSQL 9.6と10は削除されるからね!
**とあります。
Important notes on upgrading to GitLab 12.10
https://about.gitlab.com/releases/2020/04/22/gitlab-12-10-released/#upgrade
以下の記事でも書きましたが、とうとうPostgreSQL 11にアップグレードしなければならないときが来たようです。
OmnibusインストールされたGitLabのPostgreSQLを9.6.14から10.9にアップグレードした話 - Qiita
https://qiita.com/ynott/items/653236f1a5c2ab8cf69f
さてさて、GitLab 13っていつリリースされるのだっけ?と見てみたら、2020年5月22日と
もう直ぐではありませんか。。。
GitLab upcoming releases | GitLab
https://about.gitlab.com/upcoming-releases/
現在のPostgreSQLのバージョンは以下の通りです。
自動的にバージョンアップされるはずですが、されていませんでしたので手動で対応します。
アップグレードは同じような方法でできるようです。
では、やってみましょう。
1. Postgresqlをバージョン11に移行する
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して問題ないことを確認
$ sudo gitlab-ctl reconfigure
Starting Chef Client, version 14.14.29
resolving cookbooks for run list: ["gitlab"]
---- <中略> ---
Chef Client finished, 12/779 resources updated in 46 seconds
Warnings:
The version of the running postgresql service is different than what is installed.
Please restart postgresql to start the new version.
sudo gitlab-ctl restart postgresql
gitlab Reconfigured!
reconfigureできました。
1-4. Postgresql 11のバイナリが入っているか確認する
大丈夫だと思いますが、念のためPostgreSQL 11のバイナリがあるかどうか確認します。
以下、コマンドを間違えています!
sudo ls -la /opt/gitlab/embedded/postgresql/11/bin/
で確認してください。
$ sudo ls -la /opt/gitlab/embedded/postgresql/
total 20
drwxr-xr-x 5 root root 4096 Feb 23 02:44 .
drwxr-xr-x 18 root root 4096 May 3 17:03 ..
drwxr-xr-x 5 root root 4096 May 23 2019 10
drwxr-xr-x 5 root root 4096 Feb 23 02:44 11
drwxr-xr-x 5 root root 4096 Dec 23 2018 9.6
lrwxrwxrwx 1 root root 35 Jun 12 2019 9.6.8 -> /opt/gitlab/embedded/postgresql/9.6
$ sudo ls -la /opt/gitlab/embedded/postgresql/11/bin/
total 11484
drwxr-xr-x 2 root root 4096 May 2 02:44 .
drwxr-xr-x 5 root root 4096 May 23 2019 ..
-rwxr-xr-x 1 root root 64056 May 1 00:38 clusterdb
-rwxr-xr-x 1 root root 63840 May 1 00:38 createdb
-rwxr-xr-x 1 root root 68696 May 1 00:38 createuser
-rwxr-xr-x 1 root root 59184 May 1 00:38 dropdb
-rwxr-xr-x 1 root root 59152 May 1 00:38 dropuser
-rwxr-xr-x 1 root root 941952 May 1 00:38 ecpg
-rwxr-xr-x 1 root root 132568 May 1 00:38 initdb
-rwxr-xr-x 1 root root 34128 May 1 00:38 oid2name
-rwxr-xr-x 1 root root 30640 May 1 00:38 pg_archivecleanup
-rwxr-xr-x 1 root root 116176 May 1 00:38 pg_basebackup
-rwxr-xr-x 1 root root 141152 May 1 00:38 pgbench
-rwxr-xr-x 1 root root 34152 May 1 00:38 pg_config
-rwxr-xr-x 1 root root 42952 May 1 00:38 pg_controldata
---- <後略> ---
*/opt/gitlab/embedded/postgresql/11/bin/*というPostgresql 11のディレクトリがあって、その下にバイナリが入っています。
問題なさそうです。
1-5. 移行できる容量があるか確認
※理由:古いデータを残したまま新しいDBを作るので2倍容量が必要になるから。
既存DB領域使用量
$ sudo du -sh /var/opt/gitlab/postgresql/data
187M /var/opt/gitlab/postgresql/data
現在のDisk使用量
$ sudo df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvdb 50G 17G 34G 34% /var/opt/gitlab
1-6. バックアップ
何かあった時に戻せるようにバックアップをとりましょう。DB以外はスキップしていいので、以下のようにするとバックアップが楽にできるでしょう。
sudo gitlab-backup create SKIP=uploads,repositories,builds,artifacts,lfs,registry,pages
※注: GitLab 12.1以降
1-7. アップグレードコマンドを実行する
さてさて、ドキドキしますが、アップグレードしてみましょう。
以下のコマンドは、GitLabが12.10以降の場合です。
$ sudo gitlab-ctl pg-upgrade
12.8以前の場合は、
$ sudo gitlab-ctl pg-upgrade -V 11
とするそうです。
$ sudo gitlab-ctl pg-upgrade
Checking for an omnibus managed postgresql: OK
Checking if postgresql['version'] is set: OK
Checking if we already upgraded: NOT OK
Checking for a newer version of PostgreSQL to install
Upgrading PostgreSQL to 11.7
Checking if PostgreSQL bin files are symlinked to the expected location: 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.
PostgreSQL 10にアップグレードしたときと同じですね。
実行猶予が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: 0s, normally up
ok: down: node-exporter: 1s, normally up
ok: down: postgres-exporter: 0s, normally up
ok: down: prometheus: 1s, normally up
ok: down: puma: 0s, normally up
ok: down: redis-exporter: 0s, normally up
ok: down: registry: 1s, normally up
ok: down: sidekiq: 0s, 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
Saving the old version information: OK
Configuring PostgreSQL
これ以下は、通常の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, 4/771 resources updated in 06 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 25892) 0s
ok: run: gitaly: (pid 25902) 1s
ok: run: gitlab-exporter: (pid 25921) 0s
ok: run: grafana: (pid 25923) 1s
ok: run: logrotate: (pid 25944) 0s
ok: run: node-exporter: (pid 25950) 1s
ok: run: postgres-exporter: (pid 25955) 0s
ok: run: prometheus: (pid 25963) 0s
ok: run: puma: (pid 26048) 1s
ok: run: redis-exporter: (pid 26056) 0s
ok: run: registry: (pid 26063) 1s
ok: run: sidekiq: (pid 26072) 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.10
sudo rm -f /var/opt/gitlab/postgresql-version.old
動作に問題がなければ、/var/opt/gitlab/postgresql/data.10
は消しても問題ないようです。
1-8. データ確認
以下のディレクトリがどうなっているか確認しましょう。
/var/opt/gitlab/postgresql/
$ sudo ls -la /var/opt/gitlab/postgresql/
total 28
drwxr-xr-x 4 gitlab-psql root 155 May 3 17:23 .
drwxr-xr-x 23 root root 4096 May 3 17:23 ..
-rwx------ 1 gitlab-psql gitlab-psql 795 May 3 17:22 analyze_new_cluster.sh
drwx------ 19 gitlab-psql gitlab-psql 4096 May 3 17:23 data
drwx------ 19 gitlab-psql gitlab-psql 4096 May 3 17:22 data.10
-rwx------ 1 gitlab-psql gitlab-psql 52 May 3 17:22 delete_old_cluster.sh
-rw------- 1 gitlab-psql root 52 Jul 23 2017 .profile
srwxrwxrwx 1 gitlab-psql gitlab-psql 0 May 3 17:22 .s.PGSQL.5432
-rw------- 1 gitlab-psql gitlab-psql 81 May 3 17:22 .s.PGSQL.5432.lock
dataとdata.10があります。
data.10が古いディレクトリです。
容量を確認します。
$ sudo du -sh /var/opt/gitlab/postgresql/data
107M /var/opt/gitlab/postgresql/data
移行前よりもコンパクトになっています...(まあ、いいでしょう)
1-9. 実行バイナリーの確認
PostgreSQL 11が実行されているかどうか確認しましょう。
$ ps axwwu | grep bin/postgres
gitlab-+ 25509 0.0 1.3 1100208 55676 ? Ss 17:22 0:00 /opt/gitlab/embedded/bin/postgres -D /var/opt/gitlab/postgresql/data
これだけでは分からなかったので、/opt/gitlab/embedded/bin/postgresがどこを見ているか確認します。
$ ls -la /opt/gitlab/embedded/bin/postgres
lrwxrwxrwx 1 root root 47 May 3 17:22 /opt/gitlab/embedded/bin/postgres -> /opt/gitlab/embedded/postgresql/11/bin/postgres
無事、/opt/gitlab/embedded/postgresql/11/bin/postgres
を向いていることが確認できました。
2. 動作確認
一通り挙動を確認しましょう。
無事、PostgreSQL 11.7になりました。
4. 古いデータを削除
あとは古いデータを削除するだけなのですが、根っから小心者なので移動だけしておきます。
sudo mv /var/opt/gitlab/postgresql/data.10 /root/backup