FastDFS

來自與拉鉤教育-Java就業(yè)集訓(xùn)營

課程目標(biāo):
1、場景概述
2沥曹、FastDFS的上傳與下載
3份名、項目實戰(zhàn):搭建圖片服務(wù)器


1.場景概述

  • 天貓、淘寶等購物網(wǎng)站,大量的圖片和視頻,文件太多,如何儲存妓美。
  • 用戶訪問量大又如何保證下載速度?分布式文件系統(tǒng)就是解決這些問題的鲤孵!

1.1 什么是文件系統(tǒng)

  • 文件數(shù)據(jù)是如何存儲的


    1.png

1.2 分布式文件系統(tǒng)

  • 一臺電腦存儲量有限壶栋,并且并發(fā)吞吐量也有限,如何提高性能普监?
  • 一噸貨物贵试,我要運送到吐魯番:
    1個人運,不敢想象
    50個人運凯正,太難了毙玻;
    500個人運,每個人都很輕松廊散;
  • 這就是分布式嗎桑滩?
    答:這里面有集群的概念,也有分布式的概念允睹,二者不要混淆运准,面試常問的經(jīng)典題目
    分布式:不同的業(yè)務(wù)模塊部署在不同的服務(wù)器上或者同一個業(yè)務(wù)模塊分拆多個子業(yè)務(wù),部署不同的服務(wù)器上缭受。解決高并發(fā)的問題胁澳;
    集群:同一個業(yè)務(wù)部署在多臺服務(wù)器上,提高系統(tǒng)的高可用
  • 例如:
    小飯館原來只有一個廚師米者,切菜洗菜備料一手抓韭畸∮钪牵客人越來越多,一個廚師忙不過來胰丁,只能再請一個廚師随橘,兩個廚師都能炒菜,也就是兩個廚師的作用是一樣的隘马,這樣太防,兩個廚師的關(guān)系就是“集群”;
    為了讓廚師專心炒菜酸员,把菜炒到極致蜒车,又請了配菜師負(fù)責(zé)切菜,備料等工作幔嗦。廚師和備菜師的關(guān)系是“分布式”酿愧;
    一個備菜師忙不過來,要提供兩份食材給兩個廚師邀泉,又請了一個備菜師嬉挡,兩個備菜師的關(guān)系又是“集群”。

1.3 主流的分布式文件系統(tǒng)

1.3.1 HDFS

  • (Hadoop Distributed File System)Hadoop 分布式文件系統(tǒng)汇恤;
  • 高容錯的系統(tǒng)庞钢,適合部署到廉價的機器上;
  • 能提供高吞吐量的數(shù)據(jù)訪問因谎,非常適合大規(guī)模數(shù)據(jù)應(yīng)用基括;
  • HDFS采用主從結(jié)構(gòu),一個HDFS是由一個name節(jié)點和N個data節(jié)點組成财岔;
  • name節(jié)點儲存元數(shù)據(jù)风皿,一個文件分割成N份存儲在不同的data節(jié)點上。

1.3.2 GFS

  • Google File System
  • 可擴展的分布式文件系統(tǒng)匠璧,用于大型的桐款,分布式的,對大量數(shù)據(jù)進行訪問的應(yīng)用夷恍;
  • 運行于廉價的普通硬件上魔眨,可以提供容錯功能;
  • 它可以給大量的用戶提供總體性能較高的服務(wù)裁厅;
  • GFS采用主從結(jié)構(gòu)冰沙,一個GFS集群由一個master和大量的chunkserver(分塊服務(wù)器)組成;
  • 一個文件被分割若干塊执虹,分散儲存到多個分塊server中

1.3.3.FastDFS

  • 由淘寶資深架構(gòu)師余慶編寫并開源拓挥;
  • 專為互聯(lián)網(wǎng)量身定制,充分考慮了冗余備份袋励、負(fù)載均衡侥啤、線性擴容等機制当叭,并注重高可用、高性能等指標(biāo)盖灸,使用FastDFS很容易搭建一套高性能的文件服務(wù)器集群提供文件上傳蚁鳖、下載等服務(wù);
  • HDFS赁炎,GFS等都是通用的文件系統(tǒng)醉箕,他們的優(yōu)點是開發(fā)體驗好,但是系統(tǒng)的復(fù)雜度較高徙垫,性能也一般讥裤;
  • 相比之下,專用的分布式文件系統(tǒng)體驗差姻报,但是復(fù)雜度低己英,性能也高,尤其fastDFS特別適合圖片吴旋,小視頻等小文件损肛,因為fastDFS對文件是不分割的,所以沒有文件合并的開銷荣瑟;網(wǎng)絡(luò)通信用socket治拿,速度快。

