測試nginx的FastDFS分佈式存儲模塊

很長時間沒有關注FastDFS了,第一次使用FastDFS 是在 08年的時候11月的時候,那個時候是爲了解決公司的數據存儲~那時候可能是對Fastdfs瞭解不深,功能還不算太健全,最後選擇了lustre。再回過頭來看FastDFS更新很快,還看到fastdfs-nginx-module_v1.01.tar.gz nginx模塊,所以今天在一臺測試機上測試了·測試幾天看穩定不穩定,在考慮換掉浪費資源的 lustre !

環境:


storage1:192.168.6.100
storage2:192.168.6.101
tracker:192.168.6.102

1. 在每個機器上,下載安裝 FastDFS


nginx $>  wget http://fastdfs.googlecode.com/files/FastDFS_v2.04.tar.gz
# 解壓
nginx $> tar zxvf FastDFS_v2.04.tar.gz
nginx $> cd FastDFS
# 因爲我是給nginx添加fastdfs模塊,所以不需要fastdfs支持 http 所以我就不需要去掉  #WITH_HTTPD=1 前的註釋了,直接編譯
nginx $> ./make.sh
nginx $> ./make.sh install

2.修改tracker 和 storage 的配置文件
# tracker 的修改


tracker $> vim /etc/fdfs/tracker.conf

disabled=false
#配置是否生效
bind_addr=192.168.6.102
#綁定IP
port=22122
#服務端口
connect_timeout=30
#連接超時時間
network_timeout=60
#  tracker server的網絡超時,單位爲秒。
base_path=/home/yangzi
#目錄地址,裏面會創建data(存放存儲服務器信息)、logs,日誌文件
max_connections=256
#系統提供服務最大連接數
work_threads=4
#線程數,通常設置CPU數
store_lookup=2
上傳組(卷) 的方式 0:輪詢方式 1: 指定組 2: 平衡負載(選擇最大剩餘空間的組(卷)上傳)
這裏如果在應用層指定了上傳到一個固定組,那麼這個參數被繞過
store_group=group1
當上一個參數設定爲1 時 (store_lookup=1,即指定組名時),必須設置本參數爲系統中存在的一個組名。如果選擇其他的上傳方式,這個參數就沒有效了
store_server=0
選擇哪個storage server 進行上傳操作(一個文件被上傳後,這個storage server就相當於這個文件的storage server源,會對同組的storage server推送這個文件達到同步效果)
# 0: 輪詢方式
# 1: 根據ip 地址進行排序選擇第一個服務器(IP地址最小者)
# 2: 根據優先級進行排序(上傳優先級由storage server來設置,參數名爲upload_priority)
store_path=0
選擇storage server 中的哪個目錄進行上傳。storage server可以有多個存放文件的base path(可以理解爲多個磁盤)。
# 0: 輪流方式,多個目錄依次存放文件
# 2: 選擇剩餘空間最大的目錄存放文件(注意:剩餘磁盤空間是動態的,因此存儲到的目錄或磁盤可能也是變化的)
download_server=0
 選擇哪個 storage server 作爲下載服務器
# 0: 輪詢方式,可以下載當前文件的任一storage server
# 1: 哪個爲源storage server 就用哪一個 (前面說過了這個storage server源 是怎樣產生的) 就是之前上傳到哪個storage server服務器就是哪個了
reserved_storage_space = 4GB
storage server 上保留的空間,保證系統或其他應用需求空間(指出 如果同組的服務器的硬盤大小一樣,以最小的爲準,也就是隻要同組中有一臺服務器達到這個標準了,這個標準就生效,原因就是因爲他們進行備份)
log_level=info
#選擇日誌級別
run_by_group=
#操作系統運行FastDFS的用戶組
run_by_user=
#操作系統運行FastDFS的用戶
allow_hosts=*
#可以連接到此 tracker server 的ip範圍(對所有類型的連接都有影響,包括客戶端,storage server)
sync_log_buff_interval = 10
# 同步或刷新日誌信息到硬盤的時間間隔,單位爲秒
# 注意:tracker server 的日誌不是時時寫硬盤的,而是先寫內存。
check_active_interval = 120
# 檢測 storage server 存活的時間隔,單位爲秒。
# storage server定期向tracker server 發心跳,如果tracker server在一個check_active_interval內還沒有收到storage server的一次心跳,那邊將認爲該storage server已經下線。所以本參數值必須大於storage server配置的心跳時間間隔。通常配置爲storage server心跳時間間隔的2倍或3倍。
thread_stack_size = 64KB
# 線程棧的大小。FastDFS server端採用了線程方式。更正一下,tracker server線程棧不應小於64KB,不是512KB。
# 線程棧越大,一個線程佔用的系統資源就越多。如果要啓動更多的線程(V1.x對應的參數爲max_connections,
V2.0爲work_threads),可以適當降低本參數值。
storage_ip_changed_auto_adjust = true
# 這個參數控制當storage server IP地址改變時,集羣是否自動調整。注:只有在storage server進程重啓時才完成自動調整。
storage_sync_file_max_delay = 86400
# V2.0引入的參數。存儲服務器之間同步文件的最大延遲時間,缺省爲1天。根據實際情況進行調整
storage_sync_file_max_time = 300
# V2.0引入的參數。存儲服務器同步一個文件需要消耗的最大時間,缺省爲300s,即5分鐘。
http.disabled=true
# HTTP服務是否不生效 當然編譯的時候我已經把 with_httpd宏去掉了,
http.server_port=80
# HTTP服務端口
# 下列參數只有 開啓http服務纔有用
http.check_alive_interval=30
http.check_alive_type=tcp
http.check_alive_uri=/status.html
http.need_find_content_type=true

