環境準備
- tracker:192.168.20.116
- storage:
- group1:192.168.20.117
- group2:192.168.20.118
- 準備好安裝文件
- fastdfs-5.05.zip
- fastdfs-nginx-module.zip
- libfastcommon-1.0.7.zip
- nginx-1.8.1.tar.gz
- ngx_cache_purge-2.3.tar.gz
- pcre-8.36.zip
- zlib-1.2.8.tar.gz
<span id="install_tracker">安裝tracker</span>
-
安裝依賴libfastcommon
unzip libfastcommon-1.0.7.zip cd libfastcommon-1.0.7 ./make.sh ./make.sh install
-
安裝FastDFS
unzip fastdfs-5.05.zip cd fastdfs-5.05 ./make.sh ./make.sh install
默認安裝目錄:
/usr/bin
配置文件在:
/etc/fdfs
,需要重命名吧.sample
去掉 -
配置
編輯配置文件目錄下的
tracker.conf
,一般只需改動以下幾個參數即可:disabled=false #啓用配置文件 port=22122 #設置tracker的端口號 base_path=/opt/fastdfs #設置tracker的數據文件和日誌目錄(需預先創建) http.server_port=8080 #設置http端口號
-
創建數據存儲文件夾
mkdir /opt/fastdfs
-
啓動
fdfs_trackerd /etc/fdfs/tracker.conf
-
安裝tracker代理nginx
在tracker上安裝的nginx主要爲了提供http訪問的反向代理、負載均衡以及緩存服務。
-
安裝nginx(具體參考安裝Nginx)
tar -zxvf nginx-1.8.1.tar.gz tar -zxvf ngx_cache_purge-2.3.tar.gz cd nginx-1.8.1 ./configure --prefix=/opt/nginx --add-module=/opt/software/ngx_cache_purge-2.3 --without-http_gzip_module make make install
如果提示錯誤,可能缺少依賴的軟件包,需先安裝依賴包,再次運行./configure。nginx以及nginx cache purge插件模塊安裝完成,安裝目錄/opt/nginx。
-
配置nginx
#user nobody; worker_processes 1; error_log logs/error.log info; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #設置緩存參數 server_names_hash_bucket_size 128; client_header_buffer_size 32k; large_client_header_buffers 4 32k; client_max_body_size 300m; sendfile on; tcp_nopush on; 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 /var/cache/nginx/proxy_cache levels=1:2 keys_zone=http-cache:500m max_size=10g inactive=30d; proxy_temp_path /var/cache/nginx/proxy_cache/tmp; keepalive_timeout 65; #設置group服務器 upstream fdfs_group1 { server 192.168.20.117:8090 weight=1 max_fails=2 fail_timeout=30s; } upstream fdfs_group2 { server 192.168.20.118:8090 weight=1 max_fails=2 fail_timeout=30s; } server { listen 80; server_name localhost; charset utf-8; 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 /group2/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_group2; expires 30d; } #設置清除緩存的訪問權限 location ~ /purge(/.*) { allow 127.0.0.1; allow 192.168.72.0/24; deny all; proxy_cache_purge http-cache $1$is_args$args; } } }
創建緩存目錄:/var/cache/nginx/proxy_cache/tmp
-
啓動nginx
/opt/nginx/sbin/nginx
-
安裝storage
-
安裝
參考安裝tracker前2步驟。
-
配置
編輯配置文件目錄下的storage.conf,只需改動以下幾個參數即可:
disabled=false #啓用配置文件 group_name=group1 #組名,根據實際情況修改 port=23000 #設置storage的端口號 base_path=/opt/fastdfs #設置storage的日誌目錄(需預先創建) store_path_count=1 #存儲路徑個數,需要和store_path個數匹配 store_path0=/opt/fastdfs#存儲路徑 tracker_server=192.168.20.116:22122#tracker服務器的IP地址和端口號 http.server_port=8080 #設置http端口號
-
創建存儲目錄
mkdir /opt/fastdfs
-
運行
fdfs_storaged /etc/fdfs/storage.conf
-
按照同樣的配置在
192.168.20.118
上創建storage2
,做相應的調整(ip等)另外每個group中所有storage的端口號必須一致。
-
在storage上安裝nginx
在storage上安裝的nginx主要爲了提供http的訪問服務,同時解決group中storage服務器的同步延遲問題。
-
解壓
fastdfs-nginx-module.zip
插件unzip fastdfs-nginx-module.zip
-
安裝nginx(具體參考安裝Nginx)
tar -zxvf nginx-1.8.1.tar.gz cd nginx-1.8.1 ./configure --prefix=/usr/local/nginx --add-module=../fastdfs-nginx-module/src --without-http_gzip_module make make install
-
配置
-
配置FastDFS的nginx插件
將FastDFS的nginx插件模塊的配置文件copy到FastDFS配置文件目錄
cp /opt/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
編輯/etc/fdfs配置文件目錄下的mod_fastdfs.conf,設置storage信息並保存。 一般只需改動以下幾個參數即可:
base_path=/opt/fastdfs #保存日誌目錄 tracker_server=192.168.20.116: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 #存儲路徑
在末尾增加2個組的具體信息:
[group1] group_name=group1 storage_server_port=23000 store_path_count=1 store_path0=/opt/fastdfs [group2] group_name=group2 storage_server_port=23000 store_path_count=1 store_path0=/opt/fastdfs
-
建立M00至存儲目錄的符號連接:
ln -s /opt/fastdfs/data /opt/fastdfs/data/M00
-
配置nginx
vi nginx.conf # 在server中添加如下location location ~/group[1-3]/M00 { root /home/fastdfs/data; ngx_fastdfs_module; }
-
啓動
/usr/local/nginx/sbin/nginx
-
-
測試
配置/etc/fdfs/client.conf
base_path=/opt/fastdfs #日誌存放路徑
tracker_server=192.168.20.116:22122 #tracker服務器IP地址和端口號
http.tracker_server_port=8080 #tracker服務器的http端口號
通過fdfs_upload_file上傳一個文件到FastDFS,程序會自動返回文件的URL
[root[@localhost](https://my.oschina.net/u/570656) /opt/]#fdfs_upload_file /etc/fdfs/client.conf test
group1/M00/00/00/wKgUdVk1drmARcxsAAAOGgU8nEQ0713851
然後使用瀏覽器訪問,訪問正常http://192.168.20.116/group1/M00/00/00/wKgUdVk1drmARcxsAAAOGgU8nEQ0713851
監控
可以使用fdfs_monitor查看tracker和所有group的運行情況
[root[@localhost](https://my.oschina.net/u/570656) /opt/nginx/conf]#fdfs_monitor /etc/fdfs/client.conf
[2017-06-05 23:21:50] DEBUG - base_path=/opt/fastdfs, 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.20.116:22122
group count: 2
Group 1:
group name = group1
disk total space = 35660 MB
disk free space = 29390 MB
trunk free space = 0 MB
storage server count = 1
active server count = 1
storage server port = 23000
storage HTTP port = 8080
store path count = 1
subdir count per path = 256
current write server index = 0
current trunk file id = 0
Storage 1:
id = 192.168.20.117
ip_addr = 192.168.20.117 ACTIVE
http domain =
version = 5.05
join time = 2017-06-05 19:59:44
up time = 2017-06-05 19:59:44
total storage = 35660 MB
free storage = 29390 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
connection.alloc_count = 256
connection.current_count = 0
connection.max_count = 1
total_upload_count = 3
success_upload_count = 3
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 = 7429
success_upload_bytes = 7429
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 = 3
success_file_open_count = 3
total_file_read_count = 0
success_file_read_count = 0
total_file_write_count = 3
success_file_write_count = 3
last_heart_beat_time = 2017-06-05 23:21:47
last_source_update = 2017-06-05 23:20:24
last_sync_update = 1970-01-01 08:00:00
last_synced_timestamp = 1970-01-01 08:00:00
Group 2:
group name = group2
disk total space = 35660 MB
disk free space = 29390 MB
trunk free space = 0 MB
storage server count = 1
active server count = 1
storage server port = 23000
storage HTTP port = 8080
store path count = 1
subdir count per path = 256
current write server index = 0
current trunk file id = 0
Storage 1:
id = 192.168.20.118
ip_addr = 192.168.20.118 ACTIVE
http domain =
version = 5.05
join time = 2017-06-05 20:05:35
up time = 2017-06-05 20:05:35
total storage = 35660 MB
free storage = 29390 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
connection.alloc_count = 256
connection.current_count = 0
connection.max_count = 1
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 = 833473
success_upload_bytes = 833473
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 = 1
success_file_open_count = 1
total_file_read_count = 0
success_file_read_count = 0
total_file_write_count = 4
success_file_write_count = 4
last_heart_beat_time = 2017-06-05 23:21:37
last_source_update = 2017-06-05 22:26:05
last_sync_update = 1970-01-01 08:00:00
last_synced_timestamp = 1970-01-01 08:00:00