FastDFS單節點安裝

什麼是 FastDFS?
FastDFS 是一個開源的輕量級分佈式文件系統。它解決了大數據量存儲和負載均衡等問題。特別適合以中小文件(建議範圍:文件大小爲 4KB-500MB)爲載體的在線服務,如相冊網站、視頻網站等等。在 UC 基於 FastDFS 開發向用戶提供了:網盤,社區,廣告和應用下載等業務的存儲服務。

FastDFS 是一款開源的輕量級分佈式文件系統純 C 實現,支持 Linux、FreeBSD 等 UNIX系統類 google FS,不是通用的文件系統,只能通過專有 API 訪問,目前提供了 C、Java 和 PHP API 爲互聯網應用量身定做,解決大容量文件存儲問題,追求高性能和高擴展性 FastDFS 可以看做是基於文件的 key value pair 存儲系統,稱作分佈式文件存儲服務更爲合適。

FastDFS 服務端有三個角色:跟蹤服務器(tracker)、存儲服務器(storage)和客戶端(client)。

在這裏插入圖片描述
Tracker:跟蹤服務器,主要做調度工作,起負載均衡的作用。在內存中記錄集羣中所有存儲組和存儲服務器的狀態信息,是客戶端和數據服務器交互的樞紐。不記錄文件索引信息,佔用的內存量很少。

Tracker 是 FastDFS 的協調者,負責管理所有的 storage 和 group,每個 storage 在啓動後會連接 Tracker,告知自己所屬的 group 等信息,並保持週期性的心跳,tracker根據 storage 的心跳信息,建立 grou 與 storage 的映射表Tracker 需要管理的元信息很少,會全部存儲在內存中;另外 tracker 上的元信息都是由 storage 彙報的信息生成的,本身不需要持久化任何數據,這樣使得 tracker 非常容易擴展,直接增加 tracker 機器即可擴展爲 tracker cluster 來服務,cluster 裏每個 tracker 之間是完全對等的,所有的 tracker 都接受 stroage 的心跳信息,生成元數據信息來提供讀寫服務。

group :組, 也可稱爲卷。 同組內服務器上的文件是完全相同的 ,同一組內的storage 之間是對等的, 文件上傳、 刪除等操作可以在任意一臺 storage 上進行 。

Storage:存儲服務器(又稱:存儲節點或數據服務器),文件和文件屬性(meta data)都保存到存儲服務器上。Storage 直接利用 OS 的文件系統調用管理文件。Storage 以組(卷,group 或 volume)爲單位組織,一個 group 內包含多臺 storage 機
器,數據互爲備份,存儲空間以 group 內容量最小的 storage 爲準,所以建議 group內的多個 storage 儘量配置相同,以免造成存儲空間的浪費。

以 group 爲單位組織存儲能方便的進行應用隔離、負載均衡、副本數定製(group 內storage 數量即爲該 group 的副本數),比如將不同應用數據存到不同的 group 就能隔離應用數據,同時還可根據應用的訪問特性來將應用分配到不同的 group 來做負載均衡;缺點是 group 的容量受單機存儲容量的限制,同時當 group 內有機器壞掉時,數據恢復只能依賴 group 內地其他機器,使得恢復時間會很長。

group 內每個 storage 的存儲依賴於本地文件系統,storage 可配置多個數據存儲目錄,比如有 10 塊磁盤,分別掛載在 /data/disk1-/data/disk10,則可將這 10 個目錄都配置爲 storage 的數據存儲目錄。

storage 接受到寫文件請求時,會根據配置好的規則(後面會介紹),選擇其中一個存儲目錄來存儲文件。爲了避免單個目錄下的文件數太多,在 storage 第一次啓動時,會在每個數據存儲目錄裏創建 2 級子目錄,每級 256 個,總共 65536 個文件,新寫的文件會以 hash 的方式被路由到其中某個子目錄下,然後將文件數據直接作爲一個本地文件存儲到該目錄中。

lient:客戶端,作爲業務請求的發起方,通過專有接口,使用 TCP/IP 協議與跟蹤器服務器或存儲節點進行數據交互。FastDFS 向使用者提供基本文件訪問接口,比如upload、download、append、delete 等,以客戶端庫的方式提供給用戶使用。

