纸壳CMS分布式部署集群解决方案

纸壳CMS分布式部署集群解决方案

ZKEASOFT October 31, 2020


启用集群插件

纸壳CMS的集群插件默认是不启用的,在集群部署之前应先启用。找到集群插件ZKEACMS.Distribution目录(开发环境:src/ZKEACMS.Distribution,生产环境:wwwroot/Plugins/ZKEACMS.Distribution)用记事本打开插件描述文件zkea.plugin,将Enable改为true即可。

{
    ID:"2995ECF6-E2C0-4DAD-97CB-D980EE75390B",
    Name:"ZKEACMS.Distribution",
    FileName:"ZKEACMS.Distribution.dll",
    Enable:"true"
}

实现原理

纸壳CMS只需要简单的设置就可以支持集群分布式部署。实现原理是通过将DataProtection的密钥保存到统一的地方进行共享访问,这样就能在不同的机器进行相同的加密,解密操作,从而保持登录状态。

纸壳CMS的用户登录使用的是cookie认证,默认情况下,对同一台服务器是有效的,但对别的服务器是无效的,因为加密的Key不一样。所以集群部署的时候,DataProtection是必须要设置的,放在一个统一的地方管理。纸壳CMS启用集群功能后,会将Key保存到数据库PersistKey表中,从而保证所有结点都可以访问相同的Key。有关于了解更多DataProtection请参阅微软官方文档。

Microsoft doc:

限制与扩展

因为纸壳CMS是将Key保存到数据库中,因此要求所有结点都要访问相同的数据库,如果系统需要做分库处理,可以将Key保存到外部数据库中,如Redis。

只需要重新实现一个IPersistKeyService即可,该接口很简单,负责Key的存取:

namespace ZKEACMS.Distribution.Service
{
    public interface IPersistKeyService
    {
        List<PersistKey> GetPersistKeys();
        void Save(PersistKey persistKey);
    }
}

插件源代码:https://github.com/SeriaWei/ZKEACMS/tree/develop/src/ZKEACMS.Distribution


微信公众号