基于【 centos7】三 || 分布式文件系统FastDFS+Nginx环境搭建

 1. FastDFS介绍

1.1 FastDFS定义

FastDFS是用c语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

1.2 FastDFS架构

FastDFS架构包括 Tracker server和Storage server。客户端请求Tracker server进行文件上传、下载,通过Tracker server调度最终由Storage server完成文件上传和下载。

Tracker server作用是负载均衡和调度,通过Tracker server在文件上传时可以根据一些策略找到Storage server提供文件上传服务。可以将tracker称为追踪服务器或调度服务器。

Storage server作用是文件存储,客户端上传的文件最终存储在Storage服务器上,Storage server没有实现自己的文件系统而是利用操作系统的文件系统来管理文件。可以将storage称为存储服务器。

 

2. FastDFS安装

2.1. 环境安装

2.1.1. 安装gcc

FastDFSC语言开发,安装FastDFS需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc:

yum install gcc-c++

2.1.2. 安装libevent

FastDFS依赖libevent库,需要安装libevent:

yum -y install libevent

2.2. 安装libfastcommon

libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS运行所需要的一些基础库。tracker服务器和storage服务器都需要进行安装。

2.2.1 准备工作

新建文件夹:

mkdir -p /usr/local/fastdfs

mkdir -p /home/fastdfs/tracker

mkdir -p /home/fastdfs/storage

2.2.2 下载libfastcommon并上传

wget https://github.com/happyfish100/libfastcommon/archive/mast.zip

2.2.3 解压至/usr/local/fastdfs

tar -zxvf fileName.tar.gz

unzip fileName.zip

2.2.4 编译安装

进入目录:cd libfastcommon

编译:./make.sh

安装:./make.sh install

2.2.5 拷贝库文件

libfastcommon安装好后默认文件/usr/lib64下,由于FastDFS程序引用usr/lib目录所以需要将/usr/lib64下的库文件拷贝至/usr/lib下。

cp /usr/lib64/libfastcommon.so  /usr/lib

注意:5.0.5版本以后不需要此步操作。

2.2.6 创建软连接

fastDFS主程序设置的目录为/usr/local/lib(自行设定),所以需要创建/usr/lib64下的一些核心执行程序的软连接文件

ln -s /usr/lib64/libfastcommon.so  /usr/local/lib/libfastcommon.so

ln -s /usr/lib64/libfastcommon.so  /usr/lib/libfastcommon.so

ln -s /usr/lib64/libfdfsclient.so  /usr/local/lib/libfdfsclient.so

ln -s /usr/lib64/libfdfsclient.so  /usr/lib/libfdfsclient.so

2.3. 安装FastDFS

2.3.1. 下载FastDFS并上传

wget https://github.com/happyfish100/fastdfs/archive/mast.zip

2.3.2. 解压至/usr/local/fastdfs

tar -zxvf fileName.tar.gz

unzip fileName.zip

2.3.3. 编译安装

进入目录:cd FastDFS

编译:./make.sh

安装:./make.sh install

2.3.4. 查看服务脚本文件

/etc/init.d/fdfs_storaged

/etc/init.d/fdfs_trackerd

过滤查看 cd /etc/init.d/ && ls | grep fdfs

2.3.5. 查看命令行工具

cd /usr/bin

Fdfs_*执行脚本

2.3.6. 修改服务脚本配置文件

因为fastDFS服务脚本设置的bin目录为/usr/local/bin下,但实际我们安装在了/usr/bin/下,所以我们要修改fastdfs配置文件中的路径,也就是需要修改两个配置文件。

命令: vi /etc/init.d/fdfs_storaged

进行全局替换命令: %s+/usr/local/bin+/usr/bin

命令: vi /etc/init.d/fdfs_trackerd

进行全局替换命令: %s+/usr/local/bin+/usr/bin

注意:如果配置文件中的目录为.../usr/local/bin...才需要替换

2.4. 配置跟踪器(192.168.22.1)

2.4.1. 配置tracker.conf

进入目录: cd  /etc/fdfs/

复制配置文件:cp tracker.conf.sample  tracker.conf

修改:vi tracker.conf

base_path=/home/fastdfs/tracker #设置tracker的数据文件和日记目录(预先创建)

disabled=false #启用配置文件

port=22122 #设置tracker的端口号,一般使用默认的

注意:更多配置查看《附录一》

2.4.2. 启动跟踪器

启动tracker命令: /etc/init.d/fdfs_trackerd start

查看进程命令: ps -el | grep fdfs

停止tracker命令: /etc/init.d/fdfs_trackerd stop

 

2.4.3. 设置开机启动

编辑命令: vi /etc/rc.d/rc.local

