FastDFS搭建

来源:互联网 发布:学生空间七天网络app 编辑:程序博客网 时间:2024/06/08 05:06

前沿

由于FastDFS是纯C语言实现,只支持Linux、FreeBSD等UNIX系统,所以我们直接下载tar.gz的压缩包,同时FastDFS 5.0.5同以前版本相比将公共的一些函数等单独封装成了libfastcommon包,所以在安装FastDFS之前我们还必须安装libfastcommon,直接在csdn上下载这个两个包就好啦。。。

第一步:安装libfastcommon

将libfastcommon上传到/usr/local目录下,直接解压:unzip libfastcommon-master.zip,当然如果之前没有下载unzip解压工具,可以使用yum下载命令下载unzip再进行解压:yum -y install unzip zip
这里写图片描述
然后解压libfastcommon:unzip libfastcommon-master.zip ,cd进入到libfastcommon-master下
这里写图片描述
解压完成后就可以进行编译安装了,分别执行./make.sh和./make.sh install,由于是新安装的系统有可能会提示找不到gcc命令,所以我们先要安装gcc编译器:yum -y install gcc-c++
这里写图片描述
这样,我们就可以执行编译安装的命令啦。执行./make.sh和./make.sh install
这里写图片描述
如图所知,默认安装到了/usr/lib下,但是FastDFS主程序设置的lib目录是/usr/local/lib,所以此处需要重新设置软链接:
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
此时我们cd到usr/local/lib下看看
这里写图片描述
验证软链接创建成功

第二步:安装FastDFS

将fastdfs-5.05.tar.gz上传到/usr/local目录下,直接解压:tar -zxvf fastdfs-5.05.tar.gz,
解压完成后进入目录fastdfs-5.05,依次执行./make.sh和./make.sh install
这里写图片描述
由图可见,安装到了/etc/fdfs下,cd进入这个目录中
这里写图片描述
可见有3个.sample(示例配置文件),我们再分别拷贝出3个后面用的正式的配置文件:
cp client.conf.sample client.conf
cp storage.conf.sample storage.conf
cp tracker.conf.sample tracker.conf
再次查看/etc/fdfs目录
这里写图片描述

第三步:配置Tracker

在配置Tracker之前,首先需要创建Tracker服务器的文件路径,即用于存储Tracker的数据文件和日志文件等,我这里选择在/opt目录下创建一个fastdfs_tracker目录用于存放Tracker服务器的相关文件:mkdir /opt/fastdfs_tracker
接下来就要重新编辑上一步准备好的/etc/fdfs目录下的tracker.conf配置文件,打开文件后依次做以下修改:
这里写图片描述
这里写图片描述
配置完成后就可以启动Tracker服务器了,但首先依然要为启动脚本创建软引用,因为fdfs_trackerd等命令在/usr/local/bin中并没有,而是在/usr/bin路径下:
ln -s /usr/bin/fdfs_trackerd /usr/local/bin
ln -s /usr/bin/stop.sh /usr/local/bin
ln -s /usr/bin/restart.sh /usr/local/bin
最后通过命令启动Tracker服务器:service fdfs_trackerd start
这里写图片描述
如果启动命令执行成功,那么同时在刚才创建的tracker文件目录/opt/fastdfs_tracker中就可以看到启动后新生成的data和logs目录,tracker服务的端口也应当被正常监听,最后再通过netstat命令查看一下端口监听情况:
netstat -unltp|grep fdfs
这里写图片描述
可以看到tracker服务运行的22122端口正常被监听,将tracker设置为开机启动,打开/etc/rc.d/rc.local并在其中加入以下配置:service fdfs_trackerd start
这里写图片描述

第四步:配置Storage

同理,步骤基本与配置Tracker一致,首先是创建Storage服务器的文件目录,需要注意的是同Tracker相比我多建了一个目录,因为Storage还需要一个文件存储路径,用于存放接收的文件:
mkdir /opt/fastdfs_storage
mkdir /opt/fastdfs_storage_data

