CentOS7搭建FastDFS V5.11分布式文件系统
1.绪论
最近要用到fastDFS,所以自己研究了一下,在搭建FastDFS的过程中遇到过很多的问题,为了能帮忙到以后搭建FastDFS的同学,少走弯路,与大家分享一下。FastDFS的作者淘宝资深架构余庆,这个优秀的轻量及的分布式文件系统的开源没多久,立马就火了。由于篇幅较大,本博文共四篇,第一篇主要介绍FastDFS,下载相关软件包,为搭建做好准备。第二篇会讲到在CentOS下搭建FastDFS的详细过程。第三篇,会讲到整合nginx详细内容。第四篇主要讲FastDFS在怎么用fastdfs-client-java连接,并结合实例。
2.应用场景
FastDFS是为互联网应用量身定做的一套分布式文件存储系统,非常适合用来存储用户图片、视频、文档等文件。对于互联网应用,和其他分布式文件系统相比,优势非常明显。其中有好几家是做网盘的公司。其中存储量最大的一家,集群中存储group数有400个,存储服务器超过800台,存储容量达到6PB,文件数超过1亿,Group持续增长中。
以下是使用FastDFS的用户列表:
UC (http://www.uc.cn/,存储容量超过10TB)
支付宝(http://www.alipay.com/)
京东商城(http://www.360buy.com/)
淘淘搜(http://www.taotaosou.com/)
飞信(http://feixin.1008.cn/)
赶集网(http://www.ganji.com/)
淘米网(http://www.61.com/)
迅雷(http://www.xunlei.com/)
蚂蜂窝(http://www.mafengwo.cn/)
丫丫网(http://www.iyaya.com/)
虹网(http://3g.ahong.com)
5173(http://www.5173.com/)
华夏原创网(http://www.yuanchuang.com/)
华师京城教育云平台(http://www.hsjdy.com.cn/)
视友网(http://www.cuctv.com/)
搜道网(http://www.sodao.com/)
58同城(http://www.58.com/)
商务联盟网(http://www.biz72.com/)
中青网(http://www.youth.cn/)
缤丽网 (http://www.binliy.com/)
飞视云视频(http://www.freeovp.com/)
梦芭莎(http://www.moonbasa.com/)
活动帮(http://www.eventsboom.com)
51CTO(http://www.51cto.com/)
搜房网(http://www.soufun.com/)
3.详细介绍
FastDFS是一个开源的分布式文件系统,她对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。
存储节点存储文件,完成文件管理的所有功能:存储、同步和提供存取接口,FastDFS同时对文件的meta data进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key value pair)方式表示,如:width=1024,其中的key为width,value为1024。文件meta data是文件属性列表,可以包含多个键值对。
FastDFS系统结构如下图所示:
跟踪器和存储节点都可以由一台多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。
为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷 的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起 到了冗余备份和负载均衡的作用。
在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。
当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。
FastDFS中的文件标识分为两个部分:卷名和文件名,者缺一不可。
3.1 上传文件交互过程:
- client询问tracker上传到的storage,不需要附加参数;
- tracker返回一台可用的storage;
- client直接和storage通讯完成文件上传
3.2 下载文件交互过程:
- client询问tracker下载文件的storage,参数为文件标识(卷名和文件名);
- tracker返回一台可用的storage;
- client直接和storage通讯完成文件下载。
4.FastDFS搭建工具下载
作者的GitHub地址:https://github.com/happyfish100
这次搭建的所有工具,都可以在上面下载到。我搭建的是目前最新版本Version 5.11 2017-05-26。作者还有一个5.10的发行版本,你如果没有下载最近的,到时候整合nginx的时候可能会遇到:
local/fastdfs-nginx-module/src/common.c:1245: 错误:‘FDFSHTTPParams’没有名为‘support_multi_range’的成员
make[1]: *** [objs/addon/src/ngx_http_fastdfs_module.o] 错误 1
make[1]: Leaving directory `/usr/local/nginx-1.10.1'
遇到这个错误的原因是,在fastdfs-nginx-module的HISTORY中你可以到:
整合的时候,fastdfs-nginx-module中的support_multi_range在Version 5.10中找不到。
Version 5.11对应的fastdfs-nginx-module的Version 1.20
Version 5.10对应的fastdfs-nginx-module的Version 1.19
之所以在安装前写了这么一段话,是因为这个很重要,版本不对应会给接下来的安装带来各种问题。
把源码下载下来3个zip包,再去下个nginx:
下面开始安装
1.1 安装libfastcommon
安装成功后解压libfastcommon-master.zip
unzip libfastcommon-master.zip
[root@sybmfw12-lnsy libfastcommon-1.0.36]# ll drwxr-xr-x. 2 root root 4096 4月 5 2017 doc -rw-r--r--. 1 root root 8005 4月 5 2017 HISTORY -rw-r--r--. 1 root root 566 4月 5 2017 INSTALL -rw-r--r--. 1 root root 1606 4月 5 2017 libfastcommon.spec -rwxr-xr-x. 1 root root 3099 4月 5 2017 make.sh drwxr-xr-x. 2 root root 4096 4月 5 2017 php-fastcommon -rw-r--r--. 1 root root 2763 4月 5 2017 README drwxr-xr-x. 3 root root 4096 11月 8 12:30 src
当我们./make.sh的时候可能会提示,gcc命令没有找到。
用yum安装gcc:
yum -y install gcc-c++
这个时候分别执行./make.sh和./make.sh install,正常情况是可以成功的。
libfastcommon默认会被安装到/usr/lib64/libfastcommon.so但是FastDFS的主程序却在/usr/local/lib目录下
这个时候我们就要建立一个软链接了,实际上也相当于windows上的快捷方式。
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
1.2安装FastDFS
解压FastDFS安装包
unzip fastdfs-5.11.zip
解压后看到:
[root@sybmfw12-lnsy fastdfs-5.11]# ll 总用量 136 drwxr-xr-x. 3 root root 4096 11月 8 12:32 client drwxr-xr-x. 2 root root 4096 11月 8 12:32 common drwxr-xr-x. 2 root root 4096 6月 3 21:09 conf -rw-r--r--. 1 root root 35067 6月 3 21:09 COPYING-3_0.txt -rw-r--r--. 1 root root 3171 6月 3 21:09 fastdfs.spec -rw-r--r--. 1 root root 33100 6月 3 21:09 HISTORY drwxr-xr-x. 2 root root 4096 6月 3 21:09 init.d -rw-r--r--. 1 root root 7755 6月 3 21:09 INSTALL -rwxr-xr-x. 1 root root 5548 6月 3 21:09 make.sh drwxr-xr-x. 2 root root 4096 6月 3 21:09 php_client -rw-r--r--. 1 root root 2380 6月 3 21:09 README.md -rwxr-xr-x. 1 root root 1768 6月 3 21:09 restart.sh -rwxr-xr-x. 1 root root 1680 6月 3 21:09 stop.sh drwxr-xr-x. 4 root root 4096 11月 8 12:32 storage drwxr-xr-x. 2 root root 4096 6月 3 21:09 test drwxr-xr-x. 2 root root 4096 11月 8 12:32 track
进到刚解压的目录:
cd fastdfs-5.11 ./make.sh ./make.sh install
如果没有报错那么就成功了。安装log中会提示FastDFS安装到了/etc/fdfs目录下。
成功后查看安装目录:
[root@sybmfw12-lnsy fastdfs-5.11]# ll /etc/fdfs/ -rw-r--r--. 1 root root 1463 11月 8 12:52 client.conf.sample-rw-r--r--. 1 root root 7938 11月 8 14:55 storage.conf.sample-rw-r--r--. 1 root root 7397 11月 8 12:36 tracker.conf.sample
我们需要把这三个示例文件复制一份,去掉.sample
cp client.conf.sample client.conf cp storage.conf.sample storage.conf cp tracker.conf.sample tracker.conf
FastDFS安装结束。
1.3安装tracker
1.3.1创建tracker工作目录
这个目录可以自定义,用来保存tracker的data和log
根据个人习惯,我创建了下面的目录:
mkdir /opt/fastdfs_tracker
1.3.2 配置tracker
vim /etc/fdfs/tracker.conf 打开后重点关注下面4个配置: 1.disabled=false 2.port=22122 #默认端口号 3.base_path=/opt/fastdfs_tracker #我刚刚创建的目录 4.http.server_port=8080 #默认端口是8080 5.bind_addr= 0.0.0.0 监听地址
修改完的文件为:
disabled=falsebind_addr= 0.0.0.0port=22122connect_timeout=30network_timeout=60base_path=/opt/fastdfs_trackermax_connections=512accept_threads=1work_threads=4min_buff_size = 8KBmax_buff_size = 128KBstore_lookup=2store_group=group2store_server=0store_path=0download_server=0reserved_storage_space = 10%log_level=inforun_by_group=run_by_user=allow_hosts=*sync_log_buff_interval = 10check_active_interval = 120thread_stack_size = 64KBstorage_ip_changed_auto_adjust = truestorage_sync_file_max_delay = 86400storage_sync_file_max_time = 300use_trunk_file = false slot_min_size = 256slot_max_size = 16MBtrunk_file_size = 64MBtrunk_create_file_advance = falsetrunk_create_file_time_base = 02:00trunk_create_file_interval = 86400trunk_create_file_space_threshold = 20Gtrunk_init_check_occupying = falsetrunk_init_reload_from_binlog = falsetrunk_compress_binlog_min_interval = 0use_storage_id = falsestorage_ids_filename = storage_ids.confid_type_in_filename = ipstore_slave_file_use_link = falserotate_error_log = falseerror_log_rotate_time=00:00rotate_error_log_size = 0log_file_keep_days = 0use_connection_pool = falseconnection_pool_max_idle_time = 3600http.server_port=8080http.check_alive_interval=30http.check_alive_type=tcphttp.check_alive_uri=/status.html
1.3.3启动tracker
保存配置后启动tracker,命令如下:
service fdfs_trackerd start
成功后应该可以看到:
[root@sybmfw12-lnsy fastdfs-5.11]#service fdfs_trackerd start Starting fdfs_trackerd (via systemctl): [ OK ]
进行刚刚创建的tracker目录,发现目录中多了data和log两个目录
[root@sybmfw12-lnsy fastdfs-5.11]# ll /opt/fastdfs_tracker/ drwxr-xr-x. 2 root root 4096 11月 8 15:01 data drwxr-xr-x. 2 root root 4096 11月 8 12:37 logs
最后我们需要给tracker加入开机启动
echo "service fdfs_trackerd start" |tee -a /etc/rc.d/rc.local
查看一下tracker的端口监听情况
[root@sybmfw12-lnsy fastdfs-5.11]# netstat -unltp|grep fdfs tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 70382/fdfs_trackerd
端口22122成功监听。
1.4 安装storage
storage的安装与tracker很类似。
1.4.1 为storage配置工作目录
与tracker不同的是,由于storage还需要一个目录用来存储数据,所以我另外多建了两个目录fastdfs_storage_data,fastdfs_storage
下面是我的目录结构:
[root@sybmfw12-lnsy fastdfs-5.11]# ll /opt/ drwxr-xr-x. 4 root root 4096 11月 8 12:48 fastdfs_storage drwxr-xr-x. 3 root root 4096 11月 8 15:02 fastdfs_storage_data drwxr-xr-x. 4 root root 4096 11月 8 12:37 fastdfs_tracker
1.4.2 修改storage配置文件
修改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=172.20.132.57:22122 #我CentOS7的ip地址 8.http.server_port=8888 #设置 http 端口号
修改完的文件为:
disabled=false group_name=group1 bind_addr= 0.0.0.0 client_bind=true port=23000 connect_timeout=30 network_timeout=60 heart_beat_interval=30 stat_report_interval=60 base_path=/opt/fastdfs_storage max_connections=256 buff_size = 256KB accept_threads=1 work_threads=4 disk_rw_separated = true disk_reader_threads = 1 disk_writer_threads = 1 sync_wait_msec=50 sync_interval=0 sync_start_time=00:00 sync_end_time=23:59 write_mark_file_freq=500 store_path_count=1 store_path0=/opt/fastdfs_storage_data subdir_count_per_path=256 tracker_server=172.20.132.57:22122 log_level=info run_by_group= run_by_user= allow_hosts=* file_distribute_path_mode=0 file_distribute_rotate_count=100 fsync_after_written_bytes=0 sync_log_buff_interval=10 sync_binlog_buff_interval=10 sync_stat_file_interval=300 thread_stack_size=512KB upload_priority=10 if_alias_prefix= check_file_duplicate=0 file_signature_method=hash key_namespace=FastDFS keep_alive=0 use_access_log = false rotate_access_log = false access_log_rotate_time=00:00 rotate_error_log = false error_log_rotate_time=00:00 rotate_access_log_size = 0 rotate_error_log_size = 0 log_file_keep_days = 0 file_sync_skip_invalid_record=false use_connection_pool = false connection_pool_max_idle_time = 3600 http.domain_name= http.server_port=8888
修改保存后创建软引用
ln -s /usr/bin/fdfs_storaged /usr/local/bin
1.4.3 启动storage
service fdfs_storaged start Starting fdfs_storaged (via systemctl): [ OK ]
同样的,设置开机启动:
修改rc.local
echo "service fdfs_storaged start" |tee -a /etc/rc.d/rc.local
查看一下服务是否启动
[root@sybmfw12-lnsy fastdfs-5.11]#netstat -unltp | grep fdfs tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 2231/fdfs_trackerd tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN 2323/fdfs_storaged
服务已正常启动。
1.4.4 校验整合
到这里,fastdfs的东西都已安装完成,最后我们还要确定一下,storage是否注册到了tracker中去。
查看命令:
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
成功后可以看到:
ip_addr = 172.20.132.57 (localhost.localdomain) ACTIVE
[root@sybmfw12-lnsy fastdfs-5.11]# /usr/bin/fdfs_monitor /etc/fdfs/storage.conf [2017-11-08 18:05:55] 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 172.20.132.57:22122group count: 1Group 1: group name = group1 disk total space = 34140 MB disk free space = 29282 MB trunk free space = 0 MB storage server count = 1 active server count = 1 storage server port = 23000 storage HTTP port = 8888 store path count = 1 subdir count per path = 256 current write server index = 0 current trunk file id = 0Storage 1:id = 172.20.132.57ip_addr = 172.20.132.57 (sybmfw12-lnsy) ACTIVEhttp domain = version = 5.11join time = 2017-11-08 12:48:05up time = 2017-11-08 15:02:04total storage = 34140 MBfree storage = 29282 MBupload priority = 10store_path_count = 1subdir_count_per_path = 256storage_port = 23000storage_http_port = 8888current_write_path = 0source storage id = if_trunk_server = 0connection.alloc_count = 256connection.current_count = 0connection.max_count = 1total_upload_count = 2success_upload_count = 2total_append_count = 0success_append_count = 0total_modify_count = 0success_modify_count = 0total_truncate_count = 0success_truncate_count = 0total_set_meta_count = 0success_set_meta_count = 0total_delete_count = 0success_delete_count = 0total_download_count = 0success_download_count = 0total_get_meta_count = 0success_get_meta_count = 0total_create_link_count = 0success_create_link_count = 0total_delete_link_count = 0success_delete_link_count = 0total_upload_bytes = 179368success_upload_bytes = 179368total_append_bytes = 0success_append_bytes = 0total_modify_bytes = 0success_modify_bytes = 0stotal_download_bytes = 0success_download_bytes = 0total_sync_in_bytes = 0success_sync_in_bytes = 0total_sync_out_bytes = 0success_sync_out_bytes = 0total_file_open_count = 2success_file_open_count = 2total_file_read_count = 0success_file_read_count = 0total_file_write_count = 2success_file_write_count = 2last_heart_beat_time = 2017-11-08 18:05:37last_source_update = 2017-11-08 15:24:21last_sync_update = 1970-01-01 08:00:00last_synced_timestamp = 1970-01-01 08:00:00
1.测试
前面两篇博文已对FastDFS的安装和配置,做了比较详细的讲解。FastDFS的基础模块都搭好了,现在开始测试下载。
1.1 配置客户端
同样的,需要修改客户端的配置文件:
/etc/fdfs/client.conf base_path=/opt/fastdfs_tracker #tracker服务器文件路径 tracker_server=172.20.132.57:22122 #tracker服务器IP地址和端口号 http.tracker_server_port=8080 # tracker 服务器的 http端口号,必须和tracker的设置对应起来
修改完成的文件为:
connect_timeout=30 network_timeout=60 base_path=/opt/fastdfs_tracker tracker_server=172.20.132.57:22122 log_level=info use_connection_pool = false connection_pool_max_idle_time = 3600 load_fdfs_parameters_from_tracker=false use_storage_id = false storage_ids_filename = storage_ids.conf http.tracker_server_port=8080
View Code
1.2 模拟上传
确定图片位置后,我们输入上传图片命令:
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/1.jpg #这后面放的是图片的位置
成功后会返回图片的路径:
[root@sybmfw12-lnsy fastdfs-5.11]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/2.png group1/M00/00/00/rBSEOVoC2QCAJVdoAAFeVJMpopw987.png
组名:group1
磁盘:M00
目录:00/00
文件名称:rBSEOVoC2QCAJVdoAAFeVJMpopw987.png
我们上传的图片会被上传到我们创建的storage_data目录下,让我们去看看:
[root@sybmfw12-lnsy ~]# cd /opt/fastdfs_storage_data/data/ [root@sybmfw12-lnsy data]# ls 00 04 08 0C 10 14 18 1C 20 24 28 2C 30 34 38 3C 40 44 48 4C 50 54 58 5C 60 64 68 6C 70 74 78 7C 80 84 88 8C 90 94 98 9C A0 A4 A8 AC B0 B4 B8 BC C0 C4 C8 CC D0 D4 D8 DC E0 E4 E8 EC F0 F4 F8 FC 01 05 09 0D 11 15 19 1D 21 25 29 2D 31 35 39 3D 41 45 49 4D 51 55 59 5D 61 65 69 6D 71 75 79 7D 81 85 89 8D 91 95 99 9D A1 A5 A9 AD B1 B5 B9 BD C1 C5 C9 CD D1 D5 D9 DD E1 E5 E9 ED F1 F5 F9 FD 02 06 0A 0E 12 16 1A 1E 22 26 2A 2E 32 36 3A 3E 42 46 4A 4E 52 56 5A 5E 62 66 6A 6E 72 76 7A 7E 82 86 8A 8E 92 96 9A 9E A2 A6 AA AE B2 B6 BA BE C2 C6 CA CE D2 D6 DA DE E2 E6 EA EE F2 F6 FA FE 03 07 0B 0F 13 17 1B 1F 23 27 2B 2F 33 37 3B 3F 43 47 4B 4F 53 57 5B 5F 63 67 6B 6F 73 77 7B 7F 83 87 8B 8F 93 97 9B 9F A3 A7 AB AF B3 B7 BB BF C3 C7 CB CF D3 D7 DB DF E3 E7 EB EF F3 F7 FB FF
[root@sybmfw12-lnsy data]# ls 00/
00 04 08 0C 10 14 18 1C 20 24 28 2C 30 34 38 3C 40 44 48 4C 50 54 58 5C 60 64 68 6C 70 74 78 7C 80 84 88 8C 90 94 98 9C A0 A4 A8 AC B0 B4 B8 BC C0 C4 C8 CC D0 D4 D8 DC E0 E4 E8 EC F0 F4 F8 FC
01 05 09 0D 11 15 19 1D 21 25 29 2D 31 35 39 3D 41 45 49 4D 51 55 59 5D 61 65 69 6D 71 75 79 7D 81 85 89 8D 91 95 99 9D A1 A5 A9 AD B1 B5 B9 BD C1 C5 C9 CD D1 D5 D9 DD E1 E5 E9 ED F1 F5 F9 FD
02 06 0A 0E 12 16 1A 1E 22 26 2A 2E 32 36 3A 3E 42 46 4A 4E 52 56 5A 5E 62 66 6A 6E 72 76 7A 7E 82 86 8A 8E 92 96 9A 9E A2 A6 AA AE B2 B6 BA BE C2 C6 CA CE D2 D6 DA DE E2 E6 EA EE F2 F6 FA FE
03 07 0B 0F 13 17 1B 1F 23 27 2B 2F 33 37 3B 3F 43 47 4B 4F 53 57 5B 5F 63 67 6B 6F 73 77 7B 7F 83 87 8B 8F 93 97 9B 9F A3 A7 AB AF B3 B7 BB BF C3 C7 CB CF D3 D7 DB DF E3 E7 EB EF F3 F7 FB FF
[root@sybmfw12-lnsy data]# ls 00/00/
rBSEOVoC2QCAJVdoAAFeVJMpopw987.png
果然通过刚刚返回的路径,我们成功找到了图片。
我们仔细看一下,实际文件存储路径下有创建好的多级目录。data下有256个1级目录,每级目录下又有256个2级子目录,总共65536个文件,新写的文件会以hash的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录中。
如果要访问刚上传的图片,我们得需要结合nginx来实现
1.4 HTTP请求不能访问文件的原因
我们在使用FastDFS部署一个分布式文件系统的时候,通过FastDFS的客户端API来进行文件的上传、下载、删除等操作。同时通过FastDFS的HTTP服务器来提供HTTP服务。但是FastDFS的HTTP服务较为简单,无法提供负载均衡等高性能的服务,所以FastDFS的开发者——淘宝的架构师余庆同学,为我们提供了Nginx上使用的FastDFS模块(也可以叫FastDFS的Nginx模块)。
FastDFS通过Tracker服务器,将文件放在Storage服务器存储,但是同组之间的服务器需要复制文件,有延迟的问题.假设Tracker服务器将文件上传到了172.20.132.57,文件ID已经返回客户端,这时,后台会将这个文件复制到172.20.132.57,如果复制没有完成,客户端就用这个ID在172.20.132.57取文件,肯定会出现错误。这个fastdfs-nginx-module可以重定向连接到源服务器取文件,避免客户端由于复制延迟的问题,出现错误。
正是这样,FastDFS需要结合nginx,所以取消原来对HTTP的直接支持。
2. FastDFS的nginx模块安装
在安装nginx之前要安装nginx所需的依赖lib:
yum -y install pcre pcre-devel yum -y install zlib zlib-devel yum -y install openssl openssl-devel
2.2 安装nginx并添加fastdfs-nginx-module
解压nginx,和fastdfs-nginx-module:
tar -zxvf nginx-1.10.3.tar.gz unzip fastdfs-nginx-module-master.zip
解压后进入nginx目录编译安装nginx,并添加fastdfs-nginx-module:
./configure --prefix=/usr/local/nginx --add-module=/root/fastdfs-nginx-module-master/src #解压后fastdfs-nginx-module所在的位置
如果配置不报错的话,就开始编译:
make make install
如果报错的话,很可能是版本的原因,在我的第二篇博文中提供了我测试成功不报错的版本下载。
nginx的默认目录是/usr/local/nginx,安装成功后查看:
[root@sybmfw12-lnsy ~]# ll /usr/local/nginx/ drwx------. 2 nobody root 4096 11月 8 13:10 client_body_temp drwxr-xr-x. 2 root root 4096 11月 8 15:22 conf drwx------. 2 nobody root 4096 11月 8 13:10 fastcgi_temp drwxr-xr-x. 2 root root 4096 11月 8 13:00 html drwxr-xr-x. 2 root root 4096 11月 8 13:10 logs drwx------. 2 nobody root 4096 11月 8 13:10 proxy_temp drwxr-xr-x. 2 root root 4096 11月 8 13:00 sbin drwx------. 2 nobody root 4096 11月 8 13:10 scgi_temp drwx------. 2 nobody root 4096 11月 8 13:10 uwsgi_temp
2.3 配置storage nginx
修改nginx.conf:
修改监听端口 listen 9999, 新增location
server {listen 9991;server_name localhost;location / {root html;index index.html index.htm;}location ~/group1/M00 {root /opt/fastdfs_storage/data;ngx_fastdfs_module;}location = /50x.html {root html;} }
View Code
然后进入FastDFS安装时的解压过的目录,将http.conf和mime.types拷贝到/etc/fdfs目录下:
[root@sybmfw12-lnsy conf]# cp http.conf mime.types /etc/fdfs/
[root@sybmfw12-lnsy conf]# cp mime.types /etc/fdfs/
另外还需要把fastdfs-nginx-module安装目录中src目录下的mod_fastdfs.conf也拷贝到/etc/fdfs目录下:
[root@sybmfw12-lnsy src]# cp mod_fastdfs.conf /etc/fdfs/
对刚刚拷贝的mod_fastdfs.conf文件进行修改:
/etc/fdfs/mod_fastdfs.conf base_path=/opt/fastdfs_storage #保存日志目录tracker_server=172.20.132.57:22122 #tracker服务器的IP地址以及端口号storage_server_port=23000 #storage服务器的端口号url_have_group_name = true #文件 url 中是否有 group 名store_path0=/opt/fastdfs_storage_data #存储路径group_count = 1 #设置组的个数
在文件的最后,设置group
[group1] group_name=group1 storage_server_port=23000 store_path_count=1 store_path0=/opt/fastdfs_storage_data
创建M00至storage存储目录的符号连接:
ln -s /opt/fastdfs_storage_data/data/ /opt/fastdfs_storage_data/data/M00
启动nginx:
/usr/local/nginx/sbin/nginx ngx_http_fastdfs_set pid=8142
[root@sybmfw12-lnsy src]# curl localhost:9991 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;} </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p><p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p> </body> </html>
恭喜你,storage的nginx已配置成功。接下来,我们还要继续配置tracker的nginx。
2.4 配置tracker nginx
在nginx.cfg里在添加一个虚拟主机
upstream fdfs_group1 {server 127.0.0.1:9991;}server {listen 80;server_name localhost;location /group1/M00 {proxy_pass http://fdfs_group1;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}
重启nginx
/usr/local/nginx/sbin/nginx -s reload ngx_http_fastdfs_set pid=8141
[root@sybmfw12-lnsy ~]# curl localhost <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;} </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p><p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p> </body> </html>
View Code
2.6 HTTP测试
可以成功访问。
现在我们再去访问一下,原来我们上传过的文件:
172.20.132.57/group1/M00/00/00/rBSEOVoCsSWAZG_WAAFeVJMpopw658.png
这个时候已经能成功访问。感谢你能坚持到现在,FastDFS已部署完成。
贴上完整nginx配置
http {include mime.types;default_type application/octet-stream;#log_format main '$remote_addr - $remote_user [$time_local] "$request" '# '$status $body_bytes_sent "$http_referer" '# '"$http_user_agent" "$http_x_forwarded_for"';#access_log logs/access.log main;sendfile on;#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout 65;#gzip on;server {listen 9991;server_name localhost;location / {root html;index index.html index.htm;}location ~/group1/M00 {root /opt/data/fastdfs_storage/data;ngx_fastdfs_module;}location = /50x.html {root html;} } upstream fdfs_group1 {server 127.0.0.1:9991; }server {listen 80;server_name localhost;location /group1/M00 {proxy_pass http://fdfs_group1;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}}
CentOS7搭建FastDFS V5.11分布式文件系统相关推荐
- (转载)CentOS7搭建FastDFS V5.11分布式文件系统及Java整合详细过程
CentOS7搭建FastDFS V5.11分布式文件系统及Java整合详细过程 绪论 应用场景 详细介绍 上传文件交互过程 下载文件交互过程 FastDFS搭建工具下载 下载工具 安装 libfas ...
- FastDFS图片服务器(分布式文件系统)学习。
参考:https://blog.csdn.net/hiqingtian/article/details/79413471 https://blog.csdn.net/sinat_40399893/ar ...
- centos7 搭建FastDFS服务器
简述:FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适合以文件为载体的在线服务 ...
- Centos7 搭建FastDFS文件管理系统及简单的迁移方法
1.简介 FastDFS 是一个开源的高性能分布式文件系统(DFS). 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡.主要解决了海量数据存储问题,特别适合以中小文件(建议范围: ...
- FastDFS - 快速的分布式文件系统
FastDFS 什么是FastDFS fast distributed file system(快速的分布式文件系统) FastDFS是用c语言编写的一款开源的分布式文件系统.它对文件进行管理,功能包 ...
- 分布式文件系统----FastDFS
FastDFS 1.分布式文件系统 1.1 FastDFS简介 1.2 FastDFS整体架构 1.3 FastDFS的存储策略 1.4 FastDFS的上传过程 1.5 FastDFS的文件同步 1 ...
- 高可用高性能分布式文件系统FastDFS实践Java程序
在前篇 高可用高性能分布式文件系统FastDFS进阶keepalived+nginx对多tracker进行高可用热备 中已介绍搭建高可用的分布式文件系统架构. 那怎么在程序中调用,其实网上有很多栗子, ...
- FastDFS分布式文件系统_Linux
文章目录 一.分布式文件系统概述 1.单机时代 2.独立文件服务器 3.分布式文件系统 4.FastDFS 5.FastDFS核心概念 6.上传机制 7.下载机制 二.分布式文件系统实践 1.环境搭建 ...
- FastDFS - Linux下搭建FastDFS 文件服务器与Nginx配置(部署和运维)
朋友做了个视频在线App,线上运维我来帮他折腾.此篇记录部署步骤,方便下次直接查看使用.部分内容来源于网络,如侵联删. 本篇文章只叙述FastDFS的部署与运维,简介请点击FastDFS - 快速的分 ...
最新文章
- 2021年中国工业互联网安全大赛核能行业赛道writeup之日志分析
- 自学编程的朋友,我想给你们这 5 个建议
- 追求极致:Repvgg重参数化对YOLO工业落地的实验和思考
- 计算机系统的主存主要是由()构成的。【最全!最详细分析!】
- OSPF动态路由协议(了解ospf,RIP协议,外部网关协议内部网关协议,ospf工作过程,选举过程,ospf邻居关系7个状态)
- linux日志服务器配置在哪个文件,Linux中日志的基本配置(syslog)
- docker 中不能用vim编辑文件
- 拆轮子系列--RxJava理解(三)--observeOn
- 2017-2018-1 20155301 《信息安全系统设计基础》第十三周学习总结
- uni-app开发规范
- Mongodb的安装使用
- 关于【bootstrap modal 模态框弹出瞬间消失的问题】
- kafka启动后闪退
- 【Java基础】图片压缩
- 2017年编程语言排名
- matlab 超像素合并,基于图论的超像素分割及其合并算法
- delphi控件切图界面闪烁_ui界面切图方法
- 多重阴影的设置、鼠标激活时、相邻选择器的简介、display
- 自然语言处理基于java实现(1) 之 中文分词
- 如何用最简单的方法创建一个超好用的微信公众号页面模板?