爆肝兩萬字,詳解fastdfs分散式文件系統

来源:https://www.cnblogs.com/smallroll/archive/2023/03/09/17201761.html
-Advertisement-
Play Games

1.學習目標 2.簡介 技術論壇:http://bbs.chinaunix.net/forum-240-1.html 資源地址:https://sourceforge.net/projects/fastdfs/ 源碼地址:https://github.com/happyfish100 FastDFS ...


1.學習目標

image.png

2.簡介

技術論壇:http://bbs.chinaunix.net/forum-240-1.html
資源地址:https://sourceforge.net/projects/fastdfs/
源碼地址:https://github.com/happyfish100

  1. FastDFS是一個開源的輕量級分散式文件系統,它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件為載體的線上服務,如相冊網站、視頻網站等等。
  2. FastDFS為互聯網量身定製,充分考慮了冗餘備份、負載均衡、線性擴容等機制,並註重高可用、高性能等指標,使用FastDFS很容易搭建一套高性能的文件伺服器集群提供文件上傳、下載等服務。
  3. FastDFS服務端有兩個角色:跟蹤器(tracker)和存儲節點(storage)。跟蹤器主要做調度工作,在訪問上起負載均衡的作用。
  4. 存儲節點存儲文件,完成文件管理的所有功能:就是這樣的存儲、同步和提供存取介面,FastDFS同時對文件metadata進行管理。所謂文件的metadata就是文件的相關屬性,以鍵值對(key value)方式表示,如:width=1024,其中的key為width,value為1024。文件metadata是文件屬性列表,可以包含多個鍵值對。
  5. 跟蹤器和存儲節點都可以由一臺或多台伺服器構成。跟蹤器和存儲節點中的伺服器均可以隨時增加或下線而不會影響線上服務。其中跟蹤器中的所有伺服器都是對等的,可以根據伺服器的壓力情況隨時增加或減少。
  6. 為了支持大容量,存儲節點(伺服器)採用了分捲(或分組)的組織方式。存儲系統由一個或多個捲組成,捲與捲之間的文件是相互獨立的,所有捲的文件容量累加就是整個存儲系統中的文件容量。一個捲可以由一臺或多台存儲伺服器組成,一個捲下的存儲伺服器中的文件都是相同的,捲中的多台存儲伺服器起到了冗餘備份和負載均衡的作用
  7. 在捲中增加伺服器時,同步已有的文件由系統自動完成,同步完成後,系統自動將新增伺服器切換到線上提供服務。當存儲空間不足或即將耗盡時,可以動態添加捲。只需要增加一臺或多台伺服器,並將它們配置為一個新的捲,這樣就擴大了存儲系統的容量。

FastDFS中的文件標識分為兩個部分:捲名和文件名,二者缺一不可。

2.1.架構圖

image.png
解釋:
寫入
假設我現在client要上傳文件,我要找到跟蹤器tracker,tracker找到client,然後tracker找到存儲節點,看看存儲節點那個捲下麵的節點比較空閑,能放得下這個文件,然後寫入進去,生成一個文件名
讀取
如果我們client要下載文件,不需要與tracker再做交互,直接與storage打交道,根據我們當時上傳文件tracker給我們提供的文件名,我們加上伺服器名字和埠號再加上完整的文件名即可讀取下載成功
主備切換
我們storage存儲節點是由多個捲構成的一個大的集群,比方說c d e盤構成一個硬碟,每個捲又分成主和子,他們兩者文件類型一致,如果主伺服器崩了,子伺服器馬上可以頂上

2.2.上傳流程

image.png

  1. client詢問tracker上傳到的storage,不需要附加參數
  2. tracker返回一臺可用的storage;
  3. client直接和storage通訊完成文件上傳

2.3.下載流程

image.png

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

