分佈式文件系統FastDFS安裝配置

FastDFS是一個分佈式的文件系統,他能夠把上傳到某一臺服務器的文件分發複製到其餘節點的文件服務器上作高可用。html

FastDFS 上傳文件交互過程:java

1. client 詢問 tracker 上傳到的 storage,不須要附加參數;
2. tracker 返回一臺可用的 storage;
3. client 直接和 storage 通信完成文件上傳。
客戶端 client 發起對 FastDFS 的文件傳輸動做,是經過鏈接到某一臺 Tracker Server 的指定端
口來實現的,Tracker Server 根據目前已掌握的信息,來決定選擇哪一臺 Storage Server ,而後將這個
Storage Server 的地址等信息返回給 client,而後 client 再經過這些信息鏈接到這臺 Storage Server,
將要上傳的文件傳送到給 Storage Server 上。linux

FastDFS 下載文件交互過程:nginx

1. client 詢問 tracker 下載文件的 storage,參數爲文件標識(卷名和文件名);
2. tracker 返回一臺可用的 storage;
3. client 直接和 storage 通信完成文件下載。c++

FastDFS的安裝vim

安裝包: 
FastDFS v5.05 
libfastcommon-master.zip(是從 FastDFS 和 FastDHT 中提取出來的公共 C 函數庫) 
fastdfs-nginx-module_v1.16.tar.gz 
nginx-1.11.5.tar.gz 
fastdfs_client_java._v1.25.tar.gz 後端

ngx_cache_purge-2.3.tar.gz瀏覽器

先安裝依賴包緩存

yum install make cmake gcc gcc-c++服務器

二、安裝 libfastcommon:
(1)上傳或下載 libfastcommon-master.zip 到服務器任意目錄
(2)解壓
# unzip libfastcommon-master.zip
# cd libfastcommon-master

(3) 編譯、安裝
# ./make.sh
# ./make.sh install
libfastcommon 默認安裝到了
/usr/lib64/libfastcommon.so
/usr/lib64/libfdfsclient.so

(4)由於 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

三、安裝 FastDFS
(1)上傳或下載 FastDFS 源碼包(FastDFS_v5.05.tar.gz)到服務器任意目錄
(2)解壓
# tar -zxvf FastDFS_v5.05.tar.gz
# cd FastDFS

(3)編譯、安裝(編譯前要確保已經成功安裝了 libfastcommon)
# ./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/目錄下的:
fdfs_appender_test
fdfs_appender_test1
fdfs_append_file
fdfs_crc32
fdfs_delete_file
fdfs_download_file
fdfs_file_info
fdfs_monitor
fdfs_storaged

fdfs_test
fdfs_test1
fdfs_trackerd
fdfs_upload_appender
fdfs_upload_file
stop.sh
restart.sh

(4)由於 FastDFS 服務腳本設置的 bin 目錄是/usr/local/bin,但實際命令安裝在/usr/bin,能夠進入
/user/bin 目錄使用如下命令查看 fdfs 的相關命令:
 # cd /usr/bin/
 # ls | grep fdfs

能夠看到

fdfs_appender_test
fdfs_appender_test1
fdfs_append_file
fdfs_crc32
fdfs_delete_file
fdfs_download_file
fdfs_file_info
fdfs_monitor
fdfs_storaged
fdfs_test
fdfs_test1
fdfs_trackerd
fdfs_upload_appender
fdfs_upload_file

所以須要修改 FastDFS 服務腳本中相應的命令路徑,也就是把/etc/init.d/fdfs_storaged
和/etc/init.d/fdfs_tracker 兩個腳本中的/usr/local/bin 修改爲/usr/bin:

cd /etc/init.d/

vim fdfs_trackerd

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

vim fdfs_storaged

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

注意:以上操做不管是配置 tracker 仍是配置 storage 都是必須的,而 tracker 和 storage 的區別主要是
在安裝完 fastdfs 以後的配置過程當中。

配置 FastDFS 跟蹤器 Tracker

