Centos 7.X部署分布式文件系统:FastDFS+Nginx

发布时间:2020-05-19 15:26:39 作者:甘兵
来源:网络 阅读:10536

1、FastDFS简介

1.1 介绍


1.2 FastDFS组成

tracker server

跟踪服务器:用来调度来自客户端的请求。且在内存中记录所有存储组和存储服务器的信息状态。

storage server

存储服务器:用来存储文件(data)和文件属性(metadata)

client

客户端:业务请求发起方,通过专用接口基于TCP协议与tracker以及storage server进行交互

group

组,也可称为卷:同组内上的文件是完全相同的

文件标识

包括两部分:组名和文件名(包含路径)

meta data

文件相关属性:键值对(Key Value Pair)方式

fid

文件标识符: (例如: group1/M00/00/00/CgEOxVegXB2AdYafAAAB0b8tBbQ9155303 )


1.3 FastDFS同步机制

    提示:上述第二条规则有个例外,就是新增加一台storage server时,由已有的一台storage server将已有的所有数据(包括源头数据和备份数据)同步给该新增服务器。


1.4 FastDFS特性

指标
说明
系统简洁性
很简洁,只有两个角色:tracker、storage
系统性能很高、没有使用数据库,文件同步直接点对点,不经过tracker中转
系统稳定性

高、C语言开发,可支持高并发和负载

RAID方式
分组(组内冗余),具有很高的灵活性
通信协议专有协议,下载文件支持HTTP
属性(meta,data)
支持
相同内容文件只保存一份
支持
下载文件时支持文件偏移量
支持


2、背景

    在这里,我用3台服务器集群部署,这3台服务器都要部署nginx+fastdfs以及相关模块。3台服务器部署方式都一样,只不过storage服务器有些配置会不同,部署的过程中请大家看清楚在哪里操作,过程有点麻烦,请大家一定要有耐心,一步一步走下去部署是OK的。


2.1  环境说明

172.18.18.111(tracker服务器): nginx、fastdfs(运行tracker、storage)、fastfds其它模块

172.18.18.112(storage服务器):nginx、fastdfs(运行storage)、fastfds其它模块

172.18.18.113(storage服务器):nginx、fastdfs(运行storage)、fastfds其它模块


2.2 软件包、安装路径

准备的软件包:

nginx-1.9.3.tar.gz

lua-5.1.4.tar.gz

libfastcommon-1.0.35.zip

fastdfs-master.zip

LuaJIT-2.1.0-beta2.tar.gz

v0.2.19.tar.gz

GraphicsMagick-1.3.25.tar.gz

GraphicsMagick-1.3.25.tar

安装的路径:

服务目录
nginx/usr/local/nginx/
fastdfs配置

/etc/fdfs/

fastdfs

/usr/local/fastDFS/

Storage_data

/usr/local/fastDFS/storage/
安装包/usr/src


3、部署FastDFS

3.1、安装libfastcommon(tracker和storage服务器操作)

    安装fastDFS前,首先下载最新版本的libfastcommon进行安装,上传至/usr/src目录中。下载地址https://github.com/happyfish200/libfastcommon/releases


#cd /usr/src/

#unzip libfastcommon-1.0.35.zip

#cd libfastcommon-1.0.35/

#./make.sh

#./make.sh install

提示:确认make没有错误后,执行安装,64位系统默认会复制到/usr/lib64下。


#export LD_LIBRARY_PATH=/usr/lib64/

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


3.2、安装fastdfs(tracker和storage服务器操作)

    下载最新版本的fastDFS,上传至/usr/src/目录中。下载地址:https://github.com/happyfish200/fastdfs


#cd /usr/src/

#unzip fastdfs-master.zip

#cd fastdfs-master/

#./make.sh

#./make.sh install


提示:确认make没有错误后,执行安装,默认会安装到/usr/bin中,以及会在/etc/fdfs生成以.sample结尾的4个文件,如下所示:

#ll /etc/fdfs/

-rw-r--r-- 1 root root 1461 Aug 12 15:48 client.conf.sample

-rw-r--r-- 1 root root 7927 Aug 12 15:48 storage.conf.sample