client可以直接去到Storage進行線上的讀取和下載,這個線上讀取和下載前提是我們知道它的一個ip地址和埠號,後面跟上捲名,再跟上文件名,我們如果知道這個完整路徑的話,可以直接去到我們存儲節點進行線上預覽,或者是線上下載;如果我們現在只知道一個捲名和文件名,我們並不知道ip和埠,我們也可以去找我們的tracker,拿著我們的捲名和文件名去找我們的跟蹤器,跟蹤器就會找到對應的捲名和文件名所在的節點,會把這個存儲節點的ip地址和埠號返回給我們的客戶端,然後我們client再次通過我們的ip埠捲名文件名,然後直接通過我們的存儲節點進行我們的讀取和下載操作,一般我們如果考慮效率問題的話,肯定是我們直接拿著ip埠捲名文件名直接去存儲節點,讀取我們的一個文件,如果實在是不知道ip和埠情況下,可能就需要通過我們tracker,但一般情況下,我們tracker上傳的時候,我們tracker會返回一個完整的捲名和文件名加ip和埠,我們一般呢會把返回的相對路徑存放到資料庫裡面去,那我們需要進行文件預覽和下載的時候呢,我們一般從資料庫拿到我們帶有ip和埠的捲名和文件名這一整串信息的數據直接去storage進行一個下載 ,效率更高一點!!!

2.4.術語介紹

  1. TrackerServer:跟蹤伺服器,主要做調度工作,在訪問上起負載均衡的作用,記錄storage server的狀態,是連接Client和Storage server的樞紐。
  2. Storage Server:存儲伺服器,文件和meta data都保存到存儲伺服器上
  3. group:組,也稱為捲,同組內伺服器上的文件是完全相同的【主崩子接】
  4. 文件標識:包括兩部分:組名和文件名(包含路徑)
  5. meta data:文件相關屬性,鍵值對(Key Value Pair)方式,如:width1024,height=768

2.5.同步機制

  1. 同一組內的storage server之間是對等的,文件上傳、刪除等操作可以在任意一臺storage server上進行;【比方我們client去進行寫操作,會根據tracker自己去調度,假設三台伺服器,會根據tracker調度結果,返回裡面任意一臺的IP地址和埠,主要是看storage那一臺伺服器符合調度的一個規則,比方說那一臺storage它現在是空閑的,那一臺storage它的一個剩餘磁碟容量能放下這個文件,它返回的並不一定是某一臺的ip地址,可能是三台裡面隨機選一個ip地址或者埠進行返回】
  2. 文件同步只在組內的storage server之間進行,採用push方式,即源伺服器同步給目標伺服器;【採用廣播方式,比如說我們現在是一個高併發,每一臺都正好在進行寫操作,傳統的我們一個伺服器新增了數據量,它們之間要進行一個相互通信,一直通信到最後一個伺服器,再進行相應的數據同步,表示我這裡現在新增了數據,你和我同步一下,這是傳統的,我們發現它們相互通信的次數非常頻繁;所以我們一般採用廣播模式,比方說我們某個伺服器寫了一條數據,它就會廣播告訴其它伺服器,表示我這裡新增了數據,你們也新增一下;】
  3. 源頭數據才需要同步,備份數據不需要再次同步,否則就構成環路了;【被寫入數據稱為源伺服器;我們源頭數據才需要進行一個同步,如果是備份數據不需要廣播同步,一直不停廣播就形成環路了!!!】
  4. 上述第二條規則有個例外,就是新增加一臺storage server時,由已有的一臺storage server將已有的所有數據(包括源頭數據和備份數據)同步給新增伺服器 【假設我們有三台伺服器,增加了一臺,加的這一臺就會從我們原有的三台裡面,隨機選一臺作為一個源頭數據,然後就會把這個源頭數據和我們的備份數據同步到新增的伺服器裡面】

2.6.FastDFS運行時目錄結構

2.6.1.Tracker Server目錄

2.7.FastDFS和其它文件存儲的簡單對比

2.7.1.FastDFS和集中存儲方式對比

指標 FastDFS NFS 集中存儲設備加 NetApp、NAS
線性擴容性 高【擴容好】
文件高併發訪問性能 高【速度快】 一般
文件訪問方式 專用API【有自己的AIP】 POSIX【可移植操作系統介面】 POSIX
硬體成本 較低【成本低】 中等【硬碟成本高】 高【硬碟成本高】
相同內容文件只保存一份 支持【相同文件只有隻保留一份】 不支持 不支持