#兩臺 storage.conf的修改


storage $> vim /etc/fdfs/storage.conf

disabled=false
#配置是否生效
group_name=group1
#storage所在組(卷)
bind_addr=192.168.6.100
# 綁定IP,另一太 storage IP爲 192.168.6.101
client_bind=true
#bind_addr通常是針對server的。當指定bind_addr時,本參數纔有效。
port=23000
# 是storage 服務端口
connect_timeout=30
# 連接超時時間,針對socket套接字函數connect
network_timeout=60
# storage server 網絡超時時間,單位爲秒。
heart_beat_interval=30
# 心跳間隔時間,單位爲秒
stat_report_interval=60
# storage server向tracker server報告磁盤剩餘空間的時間間隔,單位爲秒。
base_path=/home/eric
# base_path 目錄地址,根目錄必須存在  子目錄會自動生成
# 會產生data(數據存儲地方)、 logs日誌文件
max_connections=256
# 最大連接數
buff_size = 256KB
# 設置隊列結點的buffer大小。
work_threads=4
# 工作線程數
disk_rw_separated = true
# 磁盤IO讀寫是否分離,缺省是分離的。
disk_reader_threads = 1
# 針對單個存儲路徑的讀線程數,缺省值爲1
disk_writer_threads = 1
# 針對單個存儲路徑的寫線程數,缺省值爲1
sync_wait_msec=200
# 同步文件時,如果從binlog中沒有讀到要同步的文件,休眠N毫秒後重新讀取,0表示不休眠,立即再次嘗試讀取。
sync_interval=0
#  同步上一個文件後,再同步下一個文件的時間間隔,單位爲毫秒,0表示不休眠,直接同步下一個文件。
sync_start_time=00:00
sync_end_time=23:59
# 允許系統同步的時間段 (默認是全天) 。一般用於避免高峯同步產生一些問題而設定,相信sa都會明白。
write_mark_file_freq=500
# 把storage的mark文件定期同步到磁盤的時間間隔,單位爲秒
store_path_count=1
# 存放文件時storage server支持多個路徑(例如磁盤)。這裏配置存放文件的基路徑數目,通常只配一個目錄。
store_path0=/home/eric
#  逐一配置store_path個路徑,索引號基於0。注意配置方法後面有0,1,2 ......,需要配置0到store_path - 1。
# 如果不配置base_path0,那邊它就和base_path對應的路徑一樣。
subdir_count_per_path=32
# FastDFS存儲文件時,採用了兩級目錄。這裏配置存放文件的目錄個數
tracker_server=192.168.6.188:22122
# tracker_server 的列表 要寫端口的哦
log_level=info
# 日誌級別
run_by_group=
# 運行storage 用戶組
run_by_user=
# 運行storage 用戶
allow_hosts=*
# 允許連接IP列表
file_distribute_path_mode=0
# 文件在data目錄下分散存儲策略。
# 0: 輪流存放
# 1: 隨機存儲
file_distribute_rotate_count=100
# 當上面的參數file_distribute_path_mode配置爲0(輪流存放方式)時,本參數有效。
#當一個目錄下的文件存放的文件數達到本參數值時,後續上傳的文件存儲到下一個目錄中
fsync_after_written_bytes=0
# 當寫入大文件時,每寫入N個字節,調用一次系統函數fsync將內容強行同步到硬盤。0表示從不調用fsync
sync_log_buff_interval=10
# 同步或刷新日誌信息到硬盤的時間間隔,單位爲秒
sync_binlog_buff_interval=60
# 同步binglog(更新操作日誌)到硬盤的時間間隔,單位爲秒
sync_stat_file_interval=300
# 把storage的stat文件同步到磁盤的時間間隔,單位爲秒。
thread_stack_size=512KB
# 線程棧的大小。FastDFS server端採用了線程方式。
# 線程棧越大,一個線程佔用的系統資源就越多。
upload_priority=10
本storage server作爲源服務器,上傳文件的優先級,可以爲負數。值越小,優先級越高。這裏就和 tracker.conf 中store_server= 2時的配置相對應了
if_alias_prefix=
check_file_duplicate=0
# 是否檢測上傳文件已經存在。如果已經存在,則不存在文件內容,建立一個符號鏈接以節省磁盤空間。 結合 fastdfh使用的。 1是檢測,0是不檢測,我們不使用fastdfh 當然 0 
key_namespace=FastDFS
# 當上個參數設定爲1 或 yes時 (true/on也是可以的) , 在FastDHT中的命名空間
keep_alive=0
# 與FastDHT servers 的連接方式 (是否爲持久連接) 