-rw-r--r-- 1 root root  105 Aug 12 15:48 storage_ids.conf.sample

-rw-r--r-- 1 root root 7389 Aug 12 15:48 tracker.conf.sample


# ll /usr/bin/fdfs_*

-rwxr-xr-x 1 root root  317432 Aug 12 15:48 /usr/bin/fdfs_appender_test

-rwxr-xr-x 1 root root  317208 Aug 12 15:48 /usr/bin/fdfs_appender_test1

-rwxr-xr-x 1 root root  304064 Aug 12 15:48 /usr/bin/fdfs_append_file

-rwxr-xr-x 1 root root  303800 Aug 12 15:48 /usr/bin/fdfs_crc32

-rwxr-xr-x 1 root root  304120 Aug 12 15:48 /usr/bin/fdfs_delete_file

-rwxr-xr-x 1 root root  304856 Aug 12 15:48 /usr/bin/fdfs_download_file

-rwxr-xr-x 1 root root  304448 Aug 12 15:48 /usr/bin/fdfs_file_info

-rwxr-xr-x 1 root root  322360 Aug 12 15:48 /usr/bin/fdfs_monitor

-rwxr-xr-x 1 root root 1111640 Aug 12 15:48 /usr/bin/fdfs_storaged

-rwxr-xr-x 1 root root  327376 Aug 12 15:48 /usr/bin/fdfs_test

-rwxr-xr-x 1 root root  326592 Aug 12 15:48 /usr/bin/fdfs_test1

-rwxr-xr-x 1 root root  453880 Aug 12 15:48 /usr/bin/fdfs_trackerd

-rwxr-xr-x 1 root root  305048 Aug 12 15:48 /usr/bin/fdfs_upload_appender

-rwxr-xr-x 1 root root  306072 Aug 12 15:48 /usr/bin/fdfs_upload_file


3.3 配置tracker服务器(在tracker服务器操作)

#cd /etc/fdfs/

#cp tracker.conf.sample tracker.conf



#vim tracker.conf

bind_addr=172.18.18.111     #绑定服务IP,如果不填则表示所有的

port=22122            #提供服务的端口

base_path=/usr/local/fastDFS    #存储日志和数据的根目录

store_group=group1    #设当上一个参数设定为1 时 (store_lookup=1,即指定组名时),必须设置本参数为系统中存在的一个组名。如果选择其他的上传方式,这个参数就没有效了。

store_server=1     #选择哪个storage server 进行上传操作,1表示根据ip 地址进行排序选择第一个服务器(IP地址最小者)

download_server=1         #选择哪个 storage server 作为下载服务器,1表示哪个为源storage server 就用哪一个

http.server_port=80        #HTTP服务端口,默认为8080,你也可以不用改,但是测试访问你要带8080端口访问

其它参数保留默认配置, 具体配置解释可参考官方文档说明:http://bbs.chinaunix.net/thread-1941456-1-1.html



#mkdir /usr/local/fastDFS/

#mkdir -p /usr/local/fastDFS/storage/data


3.4 配置storage服务器(tracker和storage服务器操作)


#cd /etc/fdfs/
#cp storage.conf.sample  storage.conf


#vim storage.conf

group_name=group1                       #指定此 storage server 所在 组

bind_addr=                              #绑定服务IP,可以不用填写(如果是tracker服务器,也可以配置tracker服务器自身IP地址)

base_path=/usr/local/fastDFS            #储日志和数据的根目录

store_path0=/usr/local/fastDFS/storage  #第1个存储目录

tracker_server=172.18.18.111:22122      #tracker服务器的IP和端口,如果有多个tracker服务器可以写多行

http.server_port=80                     #HTTP服务端口,默认为8888,你也可以不用改,但是测试访问你要带8080端口访问

其它参数保留默认配置, 具体配置解释可参考官方文档说明:http://bbs.chinaunix.net/thread-1941456-1-1.html


3. 5修改tracker服务器客户端配置文件(tracker服务器操作)

#cd /etc/fdfs/

#cp client.conf.sample  client.conf


#cd /etc/fdfs/

#cp client.conf.sample client.conf

#vim client.conf

base_path=/usr/local/fastDFS              #修改路径

