搭建FastDFS主從文件系統

1.        FastDFS介紹

       FastDFS是一個開源的分佈式文件系統,它對文件進行管理。功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件爲載體的在線服務,如相冊網站、視頻網站等。

       FastDFS服務端有兩個角色:跟蹤器(tracker)和存儲節點(storage)。跟蹤器主要做調度工作,在訪問上起負載均衡的作用。存儲節點存儲文件,完成文件管理的功能:存儲、同步和提供存取接口,FastDFS同時對文件的meta data進行管理。所謂文件的meta data就是文件的相關屬性,以鍵值對(key value pair)方式表示,如:width=1024,其中的key爲width,value爲1024.文件的metadata是文件屬性列表,可以包含多個鍵值對。FastDFS系統結構如下圖所示:


    wKiom1ehqrKw3IHbAATrD8qifPg859.png

        跟蹤器和存儲節點都可以由一臺或多臺服務器構成。跟蹤器和存儲節點中的服務器均可以隨時增加或下線而不會影響線上服務。其中跟蹤器中的所有服務器都是對等的,可以根據服務器的壓力情況隨時增加或減少。

       爲了支持大容量,存儲節點(服務器)採用了分卷(或分組)的組織方式。存儲系統由一個或多個卷組成,卷與卷之間的文件是相互獨立的,所有卷的文件容量累加就是整個存儲系統中的文件容量。一個卷可以由一臺或多臺存儲服務器組成,一個卷下的存儲服務器中的文件都是相同的,卷中的多臺存儲服務器起到了冗餘備份和負載均衡的作用。在卷中增加服務器時,同步已有的文件由系統自動完成,同步完成後,系統自動將新增服務器切換到線上提供服務。當存儲空間不足或即將耗盡時,可以動態添加捲。只需要增加一臺或多臺服務器,並將它們配置爲一個新的卷,這樣就擴大了存儲系統的容量。FastDFS中的文件標識分爲兩部分:卷名和文件名,二者缺一不可。

2.    FastDFS文件上傳交互過程

wKiom1ehqtjg7CBhAADR2w-2DA8027.png-wh_50

1.        Client詢問tracker上傳到storage,不需要附加參數。

2.        tracker返回一臺可用的storage。

3.        client直接和storage通宵完成文件上傳

客戶端client發起對FastDFS的文件傳輸動作,是通過連接到某一臺Tracker Server的指定端口來實現的,Tracker Server根據目前已掌握的信息,來決定選擇那一臺Storage Service,然後將這個Storage Server的地址等信息返回給client,然後client再通過這些信息連接到這臺Storage Server,將要上傳的文件傳送到Storage Server上。


3.    FastDFS文件下載交互過程

            wKioL1ehquWwXyjXAADXhoXpKDc160.png

1.      client詢問tracker下載文件的storage,參數爲文件標識(卷名和文件名)。

2.      tracker返回一臺可用的storage。

3.      client直接和storage通訊完成文件下載。


   4.  FastDFS主從搭建

        4.1 服務器及文件準備


跟蹤服務器1 : 192.168.2.222              master

跟蹤服務器2 : 192.168.2.223              slave

存儲服務器1 : 192.168.2.222              master

存儲服務器2 : 192.168.2.223              slave

環境:CentOS 6.8

用戶:root

所需文件:見附件


fastdfs-5.05.tar.gz :  FastDFS安裝主文件包

libfastcommon-master.zipFastDFS文件系統依賴包

nginx-1.8.1.tar.gznginx安裝包

fastdfs-nginx-module_v1.16.tar.gznginx下fastdfs模塊包

       4.2 創建用戶

創建用戶並指定家目錄

# useradd -m -d /home/fastdfs/ -s /sbin/nologin fastdfs    

# cd /home/

設置家目錄權限,改目錄爲nginx訪問目錄

# chown -R fastdfs:fastdfs fastdfs

# ll

drwx------. 11 fastdfs fastdfs 40968月  1 14:36 fastdfs


    4.3 上傳所有安裝包到服務器

# pwd

/home/fastdfs

# tree

.

├── fastdfs-5.05.tar.gz

├──fastdfs-nginx-module_v1.16.tar.gz

├── libfastcommon-master.zip

└── nginx-1.8.1.tar.gz

 

0 directories, 4 files

[root@masterfastdfs]#

    4.4 創建文件夾

# cd /home/fastdfs/

創建nginx安裝文件夾

# mkdir /usr/local/nginx

創建tracker相關文件夾

# mkdir /home/fastdfs/tracker

創建storage相關文件夾

# mkdir /home/fastdfs/storage

