1.起因
今天线上系统突然爆了一个储存空间满的问题,然后看了一下是因为磁盘空间满了导致上传文件失败了
2.解决办法
因为还有一块600g的云盘没有用,所以选择挂载这块磁盘上去,然后扩展FastDFS的空间。
3.具体解决办法
首先把这块600g的磁盘挂载上去,具体挂载过程可以看我们技术主管的博客:挂载并初始化Linux数据盘,完成MySQL数据迁移
然后我们横向扩展FastDFS的容量,那么这里我们先大概了解一下FastDFS的一些特性:
- 一般设置一个storage属于一个分组group,一个分组group对应的数据存储目录地址可一个或多个。(这一点保证了group的文件地址容量扩展)
- 一个group的一个目录存储地址最多可存储的文件个数为:2562561000=65536000。storage文件存储机制中,有小文件合并存储到一个大文件的机制。
- 一个storage可以配置多个tracker地址,同理一个tracker可以分配文件存储到多个storage上面。(这一点保证了服务器storage容量扩展)
- 当一个storage中有多个文件目录地址时,通过tracker.conf中的关键参数store_path,可以配置一个文件在存储时,多个对应存储目录地址的存储机制,如轮询或选择剩余空间大的文件目录。
- 当一个tracker对应的存储storage具有多个时,通过tracker.conf中的store_lookup,store_server,可以配置当文件上传时,对应多个storage服务器的存储机制,如轮询或选择空间大的服务器。
- storage文件服务器默认存储空间配置时,当达到文件目录空间的10%时,便不可以在存储文件,可通过tracker.conf中的reserved_storage_space参数,修改默认值。
- 多个storage可以属于一个组或多个组,当两个或多个storage属于一个组时,各个storage中的文件相互备份。这种机制的优点是保证了文件服务器的备份和负载均衡,缺点是两个storage的存储容量是两个中较小storage的存储容量。
那么我们了解的差不多以后,我们来看扩容的方式,因为线上项目只用了一台服务器,所以我们这里选择挂载磁盘扩容,也就是横向扩容。
横向模式扩容是通过给group的机器添加硬盘的方式,实现某个group的扩容。fastdfs在一台服务器支持多个store_path,每个store_path指向一个存储路径。如:url “M00/00/00/xxxxxxxx.txt”中M00表示使用store_path0,如果没有配置store_path,就使用base_path的路径。添加了硬盘后,通过把新的store_path指向新硬盘的挂载点,再修改配置文件,就能实现group的扩容。扩容后的地址如:url “M01/00/00/xxxxxxxx.txt”中M01表示使用store_path1。group模式扩容主要步骤如下:
1.首先我们修改/etc/fdfs/storage.conf配置文件,把store_path_count从1修改为2,新增store_path1的路径,路径为你挂载的磁盘目录,该目录需要提前创建,否则重启时会报错,说找不到该目录。
2.然后修改/etc/fdfs/mod_fastdfs.conf配置文件,修改内容同上。
3.然后修改nginx的配置,新增store_path1的代理路径
location ~* /M01{
root /你的磁盘挂载目录/data
}
4.修改/etc/fdfs/tracker.conf配置文件中的store_path,从0改为2(选择容量最大的上传)
5.重新启动tracker,storage,nginx服务,通过命令 /usr/bin/fdfs_monitor /etc/fdfs/storage.conf( /usr/bin/fdfs_monitor为调用fastdfs的命令,根据安装目录而定)可查看文件服务器的运行状态和配置信息。
我们可以看到,现在那块600g的硬盘已经扩容到FastDFS中了。
那么这样我们就完成了对FastDFS的横向扩容,当然我们还可以新增服务器来扩展,具体的可以参考这篇文章:https://www.cnblogs.com/yipianchuyun/p/10804470.html
具体tracker内部配置参数的含义,参考这篇文章:https://blog.csdn.net/u013970991/article/details/52036084
具体storage内部配置参数的含义,参考这篇文章:https://www.cnblogs.com/zzsdream/p/11196565.html