Discuz论坛架构改造
这个论坛一直通过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论坛架构改造的更多相关文章
- LAMP架构搭建+Discuz论坛搭建【weber出品必属精品】
一. 本机简介: 本机系统: CentOS-6.4-x86_64 主机名:oracle.ywb IP地址:192.168.146.129 二. 在Linux环境下安装Apache步骤 ...
- 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 ...
- Discuz论坛安全加固浅析
[51CTO专稿]Discuz! 论坛以其功能完善.效率高效.负载能力,深受被大多数的网站喜爱和青睐.无独有隅,笔者所维护的论坛就是用discuz! 来构建的,从接手时候的7.2到现在x2.0,经历了 ...
- 实战!基于lamp安装Discuz论坛-技术流ken
简介 我前面的博客已经详细介绍了lamp采用yum安装以及编译安装的方式,这篇博客将基于yum安装的lamp架构来实战安装Discuz论坛,你可以任选其一来完成. 系统环境 centos7.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!论坛数 ...
- centos lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress 安装phpmyadmin 定时备份mysql两种方法 第二十五节课
centos lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress 安装phpmyadmin 定时备份mysql两种方法 第二十五节 ...
- 织梦dedecms整合discuz论坛的操作方法
织梦dedecms和discuz论坛整合主要用途,是让两个系统共享用户数据,同一个用户可以在两个网站都可以登录.在我们制作织梦cms模板的时候,有时需要整合discuz里的东细.本文主要讲解一下ded ...
- LAMP环境搭建一个Discuz论坛
LAMP是Linux+Apache+Mysql/MariaDB+Perl/PHP/Python的简称.一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有 ...
- Discuz论坛黑链清理教程
本人亲测有效,原创文章哦~~~ 论坛黑链非常的麻烦,如果你的论坛有黑链,那么对不起,百度收录了你的黑链,不会自动删除,需要你手动去清理. 什么是黑链 黑链,顾名思义,就是一些赌博网站的外链,这些黑链相 ...
随机推荐
- 使用appium做安卓手机web自动化测试 真机demo
一:appium相关环境搭建过程略. 二:连接真机: 1.手机(andriod 4.2.2)连接电脑,打开USB调试模式. 2.运行cmd 输入 adb devices -l 查看UDID,如图: 3 ...
- python bisect模块
转发:http://www.cnblogs.com/skydesign/archive/2011/09/02/2163592.html 先看看模块的结构: 前面五个属性大家感兴趣可以打出来看看数值,这 ...
- adb 启动失败的原因和修改adb端口号
在我们使用Android Studio的时候,有时候就会出现adb打开失败或者启动不了的情况. adb 启动失败的原因:有其他程序占用了adb默认启动的端口号(像我就遇到过,每次只要提前启动了酷狗音乐 ...
- 【noip2012】开车旅行
题意: 给n个点的海拔h[i](不同点海拔不同) 两点的距离为abs(h[i]-h[j]) 有a.b两人轮流开车(只能往下标大的地方开) a每次会开到里当前点第二近的点 b每次会开到离当前点最近的点( ...
- usb device selection
- delphi 删除目录和创建目录,临时文件夹
获取用户当前的Windows临时文件夹function GetWinTempPath: string;varTempDir: array[0..255] of char;beginGetTempPat ...
- 射频识别技术漫谈(3)——能量、调制【worldsing 笔记】
无源和免接触是非接触式IC卡相对于接触式IC卡的两大特点.无源是指卡片上没有电源,免接触是指对卡片的读写操作不必和读写器接触.非接触式智能卡也是IC卡,而卡上的IC即集成电路工作时肯定是需要电源的,卡 ...
- 爬去知乎百万用户信息之UserTask
UserTask是获取用户信息的爬虫模块 public class UserManage { private string html; private string url_token; } 构造函数 ...
- iOS开发-布局基础
今天我学习了有关布局的知识,以下是我整理出来的需要注意的,也是我个人认为比较重要的细节. 一.自动约束 在我们设置好自动约束布局之后,有时会出现拖动滑动条,左边的Label会跟着放大缩小的问题. 这时 ...
- centos vwwareTools 拷贝文件设置
1. 在root 用户下面 在虚拟机菜单上面选择 Vwware Tools 虚拟机会将 安装文件 拷贝到桌面上面 拷贝这个文件 到 root 文件夹 /home/root 将XXX.tar.g ...