1. 程式人生 > >持續整合docker—第九篇安裝FastDFS

持續整合docker—第九篇安裝FastDFS

1、簡介

FastDFS 是一個開源的高效能分散式檔案系統(DFS)。 它的主要功能包括:檔案儲存,檔案同步和檔案訪問,以及高容量和負載平衡。主要解決了海量資料儲存問題,特別適合以中小檔案(建議範圍:4KB < file_size <500MB)為載體的線上服務。

FastDFS 系統有三個角色:跟蹤伺服器(Tracker Server)、儲存伺服器(Storage Server)和客戶端(Client)。

Tracker Server:跟蹤伺服器,主要做排程工作,起到均衡的作用;負責管理所有的 storage server和 group,每個 storage 在啟動後會連線 Tracker,告知自己所屬 group 等資訊,並保持週期性心跳。

Storage Server:儲存伺服器,主要提供容量和備份服務;以 group 為單位,每個 group 內可以有多臺 storage server,資料互為備份。

Client:客戶端,上傳下載資料的伺服器,也就是我們自己的專案所部署在的伺服器。

2、FastDFS的儲存策略

為了支援大容量,儲存節點(伺服器)採用了分卷(或分組)的組織方式。儲存系統由一個或多個卷組成,卷與卷之間的檔案是相互獨立的,所有卷的檔案容量累加就是整個儲存系統中的檔案容量。一個卷可以由一臺或多臺儲存伺服器組成,一個卷下的儲存伺服器中的檔案都是相同的,卷中的多臺儲存伺服器起到了冗餘備份和負載均衡的作用。

在卷中增加伺服器時,同步已有的檔案由系統自動完成,同步完成後,系統自動將新增伺服器切換到線上提供服務。當儲存空間不足或即將耗盡時,可以動態添加捲。只需要增加一臺或多臺伺服器,並將它們配置為一個新的卷,這樣就擴大了儲存系統的容量。

3、FastDFS的上傳過程

FastDFS向使用者提供基本檔案訪問介面,比如upload、download、append、delete等,以客戶端庫的方式提供給使用者使用。

Storage Server會定期的向Tracker Server傳送自己的儲存資訊。當Tracker Server Cluster中的Tracker Server不止一個時,各個Tracker之間的關係是對等的,所以客戶端上傳時可以選擇任意一個Tracker。

當Tracker收到客戶端上傳檔案的請求時,會為該檔案分配一個可以儲存檔案的group,當選定了group後就要決定給客戶端分配group中的哪一個storage server。當分配好storage server後,客戶端向storage傳送寫檔案請求,storage將會為檔案分配一個數據儲存目錄。然後為檔案分配一個fileid,最後根據以上的資訊生成檔名儲存檔案。

4、FastDFS的檔案同步

寫檔案時,客戶端將檔案寫至group內一個storage server即認為寫檔案成功,storage server寫完檔案後,會由後臺執行緒將檔案同步至同group內其他的storage server。

每個storage寫檔案後,同時會寫一份binlog,binlog裡不包含檔案資料,只包含檔名等元資訊,這份binlog用於後臺同步,storage會記錄向group內其他storage同步的進度,以便重啟後能接上次的進度繼續同步;進度以時間戳的方式進行記錄,所以最好能保證叢集內所有server的時鐘保持同步。

storage的同步進度會作為元資料的一部分彙報到tracker上,tracke在選擇讀storage的時候會以同步進度作為參考。

5、FastDFS的檔案下載

客戶端uploadfile成功後,會拿到一個storage生成的檔名,接下來客戶端根據這個檔名即可訪問到該檔案。

6、安裝

6.1、安裝 libfastcommon

下載libfastcommon

wget https://github.com/happyfish100/libfastcommon/archive/V1.0.36.tar.gz

解壓

tar -zxvf V1.0.36.tar.gz

編譯、安裝

./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 

6.2、安裝FastDFS

下載FastDFS

wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz

解壓

tar -zxvf V5.11.tar.gz

編譯、安裝

cd fastdfs-5.11/
./make.sh
./make.sh install

預設安裝方式安裝後的相應檔案與目錄

A、服務指令碼:

/etc/init.d/fdfs_storaged
/etc/init.d/fdfs_tracker

B、配置檔案

/etc/fdfs/client.conf.sample
/etc/fdfs/storage.conf.sample
/etc/fdfs/tracker.conf.sample

C、命令工具在 /usr/bin/ 目錄下