一、 複製 FastDFS 跟蹤器樣例配置文件,並重命名:
# cd /etc/fdfs/

# cp tracker.conf.sample tracker.conf

二、 編輯跟蹤器配置文件:
# vim tracker.conf
修改的內容以下:
disabled=false #啓用配置文件
port=22122 #tracker 的端口號,通常採用 22122 這個默認端口
base_path=/home/fastdfs/tracker #tracker 的數據文件和日誌目錄,若是你是在阿里雲上面配置的話,放在你掛載的數據盤上面,如/mnt/fastdfs/tracker

三、 建立基礎數據目錄(參考基礎目錄 base_path 配置):
# mkdir -p /home/fastdfs/tracker

四、 啓動 Tracker:
[root@host1 fdfs]# cd /etc/init.d/

[root@host1 init.d]# ./fdfs_trackerd start
Starting FastDFS tracker server:
(初次成功啓動,會在/fastdfs/tracker 目錄下建立 data、logs 兩個目錄)能夠經過如下兩個方法查
看 tracker 是否啓動成功:

(1)查看 22122 端口監聽狀況:

[root@host1 init.d]# netstat -anpl | grep 22122
tcp        0      0 0.0.0.0:22122           0.0.0.0:*               LISTEN      25142/fdfs_trackerd

(2)經過如下命令查看 tracker 的啓動日誌,看是否有錯誤

[root@host1 /]# cd /home/fastdfs/tracker/logs/

[root@host1 logs]# tail -100f trackerd.log 
[2018-11-13 11:16:54] INFO - FastDFS v5.05, base_path=/home/fastdfs/tracker, run_by_group=, run_by_user=, connect_timeout=30s, network_timeout=60s, port=22122, bind_addr=, max_connections=256, accept_threads=1, work_threads=4, store_lookup=2, store_group=, store_server=0, store_path=0, reserved_storage_space=10.00%, download_server=0, allow_ip_count=-1, sync_log_buff_interval=10s, check_active_interval=120s, thread_stack_size=64 KB, storage_ip_changed_auto_adjust=1, storage_sync_file_max_delay=86400s, storage_sync_file_max_time=300s, use_trunk_file=0, slot_min_size=256, slot_max_size=16 MB, trunk_file_size=64 MB, trunk_create_file_advance=0, trunk_create_file_time_base=02:00, trunk_create_file_interval=86400, trunk_create_file_space_threshold=20 GB, trunk_init_check_occupying=0, trunk_init_reload_from_binlog=0, trunk_compress_binlog_min_interval=0, use_storage_id=0, id_type_in_filename=ip, storage_id_count=0, rotate_error_log=0, error_log_rotate_time=00:00, rotate_error_log_size=0, log_file_keep_days=0, store_slave_file_use_link=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s
[2018-11-13 11:16:54] INFO - local_host_ip_count: 5,  127.0.0.1  192.168.5.129  192.168.122.1  172.17.0.1  172.18.0.1

五、 關閉 Tracker:

[root@host1 logs]# cd /etc/init.d/

[root@host1 init.d]# ./fdfs_trackerd stop
stopping fdfs_trackerd ...

六、 設置 FastDFS 跟蹤器開機啓動:

[root@host1 /]# cd /etc/rc.d

[root@host1 rc.d]# vim rc.local

添加如下內容:
## FastDFS Tracker
/etc/init.d/fdfs_trackerd start

配置 FastDFS 存儲

一、 複製 FastDFS 存儲器樣例配置文件,並重命名:
# cd /etc/fdfs/

# cp storage.conf.sample storage.conf

二、 編輯存儲器樣例配置文件(以 group1 中的 storage 節點的 storage.conf 爲例):
# vi /etc/fdfs/storage.conf
修改的內容以下:
disabled=false #啓用配置文件
group_name=group1 #組名(第一組爲 group1,第二組爲 group2)
port=23000 #storage 的端口號,同一個組的 storage 端口號必須相同
base_path=/home/fastdfs/storage #設置 storage 的日誌目錄,阿里雲配置同追蹤器
store_path0=/home/fastdfs/storage #存儲路徑
store_path_count=1 #存儲路徑個數,須要和 store_path 個數匹配
tracker_server=192.168.1.131:22122 #tracker 服務器的 IP 地址和端口
tracker_server=192.168.1.132:22122 #多個 tracker 直接添加多條配置
http.server_port=8888 #設置 http 端口號

