搭建一個FastDFS 5.0.5的檔案伺服器
參照文章https://www.linuxidc.com/Linux/2016-09/135537.htm以及https://www.cnblogs.com/geeek/p/5028328.html
摘自:http://www.oschina.net/p/fastdfs
FastDFS是一個開源的分散式檔案系統,她對檔案進行管理,功能包括:檔案儲存、檔案同步、檔案訪問(檔案上傳、檔案下載)等,解決了大容量儲存和負載均衡的問題。特別適合以檔案為載體的線上服務,如相簿網站、視訊網站等等。
FastDFS服務端有兩個角色:跟蹤器(tracker)和儲存節點(storage)。跟蹤器主要做排程工作,在訪問上起負載均衡的作用。
儲存節點儲存檔案,完成檔案管理的所有功能:儲存、同步和提供存取介面,FastDFS同時對檔案的meta data進行管理。所謂檔案的meta data就是檔案的相關屬性,以鍵值對(key value pair)方式表示,如:width=1024,其中的key為width,value為1024。檔案meta data是檔案屬性列表,可以包含多個鍵值對。
第一步就是下載FashDFS.
1、直接使用命令下載
wget https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz tar -zxvf V5.05.tar.gz cd fastdfs-5.05/ ./make.sh ./make.sh install
然後還是上面的命令,解壓往下。
不過這裡會碰到一個問題。解壓完之後./make.sh,出錯
解決辦法:安裝libfastcommon類庫
ibfastcommon.so 預設安裝到了/usr/lib64/libfastcommon.so
,但是FastDFS主程式設定的lib目錄是/usr/local/lib
,所以此處需要重新設定軟連結(類似於Windows的快捷方式):
ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
wget https://github.com/happyfish100/libfastcommon/archive/master.zip
unzip master.zip
cd libfastcommon-master
./make.sh
./make.sh install
安裝這個類庫之後繼續執行上次的命令,不報錯了,完成。
繼續下一步:在log中我們可以發現安裝路徑:
沒錯,正是安裝到了/etc/fdfs中,安裝成功後就會生成如上的3個.sample檔案(示例配置檔案),我們再分別拷貝出3個後面用的正式的配置檔案:
cp client.conf.sample client.conf
cp storage.conf.sample storage.conf
cp tracker.conf.sample tracker.conf
至此FastDFS已經安裝完畢,接下來的工作就是依次配置Tracker和Storage了。
Tracker
在配置Tracker之前,首先需要建立Tracker伺服器的檔案路徑,即用於儲存Tracker的資料檔案和日誌檔案等,我這裡選擇在/opt目錄下建立一個fastdfs_tracker目錄用於存放Tracker伺服器的相關檔案:
mkdir /opt/fastdfs_tracker
接下來就要重新編輯上一步準備好的/etc/fdfs
目錄下的tracker.conf配置檔案,開啟檔案後依次做以下修改:
disabled=false #啟用配置檔案(預設啟用)
port=22122 #設定tracker的埠號,通常採用22122這個預設埠
base_path=/opt/fastdfs_tracker #設定tracker的資料檔案和日誌目錄
http.server_port=6666 #設定http埠號,預設為8080
配置完成後就可以啟動Tracker伺服器了,但首先依然要為啟動指令碼建立軟引用,因為fdfs_trackerd等命令在/usr/local/bin中並沒有,而是在/usr/bin路徑下:
ln -s /usr/bin/fdfs_trackerd /usr/local/bin
ln -s /usr/bin/stop.sh /usr/local/bin
ln -s /usr/bin/restart.sh /usr/local/bin
最後通過命令啟動Tracker伺服器:
service fdfs_trackerd start
這個命令執行成功了,但是沒有生成相應的檔案,也沒有埠監聽。
最後使用下面的命令成功:
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
如果啟動命令執行成功,那麼同時在剛才建立的tracker檔案目錄/opt/fastdfs_tracker中就可以看到啟動後新生成的data和logs目錄,tracker服務的埠也應當被正常監聽,最後再通過netstat命令檢視一下埠監聽情況:
netstat -unltp|grep fdfs
可以看到tracker服務執行的22122埠正常被監聽。
確認tracker正常啟動後可以將tracker設定為開機啟動,開啟/etc/rc.d/rc.local並在其中加入以下配置:
Tracker至此就配置好了,接下來就可以配置FastDFS的另一核心——Storage。
Storage
步驟基本與配置Tracker一致,首先是建立Storage伺服器的檔案目錄,需要注意的是同Tracker相比我多建了一個目錄,因為Storage還需要一個檔案儲存路徑,用於存放接收的檔案:
mkdir /opt/fastdfs_storage
mkdir /opt/fastdfs_storage_data
接下來修改/etc/fdfs
目錄下的storage.conf配置檔案,開啟檔案後依次做以下修改:
disabled=false #啟用配置檔案(預設啟用)
group_name=group1 #組名,根據實際情況修改
port=23000 #設定storage的埠號,預設是23000,同一個組的storage埠號必須一致
base_path=/opt/fastdfs_storage #設定storage資料檔案和日誌目錄
store_path_count=1 #儲存路徑個數,需要和store_path個數匹配
store_path0=/opt/fastdfs_storage_data #實際檔案儲存路徑
tracker_server=10.211.55.5:22122 #tracker 伺服器的 IP地址和埠號,如果是單機搭建,IP不要寫127.0.0.1,否則啟動不成功(此處的ip是我的CentOS虛擬機器ip)
http.server_port=8888 #設定 http 埠號
配置完成後同樣要為Storage伺服器的啟動指令碼設定軟引用:
ln -s /usr/bin/fdfs_storaged /usr/local/bin
接下來就可以啟動Storage服務了:
service fdfs_storaged start
如果啟動成功,/opt/fastdfs_storage中就可以看到啟動後新生成的data和logs目錄 。
但是這個執行完之後發現只有log檔案。
同理,如果啟動成功,/opt/fastdfs_storage中就可以看到啟動後新生成的data和logs目錄,埠23000也應被正常監聽,還有一點就是檔案儲存路徑下會生成多級儲存目錄,那麼接下來看看是否啟動成功了:
如上圖,貌似沒成功啊,因為啟動storage後文件都沒生成,為了確認我們看一下storage的埠情況:
果然是沒啟動成功!埠目前還是隻監聽了一個,storage的23000埠並未被監聽,那麼我們只能去日誌檔案中找原因了,進入/opt/fastdfs_storage/logs目錄下並開啟storaged.log檔案:
如上圖,可以看到確實有一個error,關鍵資訊是:
ip地址寫的是公網的地址,所以報錯
修改ip為內網的地址後再次重啟storage服務,然後再看看data目錄和實際儲存檔案的/opt/fastdfs_storage_data:
如上圖,可以看到/opt/fastdfs_storage/data目錄下生成好的pid檔案和dat檔案,那麼再看一下實際檔案儲存路徑下是否有建立好的多級目錄呢:
如上圖,沒有任何問題,data下有256個1級目錄,每級目錄下又有256個2級子目錄,總共65536個檔案,新寫的檔案會以hash的方式被路由到其中某個子目錄下,然後將檔案資料直接作為一個本地檔案儲存到該目錄中。那麼最後我們再看一下storage服務的埠監聽情況:
如上圖,可以看到此時已經正常監聽tracker的22122埠和storage的23000埠,至此storage伺服器就已經配置完成,確定了storage伺服器啟動成功後,還有一項工作就是看看storage伺服器是否已經登記到 tracker伺服器(也可以理解為tracker與storage是否整合成功),執行以下命令:
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
[[email protected] /]# /usr/bin/fdfs_monitor /etc/fdfs/storage.conf
[2016-09-23 12:59:26] DEBUG - base_path=/opt/fastdfs_storage, connect_timeout=30, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s, use_storage_id=0, storage server id count: 0server_count=1, server_index=0
tracker server is 192.168.111.11:22122
group count: 1
Group 1:
group name = group1
disk total space = 6818 MB
disk free space = 2169 MB
trunk free space = 0 MB
storage server count = 1
active server count = 1
storage server port = 23000
storage HTTP port = 8888
store path count = 1
subdir count per path = 256
current write server index = 0
current trunk file id = 0Storage 1:
id = 192.168.111.11
ip_addr = 192.168.111.11 ACTIVE
http domain =
version = 5.05
join time = 2016-09-23 11:15:54
up time = 2016-09-23 12:33:26
total storage = 6818 MB
free storage = 2169 MB
upload priority = 10
store_path_count = 1
subdir_count_per_path = 256
storage_port = 23000
storage_http_port = 8888
current_write_path = 0
source storage id =
if_trunk_server = 0
connection.alloc_count = 256
connection.current_count = 0
connection.max_count = 0
total_upload_count = 0
success_upload_count = 0
total_append_count = 0
success_append_count = 0
total_modify_count = 0
success_modify_count = 0
total_truncate_count = 0
success_truncate_count = 0
total_set_meta_count = 0
success_set_meta_count = 0
total_delete_count = 0
success_delete_count = 0
total_download_count = 0
success_download_count = 0
total_get_meta_count = 0
success_get_meta_count = 0
total_create_link_count = 0
success_create_link_count = 0
total_delete_link_count = 0
success_delete_link_count = 0
total_upload_bytes = 0
success_upload_bytes = 0
total_append_bytes = 0
success_append_bytes = 0
total_modify_bytes = 0
success_modify_bytes = 0
stotal_download_bytes = 0
success_download_bytes = 0
total_sync_in_bytes = 0
success_sync_in_bytes = 0
total_sync_out_bytes = 0
success_sync_out_bytes = 0
total_file_open_count = 0
success_file_open_count = 0
total_file_read_count = 0
success_file_read_count = 0
total_file_write_count = 0
success_file_write_count = 0
last_heart_beat_time = 2016-09-23 12:58:59
last_source_update = 1970-01-01 08:00:00
last_sync_update = 1970-01-01 08:00:00
last_synced_timestamp = 1970-01-01 08:00:00
如上所示,看到192.168.111.11 ACTIVE 字樣即可說明storage伺服器已經成功登記到了tracker伺服器,同理別忘了新增開機啟動,開啟/etc/rc.d/rc.local並將如下配置追加到檔案中:
service fdfs_storage start
至此我們就已經完成了fastdfs的全部配置,此時也就可以用客戶端工具進行檔案上傳下載的測試了。
初步測試
測試時需要設定客戶端的配置檔案,編輯/etc/fdfs目錄下的client.conf 檔案,開啟檔案後依次做以下修改:
- base_path=/opt/fastdfs_tracker #tracker伺服器檔案路徑
- tracker_server=192.168.111.11:22122 #tracker伺服器IP地址和埠號
- http.tracker_server_port=6666 # tracker 伺服器的 http 埠號,必須和tracker的設定對應起來
配置完成後就可以模擬檔案上傳了,先給/opt目錄下放一張圖片(暴雪爸爸的LOGO):
然後通過執行客戶端上傳命令嘗試上傳:
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /opt/BLIZZARD.jpg
執行後可以發現給我們返回了一個路徑:
這就表示我們的檔案已經上傳成功了,當檔案儲存到某個子目錄後,即認為該檔案儲存成功,接下來會為該檔案生成一個檔名,檔名由group、儲存目錄、兩級子目錄、fileid、檔案字尾名(由客戶端指定,主要用於區分檔案型別)拼接而成,如下圖:
同時在之前配置的storage伺服器的實際檔案儲存路徑中也可以根據返回的路徑找到實際檔案:
接下來嘗試用瀏覽器傳送HTTP請求訪問一下檔案:
此時發現並不能訪問,因為FastDFS目前已不支援http協議,我們在FastDFS 4.0.5的版本更新日誌中可以看到這樣一條資訊:
如上圖,4.0.5版本開始移除了自帶的HTTP支援(因為之前自帶的HTTP服務較為簡單,無法提供負載均衡等高效能服務),所以餘大提供了nginx上使用FastDFS的模組fastdfs-nginx-module,下載地址如下:https://github.com/happyfish100/fastdfs-nginx-module,這樣做最大的好處就是提供了HTTP服務並且解決了group中storage伺服器的同步延遲問題,接下來就具體記錄一下fastdfs-nginx-module的安裝配置過程。
fastdfs-nginx-module
在餘大的GitHub上下載好fastdfs-nginx-module上傳到我們的CentOS中就可以開始安裝了,在安裝nginx之前需要先安裝一些模組依賴的lib庫,我在以前寫的文章有做詳細介紹(Linux CentOS 7 & Tengine(Nginx)安裝與配置),直接貼出安裝程式碼:
yum -y install pcre pcre-devel
yum -y install zlib zlib-devel
yum -y install openssl openssl-devel
依次裝好這些依賴之後就可以開始安裝nginx了。
storage nginx
首先是為storage伺服器安裝nginx,首先將nginx和fastdfs-nginx-module的安裝包上傳至CentOS:
首先分別進行解壓:
tar -zxvf nginx-1.8.1.tar.gz
unzip fastdfs-nginx-module-master.zip
解壓成功後就可以編譯安裝nginx了,進入nginx目錄並輸入以下命令進行配置:
./configure --prefix=/usr/local/nginx --add-module=/usr/local/fastdfs-nginx-module-master/src
配置成功後會看到如下資訊:
緊接著就可以進行編譯安裝了,依次執行以下命令:
make
make install
安裝完成後,我們在我們指定的目錄/usr/local/nginx中就可以看到nginx的安裝目錄了:
接下來要修改一下nginx的配置檔案,進入conf目錄並開啟nginx.conf檔案加入以下配置:
listen 9999;
location ~/group1/M00 {
root /opt/fastdfs_storage_data/data;
ngx_fastdfs_module;
}
然後進入FastDFS的安裝目錄/usr/local/fastdfs-5.05目錄下的conf目錄,將http.conf和mime.types拷貝到/etc/fdfs目錄下:
cp -r /usr/local/fastdfs-5.05/conf/http.conf /etc/fdfs/
cp -r /usr/local/fastdfs-5.05/conf/mime.types /etc/fdfs/
接下來還需要把fastdfs-nginx-module安裝目錄中src目錄下的mod_fastdfs.conf也拷貝到/etc/fdfs目錄下:
cp -r /usr/local/fastdfs-nginx-module-master/src/mod_fastdfs.conf /etc/fdfs/
看一下/etc/fdfs目錄下當前所有的配置檔案:
沒什麼問題,接下來就需要編輯剛拷貝的這個mod_fastdfs.conf檔案了,開啟mod_fastdfs.conf並按順序依次編譯以下內容:
- base_path=/opt/fastdfs_storage #儲存日誌目錄
- tracker_server=192.168.111.11:22122 #tracker伺服器的IP地址以及埠號
- storage_server_port=23000 #storage伺服器的埠號
- url_have_group_name = true #檔案 url 中是否有 group 名
- store_path0=/opt/fastdfs_storage_data # 儲存路徑
- group_count = 3 #設定組的個數,事實上這次只使用了group1
設定了group_count = 3,接下來就需要在檔案尾部追加這3個group setting:
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data
[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data
[group3]
group_name=group3
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data
接下來還需要建立 M00 至儲存目錄的符號連線:
ln -s /opt/fastdfs_storage_data/data /opt/fastdfs_storage_data/data/M00
最後啟動nginx:
/usr/local/nginx/sbin/nginx
顯示如下資訊說明nginx已啟動成功:
通過瀏覽器也可以看到nginx的主頁:
這裡是在伺服器上,然後沒有看到nginx的主頁。繼續往下就行
storage伺服器的nginx就已經安裝完畢,接下來看一下tracker伺服器的nginx安裝。
tracker nginx
同理,再裝一個nginx,目錄命名為nginx2,安裝路徑依舊放在/usr/local下,由於和之前一樣,此處就不再做詳細解釋:
mkdir nginx2
cd nginx-1.8.1/
./configure --prefix=/usr/local/nginx2 --add-module=/usr/local/fastdfs-nginx-module-master/src
make
make install
接下來依然是修改nginx2的配置檔案,進入conf目錄並開啟nginx.conf檔案加入以下配置,storage的nginx無需修改listen埠,即預設的80埠,並將upstream指向tracker的nginx地址:
# 放在http上
upstream fdfs_group1 {
server 127.0.0.1:9999;
}
location /group1/M00 {
proxy_pass http://fdfs_group1;
}
接下來啟動nginx2:
/usr/local/nginx2/sbin/nginx
此時訪問nginx2的主頁,由於沒有修改埠,直接訪問ip地址即可:
最後一步就是需要修改/etc/fdfs目錄下的client.conf檔案,開啟該檔案並加入以下配置:
base_path=/opt/fastdfs_storage #日誌存放路徑
tracker_server=192.168.116.145:22122 #tracker 伺服器 IP 地址和埠號
http.tracker_server_port=6666 # tracker 伺服器的 http 埠號,必須和tracker的設定對應起來
至此關於fastdfs就已經全部配置完畢了,再一次進行測試看看是否能正常上傳檔案並通過http訪問檔案。
HTTP測試
再給/opt目錄下上傳一張暴雪爸爸的LOGO圖:
通過客戶端命令測試上傳:
如上圖,依舊上傳成功,接下來的關鍵就是通過HTTP測試檔案訪問,開啟瀏覽器輸入ip地址+檔名看看是否能正常訪問該圖片:
一切正常~ 至此關於FastDFS在CentOS 7下的部署測試就已經全部完成了。