-rwxr-xr-x 1 root root  317432 May 26 13:47 fdfs_appender_test
-rwxr-xr-x 1 root root  317208 May 26 13:47 fdfs_appender_test1
-rwxr-xr-x 1 root root  304064 May 26 13:47 fdfs_append_file
-rwxr-xr-x 1 root root  303752 May 26 13:47 fdfs_crc32
-rwxr-xr-x 1 root root  304096 May 26 13:47 fdfs_delete_file
-rwxr-xr-x 1 root root  304864 May 26 13:47 fdfs_download_file
-rwxr-xr-x 1 root root  304448 May 26 13:47 fdfs_file_info
-rwxr-xr-x 1 root root  322352 May 26 13:47 fdfs_monitor
-rwxr-xr-x 1 root root 1111464 May 26 13:47 fdfs_storaged
-rwxr-xr-x 1 root root  327336 May 26 13:47 fdfs_test
-rwxr-xr-x 1 root root  326552 May 26 13:47 fdfs_test1
-rwxr-xr-x 1 root root  453808 May 26 13:47 fdfs_trackerd
-rwxr-xr-x 1 root root  305056 May 26 13:47 fdfs_upload_appender
-rwxr-xr-x 1 root root  306072 May 26 13:47 fdfs_upload_file

FastDFS 服務指令碼設定的 bin 目錄是 /usr/local/bin, 但實際命令安裝在 /usr/bin/ 下

建立 /usr/bin 到 /usr/local/bin 的軟連結

ln -s /usr/bin/fdfs_trackerd   /usr/local/bin
ln -s /usr/bin/fdfs_storaged   /usr/local/bin
ln -s /usr/bin/stop.sh         /usr/local/bin
ln -s /usr/bin/restart.sh      /usr/local/bin

6.3、配置FastDFS跟蹤器(Tracker)

進入 /etc/fdfs,複製 FastDFS 跟蹤器樣例配置檔案 tracker.conf.sample,並重命名為 tracker.conf

cd /etc/fdfs
cp tracker.conf.sample tracker.conf
vi tracker.conf

建立tracker基礎資料目錄

mkdir -p /mnt/fastdfs/tracker

修改基礎資料目錄和服務埠

# 配置檔案是否不生效,false 為生效
disabled=false

# 提供服務的埠
port=22122

# Tracker 資料和日誌目錄地址(根目錄必須存在,子目錄會自動建立)
base_path=/mnt/fastdfs/tracker

# HTTP 服務埠
http.server_port=80

防火牆中開啟跟蹤埠22122

# vi /etc/sysconfig/iptables

新增如下埠行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT

重啟防火牆:
# service iptables restart

啟動Tracker

service fdfs_trackerd start

檢視 FastDFS Tracker 是否已成功啟動 ,22122埠正在被監聽,則算是Tracker服務安裝成功

netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22122           0.0.0.0:*               LISTEN      20926/fdfs_trackerd 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      708/sshd 

設定Tracker開機啟動

chkconfig fdfs_trackerd on

tracker server 目錄及檔案結構

Tracker服務啟動成功後,會在base_path下建立data、logs兩個目錄。目錄結構如下:

${base_path}
  |__data
  |   |__storage_groups.dat:儲存分組資訊
  |   |__storage_servers.dat:儲存伺服器列表
  |__logs
  |   |__trackerd.log: tracker server 日誌檔案 

6.4、配置 FastDFS 儲存 (Storage)

進入 /etc/fdfs 目錄,複製 FastDFS 儲存器樣例配置檔案 storage.conf.sample,並重命名為 storage.conf

cd /etc/fdfs
cp storage.conf.sample storage.conf
vim storage.conf

建立儲存目錄

mkdir -p /mnt/fastdfs/storage

編輯storage.conf

# 配置檔案是否不生效,false 為生效
disabled=false 

# 指定此 storage server 所在 組(卷)
group_name=group1

# storage server 服務埠
port=23000

# 心跳間隔時間,單位為秒 (這裡是指主動向 tracker server 傳送心跳)
heart_beat_interval=30

# Storage 資料和日誌目錄地址(根目錄必須存在,子目錄會自動生成)
base_path=/mnt/fastdfs/storage

# 存放檔案時 storage server 支援多個路徑。這裡配置存放檔案的基路徑數目,通常只配一個目錄。
store_path_count=1


# 逐一配置 store_path_count 個路徑,索引號基於 0。
# 如果不配置 store_path0,那它就和 base_path 對應的路徑一樣。
store_path0=/mnt/fastdfs/storage

# FastDFS 儲存檔案時,採用了兩級目錄。這裡配置存放檔案的目錄個數。 
# 如果本引數只為 N(如: 256),那麼 storage server 在初次執行時,會在 store_path 下自動建立 N * N 個存放檔案的子目錄。
subdir_count_per_path=256

