什么是FastDFS?
FastDFS是一个开源的轻量级分布式文件系统。它解决了大数据量存储和负载均衡等问题。特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务,如相册网站、视频网站等等。在UC基于FastDFS开发向用户提供了:网盘,社区,广告和应用下载等业务的存储服务。
FastDFS架构:
FastDFS服务端有三个角色:跟踪服务器(tracker server)、存储服务器(storage server)和客户端(client)。
- tracker server:跟踪服务器,主要做调度工作,起负载均衡的作用。在内存中记录集群中所有存储组和存储服务器的状态信息,是客户端和数据服务器交互的枢纽。相比GFS中的master更为精简,不记录文件索引信息,占用的内存量很少。
- storage server:存储服务器(又称:存储节点或数据服务器),文件和文件属性(Meta data)都保存到存储服务器上。Storageserver直接利用OS的文件系统调用管理文件。
- client:客户端,作为业务请求的发起方,通过专有接口,使用TCP/IP协议与跟踪器服务器或存储节点进行数据交互。
Tracker Server:跟踪服务器,主要做调度工作,在访问上起负载均衡的作用。
Storage Server:存储服务器(又称数据服务器)。
存储节点采用了分组(group)的方式。存储系统由一个或多个group组成,group与group之间的文件是相互独立的,
所有group的文件容量累加就是整个存储系统中的文件容量。一个group可以由一台或多台存储服务器组成,一个group下的存储服务器中的文件都是相同的,group中的多台存储服务器起到了冗余备份和负载均衡的作用(一个组的存储容量为该组内存储服务器容量最小的那个,不同组的Storage server之间不会相互通信,同组内的Storage server之间会相互连
接进行文件同步)。
在group中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。
当存储空间不足或即将耗尽时,可以动态添加group。只需要增加一台或多台服务器,并将它们配置为一个新的group,
这样就扩大了存储系统的容量。
FastDFS两个角色:Tracker server和Storage server。Tracker server作为中心结点,其主要作用是负载均衡和调度。Tracker server在内存中记录分组和Storage server的状态等信息,不记录文件索引信息,占用的内存量很少。
另外,客户端(应用)和Storage server访问Tracker server时,Tracker server扫描内存中的分组和Storage server信息,然后给出应答。由此可以看出Tracker server非常轻量化,不会成为系统瓶颈。
FastDFS中的Storage server在其他文件系统中通常称作Trunk server或Data server。Storage server直接利用OS的文件系统存储文件。FastDFS不会对文件进行分块存储,客户端上传的文件和Storage server上的文件一一对应(FastDFS中的文件标识分为两个部分:组名和文件名,二者缺一不可)。
fastDFS下载地址:http://code.google.com/p/fastdfs/downloads/list
libevent官网: http://libevent.org/
目前最新版:https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
目前最新版:http://fastdfs.googlecode.com/files/FastDFS_v4.06.tar.gz
系统环境:
fastdfs_tracker centos6.5_64 ip:192.168.1.50
fastdfs_storage_s1 centos6.5_64 ip:192.168.1.51
fastdfs_storage_s2 centos6.5_64 ip:192.168.1.52
fastdfs_client centos6.5_64 ip:192.168.1.54
配置tracker:
先装libevent,后fastdfs
1
2
3
4
5
6
7
8
|
[root@centos-6.5-x64 ~]#yum install -y gcc gcc-c++
[root@centos-6.5-x64 ~]#tar zxvf libevent-2.0.21-stable
[root@centos-6.5-x64 ~]#tar zxvf FastDFS_v4.06.tar.gz
[root@centos-6.5-x64 ~]#cd libevent-2.0.21-stable
[root@centos-6.5-x64 libevent-2.0.21-stable]#./configure && make && make install
[root@centos-6.5-x64 libevent-2.0.21-stable]# cd
[root@centos-6.5-x64 ~]#cd FastDFS
[root@centos-6.5-x64 FastDFS]#sh make.sh && sh make.sh install
|
fastdfs的配置文件路径默认在 /etc/fdfs/
[root@centos-6.5-x64 ~]#cd /etc/fdfs/
[root@centos-6.5-x64 fdfs]#ll
总用量 56
-rw-r–r– 1 root root 1463 4月 23 04:10 client.conf
-rw-r–r– 1 root root 858 4月 23 04:10 http.conf
-rw-r–r– 1 root root 31172 4月 23 04:10 mime.types
-rw-r–r– 1 root root 7460 4月 23 04:10 storage.conf
-rw-r–r– 1 root root 6621 4月 23 04:10 tracker.conf
client.conf 客户端上传配置文件
storage.conf 文件存储服务器配置文件
tracker.conf 负责均衡调度服务器配置文件
http.conf http服务器配置文件(可忽略不用)
跟fastdfs相关的命令都在 /usr/local/bin/ 下
编辑tracker配置文件:
[root@centos-6.5-x64 fdfs]#grep -v “#” tracker.conf | grep -v “^$”
#tracker.conf 配置文件是否生效,false是生效,true是屏蔽。
disabled=false
#程序的监听地址,如果不设定则监听所有地址
bind_addr=
#tracker监听的端口
port=22122
#连接超时时间
connect_timeout=30
#tracker在通过网络发送接收数据的超时时间
network_timeout=60
#数据和日志的存放地点
base_path=/home/yuqing/fastdfs
#最大连接数
max_connections=256
#工作线程数一般为cpu个数
work_threads=4
#在存储文件时选择group的策略,0:轮训策略 1:指定某一个组 2:负载均衡,选择空闲空间最大的group.
store_lookup=2
#如果上面的store_lookup选择了1,则这里需要指定一个group
store_group=group2
#在group中的哪台storage做主storage,当一个文件上传到主storage后,就由这台机器同步文件到group内的其他storage上,0:轮训策略 1:根据ip地址排序,第一个 2:根据优先级排序,第一个
store_server=0
#选择文件上传到storage中的哪个(目录/挂载点),storage可以有多个存放文件的base path 0:轮训策略 2:负载均衡,选择空闲空间最大的
store_path=0
#选择那个storage作为主下载服务器,0:轮训策略 1:主上传storage作为主下载服务器
download_server=0
#系统预留空间,当一个group中的任何storage的剩余空间小于定义的值,整个group就不能上传文件了
reserved_storage_space = 10%
#日志信息级别
log_level=info
#进程以那个用户/用户组运行,不指定默认是当前用户
run_by_group=
run_by_user=
#允许那些机器连接tracker默认是所有机器
allow_hosts=*
#设置日志信息刷新到disk的频率,默认10s
sync_log_buff_interval = 10
#检测storage服务器的间隔时间,storage定期主动向tracker发送心跳,如果在指定的时间没收到信号,tracker人为storage故障,默认120s
check_active_interval = 120
#线程栈的大小,最小64K
thread_stack_size = 64KB
#storage的ip改变后服务端是否自动调整,storage进程重启时才自动调整
storage_ip_changed_auto_adjust = true
#storage之间同步文件的最大延迟,默认1天
storage_sync_file_max_delay = 86400
#同步一个文件所花费的最大时间
storage_sync_file_max_time = 300
#是否用一个trunk文件存储多个小文件
use_trunk_file = false
#最小的solt大小,应该小于4KB,默认256bytes
slot_min_size = 256
#最大的solt大小,如果上传的文件小于默认值,则上传文件被放入trunk文件中
slot_max_size = 16MB
#trunk文件的默认大小,应该大于4M
trunk_file_size = 64MB
trunk_create_file_advance = false
trunk_create_file_time_base = 02:00
trunk_create_file_interval = 86400
trunk_create_file_space_threshold = 20G
trunk_init_check_occupying = false
trunk_init_reload_from_binlog = false
use_storage_id = false
storage_ids_filename = storage_ids.conf
id_type_in_filename = ip
store_slave_file_use_link = false
rotate_error_log = false
error_log_rotate_time=00:00
rotate_error_log_size = 0
use_connection_pool = false
connection_pool_max_idle_time = 3600
#http服务是否生效,默认不生效,此项可能在4.0版本后剔除。不起作用且没有此行。
http.disabled=false
#http服务端口
http.server_port=8080
#检测storage上http服务的时间间隔,<=0表示不检测
http.check_alive_interval=30
#检测storage上http服务时所用请求的类型,tcp只检测是否可以连接,http必须返回200
http.check_alive_type=tcp
#通过url检测storage http服务状态
http.check_alive_uri=/status.html
#用include包含进http的其他设置,此项可能在4.0版本后剔除。不起作用。
##include http.conf
需要修改的地方是 base_path 改为自己的路径,这里改为:
base_path=/mnt/fastdfs_tracker
[root@centos-6.5-x64 fdfs]#mkdir /mnt/fastdfs_tracker
启动tracker:
[root@centos-6.5-x64 fdfs]#/usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf
/usr/local/bin/fdfs_trackerd: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory
[root@centos-6.5-x64 ~]#find / -name libevent-2.0.so.5
/root/libevent-2.0.21-stable/.libs/libevent-2.0.so.5
/usr/local/lib/libevent-2.0.so.5
[root@centos-6.5-x64 ~]#ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5#找不到库文件,搜索一下软链接过去即可。
[root@centos-6.5-x64 ~]#/usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf
[root@centos-6.5-x64 ~]#
[root@centos-6.5-x64 ~]#lsof -i:22122#端口启动
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
fdfs_trac 8287 root 5u IPv4 40633 0t0 TCP *:22122 (LISTEN)
配置storage_s1:
[root@centos-6.5-x64 ~]#tar zxvf FastDFS_v4.06.tar.gz
[root@centos-6.5-x64 ~]#cd libevent-2.0.21-stable
[root@centos-6.5-x64 libevent-2.0.21-stable]#./configure && make && make install
[root@centos-6.5-x64 libevent-2.0.21-stable]#cd
[root@centos-6.5-x64 ~]#cd FastDFS
[root@centos-6.5-x64 FastDFS]#sh make.sh && sh make.sh install
[root@centos-6.5-x64 FastDFS]#cd /etc/fdfs/
[root@centos-6.5-x64 fdfs]#ll
总用量 56
-rw-r--r-- 1 root root 1463 4月 23 04:52 client.conf
-rw-r--r-- 1 root root 858 4月 23 04:52 http.conf
-rw-r--r-- 1 root root 31172 4月 23 04:52 mime.types
-rw-r--r-- 1 root root 7460 4月 23 04:52 storage.conf
-rw-r--r-- 1 root root 6621 4月 23 04:52 tracker.conf