接下来修改/etc/fdfs目录下的storage.conf配置文件,打开文件后依次做以下修改:
1.disabled=false #启用配置文件(默认启用)
2.group_name=group1 #组名,根据实际情况修改
3.port=23000 #设置storage的端口号,默认是23000,同一个组的storage端口号必须一致
4.base_path=/opt/fastdfs_storage #设置storage数据文件和日志目录
5.store_path_count=1 #存储路径个数,需要和store_path个数匹配
6.store_path0=/opt/fastdfs_storage_data #实际文件存储路径
7.tracker_server=192.168.1.114:22122 #tracker 服务器的 IP地址和端口号,如果是单机搭建,IP不要写127.0.0.1,否则启动不成功。(如果是云服务器,就是私网IP)
8.http.server_port=8888 #设置 http 端口号

配置完成后同样要为Storage服务器的启动脚本设置软引用:
ln -s /usr/bin/fdfs_storaged /usr/local/bin
接下来就可以启动Storage服务了:
service fdfs_storaged start
(注意有可能storage 端口没启动成功,可能是云服务器的端口没打开,需要去云服务器的控制台的安全组里添加开放的端口)
这里写图片描述

cd到/opt/fastdfs_storage_data/data中,查看目录结构
这里写图片描述
如上图,没有任何问题,data下有256个1级目录,每级目录下又有256个2级子目录,总共65536个文件,新写的文件会以hash的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录中。

至此storage服务器就已经配置完成,确定了storage服务器启动成功后,还有一项工作就是看看storage服务器是否已经登记到 tracker服务器(也可以理解为tracker与storage是否整合成功),运行以下命令:/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

[root@iz2zefq26zde3w3vbtf00dz data]# /usr/bin/fdfs_monitor /etc/fdfs/storage.conf[2017-11-07 11:07:46] DEBUG - base_path=/opt/fastdfs_storage, 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: 0server_count=1, server_index=0tracker server is 192.168.1.114:22122group count: 1Group 1:group name = group1disk total space = 40187 MBdisk free space = 33453 MBtrunk free space = 0 MBstorage server count = 1active server count = 1storage server port = 23000storage HTTP port = 8888store path count = 1subdir count per path = 256current write server index = 0current trunk file id = 0    Storage 1:        id = 192.168.1.114        ip_addr = 192.168.1.114 (iz2zefq26zde3w3vbtf00dz)  ACTIVE        http domain =         version = 5.05        join time = 2017-11-07 10:51:55        up time = 2017-11-07 10:51:55        total storage = 40187 MB        free storage = 33453 MB        upload priority = 10        store_path_count = 1        subdir_count_per_path = 256        storage_port = 23000        storage_http_port = 8888        current_write_path = 0        source storage id =         if_trunk_server = 0        connection.alloc_count = 256        connection.current_count = 0        connection.max_count = 0        total_upload_count = 0        success_upload_count = 0        total_append_count = 0        success_append_count = 0        total_modify_count = 0        success_modify_count = 0        total_truncate_count = 0        success_truncate_count = 0        total_set_meta_count = 0        success_set_meta_count = 0        total_delete_count = 0        success_delete_count = 0        total_download_count = 0        success_download_count = 0        total_get_meta_count = 0        success_get_meta_count = 0        total_create_link_count = 0        success_create_link_count = 0        total_delete_link_count = 0        success_delete_link_count = 0        total_upload_bytes = 0        success_upload_bytes = 0        total_append_bytes = 0        success_append_bytes = 0        total_modify_bytes = 0        success_modify_bytes = 0        stotal_download_bytes = 0        success_download_bytes = 0        total_sync_in_bytes = 0        success_sync_in_bytes = 0        total_sync_out_bytes = 0        success_sync_out_bytes = 0        total_file_open_count = 0        success_file_open_count = 0        total_file_read_count = 0        success_file_read_count = 0        total_file_write_count = 0        success_file_write_count = 0        last_heart_beat_time = 2017-11-07 11:07:44        last_source_update = 1970-01-01 08:00:00        last_sync_update = 1970-01-01 08:00:00        last_synced_timestamp = 1970-01-01 08:00:00 

