目录
- 前言
- 重要提示
- 升级
- 1. 停止老harbor集群
- 2. 备份老版本安装路径
- 3. 下载新版本harbor的安装包
- 4. 下载迁移工具镜像
- 5. 备份 harbor.cfg 以及 数据库相关
- 6. 升级数据库架构(schema)、harbor.cfg 并且 迁移数据
- 7. 启动harbor1.5.0
- 8. 如果还有一些不符合预期的再自行调节配置
- 一些问题及解决办法
- [ERROR] InnoDB: ./ibdata1 can't be opened in read-write mode
- Plugin 'InnoDB' init function returned error.
- FileNotFoundError: [Errno 2] No such file or directory: './docker-compose.yml'
- ERROR: manifest for goharbor/harbor-log:__version__ not found
- ERROR: for harbor-log Cannot create container for service log: b'Conflict. The container name "/harbor-log" is already in use by container
- IOError: [Errno 21] Is a directory: '/harbor-migration/harbor-cfg/harbor.cfg'
- ConfigParser.NoOptionError: No option u'verify_remote_cert' in section: u'configuration'
- 下面的错误,忽略
前言
本文背景是对 harbor 进行升级,因为我的harbor版本是1.2.2,在当前2020年看来实在是有点过于陈旧,互联网搜索一番之后,不太建议直接升级到最新版,而是1.2.2 -> 1.5.0 -> 1.6 -> 1.7 -> 1.9,所以我在这里记录了第一次的升级操作和遇到的一些问题,部分问题的解决方法并非是最权威的,但是大体是白话的解释了原因和解决办法,ok!
重要提示
毕竟是在做升级操作,一定切记备份数据,备份数据分两部分:
- harbor 的整个安装目录
- harbor 存储的所有data数据(除非你熟悉,否则建议全量备份)
如下图:
升级
这里给出官网的流程 => Harbor upgrade and database migration guide
1. 停止老harbor集群
cd harbor
docker-compose down -v
harbor集群是通过 docker-compose 来管理的,可以批量操作一批相互关联的服务容器
2. 备份老版本安装路径
mv harbor harbor.1.2.2.bak
3. 下载新版本harbor的安装包
https://github.com/vmware/harbor/releases
https://gitea.com/goharbor/harbor/releases?page=6
国内镜像仓库地址:http://harbor.orientsoft.cn/
如果服务所在的网络环境无法访问外网(无法下载依赖的镜像),则可以使用offline的下载地址:
tar包中已经包含了对应的镜像,只需要使用 docker load
命令导入即可
4. 下载迁移工具镜像
迁移工具通过镜像的方式来提供,迁移工具提供了数据备份、数据库架构(database schema)升级、harbor.cfg 配置升级、以及数据迁移的能力
docker pull vmware/harbor-migrator:v1.5.0
5. 备份 harbor.cfg 以及 数据库相关
docker run -it --rm -e DB_USR=root -e DB_PWD={db_pwd} -v ${harbor_db_path}:/var/lib/mysql -v ${harbor_cfg}:/harbor-migration/harbor-cfg/harbor.cfg -v ${backup_path}:/harbor-migration/backup vmware/harbor-migrator:[tag] backup
注意,这里有一个出错的点,是权限问题,如果方便的话给所有的文件的所有用户可读可写权限,给所有的目录可读可写可执行的权限,我这里直接 777 了
- {db_pwd}:数据库密码,默认 root123
- {harbor_db_path}:目前正在使用的数据库数据路径,具体到 databases 即可,如我的路径:xxxx/harbor-data/database,一般安装的时候,registry、log等数据的路径都在一个集中的路径下,这里填写到集中路径的database即可
- {harbor_cfg}:目前在用的harbor.cfg文件的路径,如果第一步已经mv,则这里的路径就是:xxx/harbor.1.2.2.bak/harbor.cfg
- {backup_path}:要备份到的目标路径,这里自行创建一个备份路径即可,可以认为这里的路径是一个迁移中转路径
6. 升级数据库架构(schema)、harbor.cfg 并且 迁移数据
docker run -it --rm -e DB_USR=root -e DB_PWD={db_pwd} -v ${harbor_db_path}:/var/lib/mysql -v ${harbor_cfg}:/harbor-migration/harbor-cfg/harbor.cfg vmware/harbor-migrator:[tag] up
- {db_pwd}:数据库密码,默认 root123
- {harbor_db_path}:目前正在使用的数据库数据路径,具体到 databases 即可,如我的路径:xxxx/harbor-data/database,一般安装的时候,registry、log等数据的路径都在一个集中的路径下,这里填写到集中路径的database即可
- {harbor_cfg}:不同于第5步,这里是要升级harbor.cfg,升级的是第5部导出的harbor.cfg,也就是会重写第5步 {backup_path}/harbor.cfg文件
7. 启动harbor1.5.0
- 先用第6步中经升级工具升级后的 harbor.cfg 覆盖掉1.5.0 中的harbor.cfg
- 调用 ./install.sh 启动
8. 如果还有一些不符合预期的再自行调节配置
理论上到了第7步就应该完成了,如果有一些要调节的,如端口,自行在docker-compose.yml文件中调节就好了
一些问题及解决办法
[ERROR] InnoDB: ./ibdata1 can’t be opened in read-write mode
[ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
[ERROR] InnoDB: ./ibdata1 can't be opened in read-write mode
[ERROR] InnoDB: The system tablespace must be writable!
[ERROR] Plugin 'InnoDB' init function returned error.
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[ERROR] Unknown/unsupported storage engine: InnoDB
[ERROR] Aborting
数据库数据权限错误,给所有的文件的所有用户添加可读可写权限,目录添加可读可写可执行权限,可能只有部分文件,这里我对所有文件均添加了操做,为了方便,直接chmod 777 -R xxx/harbor-data/database
Plugin ‘InnoDB’ init function returned error.
InnoDB: No valid checkpoint found.
InnoDB: If you are attempting downgrade from MySQL 5.7.9 or later,
InnoDB: please refer to http://dev.mysql.com/doc/refman/5.6/en/upgrading-downgrading.html
InnoDB: If this error appears when you are creating an InnoDB database,
InnoDB: the problem may be that during an earlier attempt you managed
InnoDB: to create the InnoDB data files, but log file creation failed.
InnoDB: If that is the case, please refer to
InnoDB: http://dev.mysql.com/doc/refman/5.6/en/error-creating-innodb.html
[ERROR] Plugin 'InnoDB' init function returned error.
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[ERROR] Unknown/unsupported storage engine: InnoDB
[ERROR] Aborting
因为之前备份的时候失败了,导致了部分错误,我的出错就是因为之前数据库数据文件权限不对,导致创建InnoDB出错,解决就是直接用提前做好的备份直接恢复了数据,添加了权限重来,如果不嫌麻烦,也可以参考 http://dev.mysql.com/doc/refman/5.6/en/error-creating-innodb.html 来修正.
FileNotFoundError: [Errno 2] No such file or directory: ‘./docker-compose.yml’
docker-compose.yml 文件不存在,如果安装方式是offline 安装,则需要复制 harbor 目录下 make 子目录中的 docker-compose.tpl文件为docker-compose.yml
ERROR: manifest for goharbor/harbor-log:version not found
需要修改 docker-compose.yml 里面的 version 值
ERROR: for harbor-log Cannot create container for service log: b’Conflict. The container name “/harbor-log” is already in use by container
老版本barbor未关闭,使用docker-compose down -v
进行关闭
IOError: [Errno 21] Is a directory: ‘/harbor-migration/harbor-cfg/harbor.cfg’
这里是在执行第五步备份的时候或者第六部升级配置的时候出错
- 如果是第五步,则是老版本的 harbor.cfg 路径填写错误
- 如果是第六步,则是在第五步导出的备份的 harbor.cfg 路径填写错误
ConfigParser.NoOptionError: No option u’verify_remote_cert’ in section: u’configuration’
用错了harbor的配置文件,经过步骤六升级之后的harbor.cfg是给新版本harbor用的,不同版本之间的harbor.cfg文件中配置有差异,不能混用
下面的错误,忽略
官方文档指出,如果harbor能启动成功,则忽略,往往出现在 1.2 -> 1.3以上版本的升级过程中
[ERROR] Missing system table mysql.roles_mapping; please run mysql_upgrade to create it
[ERROR] Incorrect definition of table mysql.event: expected column 'sql_mode' at position ... ...
[ERROR] mysqld: Event Scheduler: An error occurred when initializing system tables. Disabling the Event Scheduler.
[Warning] Failed to load slave replication state from table mysql.gtid_slave_pos: 1146: Table 'mysql.gtid_slave_pos' doesn't exist