一張圖講解最少機器搭建FastDFS高可用分散式集群安裝說明

来源:https://www.cnblogs.com/yuesf/archive/2019/11/18/11886267.html
-Advertisement-
Play Games

 很幸運參與零售雲快消平臺的公有雲搭建及孵化項目。零售雲快消平臺源於零售雲家電3C平臺私有項目,是與公司業務強耦合的。為了適用於全場景全品類平臺,集團要求項目平臺化,我們搶先並承擔了此任務。並由我來主要負責平臺建設及項目落地。  今天講解在零售雲快消平臺中使用的圖片服務FastD ...


 很幸運參與零售雲快消平臺的公有雲搭建及孵化項目。零售雲快消平臺源於零售雲家電3C平臺私有項目,是與公司業務強耦合的。為了適用於全場景全品類平臺,集團要求項目平臺化,我們搶先並承擔了此任務。並由我來主要負責平臺建設及項目落地。

 今天講解在零售雲快消平臺中使用的圖片服務FastDFS集群搭建說明,此集群模式是根據單機版的安裝說明,在之前已經分享過一篇 一張圖講解單機FastDFS圖片伺服器安裝步驟(修訂版),改造成最少機器分散式集群安裝說明。

FastDFS是什麼?

 FastDFS是一個開源的輕量級分散式文件系統,它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件為載體的線上服務,如相冊網站、視頻網站等等。
 FastDFS為互聯網量身定製,充分考慮了冗餘備份、負載均衡、線性擴容等機制,並註重高可用、高性能等指標,使用FastDFS很容易搭建一套高性能的文件伺服器集群提供文件上傳、下載等服務。
--- 來源於百度百科

FastDFS 簡介

FastDFS分兩部分,跟蹤器(tracker)和存儲節點(storage)。

 Tracker是FastDFS的協調者,負責管理所有的storage server和group,每個storage在啟動後會連接Tracker,告知自己所屬的group等信息,並保持周期性的心跳,tracker根據storage的心跳信息,建立group==>[storage server list]的映射表。

 Storage 是以組(捲,group或volume)為單位組織,一個group內包含多台storage機器,數據互為備份,存儲空間以group內容量最小的storage為準,所以建議group內的多個storage儘量配置相同,以免造成存儲空間的浪費。

FastDFS是由2008年開始採用C語言研發致今在維護更新,已經廣泛使用,創始人餘慶 現以有他自己的公眾號: 微信號: fastdfs100 , FastDFS官方 github https://github.com/happyfish100/ 已經有多個相關組件

最少機器高可用總覽圖

file

在以下配置中沒有說明VIP的配置,後面會對VIP詳細說明。
VIP的目的是統一負載storageserver,storageserver的伸縮性不影響使用方的。

一、環境準備

軟體版本說明:

libfastcommon 使用的版本: libfastcommon-1.0.41.tar.gz

FastDFS 使用的版本: fastdfs-6.01.tar.gz

fastdfs-nginx-module 使用的版本:fastdfs-nginx-module-1.21.tar.gz

nginx 使用的版本: nginx-1.16.1.tar.gz

操作系統:CentOS 7.X

最低高可用

四台機器 分配情況:

TrackerServer1 :192.168.0.1

TrackerServer2 :192.168.0.2

StorageServer1:192.168.0.3

StorageServer2:192.168.0.4

Tracker伺服器準備上傳文件

準備上傳/opt/apps 目錄下:

libfastcommon-1.0.41.tar.gz
fastdfs-6.01.tar.gz

Storage伺服器準備上傳文件

準備上傳/opt/apps 目錄下:

libfastcommon-1.0.41.tar.gz
fastdfs-6.01.tar.gz
fastdfs-nginx-module-1.21.tar.gz
 nginx-1.16.1.tar.gz

二、安裝過程

TrackerServer1安裝過程

1、安裝 libfastcommon-1.0.41.tar.gz

tar -zxvf libfastcommon-1.0.41.tar.gz
cd libfastcommon-1.0.41/
./make.sh
./make.sh install

2、安裝 FastDFS

tar -zxvf  fastdfs-6.01.tar.gz
cd fastdfs-6.01/
./make.sh
./make.sh install
#配置文件準備
cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
Tracker Server 配置
vim /etc/fdfs/tracker.conf

