3.1日學習打卡----初學FastDFS(一)

3.1日學習打卡

目錄:

  • 3.1日學習打卡
  • 一. 為什么要使用分布式文件系統
  • 二. FastDFS
    • 簡介
    • 核心概念
    • 上傳機制
    • 下載機制
    • FastDFS環境搭建_Linux
    • FastDFS指令

在這里插入圖片描述

一. 為什么要使用分布式文件系統

單機時代
初創時期由于時間緊迫,在各種資源有限的情況下,通常就直接在項目目錄下建立靜態文件夾,用于用戶存放項目中的文件資源。如果按不同類型再細分,可以在項目目錄下再建立不同的子目錄來區分。例如:resources\static\fileresources\static\img等。
在這里插入圖片描述

注意:
優點:便利,使用方便。
缺點:文件越多存放越混亂。

獨立文件服務器

隨著公司業務不斷發展,將代碼和文件放在同一服務器的弊端就會越來越明顯。為了解決上面的問題引入獨立圖片服務器,
在這里插入圖片描述

流程:
項目上傳文件時,首先通過ftp或者ssh將文件上傳到圖片服務器的某個目錄下,再通過Ngnix或者Apache來訪問此目錄下的文件,返回一個獨立域名的圖片URL地址,前端使用文件時就通過這個URL地址讀取。

分布式文件系統
業務繼續發展,單臺服務器存儲和響應也很快到達了瓶頸,新的業務需要文件訪問具有高響應性、高可用性來支持系統。
在這里插入圖片描述
優點:

  • 擴展能力: 毫無疑問,擴展能力是一個分布式文件系統最重要的特點;
  • 高可用性: 在分布式文件系統中,高可用性包含兩層,一是整個文件系統的可用性,二是數據的完整和一致性;
  • 彈性存儲: 可以根據業務需要靈活地增加或縮減數據存儲以及增刪存儲池中的資源,而不需要中斷系統運行。

缺點:

  • 系統復雜度稍高,需要更多服務器

二. FastDFS

簡介

FastDFS是一個開源的輕量級分布式文件系統。它解決了大數據量存儲和負載均衡等問題。特別適合以中小文件(建議范圍:4KB < file_size <500MB)為載體的在線服務,如相冊網站、視頻網站等等。

FastDFS特性:

  • 文件不分塊存儲,上傳的文件和OS文件系統中的文件一一對應
  • 支持相同內容的文件只保存一份,節約磁盤空間
  • 下載文件支持HTTP協議,可以使用內置Web Server,也可以和其他Web Server配合使用
  • 支持在線擴容
  • 支持主從文件

分布式文件服務提供商

  1. 阿里的OSS

  2. 七牛云存儲

  3. 百度云儲存

核心概念

在這里插入圖片描述
FastDFS服務端有三個角色:跟蹤服務器(tracker)、存儲服務器(storage)和客戶端(client)。

tracker
跟蹤服務器,主要做調度工作,起負載均衡的作用。在內存中記錄集群中所有存儲組和存儲服務器的狀態信息,是客戶端和數據服務器交互的樞紐。

storage
存儲服務器(又稱:存儲節點或數據服務器),文件和文件屬性(meta data)都保存到存儲服務器上。Storage server直接利用OS的文件系統調用管理文件。

client
客戶端,作為業務請求的發起方,通過專有接口,使用TCP/IP協議與跟蹤器服務器或存儲節點進行數據交互。FastDFS向使用者提供基本文件訪問接口,比如upload、download、append、delete等,以客戶端庫的方式提供給用戶使用。

group
組, 也可稱為卷。 同組內服務器上的文件是完全相同的 ,同一組內的storage server之間是對等的, 文件上傳、 刪除等操作可以在任意一臺storage server上進行 。

在這里插入圖片描述