# tracker_server 的列表 ,會主動連線 tracker_server
# 有多個 tracker server 時,每個 tracker server 寫一行
tracker_server=172.16.77.91:22122

# 允許系統同步的時間段 (預設是全天) 。一般用於避免高峰同步產生一些問題而設定。
sync_start_time=00:00
sync_end_time=23:59
# 訪問埠
http.server_port=80

防火牆中開啟儲存器埠(預設的 23000)

# vim /etc/sysconfig/iptables

新增如下埠行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT

重啟防火牆:
# service iptables restart

啟動 Storage

service fdfs_storaged start

檢視Storage和Tracker是否在通訊

server_count=1, server_index=0

tracker server is 172.16.77.91:22122

group count: 1

Group 1:
group name = group1
disk total space = 503836 MB
disk free space = 477891 MB
trunk free space = 0 MB
storage server count = 1
active server count = 1
storage server port = 23000
storage HTTP port = 82
store path count = 1
subdir count per path = 256
current write server index = 0
current trunk file id = 0

        Storage 1:
                id = 172.16.77.91
                ip_addr = 172.16.77.91 (iZbp10yl3eetc4big9ul6xZ)  ACTIVE

設定 Storage 開機啟動

chkconfig fdfs_storaged on

6.5、檔案上傳測試

修改 Tracker 伺服器中的客戶端配置檔案

cd /etc/fdfs
cp client.conf.sample client.conf
vim client.conf

建立Client 的資料和日誌目錄

# Client 的資料和日誌目錄
base_path=/mnt/fastdfs/client

# Tracker埠
tracker_server=172.16.77.91:22122

上傳測試

/usr/bin/fdfs_upload_file /etc/fdfs/client.conf 100sh.jpg

上傳成功後返回

group1/M00/00/00/rBBNW1sJCvCAHgH7AAVGh5jPYok707.jpg

返回的檔案ID由group、儲存目錄、兩級子目錄、fileid、檔案字尾名(由客戶端指定,主要用於區分檔案型別)拼接而成。

這裡寫圖片描述

7、安裝Nginx

安裝Nginx作為伺服器以支援Http方式訪問檔案

7.1、安裝nginx所需環境

gcc 安裝

yum install gcc-c++ -y

PCRE pcre-devel 安裝

yum install -y pcre pcre-devel

zlib 安裝

yum install -y zlib zlib-devel

OpenSSL 安裝

yum install -y openssl openssl-devel

7.2、安裝Nginx

下載nginx

wget https://nginx.org/download/nginx-1.9.8.tar.gz

解壓

tar -zxvf nginx-1.9.8.tar.gz
cd nginx-1.9.8

使用預設配置

./configure

編譯、安裝

make
make install

防火牆中開啟Nginx埠(預設的 80)

vim /etc/sysconfig/iptables

新增如下埠行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

重啟防火牆:
service iptables restart

7.3、訪問檔案

修改nginx.conf

vim /usr/local/nginx/conf/nginx.conf

server {
    listen       80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    location /group1/M00 {
        alias /mnt/fastdfs/storage/data;
    }
}

新增nginx到啟動檔案

#!/bin/bash  
# nginx Startup script for the Nginx HTTP Server  
#  
# chkconfig: - 85 15  
# description: Nginx is a high-performance web and proxy server.  
# It has a lot of features, but it's not for everyone.  
# processname: nginx  
# pidfile: /var/run/nginx.pid  
# config: /usr/local/nginx/conf/nginx.conf  
nginxd=/usr/local/nginx/sbin/nginx  
nginx_config=/usr/local/nginx/conf/nginx.conf  
nginx_pid=/usr/local/nginx/nginx.pid  

RETVAL=0  
prog="nginx" 

# Source function library.  
. /etc/rc.d/init.d/functions  

# Source networking configuration.  
. /etc/sysconfig/network  

# Check that networking is up.  
[ ${NETWORKING} = "no" ] && exit 0  

[ -x $nginxd ] || exit 0  


# Start nginx daemons functions.  
start() {  

if [ -e $nginx_pid ];then 
   echo "nginx already running...." 
   exit 1  
fi  

   echo -n $"Starting $prog: " 
   daemon $nginxd -c ${nginx_config}  
   RETVAL=$?  
   echo  
   [ $RETVAL = 0 ] && touch /var/lock/subsys/nginx  
   return $RETVAL  

}  


