FastDFS
FastDFS是是一个轻量级、高性能的开源分布式文件系统,用纯C语言开发,包括文件存储、文件同步、文件访问(上传、下载)、存取负载均衡、在线扩容、相同内容只存储一份等功能,适合有大容量存储需求的应用或系统。
FastDFS安装
/u01/app: 软件安装位置
/u01/soft: 软件包位置
libfastcommon
libfastcommon是从 FastDFS 和 FastDHT 中提取出来的公共 C 函数库,基础环境
下载
/u01/soft目录下
$ wget https://github.com/happyfish100/libfastcommon/archive/V1.0.39.tar.gz
$ mv V1.0.39.tar.gz libfastcommon_V1.0.39.tar.gz
$ tar -zxvf libfastcommon_V1.0.39.tar.gz -C /u01/app/
在/u01/app目录下的libfastcommon-1.0.39文件夹中,编译、安装libfastcommon(请先确保gcc、gcc-c++、 libstdc++-devel、make等依赖库和工具已经安装)
编译:
$ ./make.sh
安装:
$ ./make.sh install
安装成功

FastDFS
下载
/u01/soft目录下
$ wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
$ mv V5.11.tar.gz FastDFS_V5.11.tar.gz
$ tar -zxvf FastDFS_V5.11.tar.gz -C /u01/app/
在/u01/app目录下的fastdfs-5.11文件夹中,编译、安装fastdfs
编译:
$ ./make.sh
安装:
$ ./make.sh install
安装成功

配置
安装完成后会生成相应的文件与目录
- 服务脚本
/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
- 命令工具,
/usr/bin目录下
./fdfs_upload_appender
./fdfs_download_file
./fdfs_appender_test1
./fdfs_trackerd
./fdfs_storaged
./fdfs_test1
./fdfs_appender_test
./fdfs_upload_file
./fdfs_test
./fdfs_file_info
./fdfs_crc32
./fdfs_monitor
./fdfs_append_file
./fdfs_delete_file
配置FastDFS跟踪器(Tracker)
/etc/fdfs目录下,复制FastDFS跟踪器样例配置文件tracker.conf.sample,并重命名为tracker.conf
$ cp tracker.conf.sample tracker.conf
修改tracker.conf配置
# 配置文件是否不生效,false 为生效
disabled=false
# 提供服务的端口
port=22122
# Tracker 数据和日志目录地址(根目录必须存在,子目录会自动创建)
base_path=/home/fastdfs/tracker
# HTTP 服务端口
http.server_port=8080
具体配置解释参照:FastDFS配置文件详解
启动tracker服务,并监听
$ service fdfs_trackerd start
$ netstat -unltp|grep fdfs
启动成功

配置 FastDFS 存储 (Storage)
/etc/fdfs目录下,复制FastDFS跟踪器样例配置文件storage.conf.sample,并重命名为storage.conf
$ cp storage.conf.sample storage.conf
修改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
启动storage服务,并监听
$ service fdfs_storaged start
$ netstat -unltp|grep fdfs
启动成功

查看Storage和Tracker是否在通信
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

如若需要可设置Storage和Tracker开机自启
$ chkconfig fdfs_storaged on
$ chkconfig fdfs_trackerd on
上传测试
/etc/fdfs目录下,复制FastDFS跟踪器样例配置文件client.conf.sample,并重命名为client.conf
$ cp client.conf.sample client.conf
修改client.conf配置
# Client 的数据和日志目录
base_path=/home/fastdfs/client
# Tracker端口
tracker_server=172.17.0.3:22122
# HTTP端口
http.tracker_server_port=80
上传文件
$ /usr/bin/fdfs_upload_file /etc/fdfs/client.conf images.jpg
上传成功后返回文件ID号:group1/M00/00/00/rBEAA1w97zqAERTjAAS5JrxON9k590.jpg

返回的文件ID由group、存储目录、两级子目录、fileid、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成

至此,FastDFS安装完毕,并且上传已测试通过,但无法下载。因此安装Nginx作为服务器以支持Http方式访问文件。
Nginx
Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。
在高连接并发的情况下,Nginx是Apache服务器不错的替代品。
安装编译工具及库文件
yum -y install 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
成功标识

源码包安装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
浏览器中打开:http://111.231.50.173/group1/M00/00/00/rBEAA1w97zqAERTjAAS5JrxON9k590.jpg
配置成功会查看到上面上传的图片。