** **:
Tracker相當于FastDFS的大腦,不論是上傳還是下載都是通過tracker來分配資源;客戶端一般可以使用Ngnix等靜態服務器來調用或者做一部分的緩存;存儲服務器內部分為卷(或者叫做組),卷于卷之間是平行的關系,可以根據資源的使用情況隨時增加,卷內服務器文件相互同步備份,以達到容災的目的。

上傳機制

首先客戶端請求Tracker服務獲取到存儲服務器的ip地址和端口,然后客戶端根據返回的IP地址和端口號請求上傳文件,存儲服務器接收到請求后生產文件,并且將文件內容寫入磁盤并返回給客戶端file_id、路徑信息、文件名等信息,客戶端保存相關信息上傳完畢。
在這里插入圖片描述
內部機制如下

1、選擇Tracker server

當集群中不止一個Tracker server時,由于Tracker之間是完全對等的關系,客戶端在upload文件時可以任意選擇一個trakcer。

2、選擇Storage server

當選定Group后,Tracker會在Group內選擇一個Storage Server給客戶端

3、選擇Storage path

當分配好Storage Server后,客戶端將向Storage發送寫文件請求,Storage將會為文件分配一個數據存儲目錄。

注意:
剩余存儲空間最多的優先。

4、生成Fileid

選定存儲目錄之后,Storage會為文件生一個Fileid,由Storage Server Ip、文件創建時間、文件大小、文件crc32和一個隨機數拼接而成,然后將這個二進制串進行base64編碼,轉換為可打印的字符串。

5、生成文件名

當文件存儲到某個子目錄后,即認為該文件存儲成功,接下來會為該文件生成一個文件名,文件名由group、存儲目錄、兩級子目錄、fileid、文件后綴名(由客戶端指定,主要用于區分文件類型)拼接而成。

下載機制

客戶端帶上文件名信息請求Tracker服務獲取到存儲服務器的ip地址和端口,然后客戶端根據返回的IP地址和端口號請求下載文件,存儲服務器接收到請求后返回文件給客戶端。
在這里插入圖片描述
內部機制如下

  • client詢問tracker下載文件的storage,參數為文件標識(組名和文件名)
  • tracker返回一臺可用的storage
  • client直接和storage通訊完成文件下載

FastDFS環境搭建_Linux

下載安裝gcc
安裝方式為yum安裝(需網絡):

yum install gcc-c++ perl-devel pcre-devel openssl-devel zlib-devel wget

下載安裝FastDFS

wget https://github.com/happyfish100/fastdfs/archive/V6.06.tar.gz

下載安裝FastDFS依賴

wgethttps://github.com/happyfish100/libfastcommon/archive/V1.0.43.tar.gz

解壓縮依賴tar包

tar -zxvf V1.0.43.tar.gz -C /usr/local
tar -zxvf  V6.06.tar.gz-C /usr/local

編譯并安裝libfastcommon

 cd /usr/local/libfastcommon-1.0.43/./make.sh && ./make.sh install

編譯并安裝FastDFS

cd /usr/local/fastdfs-6.06
./make.sh && ./make.sh install

進入etc目錄下復制配置文件

cd /etc/fdfs/
cp client.conf.sample client.conf
cp storage.conf.sample storage.conf
cp tracker.conf.sample tracker.conf

創建tracker服務
創建tracker目錄

mkdir -p  /data/fastdfs/tracker

修改配置文件

vim /etc/fdfs/tracker.conf
disabled=false          #啟用配置文件
port=22122            #設置 tracker 的端口號
base_path=/data/fastdfs/tracker #設置 tracker 的數據文件和日志目錄(需預先創建)
http.server_port=8888      #設置 http 端口號
http.server_port=8888      #指的是在tracker服務器上啟動http服務進程,如:apache或者nginx 啟動時所監聽的端口

啟動tracker服務

/etc/init.d/fdfs_trackerd start

檢查tracker服務

netstat -lntup |grep fdfs
tcp     0    0 0.0.0.0:22122      0.0.0.0:*        LISTEN    10757/fdfs_trackerd