創建storage數據存儲文件夾

# mkdir /home/fastdfs/storage_data

 

    4.5 安裝依賴包

需要配置網絡yum源

[root@masterfastdfs]# yum -y install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel

    4.6 安裝libfastcommon-master

解壓

# unzip libfastcommon-master.zip

# cd libfastcommon-master

# ls

HISTORY  INSTALL libfastcommon.spec  make.sh  php-fastcommon  README src

編譯

# ./make.sh

安裝

默然安裝到了

/usr/lib64/libfastcommon.so

# ./make.sh install

配置軟連接

因爲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: 創建符號鏈接 "/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

    4.7 安裝fastdfs-5.05

解壓

# tar zxvf fastdfs-5.05.tar.gz

# cd fastdfs-5.05

編譯(編譯前確保已經安裝了libfastcommon-master

# ./make.sh

安裝

# ./make.sh install

採用默然安裝的方式安裝,安裝後的相應文件和目錄:

A、安裝後的配置文件(樣例配置文件)

# ls /etc/fdfs/

client.conf.sample                # 客戶端配置文件

storage.conf.sample                     # 存儲節點配置文件

tracker.conf.sample                      #跟蹤節點配置文件

B、安裝後的腳本

# ll /etc/init.d/fdfs*

/etc/init.d/fdfs_storaged               # 存儲節點腳本文件

/etc/init.d/fdfs_trackerd              # 跟蹤節點腳本文件

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

/usr/bin/fdfs_appender_test  

/usr/bin/fdfs_delete_file   

/usr/bin/fdfs_storaged              # storage啓動命令

/usr/bin/fdfs_upload_appender

/usr/bin/fdfs_appender_test1 

/usr/bin/fdfs_download_file 

/usr/in/fdfs_test     

/usr/bin/fdfs_upload_file             # 客戶端上傳文件命令

/usr/bin/fdfs_append_file    

/usr/bin/fdfs_file_info     

/usr/in/fdfs_test1

/usr/bin/fdfs_crc32          

/usr/bin/fdfs_monitor          # fdfs集羣監控命令

/usr/bin/fdfs_trackerd                 # tracker啓動命令

修改腳本

因爲FastDFS服務腳本設置的bin目錄是/usr/local/bin,但實際命令安裝在/usr/bin。因此需要修改FastDFS服務腳本中相應的命令路徑,也就是把/etc/init.d/fdfs_storaged/etc/init.d/fdfs_trackerd兩個腳本中的/usr/local/bin修改成/usr/bin

# vim /etc/init.d/fdfs_trackerd

使用查找替換命令統一修改 :%s+/usr/local/bin+/usr/bin

# vim /etc/init.d/fdfs_storaged

使用查找替換命令統一修改 :%s+/usr/local/bin+/usr/bin

 

    4.8 配置FastDFS跟蹤器Tracker

# cd /etc/fdfs/

# cp tracker.conf.sample tracker.conf

# vim tracker.conf

修改以下內容

       disabled=false                        #啓動配置文件

       port=22122                                 #tracker的端口號,一般採用22122這個默認的端口

       base_path=/home/fastdfs/tracker   #tracker的數據文件和日誌目錄

啓動tracker

# /etc/init.d/fdfs_trackerd start

查看tracker是否啓動成功

(1)查看22122端口監聽情況

# netstat -antpu |grep fdfs

tcp     0     0 0.0.0.0:22122     0.0.0.0:*      LISTEN      51641/fdfs_trackerd

(2)通過查看tracker啓動日誌

       # tail -100f /home/fastdfs/tracker/logs/trackerd.log

防火牆中打開跟蹤器Tracker端口

# iptables -I INPUT -p tcp --dport 22122 -j ACCEPT

保存防火牆規則

# /etc/init.d/iptables save

關閉tracker

# /etc/init.d/fdfs_trackerd stop

設置FastDFS跟蹤器開機啓動

# echo '/etc/init.d/fdfs_trackerd start' >>/etc/rc.d/rc.local

    4.9 配置FastDFS存儲節點Storage

# cd /etc/fdfs/

# cp storage.conf.sample storage.conf

# vim storage.conf

修改以下內容

       disabled=false                                            # 啓動配置文件

group_name=group1                                  # 組名

port=23000                                              # storage的端口號

base_path=/home/fastdfs/storage               # 設置storage的日誌路徑

store_path0=/home/fastdfs/storage_data     # 存儲路徑

store_path_count=1                                   #存儲路徑的個數,需要和storage_path個數相同

tracker_server=192.168.2.222:22122            # tracker服務器的IP地址和端口

tracker_server=192.168.2.223:22122            # 多個tracker直接添加多條配置

啓動storage

# /etc/init.d/fdfs_storaged start

查看storage是否啓動成功

(1)    查看監聽端口

# netstat -antpu | grepfdfs

tcp    0   00.0.0.0:22122        0.0.0.0:*           LISTEN      51641/fdfs_trackerd

tcp    0   00.0.0.0:23000        0.0.0.0:*           LISTEN      51798/fdfs_storaged

tcp    0   0192.168.2.222:22122  192.168.2.222:54181  ESTABLISHED 51641/fdfs_trackerd

tcp   0   0 192.168.2.222:54181  192.168.2.222:22122  ESTABLISHED 51798/fdfs_storaged

       (2)查看日誌,初次啓動成功會在/home/fastdfs/storage /下創建data和log目錄

              # tail-100f /home/fastdfs/storage/logs/storaged.log

防火牆中打開存儲節點端口

# iptables -I INPUT -p tcp --dport 23000 -j ACCEPT

保存防火牆規則

# /etc/init.d/iptables save

關閉storage

# /etc/init.d/fdfs_storaged stop

設置FastDFS存儲節點開機啓動

# echo '/etc/init.d/fdfs_storaged start' >>/etc/rc.d/rc.local

查看FastDFS監控集羣信息

# /usr/bin/fdfs_monitor /etc/fdfs/storage.conf

[2016-08-01 12:49:39] DEBUG -base_path=/home/fastdfs/storage, connect_timeout=30, 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

 

server_count=2, server_index=1

 

tracker server is192.168.2.223:22122

 

group count: 1

 

Group 1:

group name = group1

disk total space = 9951 MB

disk free space = 4890 MB

trunk free space = 0 MB

storage server count = 2

active server count = 0

storage server port = 23000

storage HTTP port = 8888

store path count = 1

subdir count per path = 256

current write server index = 0

current trunk file id = 0

 

        Storage 1:

                id = 192.168.2.222

                ip_addr = 192.168.2.222  WAIT_SYNC

                http domain =

                version = 5.05

                join time = 2016-08-01 12:11:49

                up time = 2016-08-01 12:11:49

                total storage = 9951 MB

                free storage = 4890 MB

                upload priority = 10

                store_path_count = 1

                subdir_count_per_path = 256

                storage_port = 23000

                storage_http_port = 8888

                current_write_path = 0

                source storage id =192.168.2.223

                if_trunk_server = 0

                connection.alloc_count = 256

                connection.current_count = 0

                connection.max_count = 0

                total_upload_count = 0

                success_upload_count = 0

                total_append_count = 0

                success_append_count = 0

                total_modify_count = 0

                success_modify_count = 0

                total_truncate_count = 0

                success_truncate_count = 0

                total_set_meta_count = 0

                success_set_meta_count = 0

                total_delete_count = 0

                success_delete_count = 0

                total_download_count = 0

                success_download_count = 0

                total_get_meta_count = 0

                success_get_meta_count = 0

                total_create_link_count = 0

                success_create_link_count = 0

                total_delete_link_count = 0

                success_delete_link_count = 0

                total_upload_bytes = 0

                success_upload_bytes = 0

                total_append_bytes = 0

                success_append_bytes = 0

                total_modify_bytes = 0

                success_modify_bytes = 0

                stotal_download_bytes = 0

                success_download_bytes = 0

                total_sync_in_bytes = 0

                success_sync_in_bytes = 0

                total_sync_out_bytes = 0

                success_sync_out_bytes = 0

                total_file_open_count = 0

                success_file_open_count = 0

                total_file_read_count = 0

                success_file_read_count = 0

                total_file_write_count = 0

               success_file_write_count = 0

                last_heart_beat_time =2016-08-01 12:49:28

                last_source_update = 1970-01-0108:00:00

                last_sync_update = 1970-01-0108:00:00

                last_synced_timestamp = 1970-01-0108:00:00

        Storage 2:

                id = 192.168.2.223

                ip_addr = 192.168.2.223  OFFLINE

                http domain =

                version = 5.05

                join time = 2016-08-01 12:12:06

                up time =

                total storage = 9951 MB

                free storage = 4889 MB

                upload priority = 10

                store_path_count = 1

                subdir_count_per_path = 256

                storage_port = 23000

                storage_http_port = 8888

                current_write_path = 0

                source storage id =

                if_trunk_server = 0

                connection.alloc_count = 0

                connection.current_count = 0

                connection.max_count = 0

                total_upload_count = 0

                success_upload_count = 0

                total_append_count = 0

                success_append_count = 0

                total_modify_count = 0

                success_modify_count = 0

                total_truncate_count = 0

                success_truncate_count = 0

                total_set_meta_count = 0

                success_set_meta_count = 0

                total_delete_count = 0

                success_delete_count = 0

                total_download_count = 0

                success_download_count = 0

                total_get_meta_count = 0

                success_get_meta_count = 0

                total_create_link_count = 0

                success_create_link_count = 0

                total_delete_link_count = 0

                success_delete_link_count = 0

                total_upload_bytes = 0

                success_upload_bytes = 0

                total_append_bytes = 0

                success_append_bytes = 0

               total_modify_bytes = 0

                success_modify_bytes = 0

                stotal_download_bytes = 0

                success_download_bytes = 0

                total_sync_in_bytes = 0

                success_sync_in_bytes = 0

                total_sync_out_bytes = 0

                success_sync_out_bytes = 0

                total_file_open_count = 0

                success_file_open_count = 0

                total_file_read_count = 0

                success_file_read_count = 0

                total_file_write_count = 0

                success_file_write_count = 0

                last_heart_beat_time =2016-08-01 12:49:18

                last_source_update = 1970-01-0108:00:00

                last_sync_update = 1970-01-0108:00:00

                last_synced_timestamp = 1970-01-01 08:00:00



    4.10 文件上傳測試

修改Tracker服務器中的客戶端配置文件

# cd /etc/fdfs/

# cp client.conf.sample client.conf

# vim /etc/fdfs/client.conf

修改以下內容

       base_path=/home/fastdfs/tracker               #tracker日誌存儲路徑

       tracker_server=192.168.2.222:22122            #tracker服務器的IP地址和端口

tracker_server=192.168.2.223:22122            # 多個tracker直接添加多條配置

 

測試文件上傳,返回下班文件ID,說明文件上傳成功

# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf  /home/fastdfs/fastdfs-5.05.tar.gz

group1/M00/00/00/wKgC3lee2O6AYhpdAAUggSnIHZU.tar.gz

5.  在存儲節點上安裝nginx

    5.1 安裝fastdfs-nginx-module

解壓

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

修改配置文件

# vim /home/fastdfs/fastdfs-nginx-module/src/config

修改內容(這個路徑修改很重要,不然在nginx編譯時會報錯

       CORE_INCS="$CORE_INCS/usr/local/include/fastdfs /usr/local/include/fastcommon/" 修改爲:

       CORE_INCS="$CORE_INCS /usr/include/fastdfs/usr/include/fastcommon/"

  5.2 安裝nginx

解壓

# tar zxvf nginx-1.8.1.tar.gz

# cd nginx-1.8.1

配置安裝信息

# ./configure  --prefix=/usr/local/nginx/ --add-module=/home/fastdfs/fastdfs-nginx-module/src/

編譯安裝

# make && make install

複製配置文件

複製fastdfs-nginx-module源碼中的配置文件到/etc/fdfs目錄

# cp /home/fastdfs/fastdfs-nginx-module/src/mod_fastdfs.conf  /etc/fdfs/

複製FastDFS的部分配置文件到/etc/fdfs目錄

# cp /home/fastdfs/fastdfs-5.05/conf/mime.types  /etc/fdfs/

# cp /home/fastdfs/fastdfs-5.05/conf/http.conf  /etc/fdfs/

修改mod_fastdfs.conf

# vim /etc/fdfs/mod_fastdfs.conf

修改內容

       connect_timeout=10

       base_path=/home/fastdfs/storage

       tracker_server=192.168.2.222:22122

tracker_server=192.168.2.223:22122

storage_server_port=23000

group_name=group1

url_have_group_name = true

store_path_count=1

store_path0=/home/fastdfs/storage_data

group_count = 1

[group1]

group_name=group1

storage_server_port=23000

store_path_count=1

store_path0=/home/fastdfs/storage_data

修改nginx配置文件

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

修改內容

       user fastdfs;                                                  # nginx訪問用戶

              listen       80;                                 # nginx監聽端口

        location ~/group([0-9])/M00 {

                alias /home/fastdfs/storage_data/data;

                ngx_fastdfs_module;

        }

 

防火牆放開80端口

# iptables -I INPUT -p tcp --dport 80 -j ACCEPT

保存防火牆規則鏈,重啓電腦後設置的規則繼續生效

# /etc/init.d/iptables save

啓動nginx

# /usr/local/nginx/sbin/nginx

nginx 重啓命令

# /usr/local/nginx/sbin/nginx -s reload

設置nginx開機啓動

# echo /usr/local/nginx/sbin/nginx >> /etc/rc.d/rc.local





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