gitlab的版本是老的,之前用的pg版本为11.x。后来升级到13.9.4了,没有执行升级pg的操作,但是从13.3开始提供了PG12的包,并从13.7开始默认安装PG12的包,现在最新的版本是13.12.15,想升级上去,也为未来准备升级14.x做准备,所以先升级了PG到12,记录一下问题。
文档:
升级PG
一、准备
备份数据
# GitLab 12.2 或更高版本:
sudo gitlab-backup create
sudo gitlab-ctl backup-etc
# 把配置文件备份cp备份出去
二、升级PostgreSQL
注意:升级会停机
sudo gitlab-ctl pg-upgrade
gitlab-ctl pg-upgrade 执行以下步骤:
- 检查以确保数据库处于已知的良好状态。
- 检查是否有足够的可用磁盘空间,否则中止。您可以通过附加--skip-disk-check标志来跳过此步骤。
- 关闭现有数据库、任何不必要的服务,并启用 GitLab 部署页面。
- 更改/opt/gitlab/embedded/bin/PostgreSQL 中的符号链接以指向较新版本的数据库。
- 创建一个新目录,其中包含一个新的空数据库,其区域设置与现有数据库相匹配。
- 使用该pg_upgrade工具将数据从旧数据库复制到新数据库。
- 将旧数据库移开。
- 将新数据库移动到预期位置。
- 调用sudo gitlab-ctl reconfigure以进行所需的配置更改并启动新的数据库服务器。
- 运行ANALYZE以生成数据库统计信息。
- 启动剩余的服务并删除部署页面。
- 如果在此过程中检测到任何错误,它将恢复到旧版本的数据库。
如果不出意外,升级会在配置更改启动新数据库服务器时出错,报启动pg失败,启动连接timeout了
sudo gitlab-ctl tail postgresql
这是因为老版本的gitlab.rb 的配置中,“dynamic_shared_memory_type” 参数为none,升级为12后,不能使用none了,需要修改掉
vim /etc/gitlab/gitlab.rb
# 注释掉
#postgresql['dynamic_shared_memory_type'] = 'none'
# 重新配置gitlab
sudo gitlab-ctl reconfigure
# 查看postgresql的状态是否启动成功,如果没有就手动重启一下
sudo gitlab-ctl status
# sudo gitlab-ctl restart postgresql
$ /opt/gitlab/embedded/bin/postgres --version
postgres (PostgreSQL) 12.5
三、生成数据库统计信息
sudo gitlab-psql -c "SELECT relname, last_analyze, last_autoanalyze FROM pg_stat_user_tables WHERE last_analyze IS NULL AND last_autoanalyze IS NULL;"
执行上诉sql,如果有任何输出,则手动运行:
sudo gitlab-psql -c 'SET statement_timeout = 0; ANALYZE VERBOSE;'
四、删除部署状态
因为在执行pg-upgrade时,启动pg启动失败导致没有在正确状态下执行删除部署状态页面,导致即使现在gitlab-ctl status都是正常的,但是首页还是显示 "Deploy in progress",所以手动退出部署状态
sudo gitlab-ctl deploy-page down
五、清理旧数据库文件
在验证您的 GitLab 实例运行正常后,您可以清理旧的数据库文件:
sudo rm -rf /var/opt/gitlab/postgresql/data.<old_version>
sudo rm -f /var/opt/gitlab/postgresql-version.old
如果修改了 postgresql['data_dir'] = /data/gitlab/postgresql/data ,那么应该删除的路径为:
sudo rm -rf /data/gitlab/postgresql/data.<old_version>
sudo rm -f /var/opt/gitlab/postgresql-version.old
网友评论