# Stop nginx daemons functions.  
stop() {  
        echo -n $"Stopping $prog: " 
        killproc $nginxd  
        RETVAL=$?  
        echo  
        [ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /var/run/nginx.pid  
}  


# reload nginx service functions.  
reload() {  

    echo -n $"Reloading $prog: " 
 $nginxd -s reload  
    #if your nginx version is below 0.8, please use this command: "kill -HUP `cat ${nginx_pid}`" 
    RETVAL=$?  
    echo  

}  

# See how we were called.  
case "$1" in 
start)  
        start  
        ;;  

stop)  
        stop  
        ;;  

reload)  
        reload  
        ;;  

restart)  
        stop  
        start  
        ;;  

status)  
        status $prog  
        RETVAL=$?  
        ;;  
*)  
        echo $"Usage: $prog {start|stop|restart|reload|status|help}" 
        exit 1  
esac  

exit $RETVAL 

啟動nginx

service nginx start

設定開機啟動

chkconfig nginx on

8、FastDFS 配置 Nginx 模組

8.1、安裝配置Nginx模組

下載 fastdfs-nginx-module、解壓

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

解壓

unzip 5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip
mv fastdfs-nginx-module-5e5f3566bbfa57418b5506aaefbe107a42c9fcb1 fastdfs-nginx-module

配置Nginx增加fastdfs-nginx-module模組

# 先停掉nginx服務
# /usr/local/nginx/sbin/ngix -s stop

進入解壓包目錄
# cd /softpackages/nginx-1.9.8/

# 新增模組
# ./configure --add-module=/opt/fastdfs-nginx-module/src

重新編譯、安裝
# make && make install

檢視Nginx的模組

/usr/local/nginx/sbin/nginx -V

複製 fastdfs-nginx-module 原始碼中的配置檔案到/etc/fdfs 目錄

cd /opt/fastdfs-nginx-module/src
cp mod_fastdfs.conf /etc/fdfs/

修改配置檔案

# 連線超時時間
connect_timeout=10

# Tracker Server
tracker_server=172.16.77.91:22122

# StorageServer 預設埠
storage_server_port=23000

# 如果檔案ID的uri中包含/group**,則要設定為true
url_have_group_name = true

# Storage 配置的store_path0路徑,必須和storage.conf中的一致
store_path0=/mnt/fastdfs/storage

複製 FastDFS 的部分配置檔案到/etc/fdfs 目錄

cd /opt/fastdfs-5.11/conf
cp anti-steal.jpg http.conf mime.types /etc/fdfs/

修改nginx.conf

vim /usr/local/nginx/conf/nginx.conf
location ~/group([0-9])/M00 {
    ngx_fastdfs_module;
}

啟動nginx

service nginx start

相關推薦

持續整合docker安裝FastDFS

1、簡介 FastDFS 是一個開源的高效能分散式檔案系統(DFS)。 它的主要功能包括:檔案儲存,檔案同步和檔案訪問,以及高容量和負載平衡。主要解決了海量資料儲存問題,特別適合以中小檔案(建議範圍:4KB < file_size <500MB)為

Docker-docker-compose命令和模板檔案說明

文章目錄 docker-compose常用命令 docker-compose.yml模板 docker-compose常用命令 docker-compose up 啟動容器,會出現互動命令視窗,若此時Ctrl+C

Docker-docker-compose教程(介紹,安裝,入門示例)

文章目錄 docker-compose介紹 docker-compose安裝 安裝docker(已安裝最新的請忽略此步驟) docker-compose安裝與解除安裝 docker-compose簡單示例 d

:Spring Boot整合RabbitMQ

RabbitMQ是一個開源的訊息代理和佇列伺服器,用來通過普通協議在完全不同的應用之間共享資料,或者簡單地將作業佇列以便讓分散式伺服器進行處理。訊息佇列使用訊息將應用程式連線起來,這些訊息通過像RabbitMQ這樣的訊息代理伺服器在應用程式之間路由。這篇文章將帶你瞭解怎麼整合Rabbit

: 用spring boot整合swagger2建立API文件

簡介: Swagger的目標是為REST APIs 定義一個標準的,與語言無關的介面,使人和計算機在看不到原始碼或者看不到文件或者不能通過網路流量檢測的情況下能發現和理解各種服務的功能。當服務通過Swagger定義,消費者就能與遠端的服務互動通過少量的實現邏輯。類似於低階程

持續整合docker--第一(環境準備)

1、安裝jdk1.1 解除安裝openjdkyum -y remove java java-1.8.0-openjdk1.2 下載jdkwget --no-cookies --header "Cookie: oraclelicense=accept-securebackup-

spring boot 開發—整合websocket