1.4 工作原理

  • fastDFS包含Tracker Server和Storage Server笆焰;

  • 客戶端請求Tracker Server進行文件的上傳與下載忍啤;

  • Tracker Server調(diào)度Storage Server最終完成上傳與下載。


    4.png
  • Tracker (譯:追蹤者)
    1.作用是負(fù)載均衡和調(diào)度仙辟,它管理著存儲服務(wù)(Storage Server),可以理解為:“大管家鳄梅,追蹤者叠国,調(diào)度員”;
    2.Tracker Server可以集群戴尸,實現(xiàn)高可用粟焊,策略為“輪詢”。

  • Storage (譯:倉庫; 貯存器)
    1.作用是文件存儲孙蒙,客戶端上傳的文件最終存儲到storage服務(wù)器上项棠;
    2.storage集群采用分組的方式,同組內(nèi)的每臺服務(wù)器是平等關(guān)系挎峦,數(shù)據(jù)同步香追,目的是實現(xiàn)數(shù)據(jù)備份,從而高可用坦胶,而不同組的服務(wù)器之間是不通信的透典;
    3.同組內(nèi)的每臺服務(wù)器的存儲量不一致的情況下晴楔,會選取容量最小的那個,所以同組內(nèi)的服務(wù)器之間軟硬件最好保持一致峭咒。
    4.Storage Server會連接集群中的所有Tracker Server税弃,定時向他們匯報自己的狀態(tài),例如:剩余空間凑队,文件同步情況则果,文件上傳下載次數(shù)等信息。

1.5 上傳/下載 原理

5.png

7.png
  • 客戶端上傳文件后漩氨,storage會將文件id返回給客戶端
  • group1/M00/02/11/aJxAeF21O5wAAAAAAAAGaEIOA12345.sh
    組名(group1):文件上傳后西壮,在storage組的名稱,文件上傳成功后才菠,由storage返回茸时,需要客戶端自行保存。
    虛擬磁盤路徑(M00)
    storage配置的虛擬路徑赋访,在磁盤選項storage_path對應(yīng)可都。
    storage_path0對應(yīng)M00,
    storage_path1對應(yīng)M01蚓耽,
    數(shù)據(jù)兩級目錄(02/11)
    storage在虛擬磁盤下自行創(chuàng)建的目錄渠牲。
    文件名(aJxAeF21O5wAAAAAAAAGaEIOA12345.sh)
    與上傳時不同,是用storage根據(jù)特定信息生成的步悠,里面包含:storage服務(wù)器的ip签杈,創(chuàng)建時
    間戳,大小鼎兽,后綴名等信息

2. FastDFS的上傳與下載

2.1 安裝

2.1.1 安裝gcc(編譯時需要)

yum install -y gcc gcc-c++

2.1.2 安裝libevent(運行時需求)

yum -y install libevent

2.1.3 安裝 libfastcommon

libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS運行所需要的一些基礎(chǔ)庫谚咬。

  1. 上傳 libfastcommon-master.zip 到 /opt
安裝解壓zip包的命令: yum install -y unzip
解壓包: unzip libfastcommon.zip
進入目錄: cd libfastcommon-master
  1. 編譯
./make.sh
  • 如果:make.sh的權(quán)限不夠鹦付,則需要授權(quán)(可執(zhí)行的權(quán)利)
chmod 777 make.sh
  1. 安裝
./make.sh install
  • libfastcommon安裝好后會在/usr/lib64 目錄下生成 libfastcommon.so 庫文件
  1. 拷貝庫文件
cd /usr/lib64
cp libfastcommon.so /usr/lib

2.1.4 安裝Tracker

下載 FastDFS_v5.05.tar.gz,并上傳到 /opt

tar -zxvf FastDFS_v5.05.tar.gz
cd FastDFS
./make.sh
./make.sh install

安裝成功將安裝目錄下的conf下的文件拷貝到/etc/fdfs/下

