FastDFS 百度百科
FastDFS是一個開源的輕量級分布式檔案系統,它對檔案進行管理,功能包括:檔案存盤、檔案同步、檔案訪問(檔案上傳、檔案下載)等,解決了大容量存盤和負載均衡的問題,特別適合以檔案為載體的在線服務,如相冊網站、視頻網站等等,
FastDFS為互聯網量身定制,充分考慮了冗余備份、負載均衡、線性擴容等機制,并注重高可用、高性能等指標,使用FastDFS很容易搭建一套高性能的檔案服務器集群提供檔案上傳、下載等服務,
FastDFS 簡介
FastDFS 服務端有兩個角色:跟蹤器(tracker)和存盤節點(storage),跟蹤器主要做調度作業,在訪問上起負載均衡的作用;存盤節點存盤檔案,完成檔案管理的所有功能,
FastDFS 同時對檔案的 metadata 進行管理,所謂檔案的 metadata 就是檔案的相關屬性,以鍵值對方式表示,如:width=1024,其中的 key 為 width,value 為 1024,檔案 metadata 是檔案屬性串列,可以包含多個鍵值對,
跟蹤器和存盤節點都可以由一臺或多臺服務器構成,跟蹤器和存盤節點中的服務器均可以隨時增加或下線而不會影響線上服務,其中跟蹤器中的所有服務器都是對等的,可以根據服務器的壓力情況隨時增加或減少,
為了支持大容量,存盤節點(服務器)采用了 分卷(或分組)的組織方式,存盤系統由一個或多個卷組成,卷與卷之間的檔案是相互獨立的,所有卷的檔案容量累加就是整個存盤系統中的檔案容量,一個卷可以由一臺或多臺存盤服務器組成,一個卷下的存盤服務器中的檔案都是相同的,卷中的多臺存盤服務器起到了冗余備份和負載均衡的作用,
在卷中增加服務器時,同步已有的檔案由系統自動完成,同步完成后,系統自動將新增服務器切換到線上提供服務,
當存盤空間不足或即將耗盡時,可以動態添加卷,只需要增加一臺或多臺服務器,并將它們配置為一個新的卷,這樣就擴大了存盤系統的容量,
FastDFS 中的檔案標識分為兩個部分:卷名 和 檔案名,二者缺一不可,
檔案互動程序
上傳互動程序
- client 詢問
tracker上傳到的storage,不需要附加引數; tracker回傳一臺可用的storage;- client 直接和
storage通訊完成檔案上傳,
下載互動程序
- client 詢問
tracker下載檔案的storage,引數為檔案標識(卷名和檔案名); tracker回傳一臺可用的storage;- client 直接和
storage通訊完成檔案下載,
FastDFS 為什么要結合 Nginx
我們在使用 FastDFS 部署一個分布式檔案系統的時候,通過 FastDFS 的客戶端 API 來進行檔案的上傳、下載、洗掉等操作,同時通過 FastDFS 的 HTTP 服務器來提供 HTTP 服務,但是 FastDFS 的 HTTP 服務較為簡單,無法提供負載均衡等高性能的服務,我們使用 FastDFS 的 Nginx 模塊來彌補這一缺陷,
FastDFS 通過 tracker 服務器,將檔案放在 Storage 服務器存盤,但是同組之間的服務器需要復制檔案,有延遲的問題,假設 tracker 服務器將檔案上傳到了 192.168.1.100,檔案 ID 已經回傳客戶端,這時后臺會將這個檔案復制到 192.168.1.100,如果復制沒有完成,客戶端就用這個 ID 在 192.168.1.100 取檔案,肯定會出現錯誤,而 fastdfs-nginx-module 可以重定向連接到源服務器取檔案,避免客戶端由于復制延遲的問題出現錯誤,
基于 Docker 安裝 FastDFS
所需全部環境組態檔已上傳至百度網盤,
提取鏈接:https://pan.baidu.com/s/1ptM7psDH9IJuH4P7Cd0L9A
提取碼:qdxe
在 Linux 服務器上創建 /usr/local/docker/fastdfs 目錄和 /usr/local/docker/fastdfs/environment 目錄
目錄說明:
/usr/local/docker/fastdfs:用于存放docker-compose.yml檔案和FastDFS的資料卷,/usr/local/docker/fastdfs/environment:用于存放Dockerfile檔案和剛剛提取的環境檔案,
注意:因為 Shell 創建后是無法直接使用的,所以將 entrypoint.sh 檔案拷貝到服務器目錄里以后,需要賦予執行的權限,執行以下命令:
$ chmod +x entrypoint.sh
各環境組態檔說明
tracker.conf
FastDFS 跟蹤器配置,容器中路徑為:/etc/fdfs,修改為:
base_path=/fastdfs/tracker
storage.conf
FastDFS 存盤配置,容器中路徑為:/etc/fdfs,修改為:
base_path=/fastdfs/storage
store_path0=/fastdfs/storage
tracker_server=192.168.1.100:22122
http.server_port=8888
client.conf
FastDFS 客戶端配置,容器中路徑為:/etc/fdfs,修改為:
base_path=/fastdfs/tracker
tracker_server=192.168.1.100:22122
config
fastdfs-nginx-module 組態檔,容器中路徑為:/usr/local/src/fastdfs-nginx-module/src,修改為:
# 修改前
CORE_INCS="$CORE_INCS /usr/local/include/fastdfs /usr/local/include/fastcommon/"
CORE_LIBS="$CORE_LIBS -L/usr/local/lib -lfastcommon -lfdfsclient"
# 修改后
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
CORE_LIBS="$CORE_LIBS -L/usr/lib -lfastcommon -lfdfsclient"
mod_fastdfs.conf
fastdfs-nginx-module 組態檔,容器中路徑為:/usr/local/src/fastdfs-nginx-module/src,修改為:
connect_timeout=10
tracker_server=192.168.1.100:22122
url_have_group_name = true
store_path0=/fastdfs/storage
nginx.conf
Nginx 組態檔,容器中路徑為:/usr/local/src/nginx-1.13.6/conf,修改為:
user root;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8888;
server_name localhost;
location ~/group([0-9])/M00 {
ngx_fastdfs_module;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
創建 docker-compose.yml
version: '3.1'
services:
fastdfs:
build: environment
restart: always
container_name: fastdfs
volumes:
- ./storage:/fastdfs/storage
network_mode: host
創建 Dockerfile
FROM ubuntu:xenial
MAINTAINER [email protected]
# 更新資料源
WORKDIR /etc/apt
RUN echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse' > sources.list
RUN echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse' >> sources.list
RUN echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse' >> sources.list
RUN echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse' >> sources.list
RUN apt-get update
# 安裝依賴
RUN apt-get install make gcc libpcre3-dev zlib1g-dev --assume-yes
# 復制工具包
ADD fastdfs-5.11.tar.gz /usr/local/src
ADD fastdfs-nginx-module_v1.16.tar.gz /usr/local/src
ADD libfastcommon.tar.gz /usr/local/src
ADD nginx-1.13.6.tar.gz /usr/local/src
# 安裝 libfastcommon
WORKDIR /usr/local/src/libfastcommon
RUN ./make.sh && ./make.sh install
# 安裝 FastDFS
WORKDIR /usr/local/src/fastdfs-5.11
RUN ./make.sh && ./make.sh install
# 配置 FastDFS 跟蹤器
ADD tracker.conf /etc/fdfs
RUN mkdir -p /fastdfs/tracker
# 配置 FastDFS 存盤
ADD storage.conf /etc/fdfs
RUN mkdir -p /fastdfs/storage
# 配置 FastDFS 客戶端
ADD client.conf /etc/fdfs
# 配置 fastdfs-nginx-module
ADD config /usr/local/src/fastdfs-nginx-module/src
# FastDFS 與 Nginx 集成
WORKDIR /usr/local/src/nginx-1.13.6
RUN ./configure --add-module=/usr/local/src/fastdfs-nginx-module/src
RUN make && make install
ADD mod_fastdfs.conf /etc/fdfs
WORKDIR /usr/local/src/fastdfs-5.11/conf
RUN cp http.conf mime.types /etc/fdfs/
# 配置 Nginx
ADD nginx.conf /usr/local/nginx/conf
COPY entrypoint.sh /usr/local/bin/
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
WORKDIR /
EXPOSE 8888
CMD ["/bin/bash"]
啟動容器
$ docker-compose up -d
測驗上傳
# 互動式進入容器
$ docker exec -it fastdfs /bin/bash
# 上傳測驗檔案
$ /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /usr/local/src/fastdfs-5.11/INSTALL
# 服務器反饋的上傳后地址
group1/M00/00/00/wKhLi1oHVMCAT2vrAAAeSwu9TgM3976771
上傳后檔案地址
http://192.168.75.128:8888/group1/M00/00/00/wKhLi1oHVMCAT2vrAAAeSwu9TgM3976771
- 文章作者:彭超
- 本文首發于個人博客:https://antoniopeng.com
- 著作權宣告:本博客所有文章除特別宣告外,均采用 CC BY-NC-SA 4.0 許可協議,轉載請注明來自 彭超的博客!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/239439.html
標籤:其他