2.7.2.FastDFS和mogileFS對比

指標 FastDFS mogileFS
系統簡潔性 簡潔 只有兩個角色:tracker和storage 一般有三個角色:trocker、storage和存儲文件信息的mysql db
系統性能 很高(沒有使用資料庫,文件同步直接點對點,不經過tracker中轉) 高(使用mysql來存儲文件索引信息,文件同步通過tracker調度和中轉)
系統穩定性 高(C語言開發,可以支持高併發和高負載) 一般(Perl語言開發,高併發和高負載支持一般)【沒有C語言高併發高負載好】
RAID方式 分組(組內冗餘),靈活性較大 動態冗餘,靈活性一般
通信協議 專用協議,下載文件支持http【專用協議最大的好處就是寫的操作效率跟高,在tcp/ip之上】 http
技術文檔 較詳細 較少
文件附加屬性(meta data) 支持【文件相關屬性存儲在storage】 不支持
相同內容只保存一份 支持【根據文件相關屬性判斷,如果屬性一致則覆蓋】 不支持
下載文件時支持文件偏移量【斷點續傳, 從指定位置向前向後移動的位元組數,比如我們下載一個文件一半點暫停,然後再點開始會從你已經下載好的進度開始,而有的文件你點了暫停可能就讓你從頭開始下載】 支持 不支持

有沒有比FastDFS更好的呢?當然有,那就是我們的hdfs,hdfs更多的是大數據方面去用,它的性能會比FastDFS更好一點

3.安裝

3.1.安裝簡介

FastDFS主要是兩個角色,一個tracker和storage,它們本質上都是一個FastDFS一個包,它們通過對應不同配置來確認它們不同的角色,所以它們通用的安裝都是FastDFS的安裝包
我們這邊也準備了兩台伺服器,一臺是安裝我們tracker,一臺安裝storage,它們只是對應角色配置不一樣
image.png
如果電腦配置比較差的話,也可以直接安裝在一臺伺服器上,只需修改對應角色配置即可,安裝包都是一樣,也可以實現!!!

3.2.FastDFS安裝包

上傳所選安裝包

  1. 第一個就是fastdfs安裝包
  2. 第二個對應client安裝包
  3. 第三個是nginx模塊包
  4. 第四個就是fastdfs公用的庫
  5. 第五個fastdfs和nginx整合

image.png

3.3.安裝依賴

3.3.1.安裝c++相關依賴

我們fastdfs是根據C語言進行開發的,所以我們需要安裝C++相關依賴

yum -y install cmake gcc-c++

image.png

3.3.2.安裝fastdfs核心庫

安裝完成之後,我們還需要安裝我們fastdfs核心庫
image.png
這個核心庫呢其實是從fastdfs和fastdht中提取出來的公用的C函數的庫,fastdfs和fastdht是同樣一個作者去寫的兩個產品,都是C語言編寫,然後裡面會有一些公用函數庫,作者把它提取出來當成一個專門核心庫
如果我們尾碼名是.zip,需要安裝一個zip解壓插件

yum -y install unzip

image.png
我們把需要安裝的fastdfs所以文件放在一個文件夾方便管理

mkdir -p /usr/local/fastdfs

然後我們就可以去解壓了
zip尾碼

unzip libfastcommon-1.0.43.zip

tar尾碼

tar -zxvf libfastcommon-1.0.43.zip

image.png
我們進行之後看見有一個make.sh執行腳本,我們就通過這個腳本去進行一個編譯和安裝
image.png

.make.sh

這樣就會進行編譯
image.png
編譯好後我們就可以進行安裝了

.make.sh install

image.png
還有一個問題就是我們fastdfs主程式的lib目錄是在/usr/local/lib下麵的,所以我們需要去創建一些軟鏈接,這些軟鏈接就相當於快捷方式,把它的一個快捷方式從原本指向的目錄改成我們想要的指向的目錄
這個意思相當把前面原本指向的路徑指定到我們後面需要我們指定路徑