cp /opt/FastDFS/conf/* /etc/fdfs/

2.2 配置

- Tracker配置

vim /etc/fdfs/tracker.conf
#端口號
port=22122
#基礎(chǔ)目錄(Tracker運行時會向此目錄存儲storage的管理數(shù)據(jù))(基礎(chǔ)目錄不存在的話择卦,需要自行創(chuàng)建
mkdir /home/fastdfs)
base_path=/home/fastdfs

- Storage配置

vim /etc/fdfs/storage.conf
#配置組名
group_name=group1
#端口
port=23000
#向tracker心跳間隔(秒)
heart_beat_interval=30
#storage基礎(chǔ)目錄
#目錄不存在敲长,需要自行創(chuàng)建
base_path=/home/fastdfs
#store存放文件的位置(store_path)
#可以理解一個磁盤一個path,多個磁盤秉继,多個store_path
#fdfs_storage目錄不存在祈噪,需要自行創(chuàng)建
#mkdir /home/fastdfs/fdfs_storage
store_path0=/home/fastdfs/fdfs_storage
#如果有多個掛載磁盤則定義多個store_path,如下
#store_path1=..... (M01)
#store_path2=..... (M02)
#配置tracker服務(wù)器:IP
tracker_server=10.1.220.247:22122
#如果有多個則配置多個tracker
#tracker_server=10.1.220.x:22122

2.3 啟動服務(wù)

  • 啟動tracker
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
  • 啟動storage
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
  • 查看所有運行的端口:
netstat -ntlp

2.4 搭建 Java工程

2.4.1 pom.xml

<!--fastdfs的java客戶端-->
<dependency>
<groupId>net.oschina.zcx7878</groupId>
<artifactId>fastdfs-client-java</artifactId>
<version>1.27.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>

2.4.2 創(chuàng)建配置文件

在resources下創(chuàng)建config目錄尚辑,在config目錄下創(chuàng)建 fastdfs-client.properties辑鲤,內(nèi)容如下:

##fastdfs-client.properties
fastdfs.connect_timeout_in_seconds = 5
fastdfs.network_timeout_in_seconds = 30
fastdfs.charset = UTF-8
fastdfs.http_anti_steal_token = false
fastdfs.http_secret_key = FastDFS1234567890
fastdfs.http_tracker_http_port = 80
fastdfs.tracker_servers = 10.1.220.247:22122

2.4.3 文件上傳

public class TestUpload {
public static void main(String[] args) {
try {
// 加載配置文件
ClientGlobal.initByProperties("config/fastdfs-client.properties");
// 創(chuàng)建tracker客戶端
TrackerClient trackerClient = new TrackerClient();
// 通過tracker客戶端獲取tracker的連接服務(wù)并返回
TrackerServer trackerServer = trackerClient.getConnection();
// 聲明storage服務(wù)
StorageServer storageServer = null;
// 定義storage客戶端
StorageClient1 client = new StorageClient1(trackerServer,
storageServer);
// 定義文件元信息
NameValuePair[] list = new NameValuePair[1];
list[0] = new NameValuePair("fileName","1.jpg");
String fileID = client.upload_file1("F:\\img\\1.jpg", "jpg", list);
System.out.println("fileID = " + fileID);
// group1/M00/00/00/CgHc918f8l6AFYp0AAWICfQnHuk889.jpg
/*
group1:一臺服務(wù)器,就是一個組
M00: store_path0 ----> /home/fastdfs/fdfs_storage/data
00/00:兩級數(shù)據(jù)目錄
*/
trackerServer.close();
}catch(Exception e){
e.printStackTrace();
}
}
}

2.4.4 文件查詢

package test;
import org.csource.fastdfs.*;
/**
* @BelongsProject: lagou-fastdfs
* @Author: GuoAn.Sun
* @CreateTime: 2020-07-28 17:46
* @Description: 文件查詢
*/
public class TestQuery {
public static void main(String[] args) throws Exception {
// 加載配置文件
ClientGlobal.initByProperties("config/fastdfs-client.properties");
// 創(chuàng)建tracker客戶端
TrackerClient trackerClient = new TrackerClient();
// 通過tracker客戶端獲取tracker的連接服務(wù)并返回
TrackerServer trackerServer = trackerClient.getConnection();
// 聲明storage服務(wù)
StorageServer storageServer = null;
// 定義storage客戶端
StorageClient1 client = new StorageClient1(trackerServer,
storageServer);
FileInfo fileInfo =
client.query_file_info1("group1/M00/00/00/CgHc918f8l6AFYp0AAWICfQnHuk889.jpg");
if(fileInfo!=null)
System.out.println("fileInfo = " + fileInfo);
else
System.out.println("查無此文件腌巾!");
trackerServer.close();
}
}

