升级与备份
哪些层能原地升级、怎么升、怎么回滚;每日自动备份产出什么、全量备份什么时候做、恢复到同机和换机的区别。
只适用于模型 B。模型 A 容器一体机不支持保数据升级,换镜像要删卷,身份库随之清空;生产用模型 B。
升级
| 层 | 原地升级 | 方式 |
|---|---|---|
管理台(dist/) | 能 | 换目录,不重启 |
| 许可层 | 能 | 覆盖 py 文件,按下表重启 |
| 配置 / playbook | 能 | 重跑 playbook,幂等 |
FreeIPA 本体(ipa-server RPM) | 不做 | 见下 |
| 操作系统大版本 | 不做 | 重装加恢复,专项方案 |
IDMatrix 的版本迭代(功能、汉化、门控、修 bug)全落在前三行,不碰 FreeIPA 本体。
升级前
sudo ipa-backup # 全量,停 dirsrv 约 30 秒,走维护窗口
sudo tar czf /root/license-state-preupgrade.tgz -C /var/lib idmatrix-license # 许可状态不在 ipa-backup 里
rpm -q ipa-server; ls -la /opt/idmatrix/dist/index.html # 记下版本,回滚用留着上一版的 bundle。
推荐:重跑 playbook
拿新 bundle,沿用旧的 customer.env,只把 IDM_WEBUI_DIST_SRC 和 IDM_LIC_SRC 指到新 bundle,重跑:
cd <新 bundle> && ./deploy/render-inventory.sh
ansible-playbook -i deploy/inventory.generated.yml deploy-ipaserver.ymlipaserver 角色看到 IPA 已装就跳过;管理台和许可层的文件覆盖后触发对应重启。
手工:只换管理台
构建产物带内容 hash,先清空再解,否则新旧文件堆积:
cd /opt/idmatrix/dist && find . -mindepth 1 -delete
tar xzf /tmp/dist-<新版本>.tar.gz -C /opt/idmatrix/dist纯静态,不重启任何服务,浏览器 Ctrl+F5。
手工:只换许可层
sudo install -m 0755 -o root -g root <新版>/license_gate.py <新版>/gate_wsgi.py /opt/idmatrix-license/
sudo rm -rf /opt/idmatrix-license/__pycache__
python3 /opt/idmatrix-license/license_gate.py # 必须 self-test: PASS
sudo systemctl restart httpd| 改了什么 | 重启 | 原因 |
|---|---|---|
gate_wsgi.py / license_gate.py | systemctl restart httpd | mod_wsgi 守护进程要重新 import |
idmatrix_hostlimit.py(服务端插件) | ipactl restart | 插件在 api.finalize() 时加载 |
phonehome.py / license_api.py | 不用 | 每次调用起新进程 |
升级后自检三条:curl -sk -o /dev/null -w '%{http_code}\n' https://<FQDN>/ipa/modern-ui/ 是 200;ipa user-show admin 正常;status.json 的 valid 没变。然后挑一个未授权模块做一次写操作,确认被拒。闸门改坏的症状是放行了本该拦的,不是报错。
不做原地升级的:FreeIPA 本体
不随 IDMatrix 版本升级。气隙环境没有 yum 源,跨版本升级要完整依赖闭包;跨大版本要跑 ipa-server-upgrade,涉及 schema 迁移,失败难回滚;备份恢复要求同版本,升完 IPA,旧备份就恢复不回去。需要升级(安全公告等)时联系 Reallysec 按专项方案走,不要自行 dnf update ipa-server。
回滚
| 升的什么 | 回滚 |
|---|---|
| 管理台 | 清空 dist/,解上一版 |
| 许可层 | 覆盖回上一版 py,按上表重启 |
| 数据出问题 | 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;有 AD 信任的 ipa trust-show <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 重签,激活页上传 |
灾备重建顺序:新主机装同版本 IPA(同 hostname / realm)→ ipa-restore → 身份库回来 → 新指纹重签许可 → 有 AD 信任的验 ipa trust-show 和 id <AD用户>@<AD域>。
实测(4 GB / 2 vCPU 单机):全量备份 30 秒,全量恢复 45 秒,恢复后 11 个服务全起、备份之后建的对象被回滚、AD 信任存活、管理台 200。