三、 建立基礎數據目錄(參考基礎目錄 base_path 配置):
# mkdir -p /home/fastdfs/storage

四、 啓動 Storage:

[root@host1 fdfs]# cd /etc/init.d/

[root@host1 init.d]# ./fdfs_storaged start
Starting FastDFS storage server:

啓動存儲節點以前必須啓動追蹤節點,不然存儲節點不會啓動。初次成功啓動,會在/home/fastdfs/storage 目錄下建立數據目錄 data 和日誌目錄 logs)
各節點啓動動,使用 tail -f /home/fastdfs/storage/logs/storaged.log 命令監聽存儲節點日誌,能夠
看到存儲節點連接到跟蹤器,並提示哪個爲 leader 跟蹤器。同時也會看到同一組中的其餘節點加入
進來的日誌信息。

[root@host1 logs]# tail -100f storaged.log 
mkdir data path: A4 ...
mkdir data path: A5 ...
mkdir data path: A6 ...
mkdir data path: A7 ...
mkdir data path: A8 ...
mkdir data path: A9 ...
mkdir data path: AA ...
mkdir data path: AB ...
mkdir data path: AC ...
mkdir data path: AD ...
mkdir data path: AE ...
mkdir data path: AF ...
mkdir data path: B0 ...
mkdir data path: B1 ...
mkdir data path: B2 ...
mkdir data path: B3 ...
mkdir data path: B4 ...
mkdir data path: B5 ...
mkdir data path: B6 ...
mkdir data path: B7 ...
mkdir data path: B8 ...
mkdir data path: B9 ...
mkdir data path: BA ...
mkdir data path: BB ...
mkdir data path: BC ...
mkdir data path: BD ...
mkdir data path: BE ...
mkdir data path: BF ...
mkdir data path: C0 ...
mkdir data path: C1 ...
mkdir data path: C2 ...
mkdir data path: C3 ...
mkdir data path: C4 ...
mkdir data path: C5 ...
mkdir data path: C6 ...
mkdir data path: C7 ...
mkdir data path: C8 ...
mkdir data path: C9 ...
mkdir data path: CA ...
mkdir data path: CB ...
mkdir data path: CC ...
mkdir data path: CD ...
mkdir data path: CE ...
mkdir data path: CF ...
mkdir data path: D0 ...
mkdir data path: D1 ...
mkdir data path: D2 ...
mkdir data path: D3 ...
mkdir data path: D4 ...
mkdir data path: D5 ...
mkdir data path: D6 ...
mkdir data path: D7 ...
mkdir data path: D8 ...
mkdir data path: D9 ...
mkdir data path: DA ...
mkdir data path: DB ...
mkdir data path: DC ...
mkdir data path: DD ...
mkdir data path: DE ...
mkdir data path: DF ...
mkdir data path: E0 ...
mkdir data path: E1 ...
mkdir data path: E2 ...
mkdir data path: E3 ...
mkdir data path: E4 ...
mkdir data path: E5 ...
mkdir data path: E6 ...
mkdir data path: E7 ...
mkdir data path: E8 ...
mkdir data path: E9 ...
mkdir data path: EA ...
mkdir data path: EB ...
mkdir data path: EC ...
mkdir data path: ED ...
mkdir data path: EE ...
mkdir data path: EF ...
mkdir data path: F0 ...
mkdir data path: F1 ...
mkdir data path: F2 ...
mkdir data path: F3 ...
mkdir data path: F4 ...
mkdir data path: F5 ...
mkdir data path: F6 ...
mkdir data path: F7 ...
mkdir data path: F8 ...
mkdir data path: F9 ...
mkdir data path: FA ...
mkdir data path: FB ...
mkdir data path: FC ...
mkdir data path: FD ...
mkdir data path: FE ...
mkdir data path: FF ...
data path: /home/fastdfs/storage/data, mkdir sub dir done.
[2018-11-13 13:41:29] INFO - file: storage_param_getter.c, line: 191, use_storage_id=0, id_type_in_filename=ip, storage_ip_changed_auto_adjust=1, store_path=0, reserved_storage_space=10.00%, use_trunk_file=0, slot_min_size=256, slot_max_size=16 MB, trunk_file_size=64 MB, trunk_create_file_advance=0, trunk_create_file_time_base=02:00, trunk_create_file_interval=86400, trunk_create_file_space_threshold=20 GB, trunk_init_check_occupying=0, trunk_init_reload_from_binlog=0, trunk_compress_binlog_min_interval=0, store_slave_file_use_link=0
[2018-11-13 13:41:29] INFO - file: storage_func.c, line: 254, tracker_client_ip: 192.168.5.129, my_server_id_str: 192.168.5.129, g_server_id_in_filename: -2130335552
[2018-11-13 13:41:29] INFO - local_host_ip_count: 5,  127.0.0.1  192.168.5.129  192.168.122.1  172.17.0.1  172.18.0.1
[2018-11-13 13:41:30] INFO - file: tracker_client_thread.c, line: 310, successfully connect to tracker server 192.168.5.129:22122, as a tracker client, my ip is 192.168.5.129
[2018-11-13 13:42:00] INFO - file: tracker_client_thread.c, line: 1235, tracker server 192.168.5.129:22122, set tracker leader: 192.168.5.129:22122
[2018-11-13 13:42:30] INFO - file: storage_sync.c, line: 2698, successfully connect to storage server 192.168.5.182:23000
[2018-11-13 13:43:00] INFO - file: storage_sync.c, line: 2698, successfully connect to storage server 192.168.5.182:23000