2.4.5 文件下載

public class TestDownload {
public static void main(String[] args) throws Exception{
// 加載配置文件
ClientGlobal.initByProperties("config/fastdfs-client.properties");
// 創(chuàng)建tracker客戶端
TrackerClient trackerClient = new TrackerClient();
// 通過tracker客戶端獲取tracker的連接服務(wù)并返回
TrackerServer trackerServer = trackerClient.getConnection();
// 聲明storage服務(wù)
StorageServer storageServer = null;
// 定義storage客戶端
StorageClient1 client = new StorageClient1(trackerServer,
storageServer);
byte[] bytes =
client.download_file1("group1/M00/00/00/CgHc918f8l6AFYp0AAWICfQnHuk889.jpg");
// 通過io將字節(jié)數(shù)組遂填,轉(zhuǎn)換成一個文件
FileOutputStream fileOutputStream = new FileOutputStream(new
File("F:/xxxxxx.jpg"));
fileOutputStream.write(bytes);
fileOutputStream.close();
trackerServer.close();
System.out.println("下載完畢铲觉!");
}
}

3. 項目實戰(zhàn)

  • 掌握fastDFS在真實項目中的使用方法;
  • 掌握fastDFS實現(xiàn)圖片服務(wù)器吓坚;

3.1 搭建圖片服務(wù)器

3.1.1 Nginx模塊安裝 (Storage)

  1. 上傳 fastdfs-nginx-module_v1.16.tar.gz 到 /opt
  2. 解壓nginx模塊
tar -zxvf fastdfs-nginx-module_v1.16.tar.gz
  1. 修改 config 文件撵幽,將文件中的 /usr/local/ 路徑改為 /usr/
cd /opt/fastdfs-nginx-module/src
vim config
  1. 將 fastdfs-nginx-module/src下的 mod_fastdfs.conf 拷貝至 /etc/fdfs 下
cp mod_fastdfs.conf /etc/fdfs/
  1. 修改 /etc/fdfs/mod_fastdfs.conf
vim /etc/fdfs/mod_fastdfs.conf
base_path=/home/fastdfs
tracker_server=10.1.220.247:22122
#(n個tracker配置n行)
#tracker_server=10.1.220.x:22122
#url中包含group名稱
url_have_group_name=true
#指定文件存儲路徑(上面配置的store路徑)
store_path0=/home/fastdfs/fdfs_storage
  1. 將 libfdfsclient.so 拷貝至 /usr/lib 下
cp /usr/lib64/libfdfsclient.so /usr/lib/
  1. 創(chuàng)建nginx/client目錄
mkdir -p /var/temp/nginx/client

3.1.2 Nginx安裝 (Tracker)

  1. 將 nginx-1.14.0.tar.gz上傳到/opt(安裝過nginx,此步省略)
  2. 解壓:tar -zxvf nginx-1.14.0.tar.gz(安裝過nginx礁击,此步省略)
  3. 安裝依賴庫(安裝過nginx盐杂,此步省略)
yum install pcre
yum install pcre-devel
yum install zlib
yum install zlib-devel
yum install openssl
yum install openssl-devel
  1. 進入nginx解壓的目錄下 cd /opt/nginx-1.14.0
  2. 安裝
/configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--add-module=/opt/fastdfs-nginx-module/src

注意:上邊將臨時文件目錄指定為 /var/temp/nginx,需要在 /var 下創(chuàng)建 temp 及 nginx 目錄:mkdir /var/temp/nginx (模塊對應(yīng)的文件要提前創(chuàng)建否則make會報錯)

  1. 編譯:make
  2. 安裝:make install
  3. 拷貝配置文件
cd /opt/FastDFS/conf
cp http.conf mime.types /etc/fdfs/
是否覆蓋:yes
  1. 修改nginx配置文件