如上所示,看到192.168.1.114 ACTIVE 字样即可说明storage服务器已经成功登记到了tracker服务器,同理别忘了添加开机启动,打开/etc/rc.d/rc.local并将如下配置追加到文件中:service fdfs_storage start
这里写图片描述

第五步:测试

测试时需要设置客户端的配置文件,编辑/etc/fdfs目录下的client.conf 文件,打开文件后依次做以下修改:

1.base_path=/opt/fastdfs_tracker #tracker服务器文件路径
2.tracker_server=47.93.35.179:22122 #tracker服务器IP地址和端口号
3.http.tracker_server_port=6666 # tracker 服务器的 http 端口号,必须和tracker的设置对应起来

配置完成后就可以模拟文件上传了,先给/opt目录下放一张图片
然后通过执行客户端上传命令尝试上传:
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /opt/lufei.jpg
这里写图片描述

运行后可以发现给我们返回了一个路径,这就表示我们的文件已经上传成功了,当文件存储到某个子目录后,即认为该文件存储成功,接下来会为该文件生成一个文件名,文件名由group、存储目录、两级子目录、fileid、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成。

cd到/opt/fastdfs_storage_data/data/00/00下
这里写图片描述
可以在00目录下看到上传成功的图片。

因为FastDFS目前已不支持http协议,4.0.5版本开始移除了自带的HTTP支持(因为之前自带的HTTP服务较为简单,无法提供负载均衡等高性能服务),所以余大提供了nginx上使用FastDFS的模块fastdfs-nginx-module,下载地址如下:https://github.com/happyfish100/fastdfs-nginx-module,这样做最大的好处就是提供了HTTP服务并且解决了group中storage服务器的同步延迟问题,接下来就具体记录一下fastdfs-nginx-module的安装配置过程。

第六步:配置安装fastdfs-nginx-module

在安装nginx之前需要先安装一些模块依赖的lib库

yum -y install pcre pcre-devel  yum -y install zlib zlib-devel  yum -y install openssl openssl-devel

第七步:配置安装storage nginx

首先是为storage服务器安装nginx,在csdn上下载,将nginx和fastdfs-nginx-module的安装包上传至云服务器。
这里写图片描述

分别解压:

tar -zxvf nginx-1.8.1.tar.gzunzip fastdfs-nginx-module-master.zip

解压成功后就可以编译安装nginx了,进入nginx目录并输入以下命令进行配置:
./configure –prefix=/usr/local/nginx –add-module=/usr/local/fastdfs-nginx-module-master/src
配置成功后会看到如下信息:
这里写图片描述

紧接着就可以进行编译安装了,依次执行以下命令:

makemake install

安装完成后,我们在我们指定的目录/usr/local/nginx中就可以看到nginx的安装目录了:
这里写图片描述

接下来要修改一下nginx的配置文件,进入conf目录并打开nginx.conf文件加入以下配置:

