3.1日學習打卡
目錄:
- 3.1日學習打卡
- 一. 為什么要使用分布式文件系統
- 二. FastDFS
- 簡介
- 核心概念
- 上傳機制
- 下載機制
- FastDFS環境搭建_Linux
- FastDFS指令
一. 為什么要使用分布式文件系統
單機時代
初創時期由于時間緊迫,在各種資源有限的情況下,通常就直接在項目目錄下建立靜態文件夾,用于用戶存放項目中的文件資源。如果按不同類型再細分,可以在項目目錄下再建立不同的子目錄來區分。例如:resources\static\file
、resources\static\img
等。
注意:
優點:便利,使用方便。
缺點:文件越多存放越混亂。
獨立文件服務器
隨著公司業務不斷發展,將代碼和文件放在同一服務器的弊端就會越來越明顯。為了解決上面的問題引入獨立圖片服務器,
流程:
項目上傳文件時,首先通過ftp或者ssh將文件上傳到圖片服務器的某個目錄下,再通過Ngnix或者Apache來訪問此目錄下的文件,返回一個獨立域名的圖片URL地址,前端使用文件時就通過這個URL地址讀取。
分布式文件系統
業務繼續發展,單臺服務器存儲和響應也很快到達了瓶頸,新的業務需要文件訪問具有高響應性、高可用性來支持系統。
優點:
- 擴展能力: 毫無疑問,擴展能力是一個分布式文件系統最重要的特點;
- 高可用性: 在分布式文件系統中,高可用性包含兩層,一是整個文件系統的可用性,二是數據的完整和一致性;
- 彈性存儲: 可以根據業務需要靈活地增加或縮減數據存儲以及增刪存儲池中的資源,而不需要中斷系統運行。
缺點:
- 系統復雜度稍高,需要更多服務器
二. FastDFS
簡介
FastDFS是一個開源的輕量級分布式文件系統。它解決了大數據量存儲和負載均衡等問題。特別適合以中小文件(建議范圍:4KB < file_size <500MB)為載體的在線服務,如相冊網站、視頻網站等等。
FastDFS特性:
- 文件不分塊存儲,上傳的文件和OS文件系統中的文件一一對應
- 支持相同內容的文件只保存一份,節約磁盤空間
- 下載文件支持HTTP協議,可以使用內置Web Server,也可以和其他Web Server配合使用
- 支持在線擴容
- 支持主從文件
分布式文件服務提供商
-
阿里的OSS
-
七牛云存儲
-
百度云儲存
核心概念
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
注意:
刪除指令使用后,文件在該卷中的所有備份都會被刪除,因為卷內的存儲節點會相互同步,故慎用。
如果我的內容對你有幫助,請點贊,評論,收藏。創作不易,大家的支持就是我堅持下去的動力