cd /usr/local/nginx/conf/
vim nginx.conf
server {
listen 80;
server_name 10.1.220.247;
#charset koi8-r;
#access_log logs/host.access.log main;
location /group1/M00 {
root /home/fastdfs/fdfs_storage/data;
ngx_fastdfs_module;
}
  1. 關(guān)閉nginx哆窿,并啟動nginx
pkill -9 nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
  1. 訪問nginx并查看圖片
    http://10.1.220.247
    http://10.1.220.247/group1/M00/00/00/CgHc918f8l6AFYp0AAWICfQnHuk889.jpg

3.2 創(chuàng)建前端頁面

<%--上傳文件链烈,文件與文字相比較起來,屬于內(nèi)容較大挚躯,必須使用post方式提交--%>
<%--上傳文件强衡,和普通文件有區(qū)別,action接收參數(shù)也會區(qū)別對待码荔,所以聲明帶文件提交的表單為“多部
件表單”--%>
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="fname">
<br>
<button>提交</button>
</form>

3.3 搭建web服務(wù)

3.3.1 pom.xml

<packaging>war</packaging>
<dependencies>
<!-- 因為有jsp頁面漩勤,所以引用servlet依賴-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<scope>provided</scope>
<version>2.5</version>
</dependency>
<!-- 頁面提交過來的請求,使用springmvc來處理-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.7.RELEASE</version>
</dependency>
<!-- java連接fastDFS的客戶端工具-->
<dependency>
<groupId>net.oschina.zcx7878</groupId>
<artifactId>fastdfs-client-java</artifactId>
<version>1.27.0.0</version>
</dependency>
<!-- 圖片上傳到FastDFS需要用的到IO工具-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
<!-- 圖片保存到web服務(wù)器需要用到的IO工具-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<!--用來轉(zhuǎn)換java對象和json字符串缩搅,注意越败,2.7以上版本必須搭配spring5.0以上-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<port>8001</port>
<path>/</path>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

3.3.2 web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet?class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/spring-mvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

3.3.3 spring-mvc.xml

<!--掃描注解的包-->
<context:component-scan base-package="controller"/>
<!--掃描控制器中的注解:@Response-->
<mvc:annotation-driven/>
<!--上傳文件的解析器(規(guī)定上傳文件的大小限制)-->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 上傳文件最大限制:2GB-->
<property name="maxUploadSize" value="2048000000"/>
</bean>

3.3.4 文件實體類

public class FileSystem implements Serializable {
private String fileId;
private String filePath;
private String fileName;
}

3.3.5 控制層

@Controller
public class FileAction {
/**
* @param request 多部件表單的請求對象
* @return 上傳文件對象的json對象
* @throws Exception
*
* 上傳文件的流程:
* 1、先把文件保存到web服務(wù)器上
* 2硼瓣、再從web服務(wù)器上將文件 上傳 到 FastDFS上
*/
@RequestMapping("upload")
//MultipartHttpServletRequest:是httpservletRequest的強化版本究飞,不僅可以裝文本信
息,還可以裝圖片文件信息
public @ResponseBody FileSystem upload(MultipartHttpServletRequest request)
throws Exception {
FileSystem fileSystem = new FileSystem();
/* 1堂鲤、把文件保存到web服務(wù)器*/
// 從頁面請求中亿傅,獲取上傳的文件對象
MultipartFile file = request.getFile("fname");
// 從文件對象中獲取 文件的原始名稱
String oldFileName = file.getOriginalFilename();
// 通過字符串截取的方式,從文件原始名中獲取文件的后綴 1.jpg
String hou = oldFileName.substring(oldFileName.lastIndexOf(".") + 1);
// 為了避免文件因為同名而覆蓋瘟栖,生成全新的文件名
String newFileName = UUID.randomUUID().toString() + "." + hou;
// 創(chuàng)建web服務(wù)器保存文件的目錄(預(yù)先創(chuàng)建好D:/upload目錄袱蜡,否則系統(tǒng)找不到路徑,會拋異
常)
File toSaveFile = new File("D:/upload/" + newFileName);
// 將路徑轉(zhuǎn)換成文件
file.transferTo(toSaveFile);
// 獲取服務(wù)器的絕對路徑
String newFilePath = toSaveFile.getAbsolutePath();
/* 2慢宗、把文件從web服務(wù)器上傳到FastDFS*/
ClientGlobal.initByProperties("config/fastdfs-client.properties");
TrackerClient trackerClient = new TrackerClient();
TrackerServer trackerServer = trackerClient.getConnection();
StorageServer storageServer = null;
StorageClient1 client = new StorageClient1(trackerServer,
storageServer);
NameValuePair[] list = new NameValuePair[1];
list[0] = new NameValuePair("fileName",oldFileName);
String fileId = client.upload_file1(newFilePath, hou, list);
trackerServer.close();
// 封裝fileSystem數(shù)據(jù)對象
fileSystem.setFileId(fileId);
fileSystem.setFileName(oldFileName);
fileSystem.setFilePath(fileId); //已經(jīng)上傳到FastDFS上,通過fileId來訪問圖
片奔穿,所以fileId即為文件路徑
return fileSystem;
}
}

