IdP433: IdP备份恢复及高可用方案

目前,因为IdP虚拟机或者服务器崩溃或者意外数据丢失等原因,陆续出现已经部署好的IdP服务中止运行的情况。重装idp费时费力,建议采用如下方法对IdP进行备份,以便出现意外时快速恢复。

1. 本校IdP metadata及证书文件备份(重要,必做)

        IdP服务器的核心配置文件是metadata文件,及存放本校IdP通信证书等关键配置信息,必需备份并且妥善保存。如果IdP重装,会自动生产新的metadata文件,不仅需要将它重新上传至CARSI联盟,更麻烦的是需要人工联系所有已经对接好的服务提供商进行metadata信息更新,等于需要重新进行一次IdP部署和服务开通流程。

        如果提前备份了metadata及证书文件,系统重装或者升级后,用备份文件替换新生成的文件,IdP服务可以快速恢复运行。

1.1 备份下面文件到磁带或其他设备

        学校IdP metadata文件保存在/opt/shibboleth-idp/metadata目录下,文件名为:idp-metadata.xml

        备份所有/opt/shibboleth-idp/credentials目录下的证书文件和密码(salt)文件,具体包括:

序号名称用途
1dsmeta.pem更新carsi metadata用到的证书
2idp-backchannel.crtmetadata里面signing证书
3idp-backchannel.p12signing证书的另一种格式
4idp-encryption.crtmetadata里面encryption证书
5idp-encryption.keymetadata里面encryption证书key
6idp-signing.crtmetadata里面signing证书
7idp-signing.keymetadata里面signing证书key
8sealer.jksidp自身使用用于加密cookies和其他数据
9sealer.kveridp自身使用用于加密cookies和其他数据
10secrets.propertiesIdPV4新增文件,用于存放cookie加密密码、ldap查询密码及salt值。

1.2 认证对接参数备份,备份下述文件到磁带或其它设备

Ldap对接方式,请备份/opt/shibboleth-idp/conf/ldap.properties文件

其它对接方式,请备份/opt/shibboleth-idp/conf/authn/authn.properties文件 

属性配置文件,请备份/opt/shibboleth-idp/conf/attribute-resolver.xml 和 attribute-filter.xml文件

/opt/shibboleth-idp/conf/目录下metadata-providers.xml global.xml等配置文件  

2.1 新系统恢复备份文件

出现意外情况,需要重新安装IdP时,根据本手册步骤安装IdP4.1.4,安装完成后,恢复以下备份的文件:

     1) 用备份的证书文件覆盖/opt/shibboleth-idp/credentials里面的所有文件;

     2) 用备份的metdata文件覆盖/opt/shibboleth-idp/metadata/idp-metadata.xml文件;

     3) 恢复/opt/shibboleth-idp/conf/目录下 metadata-providers.xml global.xml等配置文件;

     3) 重启jetty

[carsi@www ~]$ sudo systemctl restart jetty

3 测试

        访问ds.carsi.edu.cn,选择学校名称,检查IdP是否能够认证成功。具体参见IdP上线(第10/11步)的“线上环境验证”部分。

2. 服务器运行数据的备份

2.1 虚机的备份(适用于虚机部署的情况,建议)

        使用vmware exsi虚拟化平台部署的IdP,建议定期对虚拟机进行备份,例如将虚拟机定期拷贝到另一台esxi主机或者独立的存储介质上。意外发生时,直接将备份的虚机恢复到exsi主机上启动即可恢复服务运行。

2.2 IdP数据的备份及恢复

      数据快速备份方法:

#将/opt/shibboleth-idp进行打包压缩成/opt/shibboleth-idp.tar.gz文件
[carsi@www ~]$ cd /opt/
[carsi@www ~]$ sudo tar -cvf shibboleth-idp.tar --exclude=shibboleth-idp/logs/* shibboleth-idp
 #请将生成shibboleth-idp.tar文件备份到磁带或其它系统进行妥善保管。

 当发生意外的时候,将备份的数据直接解压缩到新的镜像服务器/opt/shibboleth-idp上即可恢复服务运行。

#将shibboleth-idp.tar.gz文件上传至/opt路径下
[carsi@www ~]$ sudo cd /opt/
[carsi@www ~]$ sudo tar -xvf shibboleth-idp.tar

#重建war文件并重启jetty
[carsi@www ~]$ sudo /opt/shibboleth-idp/bin/build.sh
[carsi@www ~]$ sudo systemctl restart jetty

3.依托负载均衡提高服务可用性

        另一种方案是部署两台一模一样的idp服务器,也可以部署好一台后直接镜像拷贝成另外一台。前面用F5或者nginx进行负载均衡。这样如果有一台发生意外的话,另一台还能继续工作,保证idp服务不间断。此种方式好处是可以动态的增加或者删减idp服务器。

       以nginx负载均衡为例,以下配置仅供参考,如何将idp服务器修改成8080端口提供服务,请参考反向代理对接

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;
        }

    }




版权所有©北京大学计算中心