修改配置如下:

#tracker server埠號
port=22122
#存儲日誌和數據的根目錄
base_path=/opt/fastdfs/tracker

3、開放防火牆埠

1)打開跟蹤埠
vim /etc/sysconfig/iptables
2)添加以下埠行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT
3)重啟防火牆
service iptables restart

4、啟動Tracker

/etc/init.d/fdfs_trackerd start

TrackerServer2安裝過程

安裝步驟同TrackerServer1

StorageServer1安裝過程

1、安裝 libfastcommon-1.0.41.tar.gz

tar -zxvf libfastcommon-1.0.41.tar.gz
cd libfastcommon-1.0.41/
./make.sh
./make.sh install

2、安裝 FastDFS

tar -zxvf  fastdfs-6.01.tar.gz
cd fastdfs-6.01/
./make.sh
./make.sh install
#配置文件準備
cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
cd /opt/apps/fastdfs-6.01/conf
cp http.conf mime.types /etc/fdfs/
Storage Server 配置
vim /etc/fdfs/storage.conf

修改配置如下:

#storage server埠號
port=23000
#數據和日誌文件存儲根目錄
base_path=/opt/fastdfs/storage
#第一個存儲目錄
store_path0=/opt/fastdfs/storepath0
#tracker伺服器IP和埠
tracker_server=192.168.0.1:22122
tracker_server=192.168.0.2:22122
#http訪問文件的埠(預設8888,看情況修改,和nginx中保持一致)
http.server_port=8888

3、安裝Nginx和 fastdfs-nginx-module

1)安裝fastdfs-nginx-module
#解壓fastdfs-nginx-module
tar -zxvf fastdfs-nginx-module-1.21.tar.gz
cd fastdfs-nginx-module-1.21/
cp ./src/mod_fastdfs.conf /etc/fdfs
2)安裝Nginx
#解壓nginx
tar -zxvf nginx-1.16.1.tar.gz
cd nginx-1.16.1/
#安裝nginx_http_image_filter_module
yum -y install gd-devel
#安裝依賴組件
yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel
#關聯模塊配置
./configure --add-module=../fastdfs-nginx-module-1.21/src --prefix=/usr/local/nginx --with-http_image_filter_module
#編譯nginx
make
#安裝nginx
make install
3)查看是否安裝成功
/usr/local/nginx/sbin/nginx -V

查看插件是否安裝成功

[root@FastDFS nginx-1.16.1]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.16.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) 
configure arguments: --add-module=../fastdfs-nginx-module-1.21/src --prefix=/usr/local/nginx --with-http_image_filter_module
[root@FastDFS nginx-1.16.1]#
4)修改Nginx配置

修改nginx.conf配置

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

修改配置如下:

user  nobody;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
  sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       8888;
        server_name  localhost;

        location ~/group1/M00 {
            ngx_fastdfs_module;
        }

        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

    upstream storage_server_group1 {
        server 192.168.0.3:8888 weight=10;
        server 192.168.0.4:8888 weight=10;
    }
}

修改mod_fastdfs.conf配置

vim /etc/fdfs/mod_fastdfs.conf

修改配置如下:

#
connect_timeout=10
#tracker伺服器IP和埠
tracker_server=192.168.0.1:22122
tracker_server=192.168.0.2:22122
#是否啟用group組名
url_have_group_name=true
#
store_path0=/opt/fastdfs/storepath0

5、開放防火牆埠

1)打開跟蹤埠
vim /etc/sysconfig/iptables
2)添加以下埠行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8888 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT
3)重啟防火牆
service iptables restart

4、啟動Storage

/etc/init.d/fdfs_storaged start

5、啟動Nginx

#啟動
/usr/local/nginx/sbin/nginx
#停止
/usr/local/nginx/sbin/nginx -s stop
#重啟
/usr/local/nginx/sbin/nginx -s reload

StorageServer2安裝過程

安裝步驟同StorageServer1安裝過程

測試上傳圖片

使用TrackerServer1機器進行測試

1、Client配置
vim /etc/fdfs/client.conf

修改配置如下:

#
base_path=/opt/apps/fastdfs/client
#tracker伺服器IP和埠
tracker_server=192.168.0.1:22122 
tracker_server=192.168.0.2:22122 
2、準備上傳的圖片
3、上傳圖片
 fdfs_upload_file /etc/fdfs/client.conf test.jpg