server {        listen       9999;        server_name  localhost;        location  ~/group1/M00 {            root   /opt/fastdfs_storage_data/data;            ngx_fastdfs_module;        }        #charset koi8-r;        #access_log  logs/host.access.log  main;        location / {            root   html;            index  index.html index.htm;        }

然后进入FastDFS的安装目录/usr/local/fastdfs-5.05目录下的conf目录,将http.conf和mime.types拷贝到/etc/fdfs目录下:

[root@iz2zefq26zde3w3vbtf00dz conf]# cd /usr/local/fastdfs-5.05[root@iz2zefq26zde3w3vbtf00dz fastdfs-5.05]# cd conf[root@iz2zefq26zde3w3vbtf00dz conf]# lltotal 84-rw-rw-r-- 1 root root 23981 Nov 22  2014 anti-steal.jpg-rw-rw-r-- 1 root root  1461 Nov 22  2014 client.conf-rw-rw-r-- 1 root root   858 Nov 22  2014 http.conf-rw-rw-r-- 1 root root 31172 Nov 22  2014 mime.types-rw-rw-r-- 1 root root  7829 Nov 22  2014 storage.conf-rw-rw-r-- 1 root root   105 Nov 22  2014 storage_ids.conf-rw-rw-r-- 1 root root  7102 Nov 22  2014 tracker.conf[root@iz2zefq26zde3w3vbtf00dz conf]# cp -r /usr/local/fastdfs-5.05/conf/http.conf /etc/fdfs/[root@iz2zefq26zde3w3vbtf00dz conf]# cp -r /usr/local/fastdfs-5.05/conf/mime.types /etc/fdfs/[root@iz2zefq26zde3w3vbtf00dz conf]# 

接下来还需要把fastdfs-nginx-module安装目录中src目录下的mod_fastdfs.conf也拷贝到/etc/fdfs目录下:

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

接下来就需要编辑刚拷贝的这个mod_fastdfs.conf文件了,打开mod_fastdfs.conf并按顺序依次编译以下内容:

1.base_path=/opt/fastdfs_storage #保存日志目录
2.tracker_server=192.168.1.114:22122 #tracker服务器的IP地址以及端口号
3.storage_server_port=23000 #storage服务器的端口号
4.url_have_group_name = true #文件 url 中是否有 group 名
5.store_path0=/opt/fastdfs_storage_data # 存储路径
6.group_count = 3 #设置组的个数,事实上这次只使用了group1

设置了group_count = 3,接下来就需要在文件尾部追加这3个group setting:

[group1]group_name=group1storage_server_port=23000store_path_count=1store_path0=/opt/fastdfs_storage_data[group2]group_name=group2storage_server_port=23000store_path_count=1store_path0=/opt/fastdfs_storage_data[group3]group_name=group3storage_server_port=23000store_path_count=1store_path0=/opt/fastdfs_storage_data

接下来还需要建立 M00 至存储目录的符号连接:

ln  -s  /opt/fastdfs_storage_data/data  /opt/fastdfs_storage_data/data/M00

最后启动nginx:

/usr/local/nginx/sbin/nginx

显示如下信息说明nginx已启动成功:
这里写图片描述

通过浏览器也可以看到nginx的主页:
http://47.93.35.179:9999/ (这里访问公网IP,不是私网IP哦)
这里写图片描述

第八步:配置安装tracker nginx

同理,再装一个nginx,目录命名为nginx2,安装路径依旧放在/usr/local下,由于和之前一样,此处就不再做详细解释:

mkdir nginx2cd nginx-1.8.0/./configure --prefix=/usr/local/nginx2 --add-module=/usr/local/fastdfs-nginx-module-master/srcmakemake install

接下来依然是修改nginx2的配置文件,进入conf目录并打开nginx.conf文件加入以下配置,storage的nginx无需修改listen端口,即默认的80端口,并将upstream指向tracker的nginx地址,修改如下:
upstream fdfs_group1 {
server 127.0.0.1:9999;
}

location /group1/M00 {
proxy_pass http://fdfs_group1;
}

#gzip  on;        upstream fdfs_group1 {                server 127.0.0.1:9999;        }    server {        listen       80;        server_name  localhost;        location /group1/M00 {                proxy_pass http://fdfs_group1;        }        #charset koi8-r;

接下来启动nginx2:

/usr/local/nginx2/sbin/nginx

此时访问nginx2的主页,由于没有修改端口,直接访问ip地址即可:
这里写图片描述

最后一步就是需要修改/etc/fdfs目录下的client.conf文件,打开该文件并加入以下配置:

1.base_path=/opt/fastdfs_storage #日志存放路径
2.tracker_server=192.168.1.114:22122 #tracker 服务器 IP 地址和端口号
3.http.tracker_server_port=6666 # tracker 服务器的 http 端口号,必须和tracker的设置对应起来

至此关于fastdfs就已经全部配置完毕了,再一次进行测试看看是否能正常上传文件并通过http访问文件。

第九步:最终测试

/usr/bin/fdfs_upload_file  /etc/fdfs/client.conf  /opt/lufei.jpg

返回了:

group1/M00/00/00/wKgBcloBWHaAJp_DAABQSowgUBo974.jpg

打开浏览器输入ip地址+文件名看看是否能正常访问该图片:
这里写图片描述

至此,大功告成,当然最重要的是java工程能运用到了,下次博客的内容就是java工程与FastDFS结合使用,还需要学习的是FastDFS分布式啦。。。

原创粉丝点击