# 下面是http的配置了就不多說了
http.disabled=true
http.domain_name=
http.server_port=80
http.trunk_size=256KB
http.need_find_content_type=true

3.建立tracker 和 storage 的根目錄


# tracker
tracker $> mkdir -p /home/eric
# storage
storage $> mkdir -p /home/yangzi

4.在 一臺storage上下載,比如我在 192.168.6.100上下載 nginx 和 fastdfs-nginx-module 模塊


storage $> wget http://www.nginx.org/download/nginx-0.8.53.tar.gz
storage $> svn export http://fastdfs-nginx-module.googlecode.com/svn/trunk/ fastdfs-nginx-module-read-only

5.編譯安裝 nginx 附帶 fastdfs-nginx-module 模塊


storage $> tar zxvf nginx-0.8.53.tar.gz
storage $> cd nginx-0.8.53
storage $> ./configure --prefix=/usr/local/nginx --add-module=/root/fastdfs-nginx-module-read-only/src
storage $> make
storage $> make install
# 拷貝mod_fastdfs.conf 到/etc/fdfs/
storage $> cp /root/fastdfs-nginx-module-read-only/src/mod_fastdfs.conf  /etc/fdfs/

6.修改 nginx 配置文件增加


storage $> vim /usr/local/nginx/conf/nginx.conf

# 增加一下
location /M00 {
alias /home/eric/data;
ngx_fastdfs_module;
}

7. 給 storage 的存儲目錄做一個軟連接


storage $> ln -s /home/yangzi/data  /home/yangzi/data/M00

8. 啓動兩臺 storage 和tracker nginx


#  啓動 tracker
tracker $> /usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf
# 啓動 storage
storage $>  /usr/local/bin/fdfs_storaged /etc/fdfs/storage.conf
# 啓動 storage2
storage2 $>  /usr/local/bin/fdfs_storaged /etc/fdfs/storage.conf
#在 storage啓動  nginx
storage $> /usr/local/nginx/sbin/nginx

9、上傳文件測試。
# 修改客戶端配置文件


storage $> vim /etc/fdfs/client.conf
connect_timeout=30
network_timeout=60
base_path=/home/yangzi
tracker_server=192.168.6.102:22122
log_level=info
#下面參數無所謂了反正沒有用到http 服務
http.tracker_server_port=80

storage $>  vim  a.html
test FastDFS!

storage $>  /usr/local/bin/fdfs_test /etc/fdfs/client.conf upload a.html
This is FastDFS client test program v2.04

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.

base_path=/home/yangzi, connect_timeout=30, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0
tracker_query_storage_store_list_without_group:
        server 1. group_name=group1, ip_addr=192.168.6.100, port=23000

group_name=group1, ip_addr=192.168.6.100, port=23000
storage_upload_by_filename
group_name=group1, remote_filename=M00/00/00/wKgGvEz3Y9MAAAAAAAAADigvbpc73.html
source ip address: 192.168.6.100
file timestamp=2010-12-02 17:16:03
file size=14
file crc32=674197143
file url: http://192.168.6.100/group1/M00/00/00/wKgGvEz3Y9MAAAAAAAAADigvbpc73.html
storage_upload_slave_by_filename
group_name=group1, remote_filename=M00/00/00/wKgGvEz3Y9MAAAAAAAAADigvbpc73_big.html
source ip address: 192.168.6.100
file timestamp=2010-12-02 17:16:03
file size=14
file crc32=674197143
file url: http://192.168.6.100/group1/M00/00/00/wKgGvEz3Y9MAAAAAAAAADigvbpc73_big.html

打開IE瀏覽器訪問:

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