tracker_server=172.18.18.111:22122    #tracker服务器IP和端口,有多个tracker服务器可以写多条配置


4、文件上传测试

4.1 启动tracker服务(tracker服务器操作)

#/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf


检查FastDFS Tracker Server是否启动成功:

#ps -ef | grep fdfs_trackerd

root     27077 25738  0 15:11 pts/2    00:00:00 grep --color=auto fdfs_trackerd

root     31854     1  0 Nov20 ?        00:02:34 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf



4.2 启动storage服务(tracker和storage服务器操作)

    到了这里,有些朋友可能会问我,为什么我启动storage服务也要在tracker服务器上操作呢?大家有没有注意,我在2.1的步骤中,就声明了tracker服务器同时运行(tracker、storage)这两个服务,所以不要觉得奇怪。

# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf

# ps -ef | grep fdfs_storaged

root     27234 25738  0 15:15 pts/2    00:00:00 grep --color=auto fdfs_storaged

root     31863     1  0 Nov20 ?        00:03:37 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf


4.3 执行文件上传(tracker服务器操作)


#ll /home

drwx------. 14 admin admin    4096 Apr 22  2017 admin

-rw-r--r--   1 root  root  4121391 Dec  7 17:13 test.jpg



#fdfs_test /etc/fdfs/client.conf upload  /home/test.jpg 

This is FastDFS client test program v5.11


Copyright (C) 2008, Happy Fish / YuQing


FastDFS may be copied only under the terms of the GNU General

Public License V3, which may be found in the FastDFS source kit.

Please visit the FastDFS Home Page http://www.csource.org/ 

for more detail.


[2017-12-27 15:20:21] DEBUG - base_path=/usr/local/fastDFS, connect_timeout=30, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s, use_storage_id=0, storage server id count: 0


tracker_query_storage_store_list_without_group: 

server 1. group_name=, ip_addr=172.18.18.111, port=23000


group_name=group1, ip_addr=172.18.18.111, port=23000

storage_upload_by_filename

group_name=group1, remote_filename=M00/00/12/rBISb1pDSbWAeUGaAD7jL_Zyu6I957.jpg

source ip address: 172.18.18.111

file timestamp=2017-12-27 15:20:21

file size=4121391

file crc32=4134714274

example file url: http://172.18.18.111/group1/M00/00/12/rBISb1pDSbWAeUGaAD7jL_Zyu6I957.jpg

storage_upload_slave_by_filename

group_name=group1, remote_filename=M00/00/12/rBISb1pDSbWAeUGaAD7jL_Zyu6I957_big.jpg

source ip address: 172.18.18.111

file timestamp=2017-12-27 15:20:21

file size=4121391

file crc32=4134714274

example file url: http://172.18.18.111/group1/M00/00/12/rBISb1pDSbWAeUGaAD7jL_Zyu6I957_big.jpg


如下图的结果,能返回文件ID,说明图片上传成功:

Centos 7.X部署分布式文件系统:FastDFS+Nginx

说明:刚才把test.jpg的图片上传至fastdfs了,如果要用浏览器访问测试上面给出的url地址,还需要安装nginx服务。


# fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/12/rBISb1pDSbWAeUGaAD7jL_Zyu6I957.jpg


4、安装LuaJIT、nginx-lua-module、GraphicsMagick模块(tracker和storage服务器操作)

4.1 安装LuaJIT


#cd /usr/src

#wget http://luajit.org/download/LuaJIT-2.1.0-beta2.tar.gz



# tar zxf LuaJIT-2.1.0-beta2.tar.gz

# cd LuaJIT-2.1.0-beta2

# make

# make install


4.2 安装nginx_devel_kit(NDK)模块


#cd /usr/src

# wget http://luajit.org/download/LuaJIT-2.1.0-beta2.tar.gz



# tar zxf LuaJIT-2.1.0-beta2.tar.gz

# cd LuaJIT-2.1.0-beta2

# make

# make install


4.3 安装lua_nginx_module模块


#cd /usr/src

# wget https://github.com/openresty/lua-nginx-module/archive/v0.10.2.tar.gz


4.4 安装GraphicsMagick模块(免费的图片编辑、合成等功能的软件)


