Below you will find pages that utilize the taxonomy term “集群”
Posts
Discuz!X集群部署的系统方案和优化方式
多 web 部署时,面临的核心问题是 web 服务器间的数据共享和同步。就数据存储的方式而言,Discuz 数据包含两部分:一部分存储在 MySQL 数据库中(用户、帖子等文本类、结构化的数据),一部分存储在文件系统(附件、缓存文件等)。其中存储在 MySQL 中的数据可以方便地在多服务器间共享,扩展和冗余也已经有比较成熟的方案。这里我们主要讨论 Discuz 文件类型的数据,部分涉及到多台服务器的内容。
数据梳理 Discuz 文件类型的数据都存储于 DISCUZ_ROOT/data 目录,各目录主要功能如下:
目录 数据说明 data/attachment 附件类 data/log 运行日志 data/cache 配置参数类缓存文件(默认是sql,配置参数通过pre_common_syscache表缓存)、CSS缓存、部分JS缓存 data/template 模板缓存 data/threadcache 论坛页面缓存(针对游客的优化) DISCUZ_ROOT/data目录下有几个重要的文件(文件锁)
data/install.lock,安装程序锁定。如果该文件存在,DISCUZ_ROOT/install/ 中的安装程序不能执行。 data/sendmail.lock, 发送邮件锁。Discuz 默认通过类似 home.php?mod=misc&ac=sendmail&rand=1379315574 这个隐藏页面调用,由用户的浏览行为触发邮件发送流程(浏览器侧用一个300秒的 cookie 控制频率,服务器侧通过 sendmail.lock 文件的 mtime 控制频率5秒)。如果可以控制服务器,应该优化掉这个机制。 data/updatetime.lock, 某管理后台使用的锁。 data/update.lock, 系统升级锁。执行版本升级程序(如x2升级到x3)时,会生成这个文件锁。 下面这些功能会涉及到多 web 服务器间的数据共享和同步,默认 Discuz 通过 MySQL 实现。
用户session, 表 pre_common_session 管理面板session, 表 pre_common_admincp_session 系统配置项缓存, 表 pre_common_syscache NFS 我们假设部署两台 web 服务器的场景(且 web 服务器也是 php 应用服务器)。我们需要解决 data 目录共享的问题,引入 NFS 服务可以简单解决这个问题。服务器复用,此处不表。这里会有一个选择,哪些目录放置在 NFS 上,从上面的分析来看,将 data 目录放置在NFS上即可,即各 web 服务器均独立部署程序文件,将NFS挂载到 data 目录节点,缺点是需要将程序文件部署到每一台 web 服务器上,要解决程序文件更新部署的问题,优点是可以节省 web 服务器通过网络取 NFS 上的程序文件的开销。如果图方便,也可以把程序文件也放到 NFS 上,则所有文件都只有一个副本了,程序更新也很方便,缺点是会增加 web 服务器通过网络取程序文件的开销。这两者需要权衡,建议第一种。