查看 23000 端口監聽狀況:

[root@host1 init.d]# netstat -anpl | grep 23000
tcp        0      0 0.0.0.0:23000           0.0.0.0:*               LISTEN      29945/fdfs_storaged 

全部 Storage 節點都啓動以後,能夠在任一 Storage 節點上使用以下命令查看集羣信息:

[root@host1 logs]# fdfs_monitor /etc/fdfs/storage.conf
[2018-11-13 13:48:47] DEBUG - base_path=/home/fastdfs/storage, connect_timeout=30, network_timeout=60, tracker_server_count=1, 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=1, server_index=0

tracker server is 192.168.5.129:22122

group count: 1

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

    Storage 1:
        id = 192.168.5.129
        ip_addr = 192.168.5.129 (host1)  ACTIVE
        http domain = 
        version = 5.05
        join time = 2018-11-13 13:40:28
        up time = 2018-11-13 13:40:28
        total storage = 408048 MB
        free storage = 398402 MB
        upload priority = 10
        store_path_count = 1
        subdir_count_per_path = 256
        storage_port = 23000
        storage_http_port = 8889
        current_write_path = 0
        source storage id = 
        if_trunk_server = 0
        connection.alloc_count = 256
        connection.current_count = 1
        connection.max_count = 1
        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 = 2018-11-13 13:48:29
        last_source_update = 1970-01-01 08:00:00
        last_sync_update = 1970-01-01 08:00:00
        last_synced_timestamp = 1970-01-01 08:00:00 
    Storage 2:
        id = 192.168.5.182
        ip_addr = 192.168.5.182 (host2)  ACTIVE
        http domain = 
        version = 5.05
        join time = 2018-11-13 13:42:20
        up time = 2018-11-13 13:42:20
        total storage = 408048 MB
        free storage = 393235 MB
        upload priority = 10
        store_path_count = 1
        subdir_count_per_path = 256
        storage_port = 23000
        storage_http_port = 8889
        current_write_path = 0
        source storage id = 192.168.5.129
        if_trunk_server = 0
        connection.alloc_count = 256
        connection.current_count = 1
        connection.max_count = 1
        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 = 2018-11-13 13:48:22
        last_source_update = 1970-01-01 08:00:00
        last_sync_update = 1970-01-01 08:00:00
        last_synced_timestamp = 1970-01-01 08:00:00