ln -s /usr/1ib64/1ibfastcommon.so /usr/local/lib/libfastcommon.so
ln -s /usr/local/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
ln -s /usr/local/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so

3.3.3.安裝fastdfs

image.png

tar -zxvf fastdfs-6.06.tar.gz

我們發現這裡也有make.sh
image.png
我們可以做一個可選的操作,就是說我們可以把它的一個路徑改成指定的路徑,因為它預設安裝路徑是在/usr下麵,我們可以把它改成/usr/local下麵去,當然在集群下麵就不要去改,那我們現在是安裝的一個單節點,可以去嘗試的改一下
我們進入fastdfs

vim make.sh

我們搜索/TAGE_PREFIX
image.png
我們把它改到/usr/local
image.png
然後我們再次去安裝

./make.sh 先編譯

image.png
再安裝

./make.sh install

安裝後,FastDFS主程式所在的位置是:

  • /usr/local/bin可執行文件所在位置。預設安裝在/usr/bin中。
  • /etc/fdfs配置文件所在位置。就是預設位置。
  • /usr/1oca1/1ib64主程式代碼所在位置。預設在usr/bin中。
  • /usr/local/irclude/fastdfs包含的一些插件組所在位置。預設在/usr/include/fastdfs中。

image.png
安裝好了之後,我們可以去看一下服務腳本所在位置

cd /etc/init.d/

image.png
然後我們可以看一下我們配置文件的模板所在位置

cd /etc/fdfs/

image.png
如果我們這台伺服器當做tracker來用的話,只需拷貝tracker配置拷貝過去進行修改,把後面的.sample刪掉就可以用了,建議不要拿源文件直接用,最好是拷貝過去再進行修改,因為如果改錯了還有備份!!!
我們還可查看內置命令所在目錄

cd /usr/local/bin/

這個就是fastdfs內置命令,包括重啟,啟動,停止,還有測試,跟蹤等等。。。
image.png
到這裡,我們整個tracker伺服器的fastdfs安裝好了!!!
**同理,我們還要去安裝storage,拿storage的安裝和tracker是一模一樣的,只是配置文件不同,其它安裝包都一樣,所以我們如果在同一臺伺服器部署只需修改配置文件即可!!! **

4.配置tracker

4.1.拷貝tracker.conf.sample

我們首先進入配置文件模板

cd /etc/fdfs

我們看到里有個tracker.conf.sample
image.png
然後我們拷貝一下,到conf就行

cp tacker..sample tracker.conf

4.2.配置tracker.conf

然後我們就可以進行配置了

vim tracker.conf

image.png
我們簡單瞭解一下裡面的屬性

  • bind_addr = 綁定的ip地址
  • port = 22122 埠號
  • connect_timeout = 5 連接超時
  • network_timeout = 60 網路超時
  • base_path = /home/yuqing/fastdfs【這個是fastdfs我們一個tracker啟動之後使用的一個根目錄,它呢也要去存儲一些信息,它存儲的就是我們捲裡面的一些storage的存儲節點,包括我們捲1 捲2 捲3 每個捲下麵有哪些storage,每個storage它的ip和它的埠都要去存儲一下,因為它是做一個中轉調度操作,client發起一個寫操作的時候,我們的一個tracker就會去調度找到哪一個節點可以給我們去寫操作,然後會返回ip和埠,tracker需要把我們捲下麵的所有的一個存儲節點ip和埠存儲一下,這邊我們可以把這個目錄修改一下,base_path = /fastdfs/tracker,這個目錄是我們自定義的,待會我們要去創建這個目錄
  • max_connections = 1024 最大連接
  • accept_threads = 1 接收的線程
  • work_threads = 4 工作的線程
  • min_buff_size = 8KB 最小緩衝8KB
  • max_buff_size = 128KB 最大的緩衝
  • store_server = 0 負載均衡策略,0表示輪詢機制,如果是1的話,就是第一個伺服器通過我們ip地址查找到的第一個伺服器,如果是2的話查找出來的也是第一個伺服器,不是通過ip地址
  • store_path = 0 預設輪詢
  • download_server = 0 下載服務預設輪詢

