FastDFS学习与安装与坑

安装fastDFS遇到的坑

基础设备

  • tracker 192.168.75.145
  • storage_1 192.168.75.142
  • storage_2 192.168.75.146

基本上问题都是404

查阅问题基本上就是从nginx开始一路查日志查下去

1. 查看tracker下的nginx 日志

2. 修改nginx.conf

3. 在nginx/sbin 下执行./nginx -s quit && ./nginx

4. 再次请求发现tracker日志不报错,那么接下来便是去storage中查看日志

5. 发现和tracker报一样错 重复以上步骤 修改配置

6. 重启nginx

7. 再次访问 404 继续查看日志

此时卡在这,以为是nginx出了问题,一直转发不过去,实际上是因为storage的nginx中还有fastdfs-nginx-module这个模块

8.修改/etc/fdfs/mod_fastdfs.conf

9.重启storage、nginx

10.搞定

 

整个安装过程主要按照这两篇文档来搭建

https://www.cnblogs.com/mafly/p/fastdfs_nginx.html

http://www.ityouknow.com/fastdfs/2017/10/10/cluster-building-fastdfs.html

不过按照它来搭,在nginx编译时就会报错

 

github上有issue 是版本引起的问题,所以建议fastdfs 和 fastdfs-nginx 都拿取最新版本

  git clone https://github.com/happyfish100/fastdfs-nginx-module
  ./configure --add-module=/path/to/fastdfs-nginx-module-master/src
  make && make install
 git clone https://github.com/happyfish100/libfastcommon.git
 mv libfastcommon /usr/local/
 cd /usr/local/libfastcommon
 ./make.sh && ./make.sh install

 

动态扩容(增加group)

1. 下载安装好libfastcommon、fastdfs后

 git clone https://github.com/happyfish100/libfastcommon.git
 ./make.sh && ./make.sh install

git clone https://github.com/happyfish100/fastdfs
  ./make.sh && ./make.sh install

2. vim storage.conf

加入 chkconfig fdfs_storaged on,开机自启storage(好像没什么用)

3. 启动storage,需要等待一下,才会全部active

fdfs_storaged /etc/fdfs/storage.conf start

4. 下载 fastdfs-nginx-module 源代码&&下载nginx

  git clone https://github.com/happyfish100/fastdfs-nginx-module
 wget -c https://nginx.org/download/nginx-1.10.1.tar.gz
 tar -zxvf nginx-1.10.1.tar.gz
 cd nginx-1.10.1
./configure --add-module=/path/to/fastdfs-nginx-module/src
  make && make install

将nginx设置为开机启动:

vim /etc/rc.d/rc.local

将运行命令行添加进文件:/usr/local/nginx/sbin/nginx

copy配置文件到fastdfs

cp mod_fastdfs.conf /etc/fdfs/
  cp anti-steal.jpg http.conf mime.types /etc/fdfs/

改写配置文件

vim /etc/fdfs/mod_fastdfs.conf
一般只需改动以下几个参数即可:
base_path=/fastdfs/storage           #保存日志目录
tracker_server=192.168.75.145:22122
storage_server_port=23000         #storage服务器的端口号
group_name=group2                 #当前服务器的group名
url_have_group_name = true        #文件url中是否有group名
store_path_count=1                #存储路径个数,需要和store_path个数匹配
store_path0=/fastdfs/storage         #存储路径
group_count = 0                   #设置组的个数,我用的默认

尾部最重要的

只需要填group1而且仅需填写扩容这个group,否则访问不到

接下来重启即可。

 

注意事项

  1. ***  本次扩容,我没有用user root ,依然访问成功,下次可能要注意一下

  2. 防火墙记得关掉,否则storage无法同步会一直报连接不到对方的错误
systemctl stop firewalld.service #停止firewall

systemctl disable firewalld.service #禁止firewall开机启动

 

     3. 如果centos是mini版本,请用以下命令安装工具

yum install gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel

 

 

 

 

 

 

 

FastDFS学习

FastDFS 系统有三个角色:跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client)。

  Tracker Server:跟踪服务器,主要做调度工作,起到均衡的作用;负责管理所有的 storage server和 group,每个 storage 在启动后会连接 Tracker,告知自己所属 group 等信息,并保持周期性心跳。

  Storage Server:存储服务器,主要提供容量和备份服务;以 group 为单位,每个 group 内可以有多台 storage server,数据互为备份。

  Client:客户端,上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。

Storage Server

Storage server(后简称storage)以组(卷,group或volume)为单位组织,一个group内包含多台storage机器,数据互为备份,存储空间以group内容量最小的storage为准,所以建议group内的多个storage尽量配置相同,以免造成存储空间的浪费。

以group为单位组织存储能方便的进行应用隔离、负载均衡、副本数定制(group内storage server数量即为该group的副本数),比如将不同应用数据存到不同的group就能隔离应用数据,同时还可根据应用的访问特性来将应用分配到不同的group来做负载均衡;

缺点是group的容量受单机存储容量的限制,同时当group内有机器坏掉时,数据恢复只能依赖group内地其他机器,使得恢复时间会很长。

 

Tracker server

Tracker是FastDFS的协调者,负责管理所有的storage server和group,每个storage在启动后会连接Tracker,告知自己所属的group等信息,并保持周期性的心跳,tracker根据storage的心跳信息,建立group==>[storage server list]的映射表。

Tracker需要管理的元信息很少,会全部存储在内存中;另外tracker上的元信息都是由storage汇报的信息生成的,本身不需要持久化任何数据,这样使得tracker非常容易扩展,直接增加tracker机器即可扩展为tracker cluster来服务,cluster里每个tracker之间是完全对等的,所有的tracker都接受stroage的心跳信息,生成元数据信息来提供读写服务。

没有单点故障问题

Client

FastDFS向使用者提供基本文件访问接口,比如upload、download、append、delete等,以客户端库的方式提供给用户使用。

enter image de.ion here

 

文件同步

写文件时,客户端将文件写至group内一个storage server即认为写文件成功,storage server写完文件后,会由后台线程将文件同步至同group内其他的storage server。

每个storage写文件后,同时会写一份binlog,binlog里不包含文件数据,只包含文件名等元信息,这份binlog用于后台同步,storage会记录向group内其他storage同步的进度,以便重启后能接上次的进度继续同步;进度以时间戳的方式进行记录,所以最好能保证集群内所有server的时钟保持同步。

小文件合并存储

小文件合并存储主要解决如下几个问题:

1. 本地文件系统inode数量有限,从而存储的小文件数量也就受到限制。 2. 多级目录+目录里很多文件,导致访问文件的开销很大(可能导致很多次IO) 3. 按小文件存储,备份与恢复的效率低

FastDFS在V3.0版本里引入小文件合并存储的机制,可将多个小文件存储到一个大的文件(trunk file),为了支持这个机制,FastDFS生成的文件fileid需要额外增加16个字节

1. trunk file id 2. 文件在trunk file内部的offset 3. 文件占用的存储空间大小 (字节对齐及删除空间复用,文件占用存储空间>=文件大小)

每个trunk file由一个id唯一标识,trunk file由group内的trunk server负责创建(trunk server是tracker选出来的),并同步到group内其他的storage,文件存储合并存储到trunk file后,根据其offset就能从trunk file读取到文件。

文件在trunk file内的offset编码到文件名,决定了其在trunk file内的位置是不能更改的,也就不能通过compact的方式回收trunk file内删除文件的空间。但当trunk file内有文件删除时,其删除的空间是可以被复用的,比如一个100KB的文件被删除,接下来存储一个99KB的文件就可以直接复用这片删除的存储空间。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值