FastDFS知識點學習
這個軟件是用來幹嘛的?
這個軟件可以用來管理 成千上萬臺linux服務器上面的文件。說白了就是管理很多臺機器上面的文件。
能幹這種事情的常見軟件有:
FastDFS 和 HDFS 。
1)一般的互聯網項目存放文件都是用的FastDFS ,中小公司使用這個文件管理軟件。
2)HDFS 在大數據的領域用的比較多。
傳統存儲文件方式 和 分佈式存儲文件方式
什麼是fastDFS?它是用來做什麼的?
(1)FastDFS其實就是一種數據庫,存放圖片,音樂的數據庫。
(2)我們的mysql數據庫只能存放信息,也就是數據庫表中的一行行數據。
(3)我們的FastDFS是來存放 小型的圖片、音樂等等資源的。
(4)像一個動態網站,網站中的 商品圖片或者背景音樂的資源都是通過fastDFS來獲取的。
(5)我們通過fastDFS軟件 將 我們的 文件 存放進 磁盤 中,爲什麼我們要使用faseDFS呢?
我們存放文件的地方是磁盤,但是實際開發中 我們存放文件的磁盤是做集羣的,也就是存放文件的地方 是 【磁盤集羣】,我們通過fastDFS軟件向磁盤集羣中分發存放。
FastDFS的優點:
FastDFS解決了大數據量文件存儲(這裏經常有人說成大數據,我本人是不贊同的)和讀寫分離,備份容錯,負載均衡,動態擴容等問題
FastDFS適合那些網站使用?
適合存儲4KB~500MB之間的小文件,如圖片網站、短視頻網站、文檔、app下載站等。
傳統的存儲方式:
所有的tomcat服務器都去同一個磁盤中讀取和存放文件,那樣就會有很多的IO操作,這樣對磁盤的壓力會很大,磁盤壓力大了就有可能損毀,損毀了數據就丟失了。
分佈式存儲方式:
所有的tomcat服務器通過 fastDFS軟件 來進行存儲文件,fastDFS將文件存放在【磁盤集羣】的不同的磁盤當中,這樣子就減少了磁盤的壓力。而且 每一個 磁盤的後面 都有一個屬於 自己的 冗餘備份,就算磁盤損壞了,我們還是有備份的。
在我們的 p2p項目中的 應用 :
我們在 p2p 項目中,沒完成一次交易 就會 生成一份合同,每一份合同 都是一張 pdf文件,所以成千上萬的合同PDF文件我們就可以使用 fastDFS軟件 將這些pdf文件存放進磁盤集羣當中 。
FastDFS中的【客戶端】:
我們java程序就是一個【客戶端】,我們向項目中導入一個jar包,然後我們 通過 調用jar包中接口中的方法 來 使用 fastDFS軟件 幫我們存放 文件。
FastDFS中的【服務端】:
服務端分爲兩部分【tracker】 和 【storage】。
【tracker】 : 主要的任務就是調度。就和註冊中心zookeeper差不多,因爲tracker中存放着 磁盤中存放的文件的信息 。 當我們通過fastDFS存放文件的時候,這個文件的信息會保存在 tracker中,然後我們的tracker會將文件保存在storage中。當我們讀取某個文件的時候,tracker會根據這個文件信息調取對應的文件。
【storage】 : 保存 文件 和 文件的屬性。
Linux 中 fastDFS的一些 可執行命令:
因爲我們的 /usr/bin 這個命令 是配置在PATH環境變量下的,所以我們的/usr/bin這個命令可以在任意的目錄下直接使用。
在linux中安裝完fastDFS之後,所有的可執行文件存放在:/usr/bin 目錄下。所有的配置文件存放在 /etc/fdfs目錄下。
Tracker.Conf配置文件中:
這個base_path就是用來存放 數據和log日誌的目錄 。
Storage.conf配置文件中:
這個base_path主要是用來存放log日誌的。
這個路徑是真正存放文件的路徑,爲什麼path後面有個0,因爲這個store_path可以指定多個:
如果我們要指定多個存放文件的路徑,那麼我們也要修改一下store_path的數量:
我們寫了兩個store_path:store_path0,store_path1
那麼我們的 store_path_count=2 需要修改成2 。
我們storage 服務是註冊在 那個tracker上面的,因爲tarcker是負責調度的,所以tracker裏面有 storage 中的文件信息 。
啓動 fastDFS的時候需要啓動兩個配置文件:
tracker和storage這兩個服務的配置文件,而且是有固定的啓動順序的。需要先啓動tracker ,然後再啓動 storage ,不能顛倒的。
當我們運行storage配置文件的時候,fastDFS會爲我們創建 256*256的雙層目錄結構,然後我們存放的文件就會存放在: /02/22 這樣的目錄下。
文件存放的位置:
這樣子就構成了 256*256的路徑數量。從而讓每個文件夾下面的文件不會太多,減輕每個文件夾因爲io操作所造成的壓力。
關閉fastDFS:
我們關閉 fast DFS的時候 需要關閉兩個 配置文件,因爲我們開啓fastDFS的時候開啓了兩個配置文件,分別爲:tracher.conf 和 storage.conf ,所以我們關閉的時候需要管理這兩個配置文件。
關閉的命令是: 開啓的命令 stop,也就是:
fdfs_tracherd /etc/fdfs/tracher.conf stop和 fdfs_storaged /etc/fdfs/storage.conf stop 在線上環境中:我們不建議使用kill -9進行關閉。因爲可能會造成不同服務器中文件不同步的現象,造成的原因如下:
線上環境中我們的服務器是分組的,可能分n個組,每個組中有 n個服務器,然後 我們通過一個服務器存放文件之後,會按照組的方式進行文件同步,同步到同一個組中所有的服務器中。如果存放的文件過大,同步的過程需要很長的時間,這時候使用kill -9 將fastDFS關閉了,那麼組中有的服務器還沒有同步完 就關閉了中斷了,這樣就會造成 有服務器中有這個文件,有的服務器中沒有這個文件,這樣就造成了服務器中文件的不同步。
重啓fastDFS:
如果你只需要重啓tracker 或者 storage 中的一個配置文件,那麼就只需要restart一個配置文件,不需要像 開啓fastdfs和關閉fastdfs一樣操作兩個配置文件。
命令爲:
fdfs_trackerd /etc/fdfs/tracker.conf restart
fdfs_storaged /etc/fdfs/storage.conf restart
小知識點:
元數據 就是 用來描述數據信息的 數據。
關於linux中根目錄(家目錄)的 問題:
普通用戶的家目錄(根目錄):/home/用戶名
Root用戶的家目錄:/root /root 這個目錄你是找不到的。
這時候所在的目錄就是root目錄下。
測試 fastDFS 上傳文件:
所使用的命令: fdfs_test /etc/fdfs/client.conf upload /root/aa.txt
aa.txt 文件存放的位置爲:紅線。
(1)因爲我們就一個組,這個組裏面256*256的目錄結構。
(2)因爲就一個組,所以默認組名爲 group1 。
(3)後面的 fiilname 是 文件存放的路徑。
(4)/M00 這個是 虛擬的目錄,這個目錄我們是看不到的,因爲這個目錄是fastDFS來進行管理的。
(5)/00/00 這個是 兩層包名 。 第一層有有256個包,每個包中又包含256個包,第一次包的包名爲00,第二層包的包名爲00,所以組成的路徑爲/00/00 。
(6) /wKjyglxkBuSAbT8iAAAAAc3XBpM982.txt 這個文件就是 aa.txt文件, 因爲 我們 fastDFS要確保 我們保存的 文件名不能重複,是唯一的。
下圖是文件的請求地址:
上圖是 文件上傳測試後 測試結果:
(1)3 是我們通過fastDFS存放的文件,因爲fastDFS爲了確保存放的文件在 組和目錄中是唯一的不重複的,所以對我們的文件名進行了處理。
(2)1 2 4 是我們通過fastDFS 存放3文件時 同時產生的文件。
(3)
1)wKjyglxkBuSAbT8iAAAAAc3XBpM982.txt 是主文件 。
2)wKjyglxkBuSAbT8iAAAAAc3XBpM982_big.txt 是從文件。
3)wKjyglxkBuSAbT8iAAAAAc3XBpM982.txt-m 文件 是 wKjyglxkBuSAbT8iAAAAAc3XBpM982.txt文件 屬性文件,意思就是:wKjyglxkBuSAbT8iAAAAAc3XBpM982.txt-m中存放的是wKjyglxkBuSAbT8iAAAAAc3XBpM982.txt文件的各項屬性的信息,比如文件的類型,高度和寬度等等屬性的信息。
4)wKjyglxkBuSAbT8iAAAAAc3XBpM982_big.txt-m 文件是 wKjyglxkBuSAbT8iAAAAAc3XBpM982_big.txt文件的屬性文件。
(4)但是我們只想 向 磁盤中存放 文件3,文件124我們是不想存儲的,所以這樣就很佔用空間,所以我們在實際的開發中 只會存放 文件3 。
我們通過 fastDFS 存放 需要存放的文件之後,我們可以通過 日誌打印給我們的 file url 來訪問我們剛剛儲存的 文件。但是這個url地址,是不能通過瀏覽器進行訪問的,我們在地址欄中輸入這段url地址之後 是無法訪問 剛剛存放的文件的。 因爲我們的 fastDFS是不能接受通過瀏覽器 發送過來的請求的,所以就更不能將文件中的內容顯示在我們的瀏覽器中。
如果想通過了瀏覽器來訪問 存放進去的 文件,解決方法如下:
分佈式系統中的單點故障問題:
分佈式系統有哪些優點:
文件同步 : 就是 文件備份,將文件同步(備份)到另一個磁盤中去。
我們寫了一套程序去訪問fastdfs,這個程序就是客戶端。
(1)Tracker 會將 一些storage的一些信息存放在內存中,存放的信息是:有多少個節點,節點的ip地址和端口等等,因爲是存放在內存中,所以tracker的效率很高。
(2)Storage 就是用來存放 文件 和 文件的屬性的文件,將這兩個文件存放在 服務器磁盤中。
因爲 tracker處於 java程序和storage之間,所以我們只需要跟 tracker打交道就行了。