這裡我們就配置完成了,我們主要配置base_path 根目錄即可!!!
然後我們別忘了創建剛纔自定義的目錄

mkdir -p /fastdfs/tracker

4.3.啟動tracker

我們創建完目錄呢,就可以啟動tracker了,來到啟動目錄

cd /etc/init.d/

image.png
我們看到有兩個文件 fdfs_trackerd和fdfs_storaged這兩個就是我們啟動的文件
我們之前安裝的時候,我們修改過它的一個目錄,所以呢我們這邊啟動的時候呢,也去修改它的一個目錄,如果我們沒有去修改它的目錄,這邊可以直接啟動!!!
我們進入配置文件修改目錄即可!!!

vim fdfs_trackerd

我們修改之後應該是/usr/local/bin/fdfs_trackerd,
image.png
保存並退出, 啟動即可

./fdfs_trackerd start

image.png
怎麼去看有沒有啟動成功呢?
兩種方法:
查看狀態

./fdfs_trackerd status

image.png
查看進程

ps -ef|grep fdfs

image.png
停止

.fdfs_trackerd stop

重啟

/etc/init.d/fdfs_trackerd restart

開機啟動
我們進入文件

vim /etc/rc.d/rc.local

添加啟動文件
image.png

/etc/init.d/fdfs_tracked start

4.4.小結

我們現在已經啟動了tracker包括我們相應的一些配置,其實真正要做的配置沒有,預設的埠都沒改,只是把它的base_path 根目錄進行了一個修改,當然這個修改也是可有可無的,但是記住一定要創建,有一個負載均衡,大部分預設都是一個輪詢的方式,其它的也沒什麼!!!

5.配置Storage

5.1.拷貝storage.conf.sample

跟tracker一樣

cd /etc/fdfs

image.png
同樣,拷貝一份

cp storage.conf.sample storage.conf

5.2.配置storage.conf

修改storage

vim storage.conf

也是一樣,我們觀察一下裡面的屬性
image.png

  • group_name = group1 預設組名,也是捲名
  • bind_addr = 綁定的ip地址
  • client_bind = true 是否允許客戶端訪問
  • port = 23000 埠號
  • connect_timeout = 5 連接超時
  • network_timeout = 60 網路超時
  • base_path = /home/yuqing/fastdfs【同樣這裡也是存放storage_server它裡面基礎數據的內容,以及日誌內容的目錄,比如說啟動的進程號、同步的相應信息,我們也可以進行修改,/fastdfs/storage/base
  • max_connections =1024 最大連接數
  • buff_size = 256KB 緩衝大小
  • accept_threads = 1接收的線程
  • work_threads = 4 工作的線程
  • store_path0 = /home/yuqing/fastdfs【這個目錄是我們真正存放文件的目錄,我們也更改一下 /fastdfs/storage/store,這個目錄會在我們storage啟動的時候,它會去生成256x256目錄,當然我們base_path和store_path0可以用同一個目錄也是沒有問題的,一般建議分開好區分】
  • tracker_server = 192.168.209.121:22122【這裡也是我們需要修改的地方,有兩個我們只需要一個即可,為什麼有兩個,因為我們tracker也是可以搞集群的,可以配置多個,這裡我們直接寫我們tracker追蹤伺服器ip地址,如果是同一臺伺服器寫本機ip即可,埠不變!!!】

保存並退出即可!!!
創建我們剛纔自定義的目錄

mkdir -p /fastdfs/storage/base
mkdir -p /fastdfs/storage/store

我們安裝的時候也修改了目錄,所以我們這裡也要修改一下

vim /etc/init.d/fdfs_storaged

修改PRG=/usr/local/bin/fdfs_storaged
image.png

5.3.啟動storage

保存並退出,啟動storage

/etc/init.d/fdfs_storaged start	 

