DHCP配置:
如果想自己尝试安装fastDSF也可以按照文档一步一步安装。
tracker和storage使用相同的安装包,fastDFS的下载地址在:https://github.com/happyfish100/FastDFS
建议在linux上运行,本教程使用CentOS7作为安装环境。
详细内容请看 https://cwl-java.blog.csdn.net/article/details/103871043
本小节介绍Tracker的配置文件内容。 fastDFS的配置文件目录 : /etc/fdfs 主要的配置文件: /etc/fdfs/tracker.conf (tracker配置文件 ); storage.conf(storage配置文件)
tracker.conf配置内容如下: 端口:port=22122 存储策略:store_lookup= 取值范围:0(轮询向storage存储文件)、1(指定具体的group)、2负载均衡,选择空闲的storage存储 指定具体的group:store_group= 如果store_lookup设置为1则这里必须指定一个具体的group。 tracker 基础目录:base_path=/home/fastdfs,tracker在运行时会向此目录存储storage的管理数据。
本小节介绍storage的配置文件内容。 storage.conf配置 内容如下: 组名:group_name=group1 端口:port=23000 向tracker心跳间隔(秒):heart_beat_interval=30 storage基础目录:base_path=/home/fastdfs 磁盘存储目录,可定义多个store_path: store_path0=/home/fastdfs/fdfs_storage 此目录下存储上传的文件,在/home/fastdfs/fdfs_storage/data下 store_path1= … 上报tracker的地址:tracker_server=192.168.101.64:22122 如果有多个tracker则配置多个tracker,比如: tracker_server=192.168.101.64:22122 tracker_server=192.168.101.65:22122
fastDFS启动/停止脚本目录:
fdfs_trackerd:tracker脚本,通过此脚本对 tracker进行启动和停止 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
fdfs_storaged:storage脚本,通过此脚本对 storage进行启动和停止 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
这里我们使用javaApi测试文件的上传,java版本的fastdfs-client地址在:https://github.com/happyfish100/fastdfs-client-java,参考此工程编写测试用例。
1)创建maven工程 pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<groupId>com.xuecheng</groupId>
<artifactId>test‐fastDSF</artifactId>
<version>1.0‐SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐web</artifactId>
</dependency>
<!‐‐ https://mvnrepository.com/artifact/net.oschina.zcx7878/fastdfs‐client‐java ‐‐>
<dependency>
<groupId>net.oschina.zcx7878</groupId>
<artifactId>fastdfs‐client‐java</artifactId>
<version>1.27.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons‐io</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
fastdfs.connect_timeout_in_seconds = 5
#http连接超时时间
fastdfs.network_timeout_in_seconds = 30
#tracker与storage网络通信超时时间
fastdfs.charset = UTF‐8
#字符编码
fastdfs.tracker_servers = 192.168.101.64:22122
#tracker服务器地址,多个地址中间用英文逗号分隔
//上传文件
@Test
public void testUpload() {
try {
ClientGlobal.initByProperties("config/fastdfs‐client.properties");
System.out.println("network_timeout=" + ClientGlobal.g_network_timeout + "ms");
System.out.println("charset=" + ClientGlobal.g_charset);
//创建客户端
TrackerClient tc = new TrackerClient();
//连接tracker
Server TrackerServer ts = tc.getConnection();
if (ts == null) {
System.out.println("getConnection return null");
return;
}
//获取一个storage server
StorageServer ss = tc.getStoreStorage(ts);
if (ss == null) {
System.out.println("getStoreStorage return null");
}
//创建一个storage存储客户端
StorageClient1 sc1 = new StorageClient1(ts, ss);
NameValuePair[] meta_list = null;
//new NameValuePair[0];
String item = "C:\\Users\\admin\\Desktop\\1.png";
String fileid;
fileid = sc1.upload_file1(item, "png", meta_list);
System.out.println("Upload local file " + item + " ok, fileid=" + fileid);
} catch (Exception ex) {
ex.printStackTrace();
}
}
//查询文件
@Test
public void testQueryFile() throws IOException, MyException {
ClientGlobal.initByProperties("config/fastdfs‐client.properties");
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getConnection();
StorageServer storageServer = null;
StorageClient storageClient = new StorageClient(trackerServer, storageServer);
FileInfo fileInfo = storageClient.query_file_info("group1", "M00/00/01/wKhlQFrKBSOAW5AWAALcAg10vf4862.png");
System.out.println(fileInfo);
}
// 文件下载
@Test
public void testDownloadFile() throws IOException, MyException {
ClientGlobal.initByProperties("config/fastdfs‐client.properties");
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getConnection();
StorageServer storageServer = null;
StorageClient1 storageClient1 = new StorageClient1(trackerServer, storageServer);
byte[] result = storageClient1.download_file1("group1/M00/00/01/wKhlQFrKBSOAW5AWAALcAg10vf4862.png");
File file = new File("d:/1.png");
FileOutputStream fileOutputStream = new FileOutputStream(file);
fileOutputStream.write(result);
fileOutputStream.close();
}
在 storage server 上安装 nginx 的目的是对外通过 http 访问 storage server 上的文 件。使用 nginx 的模块 FastDFS-nginx-module
的作用是通过 http 方式访问 storage 中 的文件,当 storage 本机没有要找的文件时向源 storage 主机代理请求文件。
参考:https://cwl-java.blog.csdn.net/article/details/103871043 安装完成启动storage上的nginx
/usr/local/nginx/sbin/nginx ‐c /usr/local/nginx/conf/nginx‐fdfs.conf
图片服务虚拟主机的作用是负载均衡,将图片请求转发到storage server上。
1、通过图片服务虚拟主机请求图片流程图
3、在nginx图片代理服务上配置图片服务器虚拟主机
#图片服务
upstream img_server_pool{
#server
192.168.101.64:80
weight=10;
server
192.168.101.65:80
weight=10;
}
#图片服务
server {
listen 80;
server_name img.xuecheng.com;
#个人中心
location /group1 {
proxy_pass http://img_server_pool; }location /group2 {
proxy_pass http://img_server_pool;
}
}
1、启动tracker:/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
2、启动storage:/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
3、启动storage上的nginx:/usr/local/nginx/sbin/nginx ‐c /usr/local/nginx/conf/nginx‐fdfs.conf
4、启动图片虚拟主机 nginx
通过本次课程的学习您要达到以下目标: 1)了解分布式文件系统的概念及应用场景 分布式文件系统是通过网络将单机上的文件系统组成一个网络文件系统。 分布式文件系统主要应用在大型互联网项目中,实现图片存储、音视频存储等服务。 分布式文件系统的优点:可以快速扩容存储,提高文件访问速度。 2)理解fastDFS的工作原理 fastDFS由tracker和storage组成,它们都可以部署集群。 tracker负责调度,storage负责存储。 3)掌握fastDFS存取文件方法 客户端与fastDFS采用socket协议通信,可以采用官方提供的java版本的fastDSF-client快速开发。 4)能够动手搭建一个fastDSF文件服务器