(亲测有效 宿主机是ubuntu16.4虚拟机)
FastDFS是是一个轻量级、高性能的开源分布式文件系统,用纯C语言开发,包括文件存储、文件同步、文件访问(上传、下载)、存取负载均衡、在线扩容、相同内容只存储一份等功能,适合有大容量存储需求的应用或系统
FastDFS 的作者余庆在其 GitHub 上是这样描述的:
FastDFS 是一个开源的高性能分布式文件系统。其主要功能包括文件存储、文件同步和文件访问(文件上传和文件下载),可以解决高容量和负载平衡问题。FastDFS 应满足基于照片共享站点和视频共享站点等文件的网站的服务要求。
FastDFS 有两个角色:跟踪器(Tracker)和存储器(Storage)。Tracker 负责文件访问的调度和负载平衡,Storage 存储文件及其功能是文件管理,包括文件存储、文件同步、提供文件访问接口。它还管理元数据,这些元数据是表示为文件的键值对的属性。Tracker 和 Storage 节点都可以由一台或多台服务器构成。这些服务器均可以随时增加或下线而不会影响线上服务,当然各个节点集群至少需要一台服务 Running。注意,其中 Tracker 集群中的所有服务器都是对等的(P2P),可以根据服务器的压力情况随时增加或减少。
此外,官网还存储系统做了详尽的说明,为了支持大容量,Storage 节点采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台 Storage 服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。关于卷或组的概念暂且不过多深入,后面的安装部署中会后详细的说明。
安装Git
fastdfs依赖libfastcommon,需要从github上clone到本地编译安装。因此首先需
apt-get install git
克隆libfastcommon库
libfastcommon的源在项目https://github.com/happyfish100/libfastcommon 需要使用git将其clone至本地安装。
git clone https://github.com/happyfish100/libfastcommon.git
安装libfastcommon依赖
进入libfastcommon目录,依次执行脚本:
./make.sh
和
./make.sh install
设置环境变量和软链接
在32位ubuntu中,libfastcommon会安装在/usr/lib 中,64位系统则安装在 /usr/lib64 中。依次执行以下命令:(根据自己的操作系统选择路径)
export LD_LIBRARY_PATH=/usr/lib/
和
ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
下载、解压并安装FastDFS
Fastdfd的Github下载地址为:
https://github.com/happyfish100/fastdfs/releases
下载完成后,执行命令:
tar xzf fastdfs-5.08.tar.gz
进入解压后的目录,依次执行:
./make.sh
和
./make.sh insta
安装完成后会生成相应的文件与目录
/etc/init.d/fdfs_storaged
/etc/init.d/fdfs_tracke
/etc/fdfs/client.conf.sample
/etc/fdfs/storage.conf.sample
/etc/fdfs/tracker.conf.sample
常用的命令
1: 启动FastDFS
tracker:/usr//bin/fdfs_trackered /etc/fdfs/tracker.conf
storage: /usr//bin/fdfs_storaged /etc/fdfs/storage.conf
2:关闭FastDFS
tracker:/usr//bin/stop.sh /usr//bin/fdfs_tracker
storage:/usr//bin/stop.sh /usr//bin/fdfs_storage
或者 killall fdfs_trackered(storaged) -------注意,千万不要使用-9强行杀死进程。
3:重启FastDFS
tracker:/usr//bin/restart.sh /usr//bin/fdfs_trackered
storage:/usr//bin/restart.sh /usr//bin/fdfs_storaged
4:查看集群情况
在任意一台storage(tracker也可以)
/usr//bin/fdfs_monitor /etc/fdfs/storage.conf
5:删除一个storage:
在任意一台storage(tracker也可以)
/usr//bin/fdfs_monitor /etc/fdfs/storage.conf delete group2 20.12.1.73
修改配置文件
拷贝fastdfs-5.08/conf 下复制mime.types http.conf
到 /etc/fdfs下
cp mime.types http.conf /etc/fdfs/
在/etc/fdfs 下,有三个示例配置文件:
client.conf.sample
storage.conf.samle
tracker.conf.sample
首先将这三个文件名中的sample去掉,改为
client.conf
storage.conf
tracker.conf
配置FastDFS跟踪器(Tracker)
修改tracker.conf配置
# 配置文件是否不生效,false 为生效
disabled=false
# 提供服务的端口
port=22122
# Tracker 数据和日志目录地址(根目录必须存在,子目录会自动创建)
base_path=/home/fastdfs/tracker
# HTTP 服务端口
http.server_port=8090
具体请查看配置文件详解http://bbs.chinaunix.net/thread-1941456-1-1.html
启动tracker服务,并监听
/usr//bin/fdfs_trackered /etc/fdfs/tracker.conf
netstat -unltp|grep fdfs
配置 FastDFS 存储 (Storage)
修改storage.conf配置
# 配置文件是否不生效,false 为生效
disabled=false
# 指定此 storage server 所在 组(卷)
group_name=group1
# storage server 服务端口
port=23000
# 心跳间隔时间,单位为秒 (这里是指主动向 tracker server 发送心跳)
heart_beat_interval=30
# Storage 数据和日志目录地址(根目录必须存在,子目录会自动生成)
base_path=/home/fastdfs/storage
# 存放文件时 storage server 支持多个路径。这里配置存放文件的基路径数目,通常只配一个目录。
store_path_count=1
# 逐一配置 store_path_count 个路径,索引号基于 0。
# 如果不配置 store_path0,那它就和 base_path 对应的路径一样。
store_path0=/home/fastdfs/storage
# FastDFS 存储文件时,采用了两级目录。这里配置存放文件的目录个数。
# 如果本参数只为 N(如: 256),那么 storage server 在初次运行时,会在 store_path 下自动创建 N * N 个存放文件的子目录。
subdir_count_per_path=256
# tracker_server 的列表 ,会主动连接 tracker_server
# 有多个 tracker server 时,每个 tracker server 写一行
tracker_server=172.17.0.3:22122
# 允许系统同步的时间段 (默认是全天) 。一般用于避免高峰同步产生一些问题而设定。
sync_start_time=00:00
sync_end_time=23:59
# 访问端口
http.server_port=8888
修改client.conf配置
# Client 的数据和日志目录
base_path=/home/fastdfs/client
# Tracker端口
tracker_server=172.17.0.3:22122
# HTTP端口
http.tracker_server_port=8888
#include http.conf
注意,#include http.conf 这句,原配置文件中有2个#,删掉一个。
启动服务,并监听
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf
netstat -unltp|grep fdfs
查看Storage和Tracker是否在通信
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
FastDFS安装完毕,并且上传已测试通过,但无法下载。因此安装Nginx作为服务器以支持Http方式访问文件。
安装编译工具及库文件
gcc gcc-c++ make libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel
安装Nginx有两种方式
yum安装
源码包安装
先说明下yum和源码包安装的区别:
yum安装是在线安装,好处是:安装方式简单,不易出错;
源码包安装是先将nginx的源码下载下来,在自己的系统里编译生成可执行文件,然后执行,好处是:因为是在自己的系统上编译的,更符合自己系统的性能,也就是说在自己的系统上执行nginx服务性能效率更好
源码安装注意:
yum安装nginx
yum在线安装会将nginx的安装文件放在系统的不同位置,可以通过命令rpm -ql nginx来查看安装路径
$ yum -y install nginx
卸载的时候,只能通过命令来卸载,因为我们不可能将这些文件自己手动删除,可以通过命令rpm -e nginx来卸载,这个命令一般不会报错,因为nginx不与其他的包有依赖关系,如果提示关于依赖包的问题,可以尝试rpm -e --nodeps nginx来卸载,这个命令相当于强制卸载,不考虑依赖问题。
启动命令
yum安装nginx,可以通过系统服务命令service来启动或停止
service nginx start #启动 nginx 服务
service nginx stop #停止 nginx 服务
service nginx restart #重启 nginx 服务
源码包安装nginx
在/u01/soft目录下,下载nginx源码包,并解压:
$ wget http://nginx.org/download/nginx-1.15.8.tar.gz
$ tar -zxvf nginx-1.15.8.tar.gz -C /u01/app/
在/u01/soft目录下,下载fastdfs-nginx-module模块包,并解压:
$ wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.20.tar.gz
$ mv V1.20.tar.gz fastdfs-nginx-module_V1.20.tar.gz
$ tar -zxvf fastdfs-nginx-module_V1.20.tar.gz -C /u01/app/
进入/u01/app/nginx-1.15.8目录安装nginx,并加入fastdfs-nginx-module模块:
$ ./configure --prefix=/usr/local/nginx --add-module=../fastdfs-nginx-module-1.20/src/
编译、安装:
$ make && make install
可能遇到报错信息:
/usr/include/fastdfs/fdfs_define.h:15:27: fatal error: common_define.h: No such file or directory
解决方案:修改fastdfs-nginx-module-1.20/src/config文件
ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
重新编译、安装
$ ./configure --prefix=/usr/local/nginx --add-module=../fastdfs-nginx-module-1.20/src/
$ make && make install
--prefix=PATH:指定nginx的安装目录。默认/usr/local/nginx
--conf-path=PATH:设置nginx.conf配置文件的路径。nginx允许使用不同的配置文件启动,通过命令行中的-c选项。默认为conf/nginx.conf
--user=name:设置nginx工作进程的用户。安装完成后,可以随时在nginx.conf配置文件更改user指令。默认的用户名是nobody。--group=name类似
--with-pcre:设置PCRE库的源码路径,如果已通过yum方式安装,使用--with-pcre自动找到库文件。使用--with-pcre=PATH时,需要从PCRE网站下载pcre库的源码并解压,指定pcre的源码路径 ,比如:--with-pcre=/root/pcre-8.39/。perl正则表达式使用在location指令和 ngx_http_rewrite_module模块中。
--with-zlib=PATH:指定zlib(版本1.1.3 - 1.2.5)的源码解压目录。在默认就启用的网络传输压缩模块ngx_http_gzip_module时需要使用zlib 。
--with-http_ssl_module:使用https协议模块。默认情况下,该模块没有被构建。前提是openssl与openssl-devel已安装
--with-http_stub_status_module:用来监控 Nginx 的当前状态
--with-http_realip_module:通过这个模块允许我们改变客户端请求头中客户端IP地址值(例如X-Real-IP 或 X-Forwarded-For),意义在于能够使得后台服务器记录原始客户端的IP地址
--add-module=PATH:添加第三方外部模块,如fastdfs-nginx-module或缓存模块。每次添加新的模块都要重新编译(Tengine可以在新加入module时无需重新编译)
查看nginx的版本及模块
/usr/local/nginx/sbin/nginx -V
成功标识
image.png
源码包安装nginx启动的时候不能使用service来启动,需要执行nginx安装目录下的sbin目录下的 nginx可执行程序才行
配置fastdfs-nginx-module和nginx
在/u01/app/fastdfs-nginx-module-1.20/src目录下复制mod_fastdfs.conf文件到/etc/fdfs目录下
$ cp mod_fastdfs.conf /etc/fdfs/
在/etc/fdfs目录下修改mod_fastdfs.conf配置
base_path=/home/fastdfs
# 连接超时时间
connect_timeout=10
# Tracker Server
tracker_server=172.17.0.3:22122
# StorageServer 默认端口
storage_server_port=23000
# 如果文件ID的uri中包含/group**,则要设置为true
url_have_group_name = true
# Storage 配置的store_path0路径,必须和storage.conf中的一致
store_path0=/home/fastdfs/storage
在/usr/local/nginx/conf目录下配置nginx,修改nginx.conf文件
location ~/M00 {
root /home/fastdfs/storage/data;
ngx_fastdfs_module;
}
拷贝/u01/app/fastdfs-5.11/conf目录下的http.conf、mime.types文件到/etc/fdfs/目录下
$ cp http.conf mime.types /etc/fdfs/
启动nginx
$ /usr/local/nginx/sbin/nginx