該命令在/usr/bin/目錄下,在任意位置能夠直接調用。能夠看到存儲節點狀態爲 ACTIVE 則可

五、 關閉 Storage:
# /etc/init.d/fdfs_storaged stop

六、 設置 FastDFS 存儲器開機啓動:
# vim /etc/rc.d/rc.local
添加:
## FastDFS Storage
/etc/init.d/fdfs_storaged start


文件上傳測試

一、修改 Tracker 服務器中的客戶端配置文件:
# cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
# vim /etc/fdfs/client.conf
base_path=/home/fastdfs/tracker
tracker_server=192.168.1.131:22122
tracker_server=192.168.1.132:22122

二、執行以下文件上傳命令:

[root@host1 soft]# fdfs_upload_file /etc/fdfs/client.conf ./jdk-8u45-linux-x64.tar.gz 
group1/M00/00/00/wKgFgVvqbfWARXiRClPqSv5X14U.tar.gz

(能返回以上文件 ID,說明文件上傳成功)

fdfs_upload_file命令在/usr/bin/目錄下,能夠在任意位置執行。

咱們能夠在兩臺存儲服務器上查看該文件

[root@host2 data]# cd 00/00
[root@host2 00]# ll
總用量 169212
-rw-r--r-- 1 root root 173271626 11月 13 14:23 wKgFgVvqbfWARXiRClPqSv5X14U.tar.gz
[root@host2 00]# pwd
/home/fastdfs/storage/data/00/00

這個是host2的文件服務器
[root@host1 data]# cd 00/00
[root@host1 00]# ll
總用量 169212
-rw-r--r-- 1 root root 173271626 11月 13 14:23 wKgFgVvqbfWARXiRClPqSv5X14U.tar.gz
[root@host1 00]# pwd
/home/fastdfs/storage/data/00/00

這個是host1的文件服務器,說明上傳一次,兩臺文件服務器都有該文件,並且ID號相同。

在各存儲節點上安裝 Nginx

一、fastdfs-nginx-module 做用說明
FastDFS 經過 Tracker 服務器,將文件放在 Storage 服務器存儲,可是同組存儲服務器之間須要進入
文件複製,有同步延遲的問題。假設 Tracker 服務器將文件上傳到了 192.168.1.135,上傳成功後文件 ID
已經返回給客戶端。此時 FastDFS 存儲集羣機制會將這個文件同步到同組存儲 192.168.1.136,在文件還
沒有複製完成的狀況下,客戶端若是用這個文件 ID 在 192.168.1.136 上取文件,就會出現文件沒法訪問的
錯誤。而 fastdfs-nginx-module 能夠重定向文件鏈接到源服務器取文件,避免客戶端因爲複製延遲致使的
文件沒法訪問錯誤。(解壓後的 fastdfs-nginx-module 在 nginx 安裝時使用)
二、上傳 fastdfs-nginx-module_v1.16.tar.gz 到任意位置,解壓
# tar -zxvf fastdfs-nginx-module_v1.16.tar.gz
三、修改 fastdfs-nginx-module 的 config 配置文件
# vim fastdfs-nginx-module/src/config
CORE_INCS="$CORE_INCS /usr/local/include/fastdfs /usr/local/include/fastcommon/"
修改成:CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
(注意:這個路徑修改是很重要的,否則在 nginx 編譯的時候會報錯的)

四、上傳當前的穩定版本 Nginx(nginx-1.11.5.tar.gz)到服務器任意目錄(我這裏放的是/home/soft)

五、安裝編譯 Nginx 所需的依賴包
# yum install gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel

六、編譯安裝 Nginx(添加 fastdfs-nginx-module 模塊)

若是你已經安裝過了Nginx,則必須卸載掉以前安裝的,你能夠先複製nginx.conf文件出來,而後

ps -ef | grep nginx

kill id