1、websocket簡介 1.1、WebSocket 是什麼? WebSocket 是一種網路通訊協議。RFC6455 定義了它的通訊標準。 WebSocket 是 HTML5 開始提供的一種在單個 TCP 連線上進行全雙工通訊的協議。 1.2、為什麼

SpringBoot整合Spring Data JPA

作者:追夢1819 原文:https://www.cnblogs.com/yanfei1819/p/10910059.html 版權宣告:本文為博主原創文章,轉載請附上博文連結! 前言   前面幾章,我們介紹了 JDBCTemplate、MyBatis 等 ORM 框架。下面我們來介紹極簡模式的 Sprin

Spring Cloud實戰 | :Spring Cloud整合Spring Security OAuth2認證伺服器統一認證自定義異常處理

[本文完整程式碼下載點選](https://github.com/hxrui/youlai-mall.git) # 一. 前言 相信瞭解過我或者看過我之前的系列文章應該多少知道點我寫這些文章包括建立 [有來商城youlai-mall](https://github.com/hxrui/youlai

實踐課-------(

視圖 clas 環境配置 項目 開源 nfa nco ext contex 通過這十天的框架搭建學習,學會了環境配置,及其測試,得出以下總結 1.創建WEB工程添加struts支持 2.分包 3添加spring支持 4.添加spring配置文件 5.在web.x

:網絡編程補充與進程

ans 秘鑰 可能 con com eas inpu 域名系統) import 本篇內容 udp協議套接字 開啟進程的方式 多進程實現並發的套接字通信 join方法 守護進程 同步鎖 進程隊列 生產者消費者模型 進程池 paramiko模塊 一、 udp協議套接字

float浮動

默認 spa 寬度 空格 位移 hidden 選擇器 rod otto float浮動 首先老師要聲明,浮動這一塊,和邊距、定位相比,它是比較難的,但是用它,頁面排版會更好。 這節課就直接上代碼,看著代碼去學浮動。 我們先弄一個div,給它一個背景顏色: HTML:

:Spark SQL 源碼分析之 In-Memory Columnar Storage源碼分析之 cache table

gravity base field eof 授權 葉子節點 command ref gist /** Spark SQL源碼分析系列文章*/ Spark SQL 可以將數據緩存到內存中,我們可以見到的通過調用cache table tableName即可將一張表緩

數據結構——棧與遞歸

分解 是什麽 運行時 使用 執行過程 非遞歸算法 long 應該 char 棧還有一個重要應用是在程序設計中實現遞歸。遞歸是計算機 科學和數學中一種解決問題的及其重要的方法。在數據結構中,可以用它來設計簡單。易於理解的算法,特別是在一些具有遞歸定義的結構上設計算法。 遞歸的

mysql文章~一個mysql案例的排查

文章 pla 既然 排查 問題 一點 一個 相關 聯系 背景:測試環境下發現大量select查詢,而且負載飆升到90+ 排查思路: 1 老規則,按照排錯腳本走一圈,規劃出幾個元素(1 針對庫訪問的統計 2針對具體語句類型的統計),發現有大量的se

數據表設計和保存item到json文件

初始 self pycha cti ensure comment 項目 div init 上節說到Pipeline會攔截item,根據設置的優先級,item會依次經過這些Pipeline,所以可以通過Pipeline來保存文件到json、數據庫等等。 下面是自定義json

【Linux筆記】、添加MariaDB用戶、設置權限

.com 生效 mysq local 分享圖片 style info user 創建 一、登錄mysql 二、創建用戶 create user [email protected] identified by ‘dev‘; 三、給新建用戶授權數據庫h_user的權限 授權

秒殺多線程 經典線程同步總結 關鍵段 事件 互斥量 信號量

事件觸發 內核 clas article ase 理解 handle order 線程並發 本文轉載於:http://blog.csdn.net/morewindows/article/details/7538247 來詳細介紹常用的線程同步互斥機制——關鍵段、事件、互斥量

測試

展開 恢復 win row ogr 排序 ges 所有 字符 sublime使用技巧 1:安裝漂亮的編程字體http://pan.baidu.com/s/1xMex9 下載"程序編寫字體 – Yahei Consolas Hybrid",雙擊安裝 2:解壓sublime到你

python全棧開發【】Python常用模塊一(主要是re正則和collections)

順序 常用模塊 內置 object 簡潔 整體 re.search lec 快速 一、認識模塊    什麽是模塊:一個模塊就是一個包含了python定義和聲明的文件,文件名就是加上.py的後綴,但其實import加載的模塊分為四個通用類別 :     1.使用python