- 尽量减少停机迁移时间。
同时做全量备份和增量备份,不需要停机。备份成功后做域名切换。不过,域名切换可能导致上传中的 image 失败,重试即可。 讨论: https://github.com/goharbor/harbor/discussions/19760
- 如何迁移用户信息?
尝试同步数据库表记录,还需要验证 讨论: https://github.com/goharbor/harbor/discussions/19774
# dump reg.srv.xxx.cn pg 数据库表记录
docker run -it --network=host -v "/tmp/dump:/tmp/dump" postgres:15 pg_dump -h <host> -U harbor -d harbor --column-inserts -a -t cve_allowlist -t access -t harbor_user -t project -t project_member -t immutable_tag_rule -t project_metadata -t properties -t quota -t retention_policy -t role -t scanner_registration -t schedule -t schema_migrations -t user_group -t quota_usage -t quota -f /tmp/dump/reg.srv.pg.sql
# dump reg.xxx.ai pg 数据库表记录
docker run -it --network=host -v "/tmp/dump:/tmp/dump" postgres:15 pg_dump -h <host> -U harbor -d harbor --column-inserts -a -t cve_allowlist -t access -t harbor_user -t project -t project_member -t immutable_tag_rule -t project_metadata -t properties -t quota -t retention_policy -t role -t scanner_registration -t schedule -t schema_migrations -t user_group -t quota_usage -t quota -f /tmp/dump/reg.pg.sql
# 将 reg.xxx.ai pg 数据库表记录导入 reg.srv.xxx.cn pg
# NOTE: 导入前需要先将 quota_usage 的 used 和 version 置为 0
psql -h <host> -U harbor -d harbor < /tmp/dump/reg.pg.sql
# 同时,还得将与 schedule 表关联的 execution 表的部分数据导出,其 vendor_type 为 SCHEDULER, vendor_id 为对应的 schedule 表中的 id
# eg: select * from execution where vendor_type='SCHEDULER' and (vendor_id=4 or vendor_id=5 or vendor_id=6);
# NOTE: 只需要导入部分数据即可
docker run -it --network=host -v "/tmp/dump:/tmp/dump" postgres:15 pg_dump -h <host> -U harbor -d harbor --column-inserts -a -t execution -f /tmp/dump/execution.reg.pg.sql
# 上面 execution 关联的 task 数据也要导入
# eg: select * from task where execution_id=182 or execution_id=357 or execution_id=369;
docker run -it --network=host -v "/tmp/dump:/tmp/dump" postgres:15 pg_dump -h <host> -U harbor -d harbor --column-inserts -a -t task -f /tmp/dump/task.reg.pg.sql
- 如何处理失败的迁移 job?
将 push-based 的手动执行的 replication 重新执行一遍即可,同步时会检查镜像 digest,如果相等会跳过,如果不相等同时设置了相同名字 override 的话会将镜像重新同步一遍。 代码:https://github.com/goharbor/harbor/blob/29cdc398e048b739c19a23fa0ffb5073df256009/src/controller/replication/transfer/image/transfer.go#L209
- 性能测试时由于并发更新 project quota usage 导致失败率高的问题处理
设置
QUOTA_UPDATE_PROVIDER= redis
issue: https://github.com/goharbor/harbor/issues/19902
- 如果使用 S3,可能需要实现 distribution 的分段并发上传
feature: support concurrent multipart object upload with s3 backend? · Issue #3837 · distribution/di