IdP备份恢复及高可用方案
目前,因为IdP虚拟机或者服务器崩溃或者意外数据丢失等原因,陆续出现已经部署好的IdP服务中止运行的情况。重装idp费时费力,建议采用如下方法对IdP进行备份,以便出现意外时快速恢复。
1. metadata证书文件备份(重要,必做)
IdP服务的核心配置文件是metadata文件,因存放本校IdP通信证书等关键配置信息,必需定期保留。如果不保留,因各种原因进行IdP重装后,metadata发生改变,不仅需要将它重新上传至CARSI联盟,更麻烦的是需要人工联系所有已经对接好的服务提供商进行metadata信息更新,等于需要重新完成一遍新IdP部署和服务开通流程。
如果提前保留了metadata证书文件,系统重装或者升级后,用原文件替换安装文件,服务可以直接运行。
1.1 备份
备份所有证书文件/opt/shibboleth-idp/credentials,具体包括:
序号 | 名称 | 用途 |
---|---|---|
1 | dsmeta.pem | 更新carsi metadata用到的证书 |
2 | idp-backchannel.crt | metadata里面signing证书 |
3 | idp-backchannel.key | metadata里面signing证书key |
4 | idp-backchannel.p12 | signing证书的另一种格式 |
5 | idp-encryption.crt | metadata里面encryption证书 |
6 | idp-encryption.key | metadata里面encryption证书key |
7 | idp-signing.crt | metadata里面signing证书 |
8 | idp-signing.key | metadata里面signing证书key |
9 | sealer.jks | idp自身使用用于加密cookies和其他数据 |
10 | sealer.kver | idp自身使用用于加密cookies和其他数据 |
1.2 新系统恢复原metadata文件的前提条件
按照wiki安装idp步骤对idp进行重装,至完全重装好后,属性定义、属性释放、认证对接均需要做完,同时确认以下配置是否做完
如果使用手动方式安装,需下载https://www.carsi.edu.cn/carsimetadata/carsifed-metadata.xml 文件,放入/opt/shibboleth-idp/metadata文件夹,并且修改文件的所属用户和组。
[root@www ~]# chown -R tomcat.tomcat /opt/shibboleth-idp [root@www ~]# vi /opt/shibboleth-idp/conf/metadata-providers.xml #修改之前定义的MetadataProvider <MetadataProvider id="HTTPMetadata" xsi:type="FileBackedHTTPMetadataProvider" backingFile="/opt/shibboleth-idp/metadata/carsifed-metadata.xml" minRefreshDelay="PT5M" maxRefreshDelay="PT10M" metadataURL="https://www.carsi.edu.cn/carsimetadata/carsifed-metadata.xml"> <MetadataFilter xsi:type="SignatureValidation" certificateFile="/opt/shibboleth-idp/credentials/dsmeta.pem" /> <MetadataFilter xsi:type="EntityRoleWhiteList"> <RetainedRole>md:SPSSODescriptor</RetainedRole> </MetadataFilter> </MetadataProvider> [root@www ~]# systemctl restart tomcat
如果使用ova镜像快速安装方式,需执行以下脚本
[root@www ~]# sh /root/inst/idp3config/onlineidp.sh
1.3 新系统恢复原metadata文件
1) 用备份的/opt/shibboleth-idp/credentials覆盖新安装好的idp的/opt/shibboleth-idp/credentials里面的所有文件,替换之后,修改文件的所有者
[root@www ~] chown -R tomcat.tomcat /opt/shibboleth-idp/credentials
2) 删除新的idp安装过程中产生的metadata,并生成与重装前一致的metadata
[root@www ~] rm -rf /opt/shibboleth-idp/metadata/idp-metadata.xml [root@www ~] cd /opt/shibboleth-idp/bin [root@www ~] ./ant.sh metadata-gen -Didp.host.name=(填写idp域名,与原域名一致) [root@www ~] chown -R tomcat.tomcat /opt/shibboleth-idp/metadata [root@www ~] rm -rf /etc/httpd/conf.d/idp8443.conf
3) 重启tomcat和apache
[root@www ~] systemctl restart httpd [root@www ~] systemctl restart tomcat
1.4 测试
访问ds.carsi.edu.cn,选择学校名称,检查IdP是否能够认证成功。具体参见)IdP测试及上线(ova第5/6步,手动第8/9步)的“线上环境验证”部分。
2. 服务器运行数据的备份
2.1.虚机的备份(适用于虚机部署的情况,建议)
使用vmware exsi虚拟化平台部署的IdP,建议定期对虚拟机进行备份,例如将虚拟机定期拷贝到另一台esxi主机或者独立的存储介质上。意外发生时,直接将备份的虚机恢复到exsi主机上启动即可恢复服务运行。
2.2.数据的备份及恢复
如果使用ova镜像部署的话,在IdP服务器里,定期对/opt/shibboleth-idp文件夹进行压缩,对关键运行数据进行备份。
#将/opt/shibboleth-idp进行打包压缩成/opt/shibboleth-idp.tar.gz文件 [root@www~]cd /opt/ [root@www~]tar -zcvf shibboleth-idp.tar.gz shibboleth-idp
当发生意外的时候,将备份的数据直接解压缩到新的ova镜像服务器/opt/shibboleth-idp上即可恢复服务运行。
#将shibboleth-idp.tar.gz文件上传至新的ova镜像/opt路径下 [root@www~]cd /opt/ [root@www~]tar -zxvf shibboleth-idp.tar.gz [root@www~]chown -R tomcat.tomcat /opt/shibboleth-idp #重启tomcat和apache [root@www~]systemctl restart tomcat [root@www~]systemctl restart httpd
3.依托负载均衡提高服务可用性
另一种方案是部署两台一模一样的idp服务器,也可以部署好一台后直接镜像拷贝成另外一台。前面用F5或者nginx进行负载均衡。这样如果有一台发生意外的话,另一台还能继续工作,保证idp服务不间断。此种方式好处是可以动态的增加或者删减idp服务器。
以nginx负载均衡为例,以下配置仅供参考,如何将idp服务器修改成8080端口提供服务,请参考使用反向代理后IdP相关配置调整。
upstream name { ip_hash; #xxx.xxx.xxx.xxx表示idp服务器的ip地址 server xxx.xxx.xxx.xxx:8080; server xxx.xxx.xxx.xxx:8080; #检查服务器是否存活 check interval=3000 rise=2 fall=5 timeout=1000 type=http; } server { #xxx.xxx.xxx.xxx表示idp域名 server_name xxx.xxx.xxx.xxx; listen 443 ssl; listen [::]:443 ssl; root /var/www/html/dspre; ssl_protocols TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE+RSAGCM:ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:!aNULL!eNull:!EXPORT:!DES:!3DES:!MD5:!DSS; #xxxx表示域名证书和key的绝对路径 ssl_certificate xxxx; ssl_certificate_key xxxx; include /etc/nginx/default.d/*.conf; location / { proxy_pass http://name; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
版权所有©北京大学计算中心