創建storage服務
創建storage目錄

mkdir -p /data/fastdfs/base
mkdir -p /data/fastdfs/storage

修改配置文件

vim /etc/fdfs/storage.conf
disabled=false             #啟用配置文件
group_name=group1           #組名,根據實際情況修改
port=23000               #設置 storage 的端口號
base_path=/data/fastdfs/base      #設置 storage 的日志目錄(需預先創建)
store_path_count=1           #存儲路徑個數,需要和 store_path 個數匹配
store_path0=/data/fastdfs/storage     #存儲路徑
tracker_server=172.31.16.121:22122    #tracker 服務器的 IP 地址和端口號
http.server_port=8888         #設置storage上啟動的http服務的端口號,如安裝的nginx的端口號

啟動storage服務

/etc/init.d/fdfs_storaged start

查看storage服務

netstat -lntup |grep fdfs
tcp     0    0 0.0.0.0:23000      0.0.0.0:*        LISTEN    10892/fdfs_storaged
tcp     0    0 0.0.0.0:22122      0.0.0.0:*        LISTEN    10757/fdfs_trackerd

修改Client配置文件

vim /etc/fdfs/client.conf
connect_timeout=30
network_timeout=60
base_path=/data/fastdfs/client      # 日志路徑
tracker_server=192.168.66.100:22122    # 追蹤服務器的IP,有多個服務器可以另一行

創建日志目錄

mkdir -p /data/fastdfs/client

查看啟動的服務

ps -ef | grep fdfs

FastDFS指令

在這里插入圖片描述
上傳指令
指令參數

fdfs_upload_file <config_file> <local_filename> [storage_ip:port] [store_path_index]

參數含義:
<config_file> :配置文件路徑
<local_filename> :本地文件路徑
[storage_ip:port] :(可選參數)
[store_path_index] :(可選參數)

指令使用

[root@tracker fdfs]# fdfs_upload_file /etc/fdfs/client.conf 上傳的文件路徑

注意:
上傳文件后會返回文件在FastDFS中的唯一文件標識,即卷名+文件名

下載指令
指令參數

fdfs_download_file <config_file> <file_id> [local_filename] [<download_offset> <download_bytes>]

參數含義:
<config_file> :配置文件路徑
<file_id> :文件在FastDFS中的唯一文件標識,即卷名+文件名
[local_filename] :文件下載地址
<download_offset> :(可選參數)文件下載開始時間
<download_bytes> :(可選參數)文件下載的字節數

指令使用

[root@tracker fdfs]# fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/wKhygVwnUUOAcgYHCCZp2Ahsb3g964.rpm /root/java/xxx.rpm

查看文件信息指令
指令參數

fdfs_file_info <config_file> <file_id>

參數含義:
<config_file> :配置文件路徑
<file_id> :文件在FastDFS中的唯一文件標識,即卷名+文件名

指令使用

[root@tracker fdfs]# fdfs_file_info /etc/fdfs/client.conf group1/M00/00/00/wKhygVwnUUOAcgYHCCZp2Ahsb3g964.rpm

刪除指令
指令參數

fdfs_delete_file <config_file> <file_id>

參數含義
<config_file> :配置文件路徑
<file_id> :文件在FastDFS中的唯一文件標識,即卷名+文件名

指令使用

[root@tracker fdfs]# fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/wKhygVwnUUOAcgYHCCZp2Ahsb3g964.rpm

注意:
刪除指令使用后,文件在該卷中的所有備份都會被刪除,因為卷內的存儲節點會相互同步,故慎用。

如果我的內容對你有幫助,請點贊,評論,收藏。創作不易,大家的支持就是我堅持下去的動力
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/712318.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/712318.shtml
英文地址,請注明出處:http://en.pswp.cn/news/712318.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

二分+質因數分解,LightOJ 1138Trailing Zeroes (III)

