天天看點

FastDFS部署及使用簡介一、安裝準備工作二、安裝步驟三、使用

整理了近期在項目上做的一些技術研究,希望與大家共同探讨交流。

在項目中經常推薦客戶選擇分布式檔案存儲服務,并且使用阿裡雲的OSS服務,但也遇到過客戶是私有雲無法使用OSS或者客戶要求必須提供非阿裡雲方案的情況。此時,有幾種方案可供選擇,如FastDFS、ceph、hdfs等,我們在項目中首先使用了FastDFS,是以本文就在私有雲環境下搭建FastDFS環境進行描述。

應用場景:

三台伺服器分别做三組存儲,并且需要至少兩台tracker位址做主備關系,當一台down機後需要另外一台可以提供正常的通路連接配接

注:如果需要保障資料不丢失,可以分别每台存儲配置兩組group(相同group之間資料會自動備份) ,三台伺服器group參考如下配置:
#      第一台伺服器:group1 group2
#      第二台伺服器:group1 group3
#      第三台伺服器:group2 group3
涉及FastDFS單台伺服器一個tracker多個storage的配置           

本次配置沒有考慮存儲資料安全性,即沒有備份,每台存儲一個組

搭建服務的部署圖

FastDFS部署及使用簡介一、安裝準備工作二、安裝步驟三、使用

一、安裝準備工作

提前安裝相關作業系統包

yum install unzip zip gcc-c++           

建立一個檔案夾/home/admin/fastDFS,用來儲存相關軟體

公共函數庫:libfastcommon-master.zip

主程式:fastdfs-5.10.tar.gz

NGINX與DFS連結子產品: fastdfs-nginx-module_v1.16.tar.gz

下載下傳完之後通過ftp工具直接傳送到伺服器

二、安裝步驟

2.1 libfastcommon包安裝

FastDFS 将以前版本的公共的一些函數單獨封裝成了libfastcommon包,是以在安裝FastDFS之前我們還必須安裝libfastcommon。

2.1.1 解壓縮

unzip libfastcommon-master.zip           

執行編譯步驟:

./make.sh           

執行安裝步驟:

./make.sh install           

libfastcommon.so 預設安裝到了/usr/lib64/libfastcommon.so,但是FastDFS主程式設定的lib目錄是/usr/local/lib,

是以此處重新設定軟連結:

ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so;
ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so;
ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so;           

2.2 FastDFS 安裝

執行如下指令:

unzip fastdfs-master.zip
cd fastdfs-master
./make.sh
./mae.sh install
cd /etc/fdfs/           

對三個配置檔案進行拷貝,備用

cp client.conf.sample client.conf
cp storage.conf.sample storage.conf
cp tracker.conf.sample tracker.conf           

2.3 Tracker 安裝

建立Tracker伺服器的檔案路徑,用于存儲Tracker的資料檔案和日志檔案等:

mkdir /home/admin/fastDFS/fastdfs_tracker           

編輯tracker配置檔案/etc/fdfs/tracker.conf,部配置設定置參數釋義如下:

vim /etc/fdfs/tracker.conf
disabled=false #啟用配置檔案(預設false)
bind_addr= #解析主機位址,空則解析所有主機
port=22122 #tracker服務端口
connect_timeout=30 #連接配接逾時時間30S
network_timeout=60 #網絡逾時時間60S
base_path=/home/admin/fastDFS/fastdfs_tracker #tracker基礎資料存儲路徑及日志存放路徑
max_connections=256 #最大并發連接配接數
work_threads=4 #工作線程數,最好和cpu核數保持一緻
store_lookup=0 #選擇上傳檔案模式 0代表group輪詢 1指定特定group 2選擇空間最大的group
#store_group= #上傳檔案組,如果模式為1,則必須設定成核特定group一緻的組名
store_server=0 #選擇存儲伺服器上傳檔案 0代表輪詢,1根據通過IP第的順序 2通過優先級
store_path=0 #選擇哪塊存儲盤上傳檔案 0代表輪詢,2代表優先最大存儲空間盤(路徑)
download_server=0 #選擇哪台存儲伺服器下載下傳檔案0代表輪詢,1代表目前檔案上傳的源伺服器
reserved_storage_space = 10% #系統保留存儲空間10%
######其餘都預設就好           

為啟動腳本建立軟連結,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           