cd /usr/local

rm -rf nginx

若是你的追蹤服務器跟存儲服務器是同一臺服務器此處能夠先跳過,先進行7的操做,若是隻是存儲服務器,繼續如下操做

# tar -zxvf nginx-1.11.5.tar.gz
# cd nginx-1.11.5
# ./configure --prefix=/usr/local/nginx --add-module=/home/soft/fastdfs-nginx-module/src
# make && make install

七、複製 fastdfs-nginx-module 源碼中的配置文件到/etc/fdfs 目錄,並修改
# cp /home/soft/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
# vi /etc/fdfs/mod_fastdfs.conf
(1)第一組 Storage 的 mod_fastdfs.conf 配置以下:
connect_timeout=10
base_path=/tmp
tracker_server=192.168.1.131:22122
tracker_server=192.168.1.132:22122
storage_server_port=23000
group_name=group1
url_have_group_name = true
store_path0=/home/fastdfs/storage
group_count = 1
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/home/fastdfs/storage

八、複製 FastDFS 的部分配置文件到/etc/fdfs 目錄
# cd /home/soft/FastDFS/conf
# cp http.conf mime.types /etc/fdfs/

九、在/fastdfs/storage 文件存儲目錄下建立軟鏈接,將其連接到實際存放數據的目錄
# ln -s /home/fastdfs/storage/data/ /home/fastdfs/storage/data/M00

十、配置 Nginx

若是你以前安裝過nginx,並卸載重裝了,將你以前的nginx.conf拷貝回/usr/local/nginx/conf目錄下

# vim /usr/local/nginx/conf/nginx.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 {
 #alias /fastdfs/storage/data;
 ngx_fastdfs_module;
 }
 error_page 500 502 503 504 /50x.html;
 location = /50x.html {
 root html;
 }
 }
}

注意、說明:
A、8888 端口值是要與/etc/fdfs/storage.conf 中的 http.server_port=8888 相對應,
由於 http.server_port 默認爲 8888,若是想改爲 80,則要對應修改過來。
B、Storage 對應有多個 group 的狀況下,訪問路徑帶 group 名,如/group1/M00/00/00/xxx,
對應的 Nginx 配置爲:
location ~/group([0-9])/M00 {
ngx_fastdfs_module;
}

十一、啓動 Nginx
# /usr/local/nginx/sbin/nginx
ngx_http_fastdfs_set pid=xxx

(重啓 Nginx 的命令爲:/usr/local/nginx/sbin/nginx -s reload)
設置 Nginx 開機啓動
# vim /etc/rc.local
加入:
/usr/local/nginx/sbin/nginx

十二、經過瀏覽器訪問測試時上傳的文件

http://192.168.5.182:8888/group1/M00/00/00/wKgFgVvqbfWARXiRClPqSv5X14U.tar.gz

經過訪問咱們能夠把以前的文件下載下來。

在跟蹤器節點上安裝 Nginx

一、在 tracker 上安裝的 nginx 主要爲了提供 http 訪問的反向代理、負載均衡以及緩存服務。

二、安裝編譯 Nginx 所需的依賴包
# yum install gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel

三、上傳 ngx_cache_purge-2.3.tar.gz 到服務器,解壓
# tar -zxvf ngx_cache_purge-2.3.tar.gz

四、上傳當前的穩定版本 Nginx(nginx-1.11.5.tar.gz)到服務器任意目錄

若是你已經安裝過了Nginx,則必須卸載掉以前安裝的,你能夠先複製nginx.conf文件出來,而後

ps -ef | grep nginx

kill id

cd /usr/local

rm -rf nginx

五、編譯安裝 Nginx(添加 ngx_cache_purge 模塊)
# tar -zxvf nginx-1.11.5.tar.gz
# cd nginx-1.11.5

此處注意,若是你的追蹤服務器跟存儲服務器是同一臺服務器,配置以下

./configure --prefix=/usr/local/nginx --add-module=/home/soft/fastdfs-nginx-module/src --add-module=/home/soft/ngx_cache_purge-2.3