Tracker 相當於 FastDFS 的大腦,不論是上傳還是下載都是通過 tracker 來分配資源;客戶端一般可以使用 ngnix 等靜態服務器來調用或者做一部分的緩存;存儲服務器內部分爲組,組與組之間是平行的關係,之間不可以通信,可以根據資源的使用情況隨時增加,組內服務器文件相互同步備份,以達到容災的目的,類似於 RAID 1。
上傳機制:
在這裏插入圖片描述
下載機制:
在這裏插入圖片描述

單節點FastDFS安裝
首先在兩臺虛擬機都安裝部署 gcc 環境的依賴包

yum install -y make cmake gcc gcc-c++ 

在兩臺虛擬機上都使用 git clone 命令下載所需的安裝包
git clone https://github.com/happyfish100/libfastcommon.git
wget https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz
首先安裝libfastcommon

cd /opt/libfastcommon/
./make.sh
./make.sh install

接下來安裝fastDFS

tar zxf V5.05.tar.gz
cd fastdfs-5.05/
./make.sh
./make.sh install

安裝後生成的/etc/fdfs目錄就是我們的配置目錄,裏面包含配置文件模板

複製配置文件到/etc/fdfs目錄下

cp conf/* /etc/fdfs/

配置跟蹤服務文件

vim /etc/fdfs/tracker.conf
修改內容如下:
# 啓用配置文件
disabled=false		
#存儲日誌和數據的根目錄
base_path=/fastdfs/tracker
#默認端口
port=22122

保存退出,創建文件夾並啓動。

mkdir /fastdfs/tracker -p
fdfs_trackerd /etc/fdfs/tracker.conf
netstat -anput | grep 22122
tcp        0      0 0.0.0.0:22122           0.0.0.0:*               LISTEN      28397/fdfs_trackerd
#關閉
fdfs_trackerd /etc/fdfs/tracker.conf stop

配置存儲服務文件

vim /etc/fdfs/storage.conf
修改內容如下:
#啓動配置
disabled=false
# 數據和日誌文件存儲根目錄
base_path=/fastdfs/storage
store_path0=/fastdfs/storage
#第一個存儲目錄
tracker_server=0.0.0.0:22122
# http訪問文件的端口
http.server_port=8888

http.server_port=8888 指的是在tracker服務器上啓動http服務進程,如:apache或者nginx 啓動時所監聽的端口。

保存退出,創建文件夾並啓動。

mkdir /fastdfs/storage
fdfs_storaged /etc/fdfs/storage.conf
netstat -anput | grep storage
tcp        0      0 0.0.0.0:23000           0.0.0.0:*               LISTEN      28644/fdfs_storaged 
tcp        0      0 127.0.0.1:52004         127.0.0.1:22122         ESTABLISHED 28644/fdfs_storaged 

配置客戶端文件

vim /etc/fdfs/client.conf
修改內容如下:
base_path=/fastdfs/client
tracker_server=0.0.0.0:22122

保存退出,創建文件夾。

mkdir /fastdfs/client

上傳文件測試。

fdfs_test /etc/fdfs/client.conf upload /root/1.jpg

This is FastDFS client test program v5.05

Copyright (C) 2008, Happy Fish / YuQing

FastDFS may be copied only under the terms of the GNU General
Public License V3, which may be found in the FastDFS source kit.
Please visit the FastDFS Home Page http://www.csource.org/ 
for more detail.

[2020-01-10 03:08:51] DEBUG - base_path=/fastdfs/client, 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: 0

tracker_query_storage_store_list_without_group: 
	server 1. group_name=, ip_addr=127.0.0.1, port=23000

group_name=group1, ip_addr=127.0.0.1, port=23000
storage_upload_by_filename
group_name=group1, remote_filename=M00/00/00/fwAAAV4YMROARwaxAAGFvSW1c2A423.jpg
source ip address: 127.0.0.1
file timestamp=2020-01-10 03:08:51
file size=99773
file crc32=632648544
example file url: http://127.0.0.1/group1/M00/00/00/fwAAAV4YMROARwaxAAGFvSW1c2A423.jpg
storage_upload_slave_by_filename
group_name=group1, remote_filename=M00/00/00/fwAAAV4YMROARwaxAAGFvSW1c2A423_big.jpg
source ip address: 127.0.0.1
file timestamp=2020-01-10 03:08:51
file size=99773
file crc32=632648544
example file url: http://127.0.0.1/group1/M00/00/00/fwAAAV4YMROARwaxAAGFvSW1c2A423_big.jpg

返回url路徑即正確。

這些命令是我們安裝 FastDFS 生成的命令 ,這次測試我們將使用以下幾個命令
fdfs_upload_file 
Usage: fdfs_upload_file <config_file> <local_filename> [storage_ip:port] [store_path_index]
用於上傳文件 用法爲 fdfs_upload_file + 配置文件 + 文件
fdfs_download_file 
Usage: fdfs_download_file <config_file> <file_id> [local_filename] [<download_offset> 
<download_bytes>]
用於下載文件 用法爲 fdfs_download_file + 配置文件 + 文件
fdfs_file_info
Usage: fdfs_file_info <config_file> <file_id>
用於查看文件信息 用法爲 fdfs_file_info + 配置文件 + 文件
fdfs_delete_file 
Usage: fdfs_delete_file <config_file> <file_id>
用於刪除文件 用法爲 fdfs_delete_file + 配置文件 + 文件
fdfs_monitor 
Usage: fdfs_monitor <config_file> [-h <tracker_server>] [list|delete|set_trunk_server 
<group_name> [storage_id]]
用於查看集羣信息 用法爲 fdfs_monitor + 配置文件

FastDFS和nginx整合
安裝fastdfs-nginx-module
FastDFS 通過 Tracker 服務器,將文件放在 Storage 服務器存儲, 但是同組存儲服務器之間需要進入文件複製, 有同步延遲的問題。假設 Tracker 服務器將文件上傳到了 192.168.50.137,上傳成功後文件 ID已經返回給客戶端。此時 FastDFS 存儲集羣機制會將這個文件同步到同組存儲 192.168.50.138,在文件還沒有複製完成的情況下,客戶端如果用這個文件 ID 在 192.168.50.138 上取文件,就會出現文件無法訪問的錯誤。而 fastdfs-nginx-module 可以重定向文件連接到源服務器取文件,避免客戶端由於複製延遲導致的文件無法訪問錯誤。(解壓後的 fastdfs-nginx-module 在 nginx 安裝時使用)

wget wget https://github.com/happyfish100/fastdfs-nginx-module/archive/5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip
unzip 5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip

在Tracker上安裝Nginx

yum install -y gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel
wget http://nginx.org/download/nginx-1.16.1.tar.gz
tar zxf nginx-1.16.1.tar.gz
cd nginx-1.16.1/
./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre --with-http_ssl_module --with-http_gzip_static_module --user=nginx --group=nginx --add-module=/opt/fastdfs-nginx-module-5e5f3566bbfa57418b5506aaefbe107a42c9fcb1/src/ && make && make install
cd /opt/fastdfs-nginx-module-5e5f3566bbfa57418b5506aaefbe107a42c9fcb1/src/
cp mod_fastdfs.conf /etc/fdfs/

配置mod_fastdfs.conf文件

vim /etc/fdfs/mod_fastdfs.conf
修改內容如下:
#存儲日誌文件的基本路徑
base_path=/fastdfs/tmp
#必須與storage路徑相同
store_path0=/fastdfs/storage
#跟蹤服務器iP地址
tracker_server=192.168.2.16:22122
storage_server_port=23000 

創建文件夾

mkdir /fastdfs/tmp

修改nginx的配置文件

vim /usr/local/nginx/conf/nginx.conf
修改內容如下:
server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location /group1/M00 {
                alias /fastdfs/storage/data;
        }

保存退出並啓動nginx

/usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
/usr/local/nginx/sbin/nginx

訪問 http://IP地址/group1/M00/00/00/fwAAAV4YMROARwaxAAGFvSW1c2A423_big.jpg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章