如果啟動指令執行成功,那麼同時在剛才建立的tracker檔案目錄/home/admin/fastDFS/fastdfs_tracker中就可以看到啟動後新生成的data和logs目錄,tracker服務的端口也應當被正常監聽,最後再通過netstat指令檢視一下端口監聽情況:

netstat -unltp|grep fdfs           

檢查服務運作的22122端口是否正常

2.4 Storage安裝

建立Storage伺服器的檔案目錄,注意同Tracker相比要多建一個目錄,因為Storage還需要一個檔案存儲路徑,用于存放接收的檔案:

mkdir /home/admin/fastDFS/fastdfs_storage
mkdir /home/admin/fastDFS/fastdfs_storage_data           

接下來修改/etc/fdfs/storage.conf配置檔案,部配置設定置參數釋義如下:

vim /etc/fdfs/storage.conf
group_name=group1 #存儲組名
client_bind=true #當連接配接其他伺服器時解析該主機位址
port=23000 #storage端口 23000
store_path_count=1 #存儲路徑個數,需要和store_path個數比對
base_path=/home/admin/fastDFS/fastdfs_storage #基礎存儲資料和日志檔案
store_path0=/home/admin/fastDFS/fastdfs_storage_data #group所占用的目錄或硬碟,有幾個寫幾個
tracker_server=10.124.164.137:22122 #指定tracker1伺服器
tracker_server=10.124.164.138:22122 #指定tracker2伺服器
tracker_server=10.124.164.139:22122 #指定tracker3伺服器           

配置完成後同樣要為Storage伺服器的啟動腳本設定軟連結:

ln -s /usr/bin/fdfs_storaged /usr/local/bin           

啟動Storage服務:

service fdfs_storaged start           

驗證成功啟動的方法:

netstat -unltp|grep fdfs           

檢視是否有23000,22122,兩個端口在。成功後,将在/home/admin/fastDFS/fastdfs_storage_data/data目錄下生成檔案夾,data下有256個1級目錄,每級目錄下又有256個2級子目錄,總共65536個檔案夾。

新寫的檔案會以hash的方式被路由到其中某個子目錄下,然後将檔案資料直接作為一個本地檔案存儲到該目錄中。

最後再檢查一下storage服務的端口監聽情況:

檢視storage伺服器是否已經登記到 tracker伺服器,運作以下指令:

/usr/bin/fdfs_monitor /etc/fdfs/storage.conf           

看到10.124.164.137 ACTIVE 字樣即可說明storage伺服器已經成功登記到了tracker伺服器

至此已經完成了fastdfs的全部配置,此時可以用用戶端工具進行檔案上傳下載下傳的測試了。

2.5 修改本地用戶端配置

建立了用戶端基礎資料和日志檔案目錄

mkdir /home/admin/fastDFS/client
vim /etc/fdfs/client.conf
base_path=/home/admin/fastDFS/client #基礎資料和日志檔案
tracker_server=10.124.164.137:22122 #tracker1伺服器
tracker_server=10.124.164.138:22122 #tracker2伺服器
tracker_server=10.124.164.139:22122 #tracker3伺服器           

2.6 fastdfs-nginx-module

FastDFS目前已不支援http協定

餘慶大大提供了nginx上使用FastDFS的子產品fastdfs-nginx-module,

這樣做最大的好處就是提供了HTTP服務并且解決了group中storage伺服器的同步延遲問題,

安裝nginx子產品依賴lib庫

yum -y install pcre pcre-devel
yum -y install zlib zlib-devel
yum -y install openssl openssl-devel           

下載下傳子產品fastdfs-nginx-module,并編譯安裝Nginx

進入源碼nginx安裝檔案夾

解壓成功後就可以編譯安裝nginx了,進入nginx目錄并輸入以下指令進行配置:

./configure --sbin-path=/home/admin/nginx/sbin/nginx --modules-path=/home/admin/nginx/modules --conf-path=/home/admin/nginx/conf/nginx.conf --pid-path=/home/admin/nginx/logs/nginx.pid --error-log-path=/home/admin/nginx/logs/error.log --prefix=/home/admin/nginx --http-log-path=/home/admin/nginx/logs/access.log --add-module=/home/admin/fastDFS/fastdfs-nginx-module-master/src
make
make install           

拷貝配置檔案

cp /home/admin/fastDFS/fastdfs-master/conf/http.conf /etc/fdfs/
cp /home/admin/fastDFS/fastdfs-master/conf/mime.types /etc/fdfs/
cp /home/admin/fastDFS/fastdfs-nginx-module-master/src/mod_fastdfs.conf /etc/fdfs/           