image.png
查看狀態

/etc/init.d/fdfs_storaged status

image.png
停止

/etc/init.d/fdfs_storaged stop

重啟

/etc/init.d/fdfs_storaged restart

開啟啟動
我們進入文件

vim /etc/rc.d/rc.local

添加啟動文件
image.png
啟動之後我們可以去看看我們剛纔創建的兩個目錄

cd /fastdfs storage/

image.png
base目錄【基礎數據目錄】
可以看到有一個data和logs 基礎數據和日誌
image.png
可以看到有對應的一個日誌
image.png
進入data目錄image.png
裡面有對應我們storage的一個進程號,然後啟動的一個數據和**同步相應的相關信息 **
我們回去看我們store

cd ../../store

這裡也有一個data,這個data存放我們上傳文件的目錄
image.png
我們發現這邊使用16進位,從00一直到FF,一共是256個目錄,然後我們每一個目錄下麵還有256個子目錄
image.png
我們cd 00 再 ls
我們發現還是有 00 -FF 256個目錄
image.png
再00就沒了!!!再往下這邊就會存放我們的文件了,至於我們文件上傳上來之後會存放在那個目錄下麵,這個不需要我們去關係,storage會自己去存放,並且我們的tracker會去把我們的一個完整的捲名加文件名,這個文件名就是從data到00再到00再到下麵的具體文件名一整個完整路徑返回給我們,我們直接能拿到,它具體存放在著256個目錄那個目錄這個不需要我們操心,這是storage自定義去完成的,我們這裡storage開機啟動前提是必須先啟動tracker再啟動storage,不然會報錯,因為我們storage配置文件裡面配置了tracker_server,所以我們這邊如果想要stroage開機自啟,必須設置tracker也開機自啟,不然不建議storage自啟!!!

6.Client配置【可選】

客戶端配置不是必需的,因為客戶端配置完相當於用命令行去測試我們的fastdfs,所以我們如果不准備用命令行測試,而是準備用代碼測試的話,我們完全可以跳過!!!
我們可以把Client放在tracker和storage任意伺服器下,並不影響,把它配置改一下即可!!!

6.1.拷貝client.conf.sample

首先進入我們配置模板

cd /etc/fdfs

我們可以看到這邊有一個client.conf.sample
image.png同樣,我們先拷貝

cp client.conf.sample client.conf

6.2.配置client.conf

進入配置文件

vim client.conf

可以看下它的屬性,更改的地方加粗

  • connect_timeout =5 連接超時
  • network_timeout = 60 網路超時
  • base_path = /home/yuqing/fastdfs 基礎目錄 【我們更改一些,/fastdfs/client,這裡也是放客戶端運行所產生的一些相應的數據】
  • tracker_server = 192.168.0.196:22122【我們之前說過,我們如果是客戶端進行一個上傳和下載的話,中間都要經過一個tracker,我們上傳的時候呢,根據tracker找到storage的ip和埠進行上傳,如果我們是下載的話,客戶端也需要通過我們的tracker找到我們的一個ip和埠進行一個下載,所以我們這邊要配置一個tracker,改成本機地址 192.168.248.101】

到這裡,client配置就完成了,我們保存並退出,創建剛剛自定義的目錄

mkdir -p /fastdfs/client

6.3.上傳文件

我們看到root目錄下麵有個圖片,我們可以把這個上傳上去
image.png怎麼去上傳呢?上傳的話因為我們安裝的時候改過對應的一個目錄,我們的命令目錄呢在/usr/local/bin
我們上傳就是fdfs_upload_file
image.png

./fdfs_upload_file /etc/fdfs/client.conf ~/cat-114782_640 (1).jpg

上傳命令+客戶端配置+上傳的文件
返回上傳的完整捲名加文件名,它的文件名是重新命名的
image.png

  • group1是我們storage里的配置,配的一個捲名的名稱