或使用以下命令測試

fdfs_test  /etc/fdfs/client.conf upload test.jpg

測試結果

[root@ecsf-toj5rfb9 apps]# fdfs_test  /etc/fdfs/client.conf upload test.jpg
This is FastDFS client test program v6.01

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.

[2019-11-13 17:53:15] DEBUG - base_path=/opt/fastdfs/client, connect_timeout=10, network_timeout=60, tracker_server_count=2, 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=6.0.36.217, port=23000
    server 2. group_name=, ip_addr=6.0.36.218, port=23000

group_name=group1, ip_addr=192.168.0.4, port=23000
storage_upload_by_filename
group_name=group1, remote_filename=M00/00/00/BgAk2l3L0oSAAhsuAAHf-RXvI9M055.jpg
source ip address: 192.168.0.4
file timestamp=2019-11-13 17:53:08
file size=122873
file crc32=367993811
example file url: http://192.168.0.4/group1/M00/00/00/BgAk2l3L0oSAAhsuAAHf-RXvI9M055.jpg
storage_upload_slave_by_filename
group_name=group1, remote_filename=M00/00/00/BgAk2l3L0oSAAhsuAAHf-RXvI9M055_big.jpg
source ip address: 192.168.0.4
file timestamp=2019-11-13 17:53:08
file size=122873
file crc32=367993811
example file url: http://192.168.0.4/group1/M00/00/00/BgAk2l3L0oSAAhsuAAHf-RXvI9M055_big.jpg

本文由博客一文多發平臺 OpenWrite 發佈!

再次感謝!!! 您已看完全文,歡迎關註微信公眾號猿碼 ,你的支持是我持續更新文章的動力!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 以前用到JSON的場景也不少,但是沒有仔細的研究過,這幾天趁著一個需求用到了,就整理了一下相關用法。 一、 JSON.stringify() 1. 語法 JSON.stringify(value[, replacer [, space]]) 2. 先說一下後面兩個可選參數 space:是指定縮進用的 ...
  • ...展開&收集運算符,也就是說他可以乾兩件事情,展開和收集 一:收集,顧名思義把散列東西收集到一個地方,這個地方ES6規定收集在數組中 例如:下麵函數fn將傳遞的參數收集在arg變數中,列印arg是一個數組,裡面包含著傳來的參數。就像吃豆子一樣把值收到自己的嘴裡。 function fn(...a ...
  • 設計模式--觀察者模式 1、觀察者模式 觀察者模式:定義對象間一種一對多的依賴關係,當一個對象狀態發生變化時,所有依賴於它的對象都得到通知,並被自動更新。 2、觀察者模式的結構 角色 主題(Subject):主題是一個介面,該介面規定了具體主題需要實現的方法,比如添加,刪除觀察者以及通知觀察者的方法 ...
  • 裝飾器模式--裝飾模式 1、裝飾模式 裝飾模式:動態的給對象添加一些額外的職責,例如,給相片加各種不同的相框(相框就是裝飾器)。 2、裝飾模式的結構 角色 抽象組件(Component): 抽象組件定義了需要進行裝飾的方法,也就是“被裝飾者”角色; 具體組件(ConcreteComponent): ...
  • 系統分析師 軟體水平考試(高級) 開篇 前言 時隔一年,我開始了系統分析師的博客寫作。回過頭翻看一下,一年前的系統架構設計師系列的第一篇博客 需求理論,還是比較有感觸的。 其實系統分析師的考試早在上邊年五月份就參與了,也在六月份就知道自己通過了考試。但是一方面系統分析師與系統架構設計師有很多內容上的 ...
  • 一、安裝Redis集群 安裝步驟參照網上教程,Mac安裝步驟參照https://github.com/muyl/mac docker redis cluster 二、創建SpringBoot工程 1. 創建Redis配置類 2. SpringBoot屬性文件 3. SpringBoot啟動類 4. ...
  • 後補 ...
  • 1、Java代碼監控 JDK提供java.lang.management包, 其實就是基於JMX技術規範,提供一套完整的MBean,動態獲取JVM的運行時數據,達到監控JVM性能的目的。 代碼地址 "https://github.com/AganRun/Learn/tree/master/Java/ ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...