不然只是追蹤服務器,配置以下
# ./configure --prefix=/usr/local/nginx --add-module=/home/soft/ngx_cache_purge-2.3
# make && make install

六、配置 Nginx,設置負載均衡以及緩存

# vim /usr/local/nginx/conf/nginx.conf
user root;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/nginx.pid;
events {
worker_connections 1024;
use epoll;
}
http {
 include mime.types;
 default_type application/octet-stream;
 #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
 # '$status $body_bytes_sent "$http_referer" '
 # '"$http_user_agent" "$http_x_forwarded_for"';
 #access_log logs/access.log main;
 sendfile on;
 tcp_nopush on;
 #keepalive_timeout 0;
 keepalive_timeout 65;
#gzip on;
#設置緩存
 server_names_hash_bucket_size 128;
 client_header_buffer_size 32k;
 large_client_header_buffers 4 32k;
 client_max_body_size 300m;
 proxy_redirect off;
 proxy_set_header Host $http_host;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_connect_timeout 90;
 proxy_send_timeout 90;
 proxy_read_timeout 90;
 proxy_buffer_size 16k;
 proxy_buffers 4 64k;
 proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
#設置緩存存儲路徑、存儲方式、分配內存大小、磁盤最大空間、緩存期限
 proxy_cache_path /home/fastdfs/cache/nginx/proxy_cache levels=1:2
 keys_zone=http-cache:200m max_size=1g inactive=30d;

proxy_temp_path /home/fastdfs/cache/nginx/proxy_cache/tmp;
#設置 group1 的服務器
 upstream fdfs_group1 {
 server 192.168.1.135:8888 weight=1 max_fails=2 fail_timeout=30s;
 server 192.168.1.136:8888 weight=1 max_fails=2 fail_timeout=30s;
}

server {
 listen 8000;
 server_name localhost;
 #charset koi8-r;
 #access_log logs/host.access.log main;
 #設置 group 的負載均衡參數
 location /group1/M00 {
 proxy_next_upstream http_502 http_504 error timeout invalid_header;
 proxy_cache http-cache;
 proxy_cache_valid 200 304 12h;
 proxy_cache_key $uri$is_args$args;
 proxy_pass http://fdfs_group1;
 expires 30d;
 }

#設置清除緩存的訪問權限
 location ~/purge(/.*) {
 allow 127.0.0.1;
 allow 192.168.1.0/24;
 deny all;
 proxy_cache_purge http-cache $1$is_args$args;
 }

#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;
 }
 }
}
若是你是追蹤服務器跟存儲服務器爲同一臺服務器,還要加上以前存儲服務器的Nginx配置。

按以上 nginx 配置文件的要求,建立對應的緩存目錄:
# mkdir -p /home/fastdfs/cache/nginx/proxy_cache
# mkdir -p /home/fastdfs/cache/nginx/proxy_cache/tmp

七、啓動 Nginx
# /usr/local/nginx/sbin/nginx
重啓 Nginx
# /usr/local/nginx/sbin/nginx -s reload
設置 Nginx 開機啓動
# vi /etc/rc.local
加入:/usr/local/nginx/sbin/nginx

八、文件訪問測試

前面直接經過訪問 Storage 節點中的 Nginx 的文件

http://xxx.xxx.xxx.xxx:8888/group1/M00/00/00/wKgFgVvqbfWARXiRClPqSv5X14U.tar.gz

任意一臺存儲服務器的IP地址均可如下載

如今能夠經過 Tracker 中的 Nginx 來進行訪問
http://xxx.xxx.xxx.xxx:8000/group1/M00/00/00/wKgFgVvqbfWARXiRClPqSv5X14U.tar.gz

任意一臺追蹤服務器的IP地址均可如下載

由上面的文件訪問效果能夠看到,每個 Tracker 中的 Nginx 都單獨對後端的 Storage 組作了負載均衡

注意:千萬不要使用 kill -9 命令強殺 FastDFS 進程,不然可能會致使 binlog 數據丟失。

相關文章
相關標籤/搜索