編輯mod_fastdfs.conf檔案

vim /etc/fdfs/mod_fastdfs.conf:
base_path=/home/admin/fastDFS/fastdfs_storage #修改成和storage 存放路徑一緻
tracker_server=10.124.164.137:22122 #配置成tracker server 位址和端口
tracker_server=10.124.164.138:22122 #配置成tracker server 位址和端口
tracker_server=10.124.164.139:22122 #配置成tracker server 位址和端口
url_have_group_name = true #url中是否包組名(預設為false,需要改成true)
store_path0=/home/admin/fastDFS/fastdfs_storage_data #檔案存放路徑,與storage 一緻
group_count = 3 #0代表單組,非零代表多組,一般設定幾就為幾組
[group1] #設定了group_count = 3,接下來就需要在檔案尾部追加這3個group setting
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/home/admin/fastDFS/fastdfs_storage_data
[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/home/admin/fastDFS/fastdfs_storage_data
[group3]
group_name=group3
storage_server_port=23000
store_path_count=1
store_path0=/home/admin/fastDFS/fastdfs_storage_data           

以下為nginx的配置

10.124.164.137 nginx配置

vim /home/admin/nginx/conf/nginx.conf
user root;
worker_processes 4;
events {
worker_connections 40960;
use epoll;
}
http {
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 300m;
sendfile on;
tcp_nopush on;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
upstream fdfs_group1 {
server 10.124.164.137:8080 weight=1 max_fails=2 fail_timeout=30s;
}
upstream fdfs_group2 {
server 10.124.164.138:8080 weight=1 max_fails=2 fail_timeout=30s;
}
upstream fdfs_group3 {
server 10.124.164.139:8080 weight=1 max_fails=2 fail_timeout=30s;
}
include /home/admin/nginx/conf.d/*.conf;
}           

10.124.164.137 tracker.conf 配置

vim /home/admin/nginx/conf.d/tracker.conf
server {
listen 9999;
server_name 10.124.164.137;
location ~ /group1/M00 {
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_pass http://fdfs_group1;
expires 30d;
}
location ~ /group2/M00 {
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_pass http://fdfs_group2;
expires 30d;
}
location ~ /group3/M00 {
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_pass http://fdfs_group3;
expires 30d;
}
}           

10.124.164.137 storage.conf配置

vim /home/admin/nginx/conf.d/storage.conf
server {
listen 8080;
server_name 10.124.164.137;
location ~ /group1/M00 {
root /home/admin/fastDFS/fastdfs_storage_data/data;
index index.html index.htm;
ngx_fastdfs_module;
}
}           

另外兩台伺服器配置,同理

最後啟動nginx:

/home/admin/nginx/sbin/nginx           

三、使用

3.1 使用java用戶端

https://github.com/happyfish100/fastdfs-client-java

下載下傳測試代碼

配置fdfs_client.conf檔案

tracker_server = 10.124.164.137:22122
tracker_server = 10.124.164.138:22122
tracker_server = 10.124.164.139:22122           

配置fastdfs-client.properties

fastdfs.http_tracker_http_port = 8080
fastdfs.tracker_servers = 10.124.164.137:22122,10.124.164.138:22122,10.124.164.139:22122           

運作時配置:指定配置檔案和要上傳的檔案路徑

FastDFS部署及使用簡介一、安裝準備工作二、安裝步驟三、使用

運作Test.java

3.2 使用本地Client

檢視狀态是否正常

fdfs_monitor /etc/fdfs/client.conf           

1. 編輯3個檔案:

echo “aaa” >>/opt/1.txt && echo “bbb” >>/opt/2.txt && echo “ccc” >>/opt/3.txt           

2. 上傳檔案:

/usr/bin/fdfs_test /etc/fdfs/client.conf upload 1.txt
/usr/bin/fdfs_test /etc/fdfs/client.conf upload 2.txt
/usr/bin/fdfs_test /etc/fdfs/client.conf upload 3.txt           

傳回結果中會把上傳完成的url 列印出來,如都成功則 複制URL在浏覽器中打開看是否正常

upload:上傳普通檔案,包括主檔案
upload_appender:上傳appender檔案,後續可以對其進行append、modify和truncate操作
upload_slave:上傳從檔案
download:下載下傳檔案
delete:删除檔案
append:在appender檔案後追加内容
modify:appender檔案修改
set_metadata:設定檔案附加屬性
get_metadata:擷取檔案附加屬性