#cd /usr/src

#wget ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/1.3/GraphicsMagick-1.3.5.tar.gz



# yum -y install libpng-devel libpng

# yum -y install libjpeg-devel libjpeg

# yum -y install libtool-ltdl libtool-ltdl-devel

#yum -y install ImageMagick ImageMagick-devel




# cd GraphicsMagick-1.3.25

# ./configure

#make && make install


PS:
将会默认在一下目录中安装相应文件:

    /usr/local/bin

    /usr/local/include

    /usr/local/lib

    /usr/local/share

提示:整个第4步可根据公司的业务情况来增加这些模块,如果你们公司不需要用到这些模块,这一步可以省略......


5、安装fastdfs-nginx-module模块(在所有storage节点安装,相当于在tracker和storage服务器操作)

5.1 fastdfs-nginx-module作用说明

     FastDFS 通过 Tracker 服务器,将文件放在 Storage 服务器存储,但是同组存储服务器之间需要进入文件复制,有同步延迟的问题。假设 Tracker 服务器将文件上传到了 ip01,上传成功后文件 ID 已经返回给客户端。此时 FastDFS 存储集群机制会将这个文件同步到同组存储 ip02,在文件还没有复制完成的情况下,客户端如果用这个文件 ID 在 ip02 上取文件,就会出现文件无法访问的错误。而 fastdfs-nginx-module 可以重定向文件连接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。(解压后的 fastdfs-nginx-module 在 nginx 安装时使用)。


5.2 下载fastdfs-nginx-module

下载最新的fastdfs-nginx-module,然后上传至/usr/src目录下:

#cd /usr/src

#wget https://github.com/happyfish200/fastdfs-nginx-module/archive/master.zip

#unzip master


5.3 安装nginx依赖包

#yum -y install gcc gcc-c++ make automake autoconf libtool pcre* zlib openssl openssl-devel


5.3 编译安装nginx(把刚才几个模块编译添加进去)

# cd /usr/src

#tar -zxvf nginx-1.9.3.tar.gz

# cd nginx-1.9.3

# ./configure --prefix=/usr/local/nginx --user=www --group=www \

--with-http_stub_status_module \

--with-http_realip_module \

--with-pcre  \

--with-http_ssl_module \

--with-stream  \

--add-module=/usr/src/fastdfs/ngx_devel_kit-0.2.19/ \

--add-module=/usr/src/fastdfs/lua-nginx-module-0.10.2/ \

--add-module=/usr/src/fastdfs/fastdfs-nginx-module-master/src

#make

#make install

如果出现如下错误:

./configure: error: ngx_http_lua_module requires the Lua library.

解决:


下载lux5.1的包

# tar -zxvf lua-5.1.4.tar.gz

# cd lua-5.1.4

# make linux test

# make install


然后在重新:

./configure

make &&  make install


5.4 复制fastdfs-nginx-module 源码中的配置文件到/etc/fdfs 目录,并修改

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

#vim /etc/fdfs/mod_fastdfs.conf

修改以下内容:

base_path=/usr/local/fastDFS                          #存储数据库根目录

tracker_server=172.18.18.111:22122                #tracker服务器IP和端口

url_have_group_name = true                            #url中包含group名称

store_path0=/usr/local/fastDFS/storage

log_filename=/usr/local/fastDFS/logs/mod_fastdfs.log  #mod_fastdfs日记存放路径

group_count = 1


在文件末尾添加:

[group1]

group_name=group1

storage_server_port=23000

store_path_count=1

store_path0=/usr/local/fastDFS/storage

#手动创建mod_fastdfs.log日志文件

#touch  /usr/local/fastDFS/log/mod_fastdfs.lo


5.5 复制 fastdfs-mast的部分配置文件到/etc/fdfs 目录

#cd /usr/src/fastdfs-master/conf

#cp http.conf mime.types /etc/fdfs/


5.6 nginx配置、启动


#groupadd www

#useradd -g www www



#chown  -R www:www /usr/local/fastDFS/


#vim /usr/local/nginx/conf/nginx.conf

user  www;

worker_processes  auto;


