升级与备份
哪些层原地升级、升级与回滚的步骤;每日自动备份的产物、全量备份的时机、恢复到同机与换机的区别。
本页面向维护 IDMatrix 服务器的管理员,只适用于模型 B。模型 A 容器一体机不支持保留数据的升级,更换镜像要删卷,身份库随之清空;生产环境使用模型 B。
升级
| 层 | 原地升级 | 方式 |
|---|---|---|
管理台(dist/) | 是 | 替换目录,不重启 |
| 许可层 | 是 | 重跑 playbook |
| 配置与 playbook | 是 | 重跑 playbook,幂等 |
FreeIPA 本体(ipa-server RPM) | 否 | 见下文 |
| 操作系统大版本 | 否 | 重装加恢复,按专项方案 |
IDMatrix 的版本迭代(功能、汉化、门控、缺陷修复)全部落在前三行,不改动 FreeIPA 本体。
升级前
- 执行全量备份。
ipa-backup停止 dirsrv 约 30 秒,安排在维护窗口。 - 单独备份许可状态,
ipa-backup不包含该目录。 - 记录当前版本,回滚时使用。
- 保留上一版的交付包。
sudo ipa-backup
sudo tar czf /root/license-state-preupgrade.tgz -C /var/lib idmatrix-license
rpm -q ipa-server; ls -la /opt/idmatrix/dist/index.html推荐方式:重跑 playbook
沿用旧的 customer.env,只把 IDM_WEBUI_DIST_SRC 和 IDM_LIC_SRC 指向新交付包,重跑 playbook:
cd <新交付包> && ./deploy/render-inventory.sh
ansible-playbook -i deploy/inventory.generated.yml deploy-ipaserver.ymlipaserver 角色检测到 IPA 已安装即跳过;管理台和许可层的文件被覆盖后触发各自的重启。许可层只通过 playbook 升级,不支持手工替换单个文件。
手工方式:只替换管理台
构建产物带内容 hash,解压前必须清空目录,否则新旧文件堆积:
cd /opt/idmatrix/dist && find . -mindepth 1 -delete
tar xzf /tmp/dist-<新版本>.tar.gz -C /opt/idmatrix/dist管理台是纯静态文件,不重启任何服务,浏览器按 Ctrl+F5 刷新。
升级后自检
| 检查 | 预期 |
|---|---|
curl -sk -o /dev/null -w '%{http_code}\n' https://<FQDN>/ipa/modern-ui/ | 200 |
ipa user-show admin | 正常返回 |
/var/lib/idmatrix-license/status.json 的 valid | 与升级前一致 |
| 在一个未授权模块执行写操作 | 返回 403 |
最后一项必须做。闸门损坏的症状是放行了本该拒绝的请求,不是报错。
FreeIPA 本体不做原地升级
FreeIPA 本体不随 IDMatrix 版本升级。离线环境没有 yum 源,跨版本升级需要完整的依赖闭包;跨大版本要执行 ipa-server-upgrade,涉及 schema 迁移,失败后难以回滚;备份恢复要求同版本,升级 IPA 后旧备份无法恢复。需要升级(安全公告等)时联系 Reallysec 按专项方案执行,不要自行执行 dnf update ipa-server。
回滚
| 升级对象 | 回滚 |
|---|---|
| 管理台 | 清空 dist/,解压上一版 |
| 许可层 | 用上一版交付包重跑 playbook |
| 数据损坏 | ipa-restore <升级前的全量备份>,再还原 license-state-preupgrade.tgz |
备份
需要备份两部分:IPA 身份库(用户、组、主机、策略、证书、CA、DNS)和许可状态(/var/lib/idmatrix-license/)。
备份包含 CA 私钥和目录数据。传出主机后加密保存,限制访问。
两种备份
| 命令 | 范围 | 对服务的影响 | 用途 |
|---|---|---|---|
ipa-backup | 全量:数据、CA、证书、配置 | 停止 dirsrv 约 30 秒 | 整机灾备;每周一次,以及建立信任、批量修改策略、升级之前 |
ipa-backup --data --online | 只有 LDAP 数据 | 不中断 | 每日,安装时已自动配置 |
产物在 /var/lib/ipa/backup/ipa-full-<时间戳> 或 ipa-data-<时间戳>。备份不会自动离开主机,必须拷贝到主机外,至少保留两代。
每日自动备份
playbook 安装 /usr/local/sbin/idmatrix-backup.sh 和 idmatrix-backup.timer,每日 02:30 产出两个文件,耗时约 5 秒,不停止服务:
| 产物 | 路径 |
|---|---|
| 数据备份 | /var/lib/ipa/backup/ipa-data-<时间戳>/ |
| 许可状态 | /var/lib/ipa/backup/license-state-<时间戳>.tgz |
超过 14 天的备份自动清理(idm_backup_keep_days)。客户自带备份系统时,安装时设置 idm_setup_backup=false。
| 操作 | 命令 |
|---|---|
| 查看下次执行时间 | systemctl list-timers idmatrix-backup.timer |
| 查看执行日志 | journalctl -u idmatrix-backup.service |
| 立即执行一次 | systemctl start idmatrix-backup.service |
多 master 环境
每台 IPA 服务器各自备份。全量恢复只在一台上执行,恢复后其他 replica 从它重新初始化(ipa-replica-manage re-initialize --from <恢复的那台>),否则数据冲突。
恢复
恢复覆盖现有身份库,ipa-restore 期间服务中断约 45 秒,安排在维护窗口。
前提是同版本 IPA、同 hostname、同 realm、同 domain。全量恢复通常在一台干净安装好 IPA 的主机上执行。
sudo cp -a /离机位置/ipa-full-<时间戳> /var/lib/ipa/backup/
sudo ipa-restore /var/lib/ipa/backup/ipa-full-<时间戳>
# 只在恢复到同一台主机时
sudo tar xzf license-state.tgz -C /var/lib
sudo systemctl restart httpd恢复后核对:
| 检查 | 预期 |
|---|---|
ipactl status | 全部 RUNNING |
kinit admin && ipa user-find --sizelimit=1 | 正常返回 |
ipa trust-show <AD 域>(有 AD 信任时) | 正常返回 |
| 管理台 License Activation 页 | 状态为 valid |
两条输出属于正常,不是故障:Could not open file for writing: /etc/httpd/conf.d/nss.conf(当前版本使用 mod_ssl,该文件本就不存在);提示各副本需重新初始化(单机部署不涉及,多 master 按上文处理)。
恢复目标决定许可是否有效
| 恢复到 | machine-id | 许可 |
|---|---|---|
| 同一台主机(重装、回滚) | 不变 | 仍有效,连同 /var/lib/idmatrix-license 一起还原 |
| 新主机、更换硬件(灾备重建) | 改变 | 失效。取新指纹,由 Reallysec 重签,在 License Activation 页上传 |
灾备重建顺序:
- 在新主机安装同版本 IPA,hostname 与 realm 相同。
- 执行
ipa-restore。 - 用新指纹重签许可并上传。
- 有 AD 信任时验证
ipa trust-show和id <AD 用户>@<AD 域>。
实测数据(4 GB 内存、2 vCPU 单机):全量备份 30 秒,全量恢复 45 秒;恢复后 11 个服务全部启动,备份之后创建的对象被回滚,AD 信任保留,管理台返回 200。