Linux FastDFS 安装部署

(亲测有效 宿主机是ubuntu16.4虚拟机)

FastDFS

FastDFS是是一个轻量级、高性能的开源分布式文件系统,用纯C语言开发,包括文件存储、文件同步、文件访问(上传、下载)、存取负载均衡、在线扩容、相同内容只存储一份等功能,适合有大容量存储需求的应用或系统

 

FastDFS 的作者余庆在其 GitHub 上是这样描述的:

FastDFS 是一个开源的高性能分布式文件系统。其主要功能包括文件存储、文件同步和文件访问(文件上传和文件下载),可以解决高容量和负载平衡问题。FastDFS 应满足基于照片共享站点和视频共享站点等文件的网站的服务要求。

FastDFS 有两个角色:跟踪器(Tracker)和存储器(Storage)。Tracker 负责文件访问的调度和负载平衡,Storage 存储文件及其功能是文件管理,包括文件存储、文件同步、提供文件访问接口。它还管理元数据,这些元数据是表示为文件的键值对的属性。Tracker 和 Storage 节点都可以由一台或多台服务器构成。这些服务器均可以随时增加或下线而不会影响线上服务,当然各个节点集群至少需要一台服务 Running。注意,其中 Tracker 集群中的所有服务器都是对等的(P2P),可以根据服务器的压力情况随时增加或减少。

此外,官网还存储系统做了详尽的说明,为了支持大容量,Storage 节点采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台 Storage 服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。关于卷或组的概念暂且不过多深入,后面的安装部署中会后详细的说明。

 

FastDFS安装

安装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

 

FastDFS配置

安装完成后会生成相应的文件与目录

  1. 服务脚本

/etc/init.d/fdfs_storaged

/etc/init.d/fdfs_tracke

  1. 配置文件(这三个是作者给的样例配置文件)

/etc/fdfs/client.conf.sample

/etc/fdfs/storage.conf.sample

/etc/fdfs/tracker.conf.sample

  1. 命令工具,/usr/bin目录下

常用的命令

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方式访问文件。

 

Nginx

 

安装编译工具及库文件

 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

你可能感兴趣的:(FastDFS,FastDFS,linux,nginx)