FastDFS 安装使用
FastDFS简介FastDFS是一个开源的 轻量级 分布式文件系统。它解决了大数据量存储和负载均衡问题。特别适合以 中小[4k-500M]文件为载体的在线服务。FastDFS特性分组存储,灵活简洁、对等结构,不存在单点文件不分块存储,上传的文件和OS文件系统中的文件一一对应文件ID由FastDFS生成,作为文件访问凭证,FastDFS不需要传统的name server和流行的web server
FastDFS 安装使用
FastDFS简介
FastDFS是一个开源的 轻量级 分布式文件系统。它解决了大数据量存储和负载均衡问题。特别适合以 中小[4k-500M]文件为载体的在线服务。
FastDFS特性
- 分组存储,灵活简洁、对等结构,不存在单点
- 文件不分块存储,上传的文件和OS文件系统中的文件一一对应
- 文件ID由FastDFS生成,作为文件访问凭证,FastDFS不需要传统的name server
- 和流行的web server无缝衔接,FastDFS已提供apache和nginx扩展模块
- 中、小文件均可以很好支持,
- 支持海量小文件存储 支持多块磁盘,
- 支持单盘数据恢复 支持相同内容的文件只保存一份,节约磁盘空间
- 支持在线扩容 支持主从文件
- 存储服务器上可以保存文件属性(meta-data)V2.0网络通信采用libevent,支持大并发访问,整 体性能更好
- 下载文件支持多线程方式,支持断点续传
FastDFS的构成
- FastDFS由客户端(Client)、 跟踪服务器(Tracker Server)和存储服务器(Storage Server)构成。 客户端(client)
客户端(client)
作为业务请求的发起方,通过专有接口,使用TCP/IP协议与跟踪器服务器或存储节 点进行数据交互。
跟踪器(tracker)
Trackerserver作用是负载均衡和调度,通过Tracker server在文件上传时可以根据一些策略找到
Storage server提供文件上传服务。可以将tracker称为追踪服务器或调度服务器。 跟踪器在访问上起负载均衡的作用。可以随时增加或下线而不会影响线上服务。
存储节点(storage)
Storageserver作用是文件存储,客户端上传的文件最终存储在Storage服务器上,Storage server没有
实现自己的文件系统而是利用操作系统的文件系统来管理文件。可以将storage称为存储服务器。 存储节点中的服务器均可以随时增加或下线而不会影响线上服务。
环境安装
安装编译环境
yum install git gcc gcc-c++ make automake vim wget libevent -y
安装libfastcommon 基础库
mkdir /root/fastdfs
cd /root/fastdfs
# 下载
git clone https://github.com/happyfish100/libfastcommon.git --depth 1
#编译
cd libfastcommon/
./make.sh && ./make.sh install
- 结果
gcc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O3 -c -fPIC -o fc_memory.lo fc_memory.c
gcc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O3 -c -fPIC -o shared_buffer.lo shared_buffer.c
gcc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O3 -c -fPIC -o thread_pool.lo thread_pool.c
gcc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O3 -o libfastcommon.so -shared hash.lo chain.lo shared_func.lo ini_file_reader.lo logger.lo sockopt.lo base64.lo sched_thread.lo http_func.lo md5.lo pthread_func.lo local_ip_func.lo avl_tree.lo ioevent.lo ioevent_loop.lo fast_task_queue.lo fast_timer.lo process_ctrl.lo fast_mblock.lo connection_pool.lo fast_mpool.lo fast_allocator.lo fast_buffer.lo multi_skiplist.lo flat_skiplist.lo system_info.lo fast_blocked_queue.lo id_generator.lo char_converter.lo char_convert_loader.lo common_blocked_queue.lo multi_socket_client.lo skiplist_set.lo uniq_skiplist.lo json_parser.lo buffered_file_writer.lo server_id_func.lo fc_queue.lo fc_memory.lo shared_buffer.lo thread_pool.lo -lm -ldl -lpthread
ar rcs libfastcommon.a hash.o chain.o shared_func.o ini_file_reader.o logger.o sockopt.o base64.o sched_thread.o http_func.o md5.o pthread_func.o local_ip_func.o avl_tree.o ioevent.o ioevent_loop.o fast_task_queue.o fast_timer.o process_ctrl.o fast_mblock.o connection_pool.o fast_mpool.o fast_allocator.o fast_buffer.o multi_skiplist.o flat_skiplist.o system_info.o fast_blocked_queue.o id_generator.o char_converter.o char_convert_loader.o common_blocked_queue.o multi_socket_client.o skiplist_set.o uniq_skiplist.o json_parser.o buffered_file_writer.o server_id_func.o fc_queue.o fc_memory.o shared_buffer.o thread_pool.o
mkdir -p /usr/lib64
mkdir -p /usr/lib
mkdir -p /usr/include/fastcommon
install -m 755 libfastcommon.so /usr/lib64
install -m 644 common_define.h hash.h chain.h logger.h base64.h shared_func.h pthread_func.h ini_file_reader.h _os_define.h sockopt.h sched_thread.h http_func.h md5.h local_ip_func.h avl_tree.h ioevent.h ioevent_loop.h fast_task_queue.h fast_timer.h process_ctrl.h fast_mblock.h connection_pool.h fast_mpool.h fast_allocator.h fast_buffer.h skiplist.h multi_skiplist.h flat_skiplist.h skiplist_common.h system_info.h fast_blocked_queue.h php7_ext_wrapper.h id_generator.h char_converter.h char_convert_loader.h common_blocked_queue.h multi_socket_client.h skiplist_set.h uniq_skiplist.h fc_list.h json_parser.h buffered_file_writer.h server_id_func.h fc_queue.h fc_memory.h shared_buffer.h thread_pool.h /usr/include/fastcommon
if [ ! -e /usr/lib/libfastcommon.so ]; then ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so; fi
安装FastDFS
cd /root/fastdfs
# 下载fastdfs安装包
wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
- 结果
正在保存至: “V5.11.tar.gz”
[ <=> ] 336,939 13.2KB/s 用时 18s
2020-07-23 18:08:17 (18.2 KB/s) - “V5.11.tar.gz” 已保存 [336939]
[root@localhost fastdfs]# ls
libfastcommon V5.11.tar.gz
#解压
tar -zxvf V5.11.tar.gz
cd fastdfs-5.11
编译安装
./make.sh && ./make.sh install
-
查看安装是否成功 默认会在 /etc/fdfs 下生成配置文件
[root@localhost fastdfs-5.11]# cd /etc/fdfs/ [root@localhost fdfs]# ll 总用量 24 -rw-r--r--. 1 root root 1461 7月 23 18:11 client.conf.sample -rw-r--r--. 1 root root 7927 7月 23 18:11 storage.conf.sample -rw-r--r--. 1 root root 105 7月 23 18:11 storage_ids.conf.sample -rw-r--r--. 1 root root 7389 7月 23 18:11 tracker.conf.sample
配置文件更改
-
复制配置文件
# 配置文件准备 cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf cp /root/fastdfs/fastdfs-5.11/conf/http.conf /etc/fdfs cp /root/fastdfs/fastdfs-5.11/conf/mime.types /etc/fdfs
-
tracker配置文件修改
vim /etc/fdfs/tracker.conf
#需要修改的内容如下
port=22122
base_path=/home/fastdfs
-
storage配置文件修改
vim /etc/fdfs/storage.conf #需要修改的内容如下 port=23000 base_path=/home/fastdfs # 数据和日志文件存储根目录 store_path0=/home/fastdfs # 第一个存储目录 tracker_server=192.168.211.136:22122 # http访问文件的端口(默认8888,看情况修改,和nginx中保持一致) http.server_port=8888
-
创建存储路径(tracker、storage)配置文件中配置的路路径
mkdir /home/fastdfs -p
启动测试
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
查看所有运行的端口
netstat -ntlp
- 结果 查看是否有端口监听
[root@localhost fdfs]# netstat -ntlp | grep fdfs
tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN 29199/fdfs_storaged
tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 29076/fdfs_trackerd
-
测试上传
- 首先修改client配置
vim /etc/fdfs/client.conf #需要修改的内容如下 base_path=/home/fastdfs #tracker服务器IP和端口 tracker_server=192.168.18.213:22122
-
测试上传
#保存后测试,返回ID表示成功 如:group1/M00/00/00/xxx.png /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/fastdfs/timg.jpg
-
结果返回
group1/M00/00/00/wKgS1V8ZcTOANXpUAAEI46Ym6Xs928.jpg
如果返回指定的地址即上传成功!
nginx 模块安装
截至目前为止,fastdfs安装成功!我们如果想把文件作为网络资源来访问的话。可以借助nginx来完成。fastdfs提供fastdfs-nginx-module模块,来实现此功能
-
安装fastdfs-nginx-module
cd /root/fastdfs wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.20.tar.gz 解压 tar -xvf V1.20.tar.gz
-
配置
cd fastdfs-nginx-module-1.20/src
vim config
修改第5 行 和 15 行 修改成
ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
- 复制 mod_fastdfs.conf /etc/fdfs/
cp mod_fastdfs.conf /etc/fdfs/
- 修改配置
vim /etc/fdfs/mod_fastdfs.conf
#需要修改的内容如下
tracker_server=192.168.18.213:22122
url_have_group_name=true
store_path0=/home/fastdfs
mkdir -p /var/temp/nginx/client
Nginx 安装
资源下载
cd /root/fastdfs
wget http://nginx.org/download/nginx-1.15.6.tar.gz
tar -zxvf nginx-1.15.6.tar.gz
cd nginx-1.15.6/
- 添加 fastdfs-nginx-module 模块
yum -y install pcre-devel openssl openssl-devel
# 添加fastdfs-nginx-module模块
./configure --add-module=/root/fastdfs/fastdfs-nginx-module-1.20/src
- 编译安装
编译安装
make && make install
- 查看模块是否安装上
/usr/local/nginx/sbin/nginx -V
[root@localhost nginx-1.15.6]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.15.6
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
configure arguments: --add-module=/root/fastdfs/fastdfs-nginx-module-1.20/src
修改配置
#添加如下配置
server {
listen 8888;
server_name localhost;
location ~/group[0-9]/ {
ngx_fastdfs_module;
}
}
启动nginx /usr/local/nginx/sbin/nginx
-
测试
-
关闭防火墙
systemctl stop fairewalld
-
下载
http://ip:8888/group1/M00/00/00/xxx.png
> http://192.168.18.213:888/group1/M00/00/00/wKgS1V8ZcTOANXpUAAEI46Ym6Xs928.jpg
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)