CentOS6.5環境搭建分散式存儲FastDFS-5.0.5集群詳細過程

来源:http://www.cnblogs.com/helloliyj/archive/2017/05/06/6817487.html
-Advertisement-
Play Games

FastDFS架構簡介 FastDFS是一款開源的、分散式文件系統(Distributed File System),由淘寶開發平臺部資深架構師餘慶開發。FastDFS 是包括一組 Tracker Server 和 Storage Server 的。Tracker Server 與 Storage ...


FastDFS架構簡介

FastDFS是一款開源的、分散式文件系統(Distributed File System),由淘寶開發平臺部資深架構師餘慶開發。FastDFS 是包括一組 Tracker Server 和 Storage Server 的。Tracker Server 與 Storage Server 之間不直接通信,其基本的信息由配置文件在系統啟動載入時獲知。多台 Tracker Server 之間保證了 Tracker 的分散式,Tracker Server 之間是對等的,防止了單點故障。 Storage Server 是分成多個 Group,每個 Group 中的Storage 都是互相備份的,也就是說,如果 Group1 有 Storage1、Storage2、Storage3,其容量分別是100GB、100GB、100GB,那麼 Group1 的存儲能力是 100GB,而不是 300GB,這就是互相備份的意思。進一步說,整個 Group 的存儲能力由該組中該儲能力最小的 Storage 決定。多個 Group 之間的存儲方式,可以採用 round robin(輪訓)、load balanced(負載均衡)或指定 Group 的方式。另一點相對於MS(Master-Slave)模式的優勢,就是 Tracker Server 與 Master 是決然不同的,不僅 master 有上面可能提到的單點故障問題,而且 client 與 master 之間可能會出現瓶頸。但 FastDFS 架構中,Tracker Server 不會稱為系統瓶頸,數據最終是與一個 available 的 Storage Server 進行傳輸的。

上傳流程

我們可以通過 FastDFS 對文件的上傳過程,來初步瞭解 FastDFS 的基本架構。首先客戶端 client 發起對 FastDFS 的文件傳輸動作,是通過連接到某一臺 Tracker Server 的指定埠來實現的,Tracker Server 根據目前已掌握的信息,來決定選擇哪一臺 Storage Server ,然後將這個Storage Server 的地址等信息返回給 client,然後 client 再通過這些信息連接到這台 Storage Server,將要上傳的文件傳送到給 Storage Server上。

總結

簡單總結一下,FastDFS的特點包括(1)高可靠性:無單點故障;(2)高吞吐量:只要 Group 足夠多,數據流量是足夠分散的。

 

FastDFS部署:

1、機器分佈

Tracker 192.168.100.106:22122 CentOS

Group1-Storage1 192.168.100.106:23001 CentOS

Group1-Storage1 192.168.100.125:23001 CentOS

 

2、需要到的軟體和版本(軟體存放位置:/root/soft)

 

說明:nginx主要實現負載均衡、緩存等功能

 

3、創建相關文件夾

配置tracker所需的base_path: /opt/fastdfs_tracker

配置storage所需的日誌目錄:fastdfs_storage_info。備註:存儲storage之間同步文件等日誌的

配置storage所需的存儲文件目錄: /opt/fastdfs_storage_data。備註: 這個目錄是用來存儲文件的

 

以上三個文件將在後續的tracker.conf和storage.conf、mod_fastdfs.conf中用到

 

4、安裝libfastcommon-1.0.7.zip (註意:先檢查是否安裝unzip、zip、gcc、perl等)

unzip libfastcommon-1.0.7.zip

cd libfastcommon-1.0.7

sh make.sh && sh make.sh install

 

perl安裝:

wget http://www.cpan.org/src/5.0/perl-5.20.2.tar.gz

              tar zxvf perl-5.20.2.tar.gz               

              mkdir /usr/local/perl

              ./Configure -des -Dprefix=/usr/local/perl -Dusethreads -Uversiononly

              make

              make install

              perl -version   

 

註意:上述安裝路徑在/usr/lib64/,FastDFS主程式設置lib目錄是/usr/local/lib,創建軟連接如下: 

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

             ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so

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

             ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so

 

5、安裝fastdfs-5.05.tar.gz:

tar -zxvf fastdfs-5.05.tar.gz

cd fastdfs-5.05

./make.sh && ./make.sh install

 

進入/etc/fdfs這個目錄,如果有配置文件存在,則安裝成功

 

 

 

 

以上步驟在tracker和storage機器上都需要執行

 

6、配置tracker (192.168.100.106)