一、題目 1、題目描述 You task is to find minimal natural number N, so that N! contains exactly Q zeroes on the trail in decimal notation. As you know N! 1 * 2 * ... * N. For example, 5! 120, 120 contains one zero on the trail. 2、輸入輸出 2.1輸入 Input…

HTML---Ajax

文章目錄 目錄 文章目錄 前言 一.Ajax概述 二.原生創建Ajax 三,使用Jquery處理Ajax 總結 一.Ajax概述 AJAX&#xff08;Asynchronous Javascript And XML&#xff09;是一種創建交互式網頁應用的網頁開發技術。它使用Javascript語言與服務器進行異步交互&#xff0c;可以傳…

【計算機網絡】五種IO模型與IO多路轉接之select

文章目錄 一、五種IO模型二、非阻塞IO1.fcntl2.實現函數SetNoBlock3.輪詢方式讀取標準輸入 三、I/O多路轉接之select1.初識select2.select函數原型3.socket就緒條件4.select的特點5.select缺點6.select使用案例--只讀取數據的server服務器1.err.hpp2.log.hpp3.sock.hpp4.select…

DBGridEh 的排序

DBGridEh 可以點列抬頭使得記錄按該列排序 不需要寫代碼&#xff0c;只需要設置好&#xff0c;它就能排序。 網上的文章一般寫了如何設置。但一般都少說了一條。 先說如何設置&#xff1a; 1. OptionsEh.AutoSortMarking 設置為 True&#xff0c;如果是設計期屬性面板&…

Linux上搭建并使用ffmpeg(Java)

關于MacOs和Windows系統上使用ffmpeg就不多說了&#xff0c;有很多相關文章&#xff0c;今天給大家分享一個在Linux環境下使用Java語言來使用ffmpeg 一、首先去官網下載一個Linux對應的ffmpeg包 1、進入ffmpeg官網&#xff1a;官網 2、點擊左側導航欄Download 3、選擇Linux對…

如何利用graylog進行容器化日志管理?

Docker日志 當一個容器啟動的時候&#xff0c;它其實是docker deamon的一個子進程&#xff0c;docker daemon可以拿到容器里面進程的標準輸出&#xff0c;然后通過自身的LogDriver模塊來處理&#xff0c;LogDriver支持的方式很多&#xff0c;默認寫到本地文件&#xff0c;也可…

vue自定義實現icon選擇器

<template> <div> <span class"iconStyle" click"selectIcon"> <i :class"value" /> </span> <div class"iconTitle">選擇圖標</div> <el-dialog title"" :visible.sync"…

springboot + nacos + aws secretmanager 做賬號密碼隱私處理

方式一&#xff1a; #nacos配置文件data.yml: spring:cloud:nacos:discovery:ip: ****.comport: 80datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://*********/database?useUnicodetrue&characterEncodingUTF-8&autoReconnecttrue&fail…

java 商機管理系統Myeclipse開發mysql數據庫web結構jsp編程計算機網頁項目

一、源碼特點 java 商機管理系統是一套完善的java web信息管理系統&#xff0c;對理解JSP java編程開發語言有幫助&#xff0c;系統具有完整的源代碼和數據庫&#xff0c;系統主要采用B/S模式開發。開發環境為 TOMCAT7.0,Myeclipse8.5開發&#xff0c;數據庫為Mysql5.0&…

LeetCode142. 環形鏈表 II刷題詳解

今天力扣刷到了一個特別有意思的題目&#xff0c;于是就寫了下面的題解來加深以下理解。 142. 環形鏈表 II - 力扣&#xff08;LeetCode&#xff09; 這個可以分為兩大步去寫&#xff0c;首先要判斷鏈表是否有環&#xff0c;然后如果有環就去找到環的入口&#xff0c;沒有環返…

python3.x的在線與離線安裝純凈版

由于計劃搭建一套使用python自動分析日志的流程&#xff0c;發現我們的測試環境CentOS 7仍然沒有安裝python3&#xff0c;無法使用這些新的庫。Python 3在設計上著重提升了語言的一致性和易用性&#xff0c;它引入了許多關鍵改進&#xff0c;此外&#xff0c;Python 3環境擁有豐…