image.png

  • M00 這是一個虛擬目錄
  • 00和00表示它放在data-00-00目錄下,當然一般情況下是按照順序保存的,但我們也不能完全保證,storage有自己的一個規則,上傳到哪一個目錄下麵去
  • wKj4ZWQJdC-AOV6HAAKSU_3XkA0484.jpg 文件名 重新命名了,防止文件名重覆!!!

我們可以進入storage存放文件目錄去查看我們上傳的文件
image.png

小結

我們要記住M00是一個虛擬目錄,有點相當於我們windows的快捷方式,它的引用主要是引用到我們的data目錄下麵,data就對應M00,快捷方式的一個意思

6.4.刪除文件

./fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/wKj4ZWQJdC-AOV6HAAKSU_3XkA0484.jpg

刪除命令+client配置文件+完整的捲名和文件名
這裡要註意,因為我們現在操作沒有ip和埠,所以我們需要根據追蹤器,根據這一整串完整的文件名去獲取stroage的ip和埠,才會去進行一個刪除這也就是我們client為什麼要去配置tracker伺服器
這樣則表示刪除成功
image.png
我們可以進入data-00-00查看是否刪除成功
我們發現後最484的文件名沒有了
image.png

7.安裝nginx和fastdfs_nginx_module

為什麼要安裝nginx呢?因為我們fastdfs是一個文件系統,那可以存放很多類型的文件,比如說存放圖片或者其它一個類型,圖片的話我們可以通過網頁直接去預覽,而不需要通過我們現在這個操作,通過client拿到一個完整的捲名加文件名,通過tracker拿到對應的ip地址和埠再去下載預覽,太麻煩,我們可以通過http協議直接在我們的url裡面輸入我們的一個ip埠,捲名文件名直接在瀏覽器裡面可以訪問這張圖片或預覽,那這個時候呢我們fastdfs沒法實現,就要安裝fastdfs_module_nginx和nginx進行代理
image.png

7.1.安裝組件fastdfs-nginx-module

解壓

tar zxvf fastdfs-nginx-module-1.22

cd 進入目錄
image.png

  • HISTOPY 歷史文件
  • INSTALL 安裝
  • src 源碼

我們來到src源碼目錄
image.png
源碼目錄有相應的一個配置,我們需要修改相應的一個配置

vim config

為什麼要改配置呢?因為我們去安裝我們的組件之後呢,會去安裝我們的nginx,安裝nginx的時候需要把我們的一個module模塊加進去,加進去之後會尋找我們的一個fastdfs對應的一個安裝的目錄,如果目錄不正確可能就安裝失敗了!!!所以我們需要去更改我們的一個目錄路徑
image.png
**修改的時候也有區別,因為我們裝fastdfs的時候修改了我們安裝目錄,所以我們這串目錄是改過目錄之後的,如果我們沒有修改過fastdfs的安裝目錄的,我們改的是另一個目錄 **

/usr/local/include/fastdfs /usr/include/fastcommon/

fastdfs位置+核心庫,這兩個改呢,是因為我們安裝改過,如果沒有的話呢,我們改的不是這兩個,就應該是把local刪掉就行了
保存並退出,我們的模塊就改好了,改好了之後並不代表它已經安裝了,怎麼去安裝呢,就是我們去安裝nginx的時候,把模塊添加上去即可,所以我們還要去安裝我們的nginx
image.png

7.2.安裝nginx

依賴
安裝之前我們還需要安裝對應依賴

yum install -y gcc gcc-c++ make automake autoconf libtool pcre pcre-develzlib zlib-devel
openss1 openss1-devel

image.png
解壓nginx
image.png

tar -zxvf nginx-1.16.1.tar.gz

查看目錄
image.png
我們需要去更改一下它的目錄
更改目錄
先準備一個目錄

mkdir -p /var/temp/nginx

配置nginx安裝信息

./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=/usr/local/fastdfs/fastdfs-nginx-module-1.22/src
  • --prefix=/usr/local/nginx \ 安裝路徑