進入/etc/fdfs文件夾,執行命令: cp  tracker.conf.sample  tracker.conf。

      編輯tracker.conf,執行命令: vi  tracker.conf ,配置成如下:

disabled=false #false代表開啟配置文件

bind_addr= #空代表所有host,也可以指定host

port=22122 #tracker預設開啟的埠號

connect_timeout=30 #連接超時時間

network_timeout=60 #網路超時時間

base_path=/opt/fastdfs_tracker #存放store的數據和日誌文件

max_connections=256 #允許最大連接數

accept_threads=1 #允許的線程數

work_threads=4 #工作線程數,必須小於等於max_connections

store_lookup=2 #選擇上傳文件方式0:輪詢,1:指定組,2:負載均衡

store_group=group1 #上傳到組group1

store_server=0 #上傳到storage,0:輪詢,1:IP順序,2:伺服器順序

store_path=0 #上傳文件到哪個路徑0:輪詢,2:負載均衡

download_server=0 #指定下載伺服器0:輪詢,1:使用源伺服器

reserved_storage_space = 10% #保留的存儲空間

log_level=info #日誌等級

run_by_group= #選擇用戶組,空代表當前用戶組

run_by_user= #選擇用戶,空代表當前用戶

allow_hosts=* #允許訪問的IP,*代表全部

sync_log_buff_interval = 10 #同步日誌buff到磁碟的間隔時間

check_active_interval = 120 #檢查storage狀態間隔時間

thread_stack_size = 64KB #線程的堆棧大小,必須大於等於64KB

storage_ip_changed_auto_adjust = true #storageIP改變是自動調整

storage_sync_file_max_delay = 86400 #同步文件的最大延遲

storage_sync_file_max_time = 300 #同步文件的最大時間

use_trunk_file = false #是否使用中繼文件存儲小文件

slot_min_size = 256 #存儲文件的最小單位,必須大於等於4KB

slot_max_size = 16MB #存儲文件的最大單位,必須大於slot_min_size

trunk_file_size = 64MB #中繼文件的大小,必須大於等於4MB

trunk_create_file_advance = false #是否允許創建中繼文件超前

trunk_create_file_time_base = 02:00 #創建trunk文件的時間基準

trunk_create_file_interval = 86400 #創建trunk文件的時間間隔

trunk_create_file_space_threshold = 20G

trunk_init_check_occupying = false

trunk_init_reload_from_binlog = false

trunk_compress_binlog_min_interval = 0

use_storage_id = false

storage_ids_filename = storage_ids.conf

id_type_in_filename = ip

store_slave_file_use_link = false

rotate_error_log = false

error_log_rotate_time=00:00

rotate_error_log_size = 0

log_file_keep_days = 0

use_connection_pool = false

connection_pool_max_idle_time = 3600

http.server_port=8080

http.check_alive_interval=30

http.check_alive_type=tcp

http.check_alive_uri=/status.htm

 

配置文件詳細註解參考:

http://blog.csdn.net/xingjiarong/article/details/50752586

 

啟動tracker: /usr/local/bin/fdfs_trackerd  /etc/fdfs/tracker.conf  start (start\stop\restart)

檢測是否啟動成功:netstat -lntup|grep fdfs_trackerd

 

 

設置開機啟動:

echo "/usr/bin/fdfs_trackerd  /etc/fdfs/tracker.conf  start" >> /etc/rc.d/rc.local

 

7、配置storage (192.168.100.106\192.168.100.125)

進入/etc/fdfs文件夾,執行命令: cp  storage.conf.sample  storage.conf

編輯storage.conf,執行命令: vi storage.conf ,配置成如下:

disabled=false

group_name=group1

bind_addr=

client_bind=true

port=23001

connect_timeout=30

network_timeout=60

heart_beat_interval=30

stat_report_interval=60

base_path=/opt/fastdfs_storage_info

max_connections=256

buff_size = 256KB

accept_threads=1

work_threads=4

disk_rw_separated = true

disk_reader_threads = 1

disk_writer_threads = 1

sync_wait_msec=50

sync_interval=0

sync_start_time=00:00

sync_end_time=23:59

write_mark_file_freq=500

store_path_count=1

store_path0=/opt/fastdfs_storage_data

subdir_count_per_path=256

tracker_server=192.168.100.106:22122

log_level=info

run_by_group=

run_by_user=

allow_hosts=*

file_distribute_path_mode=0

file_distribute_rotate_count=100

fsync_after_written_bytes=0

sync_log_buff_interval=10

sync_binlog_buff_interval=10

sync_stat_file_interval=300