基于springboot+html實現的衣物捐贈平臺

一、系統架構 前端&#xff1a;html | layui | jquery | css 后端&#xff1a;springboot | thymeleaf | mybatis 環境&#xff1a;jdk1.8 | mysql | maven 二、代碼及數據庫 三、功能介紹 01. 登錄頁 02. 注冊 03. web頁-首頁 04. web頁-捐贈衣服 05. web頁-論壇交流…

C# 中的 IReadOnlyDictionary 和 IReadOnlyList

C# 中的 IReadOnlyDictionary 和 IReadOnlyList 是接口&#xff0c;用于表示只讀的字典和只讀的列表。這些接口提供了對集合的只讀訪問權限&#xff0c;即不允許對集合進行修改操作&#xff0c;例如添加、刪除或修改元素。這種只讀特性對于需要保護數據完整性或只需要進行讀取操…

MYSQL--鎖機制*

一.對鎖機制的大概介紹: 1.大概的來說,MYSQL當中的鎖實際上就是合理的管理多個服務器對于同一個共享資源的使用,是計算機協調多個進程或者是線程并發訪問某一資源的機制(避免爭搶資源的現象發生) 2.在數據庫當中,數據是一種可以供許多的用戶進行共享使用的資源,如何保證數據并發…

軟考筆記--軟件開發模型

軟件開發模型給出了軟件開發活動各個階段之間的關系&#xff0c;它是軟件開發過程的概括&#xff0c;是軟件工程的重要內容。軟件開發模型為軟件工程管理提供了里程碑和進度表&#xff0c;為軟件開發過程提供了原則和方法。 一.軟件開發模型概述 軟件開發模型可分為三種類型&…

第十一屆藍橋杯省賽第一場C++ A組 / B組《整數拼接》(c++)

1.題目說明 給定一個長度為 n 的數組 A1,A2,???,An。 你可以從中選出兩個數 Ai 和 Aj(i 不等于 j)&#xff0c;然后將 Ai 和 Aj 一前一后拼成一個新的整數。 例如 12 和 345 可以拼成 12345 或 34512。 注意交換 Ai 和 Aj 的順序總是被視為 2 種拼法&#xff0c;即便是 …

考研倒計時半年:如何高效安排學習計劃?

距離考研還有半年的時間&#xff0c;這是一個既緊張又充滿希望的階段。如何利用好這段時間&#xff0c;制定一個高效的學習計劃&#xff0c;成為了每位考生關注的焦點。下面&#xff0c;我將為大家提供一些關于政治、英語和專業課的學習建議&#xff0c;希望能對大家有所幫助。…

曲線的凹凸性與拐點【高數筆記】

1.什么是曲線的凹凸性 2.什么是曲線的拐點 3.拐點的特征 4.拐點與駐點有什么不同 5.拐點的表示方法與駐點有什么不一樣 6.拐點與凹凸區間怎么求

力扣121題: 買賣股票的最佳時機

【題目描述】 給定一個數組 prices &#xff0c;它的第 i 個元素 prices[i] 表示一支給定股票第 i 天的價格。你只能選擇 某一天 買入這只股票&#xff0c;并選擇在 未來的某一個不同的日子賣出該股票。設計一個算法來計算你所能獲取的最大利潤。返回你可以從這筆交易中獲取的最…

Mathtype安裝時word啟動顯示“文件未找到:MathPage.WLL”

背景 由于老板布置的臨時工作&#xff0c;需要安裝Mathtype&#xff0c;但嘗試了3個不同的版本后&#xff08;每次都卸載干凈了&#xff09;&#xff0c;均未能成功安裝&#xff0c;出現的報錯3個版本各不相同&#xff1a; ①解壓安裝過程中失敗&#xff08;這個版本不再嘗試…