这个论坛一直通过NFS服务共享文件给三台web服务器做负载均衡.

在实际环境中WEB Server总是出现CPU负载突然升高、文件交互的网络流量异常、甚至WEB Server夯死,NFS不能卸载,只能重启才能解决。尝试优化NFS没有明显效果。

在文件服务器一次宕机之后,决定改造现有系统。

1、去NFS Server的单中心节点,提升系统可用性。

2、做动静分离,将论坛的图片、种子、压缩包等附件分离,还可以利用其他项目已购买的CDN服务提升图片下载速度。

设计了两种方案:

一、利用MFS、FastDFS等分布式文件系统。MFS使用方便,但是有单点故障。FastDFS还挺不错的,缺点是应用上需要改动的太多。

二、现有架构上不需要调整增加服务器,利用脚本、ftp,修改附件上传的代码,在最小投入就能实现目标。缺点就是文件服务出现问题,恢复之前不能上传附件。

基于成本的考虑最后选择了第二种方案。从实际运行状况来看,这个也是最优的方案。不需要购买服务器,不需要对程序代码做大的改动,而且维护量小,稳定可靠。

改造后的架构图:

下面详细说说架构原理:

1、  将附件、和代码上传改为FTP方式上传(这里需要做开发的同学配合下了),在File Server通过VsFTP接收附件和代码更新。

2、  在停用NFS服务后,做了一个代码同步系统(工具是rsync)。计划任务每隔5分钟WEB Server同步File Server的代码,当然非代码目录、附件目录除外,这样需要同步的文件量非常小。同步耗时秒级别。

3、  所有附件和代码都会更新到File Server。File Server利用sersync实时将文件的所有更新同步到备份的File Server端。两个File Server是同时使用Nginx提供附件HTTP服务的。

4、  在两台File Server负载均衡提供附件下载服务时,可能会出现新上传的文件在备份File Server上找不到的情况。这个时候在前段Nginx代理配置proxy_next_upstream 将404跳转到另一台服务器就可以了。

相关配置:

Nginx的配置

upstream img_hapth {

server   192.168.200.29:80;

server   192.168.200.28:80;

}

server {

listen       80;

server_name  img.hapath.com;

access_log  /data/logs/access.log  main;

error_log  /data/logs/error.log;

location / {

proxy_next_upstream error timeout http_404;

proxy_pass http://img_hapath;

proxy_set_header   Host             $host;

proxy_set_header   X-Real-IP        $remote_addr;

proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

}

}

Sersync的使用,请见http://code.google.com/p/sersync/,这个程序貌似金山的一个同学写的,但是已经很久不更新了。有两个bug要注意,一个是程序有时候会自己终结;一个是已经同步的文件仍然会写到/tmp/rsync_fail_log.sh文件,这个是它的失败日志。而且它的失败日志是一个有执行权限的shell脚本,日志内容也是可命令,是一个安全隐患。所以俺在备份File Server每隔12小时整体同步一次数据,改了日志目录,并且做了一个检测脚本监控sersync的运行状况。

红框中是改造之前,性能不稳定,经常出现异常。前后对比很明显。

这是一个很简单的架构改造,但是效果却非常好。很多时候为了解决问题,费了很多时间做大的系统架构,增加服务器,增加维护量,改变应用。换个角度,大并不一定美。

