來(lái)源:一葉知秋
作者:知秋
這里簡(jiǎn)單說(shuō)下fastdfs
的說(shuō)明搭建使用丐重,回頭專門出附章來(lái)講這塊的api
和各種配置,這里就來(lái)過(guò)簡(jiǎn)易版的拱层,能進(jìn)行開(kāi)發(fā)就可弥臼。
什么是FastDFS
FastDFS
是一個(gè)開(kāi)源的輕量級(jí)分布式文件系統(tǒng)。它解決了大數(shù)據(jù)量存儲(chǔ)和負(fù)載均衡等問(wèn)題根灯。特別適合以中小文件(建議范圍:4KB< file_size <500MB)
為載體的在線服務(wù)径缅,如相冊(cè)網(wǎng)站、視頻網(wǎng)站等等烙肺。
FastDFS
是用c語(yǔ)言編寫的一款開(kāi)源的分布式文件系統(tǒng)纳猪。FastDFS
為互聯(lián)網(wǎng)量身定制,充分考慮了冗余備份桃笙、負(fù)載均衡氏堤、線性擴(kuò)容等機(jī)制,并注重高可用、高性能等指標(biāo)鼠锈,使用FastDFS
很容易搭建一套高性能的文件服務(wù)器集群提供文件上傳拘悦、下載等服務(wù)。
FastDFS的設(shè)計(jì)理念
和現(xiàn)有的類Google FS
分布式文件系統(tǒng)相比黔姜,FastDFS
的架構(gòu)和設(shè)計(jì)理念有其獨(dú)到之處耘柱,主要體現(xiàn)在輕量級(jí)
、分組方式
和對(duì)等結(jié)構(gòu)
三個(gè)方面同欠。
輕量級(jí)
FastDFS
只有兩個(gè)角色:Tracker server
和Storage server
样傍。Tracker server
作為中心結(jié)點(diǎn),其主要作用是負(fù)載均衡和調(diào)度铺遂。
Tracker server
在內(nèi)存中記錄分組
和Storage server
的狀態(tài)等信息衫哥,不記錄文件索引信息,占用的內(nèi)存量很少襟锐。另外撤逢,客戶端(應(yīng)用)和Storage server
訪問(wèn)Tracker server
時(shí),Tracker server
掃描內(nèi)存中的分組和Storage server
信息捌斧,然后給出應(yīng)答笛质。由此可以看出Tracker server
非常輕量化,不會(huì)成為系統(tǒng)瓶頸捞蚂。
FastDFS
中的Storage server
在其他文件系統(tǒng)中通常稱作Trunk server
或Dataserver
妇押。Storage server
直接利用OS
的文件系統(tǒng)存儲(chǔ)文件。FastDFS
不會(huì)對(duì)文件進(jìn)行分塊存儲(chǔ)姓迅,客戶端上傳的文件和Storage server
上的文件一一對(duì)應(yīng)敲霍。
眾所周知,大多數(shù)網(wǎng)站都需要存儲(chǔ)用戶上傳的文件丁存,如圖片肩杈、視頻、電子文檔等解寝。出于降低帶寬和存儲(chǔ)成本的考慮扩然,網(wǎng)站通常都會(huì)限制用戶上傳的文件大小,例如圖片文件不能超過(guò)5MB聋伦、視頻文件不能超過(guò)100MB等夫偶。我認(rèn)為,對(duì)于互聯(lián)網(wǎng)應(yīng)用觉增,文件分塊存儲(chǔ)沒(méi)有多大的必要兵拢。它既沒(méi)有帶來(lái)多大的好處,又增加了系統(tǒng)的復(fù)雜性逾礁。FastDFS
不對(duì)文件進(jìn)行分塊存儲(chǔ)说铃,與支持文件分塊存儲(chǔ)的DFS
相比,更加簡(jiǎn)潔高效,并且完全能滿足絕大多數(shù)互聯(lián)網(wǎng)應(yīng)用的實(shí)際需要腻扇。
在FastDFS
中债热,客戶端上傳文件時(shí),文件ID
不是由客戶端指定衙解,而是由Storage server
生成后返回給客戶端的阳柔。文件ID
中包含了組名
焰枢、文件相對(duì)路徑
和文件名
蚓峦,Storage server
可以根據(jù)文件ID
直接定位到文件。因此FastDFS
集群中根本不需要存儲(chǔ)文件索引信息济锄,這是FastDFS
比較輕量級(jí)的一個(gè)例證暑椰。而其他文件系統(tǒng)則需要存儲(chǔ)文件索引信息,這樣的角色通常稱作NameServer
荐绝。其中mogileFS
采用MySQL
數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)文件索引以及系統(tǒng)相關(guān)的信息,其局限性顯而易見(jiàn)召夹,MySQL
將成為整個(gè)系統(tǒng)的瓶頸。
FastDFS
輕量級(jí)的另外一個(gè)體現(xiàn)是代碼量較小婶溯。最新的V2.0
包括了C
客戶端API
褐筛、FastDHT
客戶端API
和PHP extension
等渔扎,代碼行數(shù)不到5.2
萬(wàn)行晃痴。
分組方式
類Google FS
都支持文件冗余備份愧旦,例如Google FS
笤虫、TFS
的備份數(shù)是3酬凳。一個(gè)文件存儲(chǔ)到哪幾個(gè)存儲(chǔ)結(jié)點(diǎn)宁仔,通常采用動(dòng)態(tài)分配的方式。采用這種方式煎谍,一個(gè)文件存儲(chǔ)到的結(jié)點(diǎn)是不確定的呐粘。舉例說(shuō)明,文件備份數(shù)是3五芝,集群中有A谤辜、B、C脯倚、D四個(gè)存儲(chǔ)結(jié)點(diǎn)推正。文件1可能存儲(chǔ)在A植榕、B炒瘸、C三個(gè)結(jié)點(diǎn)顷扩,文件2可能存儲(chǔ)在B隘截、C婶芭、D三個(gè)結(jié)點(diǎn),文件3可能存儲(chǔ)在A、B贵扰、D三個(gè)結(jié)點(diǎn)。
FastDFS
采用了分組存儲(chǔ)
方式舞丛。集群由一個(gè)或多個(gè)組構(gòu)成,集群存儲(chǔ)總?cè)萘繛榧褐兴薪M的存儲(chǔ)容量之和吨凑。一個(gè)組由一臺(tái)或多臺(tái)存儲(chǔ)服務(wù)器組成鸵钝,同組內(nèi)的多臺(tái)Storage server
之間是互備關(guān)系,同組存儲(chǔ)服務(wù)器上的文件是完全一致的韧献。文件上傳锤窑、下載渊啰、刪除等操作可以在組內(nèi)任意一臺(tái)Storage server
上進(jìn)行。類似木桶短板效應(yīng)嚷那,一個(gè)組的存儲(chǔ)容量為該組內(nèi)存儲(chǔ)服務(wù)器容量最小的那個(gè)魏宽,由此可見(jiàn)組內(nèi)存儲(chǔ)服務(wù)器的軟硬件配置最好是一致的队询。采用分組存儲(chǔ)方式的好處是靈活、可控性較強(qiáng)
。比如上傳文件時(shí)丑蛤,可以由客戶端直接指定上傳到的組叠聋。一個(gè)分組的存儲(chǔ)服務(wù)器訪問(wèn)壓力較大時(shí),可以在該組增加存儲(chǔ)服務(wù)器來(lái)擴(kuò)充服務(wù)能力(縱向擴(kuò)容)盏阶。當(dāng)系統(tǒng)容量不足時(shí)晒奕,可以增加組來(lái)擴(kuò)充存儲(chǔ)容量(橫向擴(kuò)容)。采用這樣的分組存儲(chǔ)方式名斟,可以使用FastDFS
對(duì)文件進(jìn)行管理脑慧,使用主流的Web server
如Apache、nginx
等進(jìn)行文件下載。
對(duì)等結(jié)構(gòu)
FastDFS
集群中的Tracker server
也可以有多臺(tái),Tracker server
和Storage server
均不存在單點(diǎn)問(wèn)題。Tracker server
之間是對(duì)等關(guān)系,組內(nèi)的Storage server
之間也是對(duì)等關(guān)系斥赋。傳統(tǒng)的Master-Slave
結(jié)構(gòu)中的Master
是單點(diǎn)蹬挤,寫操作僅針對(duì)Master
蹋嵌。如果Master
失效,需要將Slave
提升為Master
船响,實(shí)現(xiàn)邏輯會(huì)比較復(fù)雜篷帅。和Master-Slave
結(jié)構(gòu)相比,對(duì)等結(jié)構(gòu)中所有結(jié)點(diǎn)的地位是相同的,每個(gè)結(jié)點(diǎn)都是Master瘾杭,不存在單點(diǎn)問(wèn)題
。
FastDFS的架構(gòu)
FastDFS的系統(tǒng)架構(gòu) 如圖:
從圖中可以看出棘催,Tracker server之間相互獨(dú)立郑叠,不存在直接聯(lián)系。
客戶端和Storage server
主動(dòng)連接Tracker server
。Storage server
主動(dòng)向Tracker server
報(bào)告其狀態(tài)信息,包括磁盤剩余空間瓤狐、文件同步狀況批幌、文件上傳下載次數(shù)等統(tǒng)計(jì)信息芬首。Storage server
會(huì)連接集群中所有的Tracker server
,向他們報(bào)告自己的狀態(tài)。Storage server
啟動(dòng)一個(gè)單獨(dú)的線程來(lái)完成對(duì)一臺(tái)Tracker server
的連接和定時(shí)報(bào)告。需要說(shuō)明的是定页,一個(gè)組包含的Storage server
不是通過(guò)配置文件設(shè)定的押桃,而是通過(guò)Tracker server
獲取到的葵萎。
不同組的Storage server
之間不會(huì)相互通信,同組內(nèi)的Storage server
之間會(huì)相互連接進(jìn)行文件同步唱凯。Storage server
采用binlog
文件記錄文件上傳羡忘、刪除等更新操作。binlog
中只記錄文件名磕昼,不記錄文件內(nèi)容卷雕。
? 文件同步只在同組內(nèi)的Storage server
之間進(jìn)行,采用push
方式票从,即源頭服務(wù)器同步給目標(biāo)服務(wù)器漫雕。只有源頭數(shù)據(jù)才需要同步,備份數(shù)據(jù)并不需要再次同步峰鄙,否則就構(gòu)成環(huán)路了浸间。有個(gè)例外,就是新增加一臺(tái)Storage server
時(shí)吟榴,由已有的一臺(tái)Storage server
將已有的所有數(shù)據(jù)(包括源頭數(shù)據(jù)和備份數(shù)據(jù))同步給該新增服務(wù)器魁蒜。
?
Storage server
中由專門的線程根據(jù)binlog
進(jìn)行文件同步。為了最大程度地避免相互影響以及出于系統(tǒng)簡(jiǎn)潔性考
慮,Storage server
對(duì)組內(nèi)除自己以外的每臺(tái)服務(wù)器都會(huì)啟動(dòng)一個(gè)線程來(lái)進(jìn)行文件同步兜看。
文件同步采用增量同步方式锥咸,系統(tǒng)記錄已同步的位置(binlog
文件偏移量)到標(biāo)識(shí)文件中。標(biāo)識(shí)文件名格式:
{dest storage IP}_{port}.mark
铣减,例如:192.168.1.14_23000.mark她君。
文件上傳和下載的交互過(guò)程
文件上傳流程
接下來(lái)我們一起看一下文件上傳和下載的交互過(guò)程。文件上傳流程的步驟如下
Client
詢問(wèn)Tracker server
上傳到的Storage server
葫哗;Tracker server
返回一臺(tái)可用的Storage server
缔刹,返回的數(shù)據(jù)為該Storage server
的IP地址和端口;- Client直接和該
Storage server
建立連接劣针,進(jìn)行文件上傳校镐,Storage server
返回新生成的文件ID
,文件上傳結(jié)束捺典。
再啰嗦點(diǎn)細(xì)節(jié):
選擇tracker server
當(dāng)集群中不止一個(gè)tracker server時(shí)鸟廓,由于tracker之間是完全對(duì)等的關(guān)系,客戶端在upload文件時(shí)可以任意選擇一個(gè)trakcer襟己。
選擇存儲(chǔ)的group
當(dāng)tracker接收到upload file的請(qǐng)求時(shí)引谜,會(huì)為該文件分配一個(gè)可以存儲(chǔ)該文件的group,支持如下選擇group的規(guī)則: 1. Round robin擎浴,所有的group間輪詢 2. Specified group员咽,指定某一個(gè)確定的group 3. Load balance,剩余存儲(chǔ)空間多多group優(yōu)先
選擇storage server
當(dāng)選定group后贮预,tracker會(huì)在group內(nèi)選擇一個(gè)storage server給客戶端贝室,支持如下選擇storage的規(guī)則: 1. Round robin,在group內(nèi)的所有storage間輪詢 2. First server ordered by ip仿吞,按ip排序 3. First server ordered by priority滑频,按優(yōu)先級(jí)排序(優(yōu)先級(jí)在storage上配置)
選擇storage path
當(dāng)分配好storage server后,客戶端將向storage發(fā)送寫文件請(qǐng)求唤冈,storage將會(huì)為文件分配一個(gè)數(shù)據(jù)存儲(chǔ)目錄峡迷,支持如下規(guī)則: 1. Round robin,多個(gè)存儲(chǔ)目錄間輪詢 2. 剩余存儲(chǔ)空間最多的優(yōu)先
生成Fileid
選定存儲(chǔ)目錄之后你虹,storage會(huì)為文件生一個(gè)Fileid凉当,由storage server ip、文件創(chuàng)建時(shí)間售葡、文件大小、文件crc32和一個(gè)隨機(jī)數(shù)拼接而成忠藤,然后將這個(gè)二進(jìn)制串進(jìn)行base64編碼挟伙,轉(zhuǎn)換為可打印的字符串。
選擇兩級(jí)目錄
當(dāng)選定存儲(chǔ)目錄之后,storage會(huì)為文件分配一個(gè)fileid尖阔,每個(gè)存儲(chǔ)目錄下有兩級(jí)256*256的子目錄贮缅,storage會(huì)按文件fileid進(jìn)行兩次hash(猜測(cè)),路由到其中一個(gè)子目錄介却,然后將文件以fileid為文件名存儲(chǔ)到該子目錄下谴供。
生成文件名
當(dāng)文件存儲(chǔ)到某個(gè)子目錄后,即認(rèn)為該文件存儲(chǔ)成功齿坷,接下來(lái)會(huì)為該文件生成一個(gè)文件名桂肌,文件名由group、存儲(chǔ)目錄永淌、兩級(jí)子目錄崎场、fileid、文件后綴名(由客戶端指定遂蛀,主要用于區(qū)分文件類型)拼接而成谭跨。
客戶端上傳文件后存儲(chǔ)服務(wù)器將文件ID返回給客戶端,此文件ID用于以后訪問(wèn)該文件的索引信息李滴。文件索引信息包括:組名螃宙,虛擬磁盤路徑,數(shù)據(jù)兩級(jí)目錄所坯,文件名谆扎。
文件同步
寫文件時(shí),客戶端將文件寫至group
內(nèi)一個(gè)storage server
即認(rèn)為寫文件成功包竹,storage server
寫完文件后燕酷,會(huì)由后臺(tái)線程將文件同步至同group
內(nèi)其他的storage server
。
每個(gè)storage
寫文件后周瞎,同時(shí)會(huì)寫一份binlog
苗缩,binlog
里不包含文件數(shù)據(jù),只包含文件名等元信息声诸,這份binlog
用于后臺(tái)同步酱讶,storage
會(huì)記錄向group
內(nèi)其他storage
同步的進(jìn)度,以便重啟后能接上次的進(jìn)度繼續(xù)同步彼乌;進(jìn)度以時(shí)間戳的方式進(jìn)行記錄泻肯,所以最好能保證集群內(nèi)所有server
的時(shí)鐘保持同步。
storage
的同步進(jìn)度會(huì)作為元數(shù)據(jù)的一部分匯報(bào)到tracker
上慰照,tracker
在選擇讀storage
的時(shí)候會(huì)以同步進(jìn)度作為參考灶挟。
比如一個(gè)group內(nèi)有A、B毒租、C三個(gè)storage server
稚铣,A向C同步到進(jìn)度為T1 (T1以前寫的文件都已經(jīng)同步到B上了),B向C同步到時(shí)間戳為T2(T2 > T1),tracker
接收到這些同步進(jìn)度信息時(shí)惕医,就會(huì)進(jìn)行整理耕漱,將最小的那個(gè)做為C的同步時(shí)間戳,本例中T1即為C的同步時(shí)間戳為T1(即所有T1以前寫的數(shù)據(jù)都已經(jīng)同步到C上了)抬伺;同理螟够,根據(jù)上述規(guī)則,tracker會(huì)為A峡钓、B生成一個(gè)同步時(shí)間戳妓笙。
文件下載流程
- Client詢問(wèn)Tracker server可以下載指定文件的Storage server,參數(shù)為文件ID(包含組名和文件名)椒楣;
- Tracker server返回一臺(tái)可用的Storage server给郊;
- Client直接和該Storage server建立連接,完成文件下載
文件同步延遲問(wèn)題的提出
客戶端將一個(gè)文件上傳到一臺(tái)Storage server后捧灰,文件上傳工作就結(jié)束了淆九。由該Storage server根據(jù)binlog中的上傳記錄將這個(gè)文件同步到同組的其他Storage server。這樣的文件同步方式是異步方式毛俏,異步方式帶來(lái)了文件同步延遲的問(wèn)題炭庙。新上傳文件后,在尚未被同步過(guò)去的Storage server上訪問(wèn)該文件煌寇,會(huì)出現(xiàn)找不到文件的現(xiàn)象焕蹄。
FastDFS是如何解決文件同步延遲這個(gè)問(wèn)題的呢?
文件的訪問(wèn)分為兩種情況:文件更新和文件下載阀溶。文件更新包括設(shè)置文件附加屬性和刪除文件腻脏。文件的附加屬性包括文件大小、圖片寬度银锻、圖片高度等永品。FastDFS中,文件更新操作都會(huì)優(yōu)先選擇源Storage server击纬,也就是該文件被上傳到的那臺(tái)Storage server
鼎姐。這樣的做法不僅避免了文件同步延遲的問(wèn)題,而且有效地避免了在多臺(tái)Storage server上更新同一文件可能引起的時(shí)序錯(cuò)亂的問(wèn)題更振。
那么文件下載是如何解決文件同步延遲這個(gè)問(wèn)題的呢炕桨?
要回答這個(gè)問(wèn)題,需要先了解文件名中包含了什么樣的信息肯腕。Storage server生成的文件名中献宫,包含了源Storage server的IP地址和文件創(chuàng)建時(shí)間等字段。文件創(chuàng)建時(shí)間為UNIX時(shí)間戳实撒,后面稱為文件時(shí)間戳遵蚜。從文件名或文件ID中帖池,可以反解出這兩個(gè)字段。然后我們?cè)賮?lái)看一下吭净,Tracker server是如何準(zhǔn)確地知道一個(gè)文件已被同步到一臺(tái)Storage server上的。前面已經(jīng)講過(guò)肴甸,文件同步采用主動(dòng)推送的方式寂殉。另外,每臺(tái)storage server都會(huì)定時(shí)向tracker server報(bào)告它向同組的其他storage server同步到的文件時(shí)間戳原在。當(dāng)tracker server收到一臺(tái)storage server的文件同步報(bào)告后友扰,它會(huì)依次找出該組內(nèi)各個(gè)storage server(后稱作為S)被同步到的文件時(shí)間戳最小值,作為S的一個(gè)屬性記錄到內(nèi)存中庶柿。
FastDFS對(duì)文件同步延遲問(wèn)題的解決方案
下面我們來(lái)看一下FastDFS采取的解決方法村怪。
一個(gè)最簡(jiǎn)單的解決辦法,和文件更新一樣浮庐,優(yōu)先選擇源Storage server下載文件即可甚负。這可以在Tracker server的配置文件中設(shè)置,對(duì)應(yīng)的參數(shù)名為download_server审残。
另外一種選擇Storage server的方法是輪流選擇(round-robin)梭域。當(dāng)Client詢問(wèn)Tracker server有哪些Storage server可以下載指定文件時(shí),Tracker server返回滿足如下四個(gè)條件之一的Storage server:
該文件上傳到的源Storage server搅轿,文件直接上傳到該服務(wù)器上的病涨;
文件創(chuàng)建時(shí)間戳 < Storage server被同步到的文件時(shí)間戳,這意味著當(dāng)前文件已經(jīng)被同步過(guò)來(lái)了璧坟;
文件創(chuàng)建時(shí)間戳=Storage server被同步到的文件時(shí)間戳既穆,且(當(dāng)前時(shí)間—文件創(chuàng)建時(shí)間戳) > 一個(gè)文件同步完成需要的最大時(shí)間(如5分鐘);
(當(dāng)前時(shí)間—文件創(chuàng)建時(shí)間戳) > 文件同步延遲閾值雀鹃,比如我們把閾值設(shè)置為1天幻工,表示文件同步在一天內(nèi)肯定可以完成。
圖片服務(wù)器的搭建
因?yàn)殚_(kāi)發(fā)所用褐澎,這里就搭建個(gè)單機(jī)版
安裝環(huán)境 CentOS6.8 64位
需要gcc的編譯環(huán)境
需要libevent的包会钝。
yum install -y zlib zlib-devel pcre pcre-devel gcc gcc-c++ openssl openssl-devel libevent libevent-devel perl unzip
安裝步驟
Tracker的安裝
第一步:把源碼包上傳到linux系統(tǒng)。
第二步:解壓縮libfastcommonV1.0.7.tar.gz包工三。
第三步:進(jìn)入/root/libfastcommon-1.0.7文件夾執(zhí)行./make.sh迁酸、./make.sh install
安裝libfastcommon
下載最新版本: libfastcommon
wget https://github.com/happyfish100/libfastcommon/archive/master.zip
unzip master.zip
cd libfastcommon-master/
./make.sh
./make.sh install
第四步:把/usr/lib64/libfastcommon.so文件向/usr/lib文件夾下復(fù)制一份。(32位系統(tǒng)可這么做俭正,64位不需要)
第五步:把FastDFS_v5.05.tar.gz解壓縮奸鬓。
第六步:進(jìn)入/root/FastDFS目錄執(zhí)行:./make.sh、./make.sh install
wget http://sourceforge.net/projects/fastdfs/files/FastDFS%20Server%20Source%20Code/FastDFS%20Server%20with%20PHP%20Extension%20Source%20Code%20V5.05/FastDFS_v5.05.tar.gz
tar zxf FastDFS_v5.05.tar.gz && cd FastDFS
./make.sh
./make.sh install
\cp -pa conf/*.conf /etc/fdfs/
cd /etc/fdfs/
rm -rf *.sample
第七步:配置trackerServer掸读。
1串远、 把/root/FastDFS/conf
目錄下的所以的文件復(fù)制到/etc/fdfs
目錄下宏多。
2、 編輯/etc/fdfs/tracker.conf
第八步:?jiǎn)?dòng)tracker服務(wù)
/usr/bin/fdfs_trackerd/etc/fdfs/tracker.conf restart
Storage服務(wù)的安裝
如果storage和tracker不在同一臺(tái)服務(wù)上需要重復(fù)執(zhí)行Tracker的安裝的第一步到第六步
配置Storage服務(wù):
需要修改/etc/fdfs/storage.conf
文件
啟動(dòng)服務(wù):
[root@localhost fdfs]#/usr/bin/fdfs_storaged /etc/fdfs/storage.conf
測(cè)試上傳服務(wù)
修改客戶端的配置文件/etc/fdfs/client.conf
上傳文件:
/usr/bin/fdfs_testclient.conf upload xxx.jpg
訪問(wèn)圖片
使用FastDFS的Nginx插件和Nginx配合澡罚,實(shí)現(xiàn)圖片的訪問(wèn)伸但。Nginx需要安裝到storage服務(wù)所在的服務(wù)器
安裝步驟:
第一步:把插件包解壓縮。fastdfs-nginx-module_v1.16.tar.gz
第二步:編輯/root/fastdfs-nginx-module/src/config文件留搔。刪除其中的local字樣
wget http://nginx.org/download/nginx-1.8.0.tar.gz
http://sourceforge.net/projects/fastdfs/files/FastDFS%20Nginx%20Module%20Source%20Code/fastdfs-nginx-module_v1.16.tar.gz/download
tar zxf fastdfs-nginx-module_v1.16.tar.gz && tar zxf nginx-1.8.0.tar.gz
#修改模塊中對(duì)應(yīng)的路徑更胖,要不然模塊不能正確安裝加載
cd fastdfs-nginx-module/src
vi conf #更改如下, 去掉local隔显,并指定lib64(64系統(tǒng))
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
CORE_LIBS="$CORE_LIBS -L/usr/lib64 -lfastcommon -lfdfsclient"
第三步:把/root/fastdfs-nginx-module/src/mod_fastdfs.conf
文件復(fù)制到/etc/fdfs
目錄下却妨。
第四步:把/usr/lib64/libfdfsclient.so
文件復(fù)制到/usr/lib
目錄下(32位系統(tǒng),64位系統(tǒng)不需要)
第五步:編譯Nginx
對(duì)Nginx進(jìn)行config
./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=/root/fastdfs-nginx-module/src
第六步:配置Nginx
第七步:編輯Nginx
插件的配置文件:
修改/etc/fdfs/mod_fastdfs.conf
文件
第八步:?jiǎn)?dòng)Nginx
最後括眠,再多說(shuō)一點(diǎn) 這是之前自己 筆記的一點(diǎn)心得彪标,貼出來(lái)
nginx通過(guò)插件fastdfs-nginx-module_v1.16.tar管理訪問(wèn)/group1/M00/過(guò)來(lái)的路徑
這是插件的日志路徑
# the base path to store log files
base_path=/tmp
這里接收管理storage存放路徑
# store_path#, based 0, if store_path0 not exists, it's value is base_path
# the paths must be exist
# must same as storage.conf 注意看這些注釋,然后就知道怎么配了
store_path0=/home/fastdfs/storage
通過(guò)下面來(lái)和索引器聯(lián)系起來(lái)
# valid only when load_fdfs_parameters_from_tracker is true
tracker_server=192.168.42.129:22122
忘說(shuō)了:
啟動(dòng)測(cè)試前掷豺,開(kāi)放端口號(hào)端口給瀏覽器訪問(wèn)
/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 22 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 22122 -j ACCEPT
#然后保存:
/etc/rc.d/init.d/iptables save
#重啟防火墻以便改動(dòng)生效:(或者直接重啟系統(tǒng))
/etc/init.d/iptables restart
往期回顧:
- 【Java實(shí)戰(zhàn)項(xiàng)目】Migo商城2.0 參考通用mapper思想對(duì)service代碼的二次優(yōu)化封裝 四
- 【Java實(shí)戰(zhàn)項(xiàng)目】Migo商城2.0 Nginx的安裝與使用 三
- 【Java實(shí)戰(zhàn)項(xiàng)目】Migo商城2.0 后臺(tái)管理頁(yè)面分析及商品類目展示實(shí)現(xiàn) 二
- 【Java實(shí)戰(zhàn)項(xiàng)目】Migo商城2.0 框架搭建 一
更多內(nèi)容請(qǐng)關(guān)注:極樂(lè)科技