百度:FastDFS是一个用c语言编写的开源分布式文件系统,对文件进行管理,功能包括:文件存储,文件同步,文件访问(上传,下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站,视频网站等等。
个人理解:一个可以管理文件很多操作的东西,考虑负载均衡,冗余备份等机制。
2、FastDFS架构
FastDFS服务端有两个角色:
跟踪器(tracker):主要做调度工作,在访问上起负载均衡的作用,通过Tracker server在文件上传时可以根据一些策略找到Storage server提供文件上传服务。
存储结点(storage):存储文件,完成文件管理的所有功能:存储,同步和提供存取接口,客户端上传的文件最终存储在Storage服务器上。
3、Tracker集群和Storage集群
Tracker集群:FastDFS集群中的Tracker server可以有多台,Tracker server之间是相互平等关系同时提供服务,Tracker server不存在单点故障。客户端请求Tracker server采用轮询方式,如果请求的Tracker无法提供服务则换另一个Tracker。
Storage集群:Storage集群采用了分组存储方式,Storage集群由一个或多个组构成,集群存储总容量为集群中所有组的存储容量之和。一个组由一台或多台存储服务器组成,组内Storage server之间是平等关系,不同组的Storage server之间不会相互通信,同组内的Storage server之间会相互连接进行文件同步,从而保证同组内每个Storage上的文件完全一致,所以一个组的存储容量是组内存储服务器容量最小的那个。
4、文件上传、下载流程
(注:Storage会定时向Tracker server报告自己的状态)
文件上传:
1、client询问tracker上传文件到Storage
2、tracker返回一台可用的Storage
3、client直接与Storage通信,上传文件后Storage返回文件ID
文件下载:
1、client询问tracker可以下载文件的Storage,参数为文件ID
2、tracker返回一台可用Storage
3、client与Storage直接通信,完成文件下载
注:本文中的所有IP均需要修改为自己的IP
yum -y install gcc-c++
yum -y install libevent
wget https://codeload.github.com/happyfish100/libfastcommon/tar.gz/V1.0.7 -O libfastcommon-1.0.7.tar.gz
cd /usr/local/libfastcommon
将V1.0.7压缩文件提取出来
cd libfastcommon-1.0.7
./make.sh
./make.sh install
cp /usr/lib64/libfastcommon.so /usr/lib/
在/usr/local/下新建fastdfs文件夹
tar -zxvf fastdfs-5.05.tar.gz
cd fastdfs-5.05
./make.sh
./make.sh install
cp client.conf.sample client.conf
cp storage.conf.sample storage.conf
cp tracker.conf.sample tracker.conf
mkdir /home/260198/fastdfs
需要修改的信息
base_path=/home/260198/fastdfs #设置tracker数据文件和日志文件存储位置
需要注意的信息
# is this config file disabled
# false for enabled
# true for disabled
disabled=false #启用配置文件
# the tracker server port
port=22122 #tracker默认端口号,可修改,一般使用默认即可
# HTTP port on this tracker server
http.server_port=8080 #设置http端口号,默认为8080
ln -s /usr/bin/fdfs_trackerd /usr/local/bin
ln -s /usr/bin/restart /usr/local/bin
ln -s /usr/bin/stop /usr/local/bin
service fdfs_trackerd start
netstat -unltp|grep fdfs
service fdfs_trackerd start
mkdir /home/260198/fastdfs_storage /*存放storage服务器的文件*/
mkdir /home/260198/fastdfs_storage_data/ /*存放上传文件*/
需要修改的信息
base_path=/home/260198/fastdfs_storage #存放storage数据与日志文件
store_path0=/home/260198/fast_storage_data #存放上传实际文件的路径
tracker_server=192.168.96.23:22122 #设置tracker服务器的IP地址和端口号 单机情况下设置ip地址为自己主机IP
需要了解的信息
# the storage server port
port=23000 #设置端口号,同一组的端口号必须一直,默认为23000
# path(disk or mount point) count, default value is 1
store_path_count=1 #存储路径个数
# the port of the web server on this storage server
http.server_port=8888 #设置http端口号
ln -s /usr/bin/fdfs_storaged /usr/local/bin
service fdfs_storaged start
netstat -unltp|grep fdfs
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
service fdfs_storaged start
修改内容
base_path=/home/260198/fastdfs #存放日志等文件
tracker_server=192.168.96.23:22122 #配置tracker服务器 单机情况下将IP地址设置为主机IP
http.tracker_server_port=8080 #必须与tracker的设置相对应
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /home/260198/文档/ahaha.txt
上传之后会返回一个文件的标示即文件ID:group1/M00/00/00/rByj41sHv0-AcQ-xAAAAB7eOXhE394.txt
在/home/260198/fastdfs_storage_data/data/00/00/目录下可以找到上传的文件
/usr/bin/fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/rByj41sHv0-AcQ-xAAAAB7eOXhE394.txt
下载之后的文件一般在根目录下可以找到
sudo yum -y install nginx
1、修改user 为自己的用户名
2、error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log main; #可改为自定义路径
3、加入以下代码
server {
listen 8080;
location /group/M00/ {
alias /home/260198/fast_storage_data/data/;
}
}
注意:在使用root时可能会找不到文件,建议使用alias
cn.bestwu
fastdfs-client-java
1.27
org.testng
testng
RELEASE
commons-io
commons-io
2.6
connect_timeout = 2
network_timeout = 30
charset = UTF-8
# Tracker配置文件中配置的http端口
http.tracker_http_port = 8080
http.anti_steal_token = no
http.secret_key = FastDFS1234567890
# Tracker服务器地址
tracker_server = 192.168.96.23:22122
#tracker_server =192.168.105.134:22122
#location /file/ {
# alias /usr/share/file/;
# add_header Content-disposition "shy";
#}
/*上传文件*/
public String upload(String local_url){
String index="";
try{
/*获取连接*/
ClientGlobal.init("fdfs_client.conf");
trackerClient=new TrackerClient();
trackerServer=trackerClient.getConnection();
storageClient=new StorageClient1(trackerServer,storageServer);
/*可设置上传文件属性。log即后缀*/
index=storageClient.upload_file1(local_url,"log",null);
}catch (IOException e){
e.printStackTrace();
}catch (MyException e){
e.printStackTrace();
}finally {
/*返回上传文件的ID*/
return index;
}
}
/*文件下载*/
public void download(String fileid){
try {
/*获取连接*/
ClientGlobal.init("fdfs_client.conf");
trackerClient=new TrackerClient();
trackerServer=trackerClient.getConnection();
storageClient = new StorageClient1(trackerServer, storageServer);
// 根据文件ID下载文件
byte[] by = storageClient.download_file1(fileid);
// 将数据写入aaa.txt文件中
IOUtils.write(by, new FileOutputStream("/home/260198/aaa.txt"));
} catch (IOException e) {
e.printStackTrace();
} catch (MyException e) {
e.printStackTrace();
}
}
1、/var/run/yum.id 已被锁定,PID为###的另一个程序正在进行
解决:rm -f /var/run/yum.pid
2、进程被占用
解决:kill -9 ### (强制杀死###进程)
3、tracker服务启动不了
firewall-cmd --state #查看防火墙状态
systemctl stop firewalld.service #关闭防火墙
4、启动Storage,无法连接到tracker服务器
1、检查storage连接tracker的ip地址是否正确
2、检查是否启动tracker
3、检查进程是否被占用
注:每次修改配置文件后需要重启服务
5、使用浏览器找不到文件【404 错误】
可能原因
1、修改user为本机用户
2、修改添加server为
server {
listen 8080;
location ~/M00 {
alias /home/260198/fastdfs_storage_data/data;
}
}
6、使用浏览器禁止访问文件【403错误】
将文件设置为仅读模式 例:chmod 444 timg.jpg
c compiler cc is not found