Discuz论坛架构改造的更多相关文章

  1. LAMP架构搭建+Discuz论坛搭建【weber出品必属精品】

    一.     本机简介: 本机系统: CentOS-6.4-x86_64 主机名:oracle.ywb IP地址:192.168.146.129 二.     在Linux环境下安装Apache步骤 ...

  2. LNMP架构及DISCUZ论坛部署

    1)(5分)服务器IP地址规划:client:12.0.0.12/24,网关服务器:ens36:12.0.0.1/24.ens33:172.16.10.1/24,Web1:172.16.10.10/2 ...

  3. Discuz论坛安全加固浅析

    [51CTO专稿]Discuz! 论坛以其功能完善.效率高效.负载能力,深受被大多数的网站喜爱和青睐.无独有隅,笔者所维护的论坛就是用discuz! 来构建的,从接手时候的7.2到现在x2.0,经历了 ...

  4. 实战!基于lamp安装Discuz论坛-技术流ken

    简介 我前面的博客已经详细介绍了lamp采用yum安装以及编译安装的方式,这篇博客将基于yum安装的lamp架构来实战安装Discuz论坛,你可以任选其一来完成. 系统环境 centos7.5 服务器 ...

  5. centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数据库读写分离 双主搭建 mysql.history 第二十九节课

    centos  MySQL主从配置 ntsysv   chkconfig  setup命令  配置MySQL 主从 子shell  MySQL备份  kill命令  pid文件  discuz!论坛数 ...

  6. centos lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress 安装phpmyadmin 定时备份mysql两种方法 第二十五节课

    centos  lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress  安装phpmyadmin  定时备份mysql两种方法  第二十五节 ...

  7. 织梦dedecms整合discuz论坛的操作方法

    织梦dedecms和discuz论坛整合主要用途,是让两个系统共享用户数据,同一个用户可以在两个网站都可以登录.在我们制作织梦cms模板的时候,有时需要整合discuz里的东细.本文主要讲解一下ded ...

  8. LAMP环境搭建一个Discuz论坛

    LAMP是Linux+Apache+Mysql/MariaDB+Perl/PHP/Python的简称.一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有 ...

  9. Discuz论坛黑链清理教程

    本人亲测有效,原创文章哦~~~ 论坛黑链非常的麻烦,如果你的论坛有黑链,那么对不起,百度收录了你的黑链,不会自动删除,需要你手动去清理. 什么是黑链 黑链,顾名思义,就是一些赌博网站的外链,这些黑链相 ...

随机推荐

  1. sonar之安装篇

    sonar 是一个很好的质量度量平台,安装方式有很多种.下面我教大家使用j2ee 容器的方式安装,我们使用tomcat 1.准备: 1.1 环境redhat linux1.2 下载sonar 从htt ...

  2. Mac,WIN下支撑 IPV6的 sftp客户端

    transmit 这样的话就可以使用 ipv6了,教育网的优势体现出来了,window下得 支撑 ipv6的sftp客户端 Bitvise SSH 和 WINSCP

  3. 使用C语言实现二维,三维绘图算法(2)-解析曲面的显示

    使用C语言实现二维,三维绘图算法(2)-解析曲面的显示 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其 ...

  4. Makefile编程

    [个人体会]0.1 项目文件要合理分隔,功能模块分开放,分别设置Makefile自动编译,                        0.2 源码和头文件分开放,一个或多个头文件对应一个源码文件. ...

  5. 问题:贴友关于CSS效果的实现

    今日在百度贴吧中,一贴有提出如下问题: 对于这个问题,咱们贴上代码看效果 1: <html> 2: <head> 3: <meta http-equiv="co ...

  6. NOIP2013 货车运输

    3.货车运输 (truck.cpp/c/pas) [问题描述] A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货 ...

  7. uva11426 GCD Extreme(II)

    题意:求sum(gcd(i,j),1<=i<j<=n)1<n<4000001 思路: 1.建立递推关系,s(n)=s(n-1)+gcd(1,n)+gcd(2,n)+……+ ...

  8. poj 1704 阶梯博弈

    转自http://blog.sina.com.cn/s/blog_63e4cf2f0100tq4i.html 今天在POJ做了一道博弈题..进而了解到了阶梯博弈...下面阐述一下我对于阶梯博弈的理解. ...

  9. [iOS基础控件 - 4.4] 进一步封装"APP列表”,初见MVC模式

    A.从ViewController分离View 之前的代码中,View的数据加载逻辑放在了总的ViewController中,增加了耦合性,应该对控制器ViewController隐藏数据加载到Vie ...

  10. altium designer 里如何设置PCB默认字符默认大小(PCB丝印)

    注意:此操作只对新导入的元件生效.