3.3.6 添加fastDFS的配置文件

在resources下創(chuàng)建config目錄镜沽,在config目錄下創(chuàng)建 fastdfs-client.properties
參考:2.4.2

3.3.7 啟動fastDFS服務(wù),測試開始

[root@localhost /]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
[root@localhost /]# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
[root@localhost /]# /usr/local/nginx/sbin/nginx -c
/usr/local/nginx/conf/nginx.conf
[root@localhost /]# netstat -ntlp
[root@localhost /]# systemctl stop firewalld.service
[root@localhost /]# cd /home/fastdfs/fdfs_storage/data/
[root@localhost /]# ls
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贱田,一起剝皮案震驚了整個濱河市缅茉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌男摧,老刑警劉巖蔬墩,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件译打,死亡現(xiàn)場離奇詭異,居然都是意外死亡拇颅,警方通過查閱死者的電腦和手機奏司,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來樟插,“玉大人韵洋,你說我怎么就攤上這事』拼福” “怎么了搪缨?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長鸵熟。 經(jīng)常有香客問我副编,道長,這世上最難降的妖魔是什么流强? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任痹届,我火速辦了婚禮,結(jié)果婚禮上煮盼,老公的妹妹穿的比我還像新娘短纵。我一直安慰自己,他們只是感情好僵控,可當(dāng)我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布香到。 她就那樣靜靜地躺著,像睡著了一般报破。 火紅的嫁衣襯著肌膚如雪悠就。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天充易,我揣著相機與錄音梗脾,去河邊找鬼。 笑死盹靴,一個胖子當(dāng)著我的面吹牛炸茧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播稿静,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼梭冠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了改备?” 一聲冷哼從身側(cè)響起控漠,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后盐捷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體偶翅,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年碉渡,在試婚紗的時候發(fā)現(xiàn)自己被綠了聚谁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡爆价,死狀恐怖垦巴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情铭段,我是刑警寧澤骤宣,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站序愚,受9級特大地震影響憔披,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜爸吮,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一芬膝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧形娇,春花似錦锰霜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至哄酝,卻和暖如春友存,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背陶衅。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工屡立, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人搀军。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓膨俐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親罩句。 傳聞我的和親對象是個殘疾皇子吟策,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 項目中用到文件服務(wù)器fastdfs,所以就了解學(xué)習(xí)了一番,感覺確實頗為強大,在此再次感謝淘寶資深架構(gòu)師余慶大神開源...
    郭藝賓閱讀 871評論 0 4
  • FastDFS 是一個開源的輕量級分布式文件系統(tǒng),它對文件進行管理的止,功能包括:文件存儲、文件同步着撩、文件訪問(文件上...
    冰島暖男的春天閱讀 466評論 0 0
  • FastDFS是用C語言編寫的一款開源的輕量級分布式文件系統(tǒng)诅福。它對文件進行管理匾委,功能包括:文件存儲、文件同步氓润、文件...
    歡醉閱讀 4,047評論 3 12
  • 前言 項目中用到文件服務(wù)器赂乐,有朋友推薦用fastdfs,所以就了解學(xué)習(xí)了一番咖气,感覺確實頗為強大挨措,在此再次感謝淘寶資...
    __豆約翰__閱讀 764評論 1 6
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月,有人笑有人哭崩溪,有人歡樂有人憂愁浅役,有人驚喜有人失落,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,536評論 28 53