server {

        listen       80;

        server_name  localhost;

        location / {

            root   html;

            index  index.php index.html index.htm;

        

        location /group1/M00 {

        ngx_fastdfs_module;

        alias /usr/local/fastDFS/storage/data;

        set $image_root "/usr/local/fastDFS/storage/data";

     

        if ($uri ~ "/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/(.*)") {

            set $image_dir "$image_root/$3/$4/";

            set $image_name "$5";

            set $file "$image_dir$image_name";

        }

        if ($image_name ~ "([a-zA-Z0-9_\-]+)_([0-9]+x[0-9]+|water)?(q[0-9]{1,2})?.([a-zA-Z0-9]+)") {

            set $a  "$1";

            set $b  "$2";

            set $c  "$3";

            set $d  "$4";

            set $e  "$5";

            set $f  "$6";

            set $file "$file";

        }

       

        }

}

说明: 

 A、/etc/fdfs/storage.conf 中的配置 http.server_port=8888 ,默认端口是8888,我改成 80,如果大家没有修改这个默认端口,那么nginx配置监听的端口也要改成8888。

 B、Storage 对应有多个 group 的情况下,访问路径带 group 名,如/group1/M00/00/00/xxx, 对应的 Nginx 配置为:

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

         ngx_fastdfs_module;

}



#/usr/local/nginx/sbin/nginx  -t

ngx_http_fastdfs_set pid=6715

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful


#/usr/local/nginx/sbin/nginx


6、用http的方式测试刚才上传的图片

http://172.18.18.111/group1/M00/00/12/rBISb1pDSbWAeUGaAD7jL_Zyu6I957_big.jpg

测试如下图所示:

Centos 7.X部署分布式文件系统:FastDFS+Nginx

到这里有点难为情了,上面这张是笔者自己的照片,在电脑上随手拿了一张图片就上传了,唯一一张图片,当然,读者朋友们觉得很帅的话也可以收藏起来,哈哈!!


然后,我们来测试一下图片能不能裁剪(前提条件是你要配置了4.4的操作步骤),修改下面红色的字体为裁剪的大小,然后在浏览器中访问:

http://172.18.18.111/group1/M00/00/12/rBISb1pDSbWAeUGaAD7jL_Zyu6I957_400x400.jpg

Centos 7.X部署分布式文件系统:FastDFS+Nginx

通过上图可以看到,我这里可以把上传的图片进行裁剪,图片确实裁剪小了,是OK的。


7、fastDFS一些简单操作命令

#重启storage服务:

# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart


#重启tracker服务:

# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart


#关闭storage服务:

# killall fdfs_storaged


#关闭tracker服务:

# killall fdfs_trackered


#查看集群状态:

#/usr/bin/fdfs_monitor   /etc/fdfs/storage.conf    


#上传操作:

#fdfs_test  /etc/fdfs/client.conf  upload  文件具体url


#删除操作:

#fdfs_delete_file  /etc/fdfs/client.conf  上传后的路径

比如:

#fdfs_delete_file  /etc/fdfs/client.conf group1/M00/00/00/ZciEZlepkl6Abj28AAAPOSSdASU225_big.gif)


8、Java API 客户端配置

1.前往GitHub下载Java_client代码。https://github.com/fzmeng/fastdfs.client

2.在你的项目src/java/resources 下加入文件 fastdfs_client.conf

注意修改tracker服务器Ip地址:

connect_timeout = 2

network_timeout = 30

charset = ISO8859-1

http.tracker_http_port = 80

http.anti_steal_token = no

tracker_server=172.18.18.111:22122

default_group_name=group1


当然,还有php及其它客户端连接到fastdfs,我就不挨个介绍了,感兴趣的朋友可以自行百度或留言讨论,最后要感谢张秋方大师笔者才能才能顺利完成此篇文稿。


参考文章:

https://blog.51cto.com/xinzong/1834466

https://github.com/qieangel2013/nginxLuaGmFastdfs

推荐阅读:
  1. centos7部署EFK7
  2. Centos7怎么搭建GlusterFS分布式文件系统群集

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

fastdfs 分布式文件系统 7.x

上一篇:Azure(Office 365):添加和验证Domain

下一篇:华为Dorado V6重新树立高端存储架构新标杆

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》