thread_stack_size=512KB

upload_priority=10

if_alias_prefix=

check_file_duplicate=0

file_signature_method=hash

key_namespace=FastDFS

keep_alive=0

use_access_log = false

rotate_access_log = false

access_log_rotate_time=00:00

rotate_error_log = false

error_log_rotate_time=00:00

rotate_access_log_size = 0

rotate_error_log_size = 0

log_file_keep_days = 0

file_sync_skip_invalid_record=false

use_connection_pool = false

connection_pool_max_idle_time = 3600

http.domain_name=

http.server_port=8888

 

配置文件詳細註解參考:

http://blog.csdn.net/xingjiarong/article/details/50752586

 

啟動storage: /usr/local/bin/fdfs_storage  /etc/fdfs/storage.conf  start

檢測是否啟動成功:netstat -lntup|grep fdfs_storaged

 

檢測啟動狀態:/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

       查看192.168.100.106:23001 是ACTIVE狀態即可

 

設置開機自動啟動:

echo "/usr/bin/fdfs_trackerd  /etc/fdfs/storage.conf  start" >> /etc/rc.d/rc.local

 

8、安裝nginx

storage中安裝nginx,主要是為了為提供http的訪問服務,同時解決group中storage伺服器的同步延遲問題。而tracker中安裝nginx,主要是為了提供http訪問的反向代理、負載均衡以及緩存服務 

yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel

 

a、在storage中安裝nginx (192.168.100.106\192.168.100.125)

tar -zxvf nginx1.7.8.tar.gz

tar -zxvf fastdfs-nginx-module_v1.16.tar.gz

cd /root/soft/fastdfs-nginx-module/src

編輯config文件,找到包含CORE_INCS這個一行,將路徑中local全部去掉,變為CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

cd nginx1.7.8

--prefix=/opt/nginx --add-module=/root/soft/fastdfs-nginx-module/src

make && make install

 

編輯nginx.conf文件如下:

 

 

 

 

 

 

 

 

 

 

 

 

將http.conf和mime.types拷貝到/etc/fdfs/下,如果不執行這一步,啟動nginx時會報錯。

cp /root/soft/fastdfs-5.05/conf/http.conf /etc/fdfs/

cp /root/soft/fastdfs-5.05/conf/mime.conf /etc/fdfs/

將mod_fastdfs.conf這個文件拷貝到 /etc/fdfs 目錄下

cp /root/soft/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/

編輯mod_fastdfs.conf 文件如下:

connect_timeout=2

network_timeout=30

base_path=/opt/fastdfs_storage_info

load_fdfs_parameters_from_tracker=true

storage_sync_file_max_delay = 86400

use_storage_id = false

storage_ids_filename = storage_ids.conf

tracker_server=192.168.100.106:22122

storage_server_port=23001

group_name=group1

url_have_group_name = true

store_path_count=1

store_path0=/opt/fastdfs_storage_data

log_level=info

log_filename=

response_mode=proxy

if_alias_prefix=

flv_support = true

flv_extension = flv

group_count = 1

[group1]

group_name=group1

storage_server_port=23001

store_path_count=1

store_path0=/opt/fastdfs_storage_data

store_path1=/opt/fastdfs_storage_data

 

配置文件詳細註解參考:

http://blog.csdn.net/xingjiarong/article/details/50752586

 

建立軟連接:

ln  -s  /opt/fastdfs_storage_data/data  /opt/fastdfs_storage_data/data/M00

 

啟動nginx: /opt/nginx/sbin/nginx

 

b、在tracker中安裝nginx

tar -zxvf nginx1.7.8.tar.gz

tar -zxvf fastdfs-nginx-module_v1.16.tar.gz

cd /root/soft/fastdfs-nginx-module/src

編輯config文件,找到包含CORE_INCS這個一行,將路徑中local全部去掉,變為CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

cd nginx1.7.8

--prefix=/opt/nginx --add-module=/root/soft/fastdfs-nginx-module/src --add-module=/root/soft/ngx_cache_purge-2.1 --with-http_ssl_module --with-pcre=/root/soft/pcre-8.40 --with-zlib=/root/soft/zlib-1.2.11

make && make install

 

編輯nginx.conf文件如下:

 

啟動nginx:/opt/nginx/sbin/nginx

 

9、測試並上傳文件

編輯client.conf 文件,編輯內容如下:

 

 

 

 

 

 

測試上傳文件:

echo "this is a test file -- hello world" >> test.txt

/usr/bin/fdfs_test /etc/fdfs/client.conf upload test.txt #上傳

