參考網站:html
http://www.open-open.com/lib/view/open1435468300700.htmlnginx
http://blog.csdn.net/lynnlovemin/article/details/39398043vim
http://soartju.iteye.com/blog/803477後端
http://soartju.iteye.com/blog/803524瀏覽器
http://soartju.iteye.com/blog/803548緩存
http://blog.csdn.net/poechant/article/details/6977407服務器
Tracker 192.168.42.2網絡
Group1-Storage1 192.168.42.3架構
Group1-Storage1 192.168.42.4app
Group2 ……
Group2 ……
Group3 ……
Group3 ……
本文只配置了一組Storage,如需配置多組,請參考Group1的配置便可。
FastDFS是一款開源的、分佈式文件系統(Distributed File System),由淘寶開發平臺部資深架構師餘慶開發。該開源項目的主頁是http://code.google.com/p/fastdfs。能夠經過fastdfs.sourceforge.net下載。FastDFS論壇是http://www.csource.org,目前是指向 ChinaUnix 開源項目孵化平臺的一個板塊 FastDFS,網址爲 bbs.chinaunix.net/forum-240-1.html。
FastDFS是一個開源的分佈式文件系統,她對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件爲載體的在線服務,如相冊網站、視頻網站等等。
FastDFS服務端有兩個角色:跟蹤器(tracker)和存儲節點(storage)。跟蹤器主要作調度工做,在訪問上起負載均衡的做用。
存儲節點存儲文件,完成文件管理的全部功能:存儲、同步和提供存取接口,FastDFS同時對文件的meta data進行管理。所謂文件的meta
data就是文件的相關屬性,以鍵值對(key value pair)方式表示,如:width=1024,其中的key爲width,value爲1024。文件meta
data是文件屬性列表,能夠包含多個鍵值對。
跟蹤器和存儲節點均可以由一臺多臺服務器構成。跟蹤器和存儲節點中的服務器都可以隨時增長或下線而不會影響線上服務。其中跟蹤器中的全部服務器都是對等的,能夠根據服務器的壓力狀況隨時增長或減小
爲了支持大容量,存儲節點(服務器)採用了分卷(或分組)的組織方式。存儲系統由一個或多個卷組成,卷與卷之間的文件是相互獨立的,全部卷 的文件容量累加就是整個存儲系統中的文件容量。一個卷能夠由一臺或多臺存儲服務器組成,一個卷下的存儲服務器中的文件都是相同的,卷中的多臺存儲服務器起到了冗餘備份和負載均衡的做用
在卷中增長服務器時,同步已有的文件由系統自動完成,同步完成後,系統自動將新增服務器切換到線上提供服務。
當存儲空間不足或即將耗盡時,能夠動態添加捲。只須要增長一臺或多臺服務器,並將它們配置爲一個新的卷,這樣就擴大了存儲系統的容量。
FastDFS中的文件標識分爲兩個部分:卷名和文件名,兩者缺一不可。
上傳文件交互過程:
1. client詢問tracker上傳到的storage,不須要附加參數;
2. tracker返回一臺可用的storage;
3. client直接和storage通信完成文件上傳。
下載文件交互過程:
1.client詢問tracker下載文件的storage,參數爲文件標識(卷名和文件名);
2. tracker返回一臺可用的storage;
3. client直接和storage通信完成文件下載。須要說明的是,client爲使用FastDFS服務的調用方,client也應該是一臺服務器,它對tracker和storage的調用均爲服務器間的調用。
下載FastDFS安裝包:
FastDFS官方論壇:http://www.csource.org
下載1:http://sourceforge.net/projects/fastdfs/files/
下載2:https://code.google.com/p/fastdfs/downloads/list
本手冊使用CentOS 6.5 x86_64版操做系統,按照如下網絡結構進行部署:
所須要下載的壓縮包有:
FastDFS源代碼:FastDFS_4.06.tar.gz
咱們搭建完的分佈式環境,還須要nginx幫忙實現http訪問以及負載均衡、緩存等功能,涉及的壓縮包以下:
nginx模塊源代碼:fastdfs-nginx-module_v1.15.tar.gz
nginx服務器源代碼:nginx-1.2.8.tar.gz
nginx cache purge插件源代碼:ngx_cache_purge-2.3.tar.gz
nginx依賴的pcre庫源代碼:pcre-8.21.tar.gz
nginx依賴的zlib庫源代碼:zlib-1.2.8.tar.gz
nginx依賴的ssl庫源代碼:openssl-1.0.1c.tar.gz
將上述安裝包拷貝到/usr/local目錄下
cd /usr/local/
tar -zxvf FastDFS_4.06.tar.gz
cd FastDFS
./make.sh
./make.sh install
過程當中若是沒有報錯,則安裝完成後,全部可執行文件在/usr/local/bin下,以fdfs開頭
cd /usr/local/bin/
ls
event_rpcgen.py fdfs_append_file fdfs_download_file fdfs_storaged fdfs_trackerd pcre-config restart.sh
fdfs_appender_test fdfs_crc32 fdfs_file_info fdfs_test fdfs_upload_appender pcregrep stop.sh
fdfs_appender_test1 fdfs_delete_file fdfs_monitor fdfs_test1 fdfs_upload_file pcretest
全部配置文件在/etc/fdfs下
cd /etc/fdfs/
ls
client.conf http.conf mime.types storage.conf tracker.conf
至此FastDFS安裝完成。
編輯配置文件下的tracker.conf,設置相關信息並保存。
改動如下幾個參數便可:
[root@xldwhj ~]# vim /etc/fdfs/tracker.conf
disabled=false #啓用配置文件
port=22122 #設置tracker的端口號
base_path=/opt/fastdfs_tracker #設置tracker的數據文件和日誌目錄(需預先建立)
http.server_port=8080 #設置http端口號
運行tracker以前,先要把防火牆中對應的fd端口打開(本例中爲22122)。
[root@xldwhj ~]# iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 22122 -j ACCEPT
[root@xldwhj ~]# /etc/init.d/iptables save
而後執行以下命令:
[root@xldwhj ~]# /usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
確認啓動是否成功。(查看是否對應端口22122是否開始監聽)
[root@xldwhj ~]# netstat -unltp | grep fdfs
tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 3842/fdfs_trackerd
或者是查看tracker的日誌是否啓動成功或是否有錯誤。
[root@xldwhj ~]# cat /fdfs/tracker/logs/trackerd.log
設爲開機啓動:
[root@xldwhj ~]# vim /etc/rc.d/rc.local
將運行命令行添加進文件:/usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
以192.168.42.3服務器爲例
[root@xldroot ~]# vim /etc/fdfs/storage.conf
改動如下幾個參數便可:
disabled=false #啓用配置文件
group_name=group1 #組名,根據實際狀況修改
port=23000 #設置storage的端口號
base_path=/opt/fastdfs_storage_info #設置storage的日誌目錄(需預先建立)
store_path_count=1 #存儲路徑個數,須要和store_path個數匹配
store_path0=/opt/fastdfs_storage_data #存儲路徑(需預先建立)
tracker_server=192.168.42.2:22122 #tracker服務器的IP地址和端口號
http.server_port=8080 #設置http端口號
運行storage以前,先要把防火牆中對應的fd端口打開(本例中爲23000)。
[root@xldroot ~]# iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 23000 -j ACCEPT
[root@xldroot ~]# /etc/init.d/iptables save
[root@xldroot ~]# /usr/local/bin/fdfs_storaged /etc/fdfs/storage.conf restart
啓動storage,會根據配置文件的設置自動建立多級存儲目錄
[root@xldroot ~]# netstat -unltp | grep fdfs
tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN 2315/fdfs_storaged
確認啓動成功後,能夠運行fdfs_monitor查看storage服務器是否已經登記到tracker服務器。
[root@xldroot ~]# /usr/local/bin/fdfs_monitor /etc/fdfs/storage.conf
[2016-08-11 14:59:54] DEBUG - base_path=/opt/fastdfs_storage_info, 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.42.2:22122
group count: 1
Group 1:
group name = group1
disk total space = 19685 MB
disk free space = 16150 MB
trunk free space = 0 MB
storage server count = 2
active server count = 2
storage server port = 23000
storage HTTP port = 8888
store path count = 1
subdir count per path = 256
current write server index = 1
current trunk file id = 0
Storage 1:
id = 192.168.42.3
ip_addr = 192.168.42.3 (xldroot) ACTIVE
http domain =
version = 4.06
join time = 2016-08-10 11:42:36
up time = 2016-08-11 09:11:59
total storage = 19685 MB
free storage = 16150 MB
upload priority = 10
store_path_count = 1
subdir_count_per_path = 256
storage_port = 23000
storage_http_port = 8080
current_write_path = 0
source storage id=
if_trunk_server= 0
total_upload_count = 1
success_upload_count = 1
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 = 33
success_upload_bytes = 33
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 = 33
success_sync_out_bytes = 33
total_file_open_count = 2
success_file_open_count = 2
total_file_read_count = 0
success_file_read_count = 0
total_file_write_count = 2
success_file_write_count = 2
last_heart_beat_time = 2016-08-11 14:59:51
last_source_update = 2016-08-11 11:45:27
last_sync_update = 2016-08-10 20:18:53
last_synced_timestamp = 1970-01-01 08:00:00 (never synced)
看到192.168.42.3 ACTIVE便可確認storage運行正常。
設置開機啓動
[root@xldroot ~]# vim /etc/rc.d/rc.local
將運行命令行添加進文件:/usr/local/bin/fdfs_storaged /etc/fdfs/storage.conf restart
以後依次在192.168.42.4上安裝上storage並確認運行正常。注意配置文件中group名參數須要根據實際狀況調整,本例中group是這樣分配的:
group1:192.168.42.3,192.168.42.4
group2:……本文未設置
group3:……本文未設置
另外每一個group中全部storage的端口號必須一致。
storage中安裝nginx,主要是爲了爲提供http的訪問服務,同時解決group中storage服務器的同步延遲問題。而tracker中安裝nginx,主要是爲了提供http訪問的反向代理、負載均衡以及緩存服務。
以192.168.42.3服務器爲例
提早將安裝nginx所需的依賴包解壓安裝:
nginx依賴的pcre庫源代碼:pcre-8.21.tar.gz
nginx依賴的zlib庫源代碼:zlib-1.2.8.tar.gz
nginx依賴的ssl庫源代碼:openssl-1.0.1c.tar.gz
安裝詳見《CentOS 6.5 下Nginx服務的安裝和配置》
將 nginx1.2.8.tar.gz 和fastdfs-nginx-module_v1.15.tar.gz 解壓縮,而後進入nginx1.2.8的文件夾目錄,執行以下命令:
[root@xldroot ~]# ./configure --prefix=/usr/local/nginx --with-pcre=/usr/local/pcre-8.21
--with-zlib=/usr/local/zlib-1.2.8 --add-module=/usr/local/fastdfs-nginx-module/src
[root@xldroot ~]# make
[root@xldroot ~]# make install
將FastDFS的nginx插件模塊的配置文件copy到FastDFS配置文件目錄
[root@xldroot ~]# cp /usr/local/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
至此nginx以及FastDFS的nginx插件模塊安裝完成。
編輯/usr/local/nginx/conf配置文件目錄下的nginx.conf,設置添加storage信息並保存。
將server段中的listen端口號改成8080:
Listen 8080;
在server段中添加:
location~/group[1-3]/M00{//根據狀況填寫,屬於group1此處就寫group1
root /opt/fastdfs_storage_data/data;
ngx_fastdfs_module;
}
編輯/etc/fdfs配置文件目錄下的mod_fastdfs.conf,設置storage信息並保存。
base_path=/opt/fastdfs_storage_info #保存日誌目錄
tracker_server=192.168.42.2:22122#tracker服務器的IP地址以及端口號
storage_server_port=23000 #storage服務器的端口號
group_name=group1 #當前服務器的group名
url_have_group_name= true #文件url中是否有group名
store_path_count=1 #存儲路徑個數,須要和store_path個數匹配
store_path0=/opt/fastdfs_storage_data #存儲路徑
http.need_find_content_type=true #從文件擴展名查找文件類型(nginx時爲true)
group_count= 1 #設置組的個數,本文爲1個組
在末尾增長組的具體信息:
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data
若有group2,3等,應接着增長組的信息
創建M00至存儲目錄的符號鏈接。
[root@xldroot ~]# ln -s /opt/fastdfs_storage_data /opt/fastdfs_storage_data/M00
運行nginx以前,先要把防火牆中對應的端口打開(本例中爲8080)。
運行命令:
[root@xldroot ~]# /usr/local/nginx/sbin/nginx
[root@xldroot ~]# netstat -unltp | grep nginx
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1969/nginx
在瀏覽器中輸入192.168.42.3:8080若是出現nginx歡迎界面則說明配置成功。
在tracker上安裝的nginx主要爲了提供http訪問的反向代理、負載均衡以及緩存服務。
提早將 nginx1.2.8.tar.gz、fastdfs-nginx-module_v1.15.tar.gz、ngx_cache_purge-2.3.tar.gz解壓縮,而後進入nginx1.2.8的文件夾目錄,執行以下命令:
[root@xldwhjt ~]# ./configure --prefix=/usr/local/nginx --with-pcre=/usr/local/pcre-8.21
--with-zlib=/usr/local/zlib-1.2.8 --add-module=/usr/local/fastdfs-nginx-module/src
--add-module=/usr/local/ngx_cache_purge-2.3
若是提示錯誤,可能缺乏依賴的軟件包,需先安裝依賴包,再次運行./configure
安裝完後在/usr/local/nginx下多出四個目錄,分別是fastcgi_temp,proxy_temp,scgi_temp和uwsgi_temp。
proxy_temp這個目錄用於存儲臨時文件,須要看下是否有權限寫入,若是不可寫,沒法在這個目錄生成文件的話,會致使反向代理失敗。也能夠在nginx的配置裏設置proxy_temp_path指定已存在的存儲臨時文件的目錄。
[root@xldwhjt ~]# make
[root@xldwhjt ~]# make install
至此nginx以及nginx cachepurge插件模塊安裝完成。
編輯/usr/local/nginx/conf配置文件目錄下的nginx.conf,設置負載均衡以及緩存。
worker_processes 4; #根據CPU核心數而定
events{
worker_connections 65535; #最大連接數
use epoll; 新版本的Linux可以使用epoll加快處理性能
}
http{
#設置緩存參數
server_names_hash_bucket_size 128;
client_header_buffer_size32k;
large_client_header_buffers 4 32k;
client_max_body_size300m;
sendfile on;
tcp_nopushon;
proxy_redirectoff;
proxy_set_headerHost $http_host;
proxy_set_headerX-Real-IP $remote_addr;
proxy_set_headerX-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size128k;
proxy_temp_file_write_size128k;
#設置緩存存儲路徑、存儲方式、分配內存大小、磁盤最大空間、緩存期限
#proxy_cache_path /opt/cache/nginx/proxy_cache levels=1:2 keys_zone=http-cache:500m max_size=10g inactive=30d;
#proxy_temp_path /opt/cache/nginx/proxy_cache/tmp;
proxy_temp_path /usr/local/nginx/proxy_temp;
proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2 keys_zone=http-cache:500m max_size=10g inactive=30d;
#設置group1的服務器
upstreamfdfs_group1 {
server192.168.42.3:8080 weight=1 max_fails=2 fail_timeout=30s;
server192.168.42.4:8080 weight=1 max_fails=2 fail_timeout=30s;
}
#設置group2的服務器
#設置group3的服務器
#設置group4的服務器
server{
#設置服務器端口
Listen 8080;
#設置group1的負載均衡參數
location/group1/M00 {
proxy_next_upstream http_502http_504 error timeout invalid_header;
proxy_cachehttp-cache;
proxy_cache_valid 200 304 12h;
proxy_cache_key $uri$is_args$args;
proxy_pass http://fdfs_group1;
expires30d;
}
#設置group2的負載均衡參數
#設置group3的負載均衡參數
#設置group4的負載均衡參數
至此,nginx以及nginx cachepurge插件模塊設置完成。
proxy_temp_path : 緩存臨時目錄。後端的響應並不直接返回客戶端,而是先寫到一個臨時文件中,而後被rename一下當作緩存放在 proxy_cache_path 。0.8.9版本之後容許temp和cache兩個目錄在不一樣文件系統上(分區),然而爲了減小性能損失仍是建議把它們設成一個文件系統上。
proxy_cache_path ... : 設置緩存目錄,目錄裏的文件名是 cache_key 的MD5值。
levels=1:2 keys_zone= http-cache:500m表示採用2級目錄結構,Web緩存區名稱爲http-cache,內存緩存空間大小爲500MB,這個緩衝zone能夠被屢次使用。文件系統上看到的緩存文件名相似於 /usr/local/nginx/proxy_cache/c/29/b7f54b2df7773722d382f4809d65029c 。
inactive=10d max_size=30g表示10天沒有被訪問的內容自動清除,硬盤最大緩存空間爲30GB,超過這個大學將清除最近最少使用的數據。
proxy_cache : 引用前面定義的緩存區 http-cache
proxy_cache_key : 定義cache_key
proxy_cache_valid : 爲不一樣的響應狀態碼設置不一樣的緩存時間,好比200、302等正常結果能夠緩存的時間長點,而40四、500等緩存時間設置短一些,這個時間到了文件就會過時,而不管是否剛被訪問過。
expires : 在響應頭裏設置Expires:或Cache-Control:max-age,返回給客戶端的瀏覽器緩存失效時間。
首先關閉防火牆,或設置防火牆開啓端口。
[root@xldwhj ~]# /usr/local/nginx/sbin/nginx
[root@xldwhj ~]# netstat -unltp | grep nginx
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 4388/nginx
嘗試上傳一個文件到FastDFS,而後訪問試試。先配置client.conf文件。
[root@xldwhj ~]# vim /etc/fdfs/client.conf
修改如下參數:
base_path=/opt/fastdfs_tracker #日誌存放路徑
tracker_server=192.168.42.2:22122 #tracker服務器IP地址和端口號
http.tracker_server_port=8080 #tracker服務器的http端口號
使用/usr/local/bin/fdfs_upload_file上傳一個文件,程序會自動返回文件的URL
[root@xldwhj ~]# vim /mnt/111.txt
eaefafafafwafs
dwafawaf
fawfawwf
[root@xldwhj ~]# /usr/local/bin/fdfs_upload_file /etc/fdfs/client.conf /mnt/111.txt
group1/M00/00/00/wKgqBFesLVmAVkiAAAAAIW5_3_Y488.txt
使用瀏覽器訪問:
輸入:192.168.42.3:8080/ group1/M00/00/00/wKgqBFesLVmAVkiAAAAAIW5_3_Y488.txt
以下圖所示:
查看nginx的cache目錄,能夠看到已經生成了緩存文件
[root@xldwhj ~]# ll /opt/cache/nginx/proxy_cache/ -R
/opt/cache/nginx/proxy_cache/:
total 4
drwx------ 2 nobody root 4096 Aug 10 17:07 tmp
/opt/cache/nginx/proxy_cache/tmp:
total 0
設置開機啓動
若是要手動清除緩存,能夠在文件URL以前加上purge:
至此,tracker服務器上的http反向代理+負載均衡+緩存已經安裝完成。