明智的放弃胜过盲目的执着,
去吹吹风吧,能清醒的话,
感冒也没关系。
——林语堂
FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
好像Fast’DFS 是淘宝的大佬 余庆写的
FastDFS由跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client)构成。
Tracker server 追踪服务器
追踪服务器负责接收客户端的请求,选择合适的组合storage server ,tracker server 与 storage server之间也会用心跳机制来检测对方是否活着。
Tracker需要管理的信息也都放在内存中,并且里面所有的Tracker都是对等的(每个节点地位相等),很容易扩展
客户端访问集群的时候会随机分配一个Tracker来和客户端交互。
Storage server 储存服务器
实际存储数据,分成若干个组(group),实际traker就是管理的storage中的组,而组内机器中则存储数据,group可以隔离不同应用的数据,不同的应用的数据放在不同group里面,
优点:
海量的存储:主从型分布式存储,存储空间方便拓展,
fastDFS对文件内容做hash处理,避免出现重复文件
然后fastDFS结合Nginx集成, 提供网站效率
客户端Client
主要是上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。每个客户端服务器都需要安装Nginx
文件上传:Client会先向Tracker询问存储地址,Tracker查询到存储地址后返回给Client,Client拿着地址直接和对应的Storage通讯,将文件上传至改Storage。
文件下载:同样,Client会向Tracker询问地址,并带上要查询的文件名和组名,Tracker查询后会将地址返回给Client,Client拿着地址和指定Storage通讯并下载文件。
linux安装fastdfs 比较麻烦 建议直接用docker 这种比较流行的技术
安装fastDFS需要分别安装fastdfs-nginx-module,fastdfs,nginx,libfastcommon
百度网盘fastdfs所需安装包
提取码:eybb
注:安装过程中的ip地址皆为本机的ip地址
yum install -y gcc gcc-c++
yum -y install libevent
创建目录 并上传安装fastdfs 的压缩包
mkdir -p /fileservice/fast
cd /fileservice/fast
进入fast目录:cd /fileservice/fast
解压文件: tar -zxvf libfastcommon-1.0.35.tar.gz
进入libfast文件目录:cd libfastcommon-1.0.35
执行编译:./make.sh
安装:./make.sh install
5.2,安装相关依赖库
yum install perl
yum install pcre
yum install pcre-devel
yum install zlib
yum install zlib-devel
yum install openssl
yum install openssl-devel
5.3,安装fastdfs
进入fast目录:cd /fileservice/fast
解压文件:tar -zxvf fastdfs-5.11.tar.gz
进入解压后的目录:cd fastdfs-5.11
执行编译:./make.sh
安装:./make.sh install
5.5,准备配置文件 默认在/etc/fdfs/下面
cd /etc/fdfs/
cp client.conf.sample client.conf
cp storage.conf.sample storage.conf
cp storage_ids.conf.sample storage_ids.conf
cp tracker.conf.sample tracker.conf
然后修改tracker的存放数据和日志的目录。
mkdir -p /home/leige/fastdfs/tracker
6.1,切换目录到: /etc/fdfs/ 目录下;
cd /etc/fdfs/
6.2,修改tracker.conf
vim tracker.conf
base_path=/home/yuqing/fastdfs 改为: base_path=/home/leige/fastdfs/tracker
6.3,启动tracker,运行如下命令:
service fdfs_trackerd start
注意:在/home/leige/fastdfs/tracker 目录下生成两个目录, 一个是数据,一个是日志;
由于上面已经安装过FastDFS,这里只需要配置storage就好了;
7.1,切换目录到: /etc/fdfs/ 目录下;
cd /etc/fdfs/
7.2,修改storage.conf ;
vim storage.conf
group_name=group1 #配置组名
base_path=/home/yuqing/fastdfs 改为: base_path=/home/leige/fastdfs/storage
#store存放文件的位置(store_path)
store_path0=/home/yuqing/fastdfs 改为: store_path0=/home/leige/fastdfs/storage
#如果有多个挂载磁盘则定义多个store_path,如下
#store_path1=…
#store_path2=…
#配置tracker服务器:IP
tracker_server=117.48.203.125:22122
#如果有多个则配置多个tracker
#tracker_server=117.48.203.126:22122
7.3,创建/home/leige/fastdfs/storage 目录
mkdir -p /home/leige/fastdfs/storage
7.4,启动storage, 运行命令如下:
service fdfs_storaged start
启动完成后进入 /home/leige/fastdfs/storage/data 目录下,显示目录如下:
8.1,切换目录到 /etc/fdfs/ 目录下;
cd /etc/fdfs/cd
8.2,修改client.conf ;
vim client.conf
修改基本路径和tracker_server如下:
注意:若tracker有多个,可以配置多个,如下:
#tracker_server=…
#tracker_server=…
8.3,拷贝一张图片baobao.png到Centos服务器上的 /root/目录下;
8.4,进行测试
运行如下(运行测试程序,读取/etc/fdfs/client.conf 文件,上传/root/目录下的baobao.png文件)
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/baobao.png
9.1 在tracker上安装 nginx
在每个tracker上安装nginx,的主要目的是做负载均衡及实现高可用。如果只有一台tracker可以不配置nginx。
一个tracker对应多个storage,通过nginx对storage负载均衡;
9.2 在storage 上安装nginx
(1)上传fastdfs-nginx-module-1.20.tar.gz 到Centos服务器上;
(2)解压fastdfs-nginx-module-1.20.tar.gz 并移动到 /usr/local目录下;
tar -zxvf fastdfs-nginx-module-1.20.tar.gz
解压
(3)切换目录到: fastdfs-nginx-module-1.20/src 目录下
cd fastdfs-nginx-module-1.20/src
(4)修改config文件,将文件中的所有 /usr/local/ 路径改为 /usr/
修改之后
(5)将fastdfs-nginx-module/src下的mod_fastdfs.conf拷贝至/etc/fdfs/下
cp mod_fastdfs.conf /etc/fdfs/
(6)并修改 /etc/fdfs/mod_fastdfs.conf 的内容;
vim /etc/fdfs/mod_fastdfs.conf
修改 tracker_server=117.48.203.125:22122
#tracker_server=192.168.172.20:22122 #(多个tracker配置多行)
url_have_group_name=true #url中包含group名称
store_path0=/home/fdfs_storage #指定文件存储路径(上面配置的store路径)
9.3 进入之前解压的fastdfs目录下,把http.conf、mime.conf移动至/etc/fdfs
cp http.conf mime.types /etc/fdfs/
10.1,上传 nginx-1.15.2.tar.gz 到Centos服务器上;
10.2,解压 nginx-1.15.2.tar.gz
cd /fileservice/fast/
tar -zxvf nginx-1.15.2.tar.gz
10.3,进入nginx解压的目录下
cd nginx-1.15.2/
10.4,加入模块命令配置
./configure --prefix=/opt/nginx --sbin-path=/usr/bin/nginx --add-module=/fileservice/fast/fastdfs-nginx-module-1.20/src
10.5,编译并安装
make && make install
10.6,修改nginx配置
cd /opt/nginx/conf
vim nginx.conf
10.7,启动nginx
cd /usr/bin/
./nginx #启动
现在可以测试访问 在浏览器中输入
ip地址/8.4种返回的文件地址
http://117.48.203.125/group1/M00/00/00/wKgAA135BdKAEOs1ADW668UZmDM218.png
docker run -d --restart=always --privileged=true --net=host --name=fastdfs -e IP=你的ip地址 -e WEB_PORT=80 -v ${HOME}/fastdfs:/var/local/fdfs registry.cn-beijing.aliyuncs.com/tianzuo/fastdfs
其中-v H O M E / f a s t d f s : / v a r / l o c a l / f d f s 是 指 : 将 {HOME}/fastdfs:/var/local/fdfs是指:将 HOME/fastdfs:/var/local/fdfs是指:将{HOME}/fastdfs这个目录挂载到容器里的/var/local/fdfs这个目录里。所以上传的文件将被持久化到${HOME}/fastdfs/storage/data里,IP 后面是自己的服务器公网ip或者虚拟机ip,-e WEB_PORT=80 指定nginx端口
//进入容器
docker exec -it fastdfs /bin/bash
//创建文件
echo "Hello FastDFS!">index.html
//测试文件上传
fdfs_test /etc/fdfs/client.conf upload index.html