生成如下url,並複製到瀏覽器訪問

 

 

以上測試說明成功,並且兩台stroage同步成功了

 

測試負載均衡辦法:停掉192.168.100.125或者192.168.100.106的storage再進行上傳測試

 /usr/local/bin/fdfs_storage  /etc/fdfs/storage.conf  stop

 

 

10、PHP安裝FasfDFS擴展模塊

cd /root/soft/fastdfs-5.05/client

make && make install

cd /root/soft/fastdfs-5.05/php_client

 

/usr/local/php/bin/phpize

./configure --with-php-config=/usr/local/php/bin/php-config

make && make install

cd /etc/fdfs

vi client.conf

tracker_server=192.168.100.106:22122 //根據環境填寫IP地址及埠號

 

在php.ini配置文件中載入fastdfs

cat fastdfs_client.ini >> /usr/local/php/etc/php.ini

 

新增nginx配置如下:

server {

listen 8080;

server_name localhost;

access_log /data/wwwlogs/access_nginx_cms.log combined;

root /opt/nginx/html;

index index.html index.htm index.php forum.php;

location /nginx_status {

access_log off;

allow 127.0.0.1;

deny all;

}

error_page 404 /404.html;

location ~ [^/]\.php(/|$) {

fastcgi_pass 192.168.100.106:9000;

fastcgi_index index.php;

include /usr/local/nginx/conf/fastcgi_params;

include fastcgi.conf;

}

location \(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ {

expires 30d;

access_log off;

}

location \(js|css)?$ {

expires 7d;

access_log off;

}

}

 

重啟nginx和php

/opt/nginx/sbin/nginx -s reload

或者

pkill -9 nginx

/opt/nginx/sbin/nginx

 

kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`

或者

pkill -9 php

/usr/local/php/sbin/php-fpm

 

測試:在瀏覽器中輸入:http://192.168.100.106:8080/fastdfs_test.php

如果出現類似於以下截圖則表示成功

 

 


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

-Advertisement-
Play Games
更多相關文章
  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當在唯一索引所對應的列上鍵入重覆值時,會觸發此異常。 ORA-00017: 請求會話以設置跟蹤事件 ORA-00018: 超出最大會話數 ORA-00019: 超出最大會話許可數 ORA-00020: 超出最大進程數 () ORA-00021... ...
  • 主要是看《SQL必知必會》第四版的書,而寫的一些SQL筆記,紅色的是方便以後查詢的sql語句,工作中主要是使用mysql資料庫,所以筆記也是圍繞mysql而寫的。 下文調試的數據表sql語句,如果要嘗試的調試的話可以複製過去運行即可 1 # Host: localhost (Version: 5.5 ...
  • 一、首先創建兩張表stu,sc --說明: 外鍵必須建立索引; FOREIGN key(sid) 設置外鍵,把sid設為外鍵 REFERENCES stu(sid) 引用作用。引用stu表中的sid ON DELETE CASCADE 級聯刪除ON UPDATE CASCADE 級聯更新 二、向兩張 ...
  • Linux Unix 免費 收費 開源 不開源 硬體無要求 有要求 IBM Sun Hp 主流的Linux的髮型版本: RedHat Fedora Mandriva Ubuntu CentOS Debian Getoo ...
  • Fedora是一個Linux發行,基於Redhat,算是Redhat的測試版本。而Fedora workstation預設使用的桌面環境是Gnome,使用Xfce作為桌面環境的Fedora較之稍顯輕量,不過呢,沒有經過配置的Xfce Fedora是很朴素的。 得益於Fedora中文源的出現能讓一些w ...
  • Bash 的若幹基本問題 這裡介紹一些bash啟動前、後的問題,以及一些使用bash需要註意的基本問題。 1、Bash的介紹 Bash是一種Shell程式,它是一般的Linux系統中的預設的Shell程式,一般情況下Bash指的是/bin/bash這個軟體。 一個Linux系統中有多少個可用的She ...
  • linux tcp GSO和TSO實現 ——lvyilong316 (註:kernel版本:linux 2.6.32) 概念 TSO(TCP Segmentation Offload): 是一種利用網卡來對大數據包進行自動分段,降低CPU負載的技術。 其主要是延遲分段。 GSO(Generic Se ...
  • 參考博客: http://www.cnblogs.com/chensiqiqi/p/6243549.html 感謝原博主為我學習Linux指明方向!! linux目錄:一切從“根”開始,“/”是所有目錄的起點(定點) linux每個目錄可以掛載在不同的設備(磁碟)上。 在邏輯上所有目錄(包括目錄下的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...