下麵這些信息放入我們剛纔創建的文件

  • --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=/usr/local/fastdfs/fastdfs-nginx-module-1.22/src【這個是必須定義的,這個是我們安裝nginx的時候需要載入的一個模塊,如果沒有指定的話呢,nginx安裝過程中呢,就不會去載入fastdfs_nginx_module模塊,如果nginx配置文件添加了這個模塊,nginx啟動會報錯,後續功能無法實現!!!】

這樣我們nginx安裝信息就配置完成
image.png
接下來我們就可以進行安裝了
預編譯

make

編譯加安裝

make install

8.配置nginx模塊

8.1.拷貝mod_fastdfs.conf

同理跟上面操作一樣我們先把fastdfs_nginx_module模塊配置文件修改

cd /usr/local/fastdfs/fastdfs-nginx-module-1.22/src/

這裡面有一個我們對應的一個配置文件mod_fastdfs.conf
image.png

cd mod_fastdfs.conf /etc/fdfs

image.png
然後我們進行一個相應的修改

8.2.修改mod_fastdfs.conf

image.png

  • connect_timeout = 2 連接超時 ,可改可不改,改成10
  • network_timeout = 30 網路超時
  • base_path 基礎目錄
  • tracker_server = 192.168.248.101:22122【這裡也需要我們tracker伺服器,改成本機跟蹤伺服器ip即可】
  • storage_server_port = 23000 埠號
  • url_have_group_name = false 【表示我的url中是否要包含group名字,這裡我們改成true
  • 包含即可 】
  • <
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前端中介者模式(Mediator Pattern),用於將對象之間的通信解耦並集中管理。它通過引入一個中介者對象,將對象之間的交互轉移到中介者對象中,從而避免對象之間直接相互通信。 在前端開發中,中介者模式常常被用於管理複雜的用戶界面或組件之間的交互,比如 GUI 組件、聊天室、游戲等等。通過引入一 ...
  • 這篇文章主要描述如何解決消息重發的問題,目前主流的消息隊列產品都採用了At least once的服務質量,這就導致了很難避免消息重發的情況,我們可以將消費者業務邏輯設計成冪等服務來解決消息重發問題。 ...
  • 1. 減少記憶體使用 1.1. 減少堆記憶體的使用 1.1.1. 使用更少的記憶體意味著堆被填滿的頻率會降低,需要的GC周期會更少,其效果也可以成倍增強 1.1.2. 更少的新生代回收意味著對象的晉升年齡增加的頻率降低 1.1.3. 對象晉升到老年代的可能性也降低了 1.1.4. Full GC周期(或者 ...
  • Qt 學習筆記全系列傳送門: Qt 學習筆記 - 第一章 - 快速開始、信號與槽 Qt 學習筆記 - 第二章 - 添加圖片、佈局、界面切換 【本章】Qt 學習筆記 - 第三章 - Qt的三駕馬車之一 - 串口編程 + 程式打包成Windows軟體 1、創建項目 實現串口助手 創建 Qt Widget ...
  • find,grep,sed,awk find:常用在目錄下精確查找文件(最擅長找文件) grep:常用來做全局數據的查詢定位(最擅長文本過濾) sed:常用來做行數據增刪改查(最擅長取行) awk:常用來做列數據切分與提取(最擅長取列) 1.find【擅長在目錄下找文件】 find 命令用來在指定目 ...
  • 先看如下一個DEMO示例代碼:(其中doBatchGet被子類重寫了1次) public abstract class BaseDemoService<T> { public String batchGet(T... ints) { T one=ints[0]; System.out.println ...
  • 前置知識: Web 伺服器:可以指硬體上的,也可以指軟體上的。從硬體的角度來說, Web 伺服器指的就是一臺存儲了網路服務軟體的電腦;從軟體的角度來說, Web 伺服器指的是一種軟體,比如 Tomcat。 Servlet 容器:目前主流的 Servlet 容器軟體包括 Tomcat、Jetty、J... ...
  • SpringBoot Controller 控制器 SpringBoot提供了@Controller和@RestController兩種註解來標識此類負責接收和處理HTTP請求。 如果請求的是頁面和數據,使用@Controller註解即可;如果只是請求數據,則可以使用@RestController註 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...