加入配置: /etc/init.d/fdfs_trackerd start

2.5. 配置存储器(192.168.22.2)

2.5.1. 配置storage.conf

进入目录: cd  /etc/fdfs/

复制配置文件:cp storage.conf.sample  storage.conf

修改:vi storage.conf

base_path=/home/fastdfs/storage#设置storage的数据文件和日记目录(预先创建):

disabled=false #启用配置文件

port=23000 #设置端口号,默认值23000,同一组的的storage端口号必须相同

group_name=group2 #组名,根据实际情况修改

base_path=/home/fastdfs/storage #设置tracker的数据文件和日记目录(预先创建)

store_path0=/home/fastdfs/storage #存储路径

store_path_count=1 #存储路径个数,需要和store_path个数匹配

tracker_server=192.168.22.1:22122 #tracker服务器的ip地址和端口号

注意:更多配置查看《附录二》

2.5.2. 启动存储器

启动tracker命令: /etc/init.d/fdfs_storaged start

查看进程命令: ps -el | grep fdfs

停止tracker命令: /etc/init.d/fdfs_storaged stop

 

2.5.3. 设置开机启动

编辑命令: vi /etc/rc.d/rc.local

加入配置: /etc/init.d/fdfs_storaged start

2.6. 测试

2.6.1. 修改clien.conf

进入tracker服务器中:cd  /etc/fdfs/

复制配置文件:cp clien.conf.sample  clien.conf

base_path=/fastdfs/tracker #存放路径

tracker_server=192.16822.1:22122  #tracker服务器ip地址和端口

2.6.2. 上传文件

命令:/usr/bin/fdfs_upload_file  /etc/fdfs/client.conf  /usr/local/1.img

2.6.3. 查看上传文件

storage服务器中,配置的/home/fastdfs/storage/data中根据返回值查看

3. Nginx安装(storage)

3.1. 安装fastdfs-nginx-module包进行整合

3.1.1. 下载fastdfs-nginx-module并上传

wget https://github.com/happyfish100/fastdfs-nginx-module/archive/mast.zip

3.1.2. 解压至/usr/local/fastdfs

tar -zxvf fileName.tar.gz

unzip fileName.zip

3.1.3. 修改配置文件

进入目录:cd /fastdfs-nginx-module/src/config

编辑:vi config

将路径中的local全部去掉

改为:ОCORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

3.2. Fastdfs与Nginx进行集成

3.2.1. 删除之前的nginx

进入目录:cd /usr/local/

删除文件:rm -rf nginx

3.2.2. 安装依赖库文件:

yum install pcre

yum install pcre-devel

yum install zlib

yum install zlib-devel

3.2.3. 下载nginx并上传

wget -c https://nginx.org/download/nginx-1.17.1.tar.gz

3.2.4. 解压至/usr/local/fastdfs

tar -zxvf fileName.tar.gz

unzip fileName.zip

3.2.5. 编译安装

进入nginx目录: cd nginx1.17.1/

加入模块命令:

./configure  --add-module=/usr/local/fastdfs/fastdfs-nginx-module/src 

重新编译命令: make && make install

3.2.6. 修改nginx-module配置文件

复制fastdfs-nginx-module中的配置文件,到/etc/fdfs目录:

cp /usr/local/fastdfs/fastdfs-nginx-module/src/mod_fastdfs.conf  /etc/fdfs/

修改文件:vi mod_fastdfs.conf

connect_timeout=10 #连接超时时间

tracker_server=192.168.22.1:22122 #跟踪器ip

url_have_group_name=true #启用url访问

store_path0=/fastdfs/storage #与之前一致

3.2.7. 复制nginx配置文件

复制fastdfs里面的2个文件,到/etc/fdfs目录中:

进入目录:cd/usr/local/fastdfs/Fastdfs/conf/

复制: cp http.conf mime.types  /etc/fdfs/

3.2.8. 创建软连接

/fastdfs/storage文件存储目录下创建软连接,将其链接到实际存放数据的目录:

ln -s /home/fastdfs/storage/data/  /home/fastdfs/storage/data/M00

3.2.9. 修改nginx配置文件

进入目录:cd/usr/local/nginx

编辑:Vi nginx.conf

Server {

listen: 8888; #由80改为8888

server_name localhost;

location ~/group([0-9])/M00{

ngx_fastdfs_module;

}

}

注意: ~表示正则表达式, 匹配group下的0-9任意一位

nginx里的端口要和配置fastdfs存储中的storage.conf文件配置一致,也就是 http-server-port=8888

3.2.10. 启动nginx

命令: /usr/local/nginx/sbin/nginx

附录一:FastDFS配置手册tracker.conf

