FastDFS-部署与配置

fastdfs部署

fastdfs服务器:**

配置文件目录 /etc/fdfs
程序 /usr/bin/fdfs_*
文件存储目录 /apps/fastdfs

storage 和 tracker 为对应的文件目录

fastDFS安装

项目

https://github.com/happyfish100/fastdfs

下载libfastcommon安装

https://github.com/happyfish100/libfastcommon.git

下载安装fastDFS

1
2
3
4
tar zvxf FastDFS_v4.06.tar.gz
cd FastDFs
./make.sh
./make.sh instal

FastDFS 配置文件详解 修订版1

必要配置

配置及启动Tracker Server

1
2
3
4
5
6
7
mkdir /home/fastdfs #创建存储目录

vi /etc/fdfs/tracker.conf

base_path=/home/fastdfs #修改为上面创建的目录

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf #启动trackerd,参数为配置文件路径

检查tracker是否启动成功,可以查看如下文件/home/fastdfs/logs/trackerd.log

配置及启动Storage Server

1
2
3
4
5
6
7
8
9
10
11
12
13
mkdir /home/fastdfs/fdfs_storage #创建文件存储目录   

cd /etc/fdfs

vim /etc/fdfs/storage.conf

base_path=/home/fastdfs/fdfs_storage #修改为上面创建的目录

store_path0=/home/fastdfs/fdfs_storage #修改为文件存储目录

tracker_server=10.201.20.237:22122 #设置tracker server的信息

/usr/bin/fdfs_storaged /etc/fdfs/storage.conf #启动服务器,参数为配置文件路径

接下来会出现很多mkdir data path,这是系统在创建数据目录。

nginx配置

nginx安装

nginx编译安装需要添加fastdfs-nginx-module的模块,路径为fastdfs-nginx-module/src的路径.

https://github.com/happyfish100/fastdfs-nginx-module

1
2
3
4
5
6
sudo ./configure --with-pcre=../pcre-8.36 \
--with-zlib=../zlib-1.2.8 \
--add-module=../fastdfs-nginx-module/src

make
make install

mod_fastdfs.conf 配置

mod_fastdfs.conf配置基本和storage的配置差不多,主要是一下几条记录的配置

1
2
3
4
5
6
tracker_server=192.168.10.11:22122  #tracker服务器

storage_server_port=23000 #storage服务器端口

group_name=group1 #这台服务器的group名
store_path0=/home/vagrant/fastdfs_data/storage/ #store_path路径,和storage.conf相同

nginx配置

首先在storage/data中建立软链

1
ln -s //home/vagrant/fastdfs_data/storage/data /home/vagrant/fastdfs_data/storage/data/M00

然后在nginx中配置如下

1
2
3
4
5
6
7
8
9
10
server { 
listen 8090;
server_name 192.168.11.10;
access_log logs/fastdfs.log;
location /M00{
root /home/vagrant/fastdfs_data/storage/data;
ngx_fastdfs_module;
}

}

如果有多个store_path值,可以继续上面的步骤. 假设store_path有多个值,可以为这几个值创建不同的软链.在nginx继续添加location配置,例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 ln -s //home/vagrant/fastdfs_data/storage/data /home/vagrant/fastdfs_data/storage/data/M00

ln -s //home/vagrant/fastdfs_data/storage1/data /home/vagrant/fastdfs_data/storage1/data/M01

server {
listen 8090;
server_name 192.168.11.10;
access_log logs/fastdfs.log;
location /M00{
root /home/vagrant/fastdfs_data/storage/data;
ngx_fastdfs_module;
}

location /M01{
root /home/vagrant/fastdfs_data/storage1/data;
ngx_fastdfs_module;
}

}

fastdfs扩容

添加tracker

tracker非常容易扩展,直接增加tracker机器即可.集群中的tracker都是对等的,所有的tracker都接受stroage心跳信息.每个tracker是对等的.由客户端来选择使用哪个tracker.

如果新增加一台tracker server,storage server连接该tracker server,发现该tracker server返回的本组storage server列表比本机记录的要少,就会将该tracker server上没有的storage server同步给该tracker server。

添加group

文件上传时,tracker会分配一个group给client.group直接配置好后启动group中的storage即可.而添加group也是集群扩容的方式.

配置好group后,启动新的group,tracker接受新的stroage心跳信息,来完成添加.

group添加storage

fastDFS同group内的storage数据是同步的.storage中由专门的线程根据binlog进行文件同步.

当新添加一台storage,会由已有的一台storage将所有数据同步给新的服务器.

新加入的storage server主动连接tracker server,tracker server发现有新的storage server加入,就会将该组内所有的storage server返回给新加入的storage server,并重新将该组的storage server列表返回给该组内的其他storage server;

storage server有7个状态,如下:

  • FDFS_STORAGE_STATUS_INIT :初始化,尚未得到同步已有数据的源服务器
  • FDFS_STORAGE_STATUS_WAIT_SYNC :等待同步,已得到同步已有数据的源服务器
  • FDFS_STORAGE_STATUS_SYNCING :同步中
  • FDFS_STORAGE_STATUS_DELETED :已删除,该服务器从本组中摘除(注:本状态的功能尚未实现)
  • FDFS_STORAGE_STATUS_OFFLINE :离线
  • FDFS_STORAGE_STATUS_ONLINE :在线,尚不能提供服务
  • FDFS_STORAGE_STATUS_ACTIVE :在线,可以提供服务

storage添加空间

在storage添加硬盘,然后添加store_path,一个group中各台storage的store_path的数量和配置必须一致.添加完成后重启服务,会自动在新添加的目录创建文件夹.

数据迁移

如果新旧IP地址一一对应,而且是一样的,那非常简单,直接将data目录拷贝过去即可。

IP不一样的话,会比较麻烦一些。
如果使用了V4的自定义server ID特性,那么比较容易,直接将tracker上的IP和ID映射文件storage_ids.conf修改好即可。storage_ids文件可以再源码目录的conf里面找到示例.

如果是用IP地址作为服务器标识,那么需要修改tracker和storage的data目录下的几个数据文件,将旧IP调整为新IP。
注意storage的data目录下有一个.打头的隐藏文件也需要修改。
另外,需要将后缀为mark的IP地址和端口命名的同步位置记录文件名改名。
文件全部调整完成后才能启动集群服务。

tracker server上需要调整的文件列表:
data/storage_groups_new.dat
data/storage_servers_new.dat
data/storage_sync_timestamp.dat

storage server需要调整的文件列表:
data/.datainit_flag
data/sync/${ip_addr}
${port}.mark:此类文件,需要将文件名中的IP地址调整过来