近期网站业务量比较大,用户注册量突破20万,用户的附件也到达几十个GB,服务器的硬盘已经满了,但是出于一些原因,没有及时更换服务器,服务器磁盘大小就成了一个瓶颈,于是我做了以下几个改进来解决这个问题:
1 服务器会储存近3天的日志,每天日志大约5G左右,改为只储存近1天的日志,可以节约大约10G的磁盘空间
2 文件数据库大约占据30G的空间,将这一部分一并转移到另一个分区,可以腾出来大约30G磁盘空间
3 用户上传的附件也变成了比较占磁盘空间的数据,这部分数据被访问的不频繁,甚至一些旧用户的数据基本不会被访问到,所以要把这一部分数据搬到其他服务器上,而且还要能被访问到,于是我想到了nsf(网络文件系统)来解决这个问题。

数据搬运到另一台服务器,用户访问和之前一样的url,使用nginx重定向请求到网络磁盘中的文件,因此访问时间也会变长。因为用户附件数据有一个比较大的特点,即越久的数据,被访问的概率越小。所以将比较旧的数据搬运到另一个服务器上,这样可以让绝大多数请求时间不会受影响。

因为这个系统的程序被重写过,两次附件的命名规则有较大的不同,旧版本上传的附件命名格式为5xxxxxxxx,新版本的附件命名格式是14xxxxxxxx。于是将5xxxxxxx的文件移动到另外一台服务器(备用服务器)。

在备用服务器(Centos6)上安装nfs服务器软件

yum install nfs-utils rpcbind

在/etc/exports在添加一行

/home/wwwbackup/server48 xxx.xxx.xxx.xxx(ro)

xxx.xxx.xxx.xxx 是开放监听的地址,可以是IP,域名等
格式是

<输出目录> [客户端1 选项(访问权限,用户映射,其他)] [客户端2 选项(访问权限,用户映射,其他)]

具体配置参考

http://www.cnblogs.com/mchina/archive/2013/01/03/2840040.html

启动 rpcbind 和 nfs

service rpcbind start
service nfs start

设置开机启动

chkconfig --level 35 rpcbind on
chkconfig --level 35 nfs on

在客户机上安装nfs软件

yum install nfs-utils

挂载网络磁盘

mkdir /mnt/server48
mount -t nfs xxx.xxx.xxx.xxx:/home/wwwbackup/server48 /mnt/server48

不报错的话说明挂载成功了,如果报错Linux NFS Mount: wrong fs type, bad option,说明没安装nfs-utils

试着ls一下目录文件

ls -l /mnt/server48

成功,说明挂载成功,如果需要每次开机自动挂载,那么需要在/etc/fstab中增加一行

xxx.xxx.xxx.xxx:/home/wwwbackup/server48 /mnt/server48 nfs 0 0

重启系统生效

于是整个nfs服务器端和客户端就配置好了。

下面配置nginx,使访问5xxxxxx的附件的请求从nfs上取文件,在nginx配置中增加

location ~ ^\/upload\/attachment\/5(.*) {
    root /mnt/server48/old-attachment/;
    expires 12h;
}

nginx的location匹配规则是
1. =前缀的指令严格匹配这个查询。如果找到,停止搜索。
2. 所有剩下的常规字符串,最长的匹配。如果这个匹配使用^〜前缀,搜索停止。
3. 正则表达式,在配置文件中定义的顺序。
4. 如果第3条规则产生匹配的话,结果被使用。否则,如同从第2条规则被使用。
(参考http://www.nginx.cn/115.html)

所以这条规则尽量靠前放置。
重启nginx

访问

http://jl.haitou.cc/upload/attachment/523314e462ba5.jpg

测试可以访问,于是判断整套配置正确。

还是有一些问题值得反思的
1 本例中nfs被配置成只读模式,如果是读写模式会带来什么问题
2 nfs的认证安全性问题,

参考链接:

http://linux.vbird.org/linux_server/0330nfs.php

http://www.cnblogs.com/mchina/archive/2013/01/03/2840040.html

http://ubuntuforums.org/showthread.php?t=1900450

http://blog.chinaunix.net/uid-26393988-id-3268972.html

One thought on “使用nfs扩展服务器的存储空间

Leave a reply