tracker.conf 配置文件分析:

#配置tracker.conf这个配置文件是否生效,因为在启动fastdfs服务端进程时需要指定配置文件,所以需要使次配置文件生效。false是生效,true是屏蔽。

disabled=false

#程序的监听地址,如果不设定则监听所有地址

bind_addr=

#tracker监听的端口

port=22122

#链接超时设定

connect_timeout=30

#tracker在通过网络发送接收数据的超时时间

network_timeout=60

#数据和日志的存放地点

base_path=/opt/fdfs

#服务所支持的最大链接数

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作为主下载服务器,0:轮训策略 1:主上传storage作为主下载服务器

download_server=0

#选择文件上传到storage中的哪个(目录/挂载点),storage可以有多个存放文件的base path 0:轮训策略 2:负载均衡,选择空闲空间最大的

store_path=0

#系统预留空间,当一个group中的任何storage的剩余空间小于定义的值,整个group就不能上传文件了

reserved_storage_space = 4GB

#日志信息级别

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

#http服务是否生效,默认不生效

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

#if need find content type from file extension name

http.need_find_content_type=true

#用include包含进http的其他设置

##include http.conf

附录二:FastDFS配置手册storage.conf

storage.conf配置文件分析:

#tracker.conf

disabled=false

#这个storage服务器属于那个group

group_name=group1

#tracker.conf

bind_addr=

#连接其他服务器时是否绑定地址,bind_addr配置时本参数才有效

client_bind=true

#tracker.conf

port=23000

connect_timeout=30

network_timeout=60

#主动向tracker发送心跳检测的时间间隔

heart_beat_interval=30

#主动向tracker发送磁盘使用率的时间间隔

stat_report_interval=60

#tracker.conf

base_path=/opt/fdfs

max_connections=256

#接收/发送数据的buff大小,必须大于8KB

buff_size = 256KB

#tracker.conf

work_threads=4

#磁盘IO是否读写分离

disk_rw_separated = true

#是否直接读写文件,默认关闭

disk_rw_direct = false

#混合读写时的读写线程数

disk_reader_threads = 1

disk_writer_threads = 1

#同步文件时如果binlog没有要同步的文件,则延迟多少毫秒后重新读取,0表示不延迟

sync_wait_msec=50

#同步完一个文件后间隔多少毫秒同步下一个文件,0表示不休息直接同步

sync_interval=0

#表示这段时间内同步文件

sync_start_time=00:00

sync_end_time=23:59

#同步完多少文件后写mark标记

write_mark_file_freq=500

#storage在存储文件时支持多路径,默认只设置一个

store_path_count=1

#配置多个store_path路径,从0开始,如果store_path0不存在,则base_path必须存在

store_path0=/opt/fdfs

#store_path1=/opt/fastdfs2

#subdir_count  * subdir_count个目录会在store_path下创建,采用两级存储

subdir_count_per_path=256

#设置tracker_server

tracker_server=x.x.x.x:22122

#tracker.conf

log_level=info

run_by_group=

run_by_user=

allow_hosts=*

#文件在数据目录下的存放策略,0:轮训 1:随机

file_distribute_path_mode=0

#当问及是轮训存放时,一个目录下可存放的文件数目

file_distribute_rotate_count=100

#写入多少字节后就开始同步,0表示不同步

fsync_after_written_bytes=0

#刷新日志信息到disk的间隔

sync_log_buff_interval=10

#同步storage的状态信息到disk的间隔

sync_stat_file_interval=300

#线程栈大小

thread_stack_size=512KB

#设置文件上传服务器的优先级,值越小越高

upload_priority=10

#是否检测文件重复存在,1:检测 0:不检测

check_file_duplicate=0

#check_file_duplicate设置为1时,次值必须设置

key_namespace=FastDFS

#FastDHT建立连接的方式 0:短连接 1:长连接

keep_alive=0

#tracker.conf

http.disabled=false

http.domain_name=

http.server_port=8888

http.trunk_size=256KB

http.need_find_content_type=true

##include http.conf

附录三:FastDFS常用命令

启动命令:

启动tracker命令:/etc/init.d/fdfs_trackerd start

查看进程命令:ps -el | grep fdfs

启动storage命令:/etc/init.d/fdfs_storaged start

查看进程命令:ps -el | grep fdfs

启动nginx命令:/usr/local/nginx/sbin/nginx

停止命令:

停止tracker命令:/etc/init.d/fdfs_trackerd stop

关闭storage命令:/etc/init.d/fdfs_storaged stop

关闭nginx命令:/usr/local/nginx/sbin/nginx -s stop

原文地址:https://www.cnblogs.com/kevin-ying/p/11169442.html