FastDFS + Nginx 反向代理緩存 安裝與配置

FastDFS + Nginx 反向代理緩存 安裝與配置

操做系統 CentOS release 6.5 (Final) 64php

nginx相關軟件

FastDFS相關軟件

拓撲圖

2、tracker的安裝與配置

1.安裝

如下操做是在 tracker 10.10.10.124上操做sql

經過rz工具,把軟件上傳到/usr/local/src目錄下,若是沒有rz工具,可使用 yum -y install lrzsz 安裝chrome

[root@tracker src]# ls FastDFS_v5.04.tar.gz [root@tracker src]# tar xf FastDFS_v5.04.tar.gz [root@tracker src]# cd FastDFS [root@tracker FastDFS]# ll 總用量 132 drwxr-xr-x. 3 8980 users 4096 9月 21 22:14 client drwxr-xr-x. 2 8980 users 4096 9月 21 22:14 common drwxr-xr-x. 2 8980 users 4096 9月 21 22:14 conf -rw-r--r--. 1 8980 users 35067 9月 21 22:14 COPYING-3_0.txt -rw-r--r--. 1 8980 users 2802 9月 21 22:14 fastdfs.spec -rw-r--r--. 1 8980 users 31224 9月 21 22:14 HISTORY drwxr-xr-x. 2 8980 users 4096 9月 21 22:14 init.d -rw-r--r--. 1 8980 users 7755 9月 21 22:14 INSTALL -rwxr-xr-x. 1 8980 users 5735 9月 21 22:14 make.sh drwxr-xr-x. 2 8980 users 4096 9月 21 22:14 php_client -rw-r--r--. 1 8980 users 2380 9月 21 22:14 README.md -rwxr-xr-x. 1 8980 users 1768 9月 21 22:14 restart.sh -rwxr-xr-x. 1 8980 users 1680 9月 21 22:14 stop.sh drwxr-xr-x. 4 8980 users 4096 9月 21 22:14 storage drwxr-xr-x. 2 8980 users 4096 9月 21 22:14 test drwxr-xr-x. 2 8980 users 4096 9月 21 22:14 tracker [root@tracker FastDFS]# ./make.sh 

執行make.sh 遇到的錯誤

[root@tracker FastDFS]# ./make.sh cc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o ../common/fdfs_global.o ../common/fdfs_global.c -I../common -I/usr/include/fastcommon ../common/fdfs_global.c:20:20: 錯誤:logger.h:沒有那個文件或目錄 在包含自 ../common/fdfs_global.c:21 的文件中: ../common/fdfs_global.h:14:27: 錯誤:common_define.h:沒有那個文件或目錄 ../common/fdfs_global.h:16:29: 錯誤:connection_pool.h:沒有那個文件或目錄 In file included from ../common/fdfs_global.c:21: ../common/fdfs_global.h:26: 錯誤:‘MAX_PATH_SIZE’未聲明(不在函數內) ../common/fdfs_global.h:27: 錯誤:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘g_fdfs_version’ ../common/fdfs_global.h:28: 錯誤:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘g_use_connection_pool’ ../common/fdfs_global.h:29: 錯誤:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘g_connection_pool’ ../common/fdfs_global.c:23: 錯誤:‘DEFAULT_CONNECT_TIMEOUT’未聲明(不在函數內) ../common/fdfs_global.c:24: 錯誤:‘DEFAULT_NETWORK_TIMEOUT’未聲明(不在函數內) ../common/fdfs_global.c:26: 錯誤:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘g_fdfs_version’ ../common/fdfs_global.c:27: 錯誤:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘g_use_connection_pool’ ../common/fdfs_global.c:28: 錯誤:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘g_connection_pool’ ../common/fdfs_global.c: 在函數‘fdfs_check_data_filename’中: ../common/fdfs_global.c:39: 警告:隱式聲明函數‘logError’ ../common/fdfs_global.c:45: 警告:隱式聲明函數‘IS_UPPER_HEX’ make: *** [../common/fdfs_global.o] 錯誤 1 cc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o ../common/fdfs_global.o ../common/fdfs_global.c -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon ../common/fdfs_global.c:20:20: 錯誤:logger.h:沒有那個文件或目錄 在包含自 ../common/fdfs_global.c:21 的文件中: ../common/fdfs_global.h:14:27: 錯誤:common_define.h:沒有那個文件或目錄 ../common/fdfs_global.h:16:29: 錯誤:connection_pool.h:沒有那個文件或目錄 In file included from ../common/fdfs_global.c:21: ../common/fdfs_global.h:26: 錯誤:‘MAX_PATH_SIZE’未聲明(不在函數內) ../common/fdfs_global.h:27: 錯誤:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘g_fdfs_version’ ../common/fdfs_global.h:28: 錯誤:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘g_use_connection_pool’ ../common/fdfs_global.h:29: 錯誤:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘g_connection_pool’ ../common/fdfs_global.c:23: 錯誤:‘DEFAULT_CONNECT_TIMEOUT’未聲明(不在函數內) ../common/fdfs_global.c:24: 錯誤:‘DEFAULT_NETWORK_TIMEOUT’未聲明(不在函數內) ../common/fdfs_global.c:26: 錯誤:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘g_fdfs_version’ ../common/fdfs_global.c:27: 錯誤:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘g_use_connection_pool’ ../common/fdfs_global.c:28: 錯誤:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘g_connection_pool’ ../common/fdfs_global.c: 在函數‘fdfs_check_data_filename’中: ../common/fdfs_global.c:39: 警告:隱式聲明函數‘logError’ ../common/fdfs_global.c:45: 警告:隱式聲明函數‘IS_UPPER_HEX’ make: *** [../common/fdfs_global.o] 錯誤 1 cc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o ../common/fdfs_global.o ../common/fdfs_global.c -I../common -I../tracker -I/usr/include/fastcommon ../common/fdfs_global.c:20:20: 錯誤:logger.h:沒有那個文件或目錄 在包含自 ../common/fdfs_global.c:21 的文件中: ../common/fdfs_global.h:14:27: 錯誤:common_define.h:沒有那個文件或目錄 ../common/fdfs_global.h:16:29: 錯誤:connection_pool.h:沒有那個文件或目錄 In file included from ../common/fdfs_global.c:21: ../common/fdfs_global.h:26: 錯誤:‘MAX_PATH_SIZE’未聲明(不在函數內) ../common/fdfs_global.h:27: 錯誤:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘g_fdfs_version’ ../common/fdfs_global.h:28: 錯誤:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘g_use_connection_pool’ ../common/fdfs_global.h:29: 錯誤:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘g_connection_pool’ ../common/fdfs_global.c:23: 錯誤:‘DEFAULT_CONNECT_TIMEOUT’未聲明(不在函數內) ../common/fdfs_global.c:24: 錯誤:‘DEFAULT_NETWORK_TIMEOUT’未聲明(不在函數內) ../common/fdfs_global.c:26: 錯誤:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘g_fdfs_version’ ../common/fdfs_global.c:27: 錯誤:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘g_use_connection_pool’ ../common/fdfs_global.c:28: 錯誤:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘g_connection_pool’ ../common/fdfs_global.c: 在函數‘fdfs_check_data_filename’中: ../common/fdfs_global.c:39: 警告:隱式聲明函數‘logError’ ../common/fdfs_global.c:45: 警告:隱式聲明函數‘IS_UPPER_HEX’ make: *** [../common/fdfs_global.o] 錯誤 1 

看 源碼目錄下的INSTALL文件發現,須要安裝 libfastcommon

#step 1. download libfastcommon source package from github and install it, the github address: https://github.com/happyfish100/libfastcommon.git 

到如上的網址下載 libfastcommon進行安裝,上傳至服務器的src目錄下

[root@tracker src]# unzip libfastcommon-master.zip [root@tracker src]# cd libfastcommon-master [root@tracker libfastcommon-master]# ls HISTORY INSTALL libfastcommon.spec make.sh README src [root@tracker libfastcommon-master]# ./make.sh [root@tracker libfastcommon-master]# ./make.sh install mkdir -p /usr/lib64 install -m 755 libfastcommon.so /usr/lib64 mkdir -p /usr/include/fastcommon install -m 644 common_define.h hash.h chain.h logger.h base64.h shared_func.h pthread_func.h ini_file_reader.h _os_bits.h sockopt.h sched_thread.h http_func.h md5.h local_ip_func.h avl_tree.h ioevent.h ioevent_loop.h fast_task_queue.h fast_timer.h process_ctrl.h fast_mblock.h connection_pool.h /usr/include/fastcommon 

至此libfastcommon安裝完成。

再回到 FastDFS目錄下來安裝FastDFS

[root@tracker libfastcommon-master]# cd ../FastDFS [root@tracker FastDFS]# ./make.sh cc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o ../common/fdfs_global.o ../common/fdfs_global.c -I../common -I/usr/include/fastcommon cc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o tracker_proto.o tracker_proto.c -I../common -I/usr/include/fastcommon cc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o tracker_mem.o tracker_mem.c -I../common -I/usr/include/fastcommon cc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o tracker_service.o tracker_service.c -I../common -I/usr/include/fastcommon cc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o tracker_status.o tracker_status.c -I../common -I/usr/include/fastcommon cc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o tracker_global.o tracker_global.c -I../common -I/usr/include/fastcommon cc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o tracker_func.o tracker_func.c -I../common -I/usr/include/fastcommon cc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o fdfs_shared_func.o fdfs_shared_func.c -I../common -I/usr/include/fastcommon cc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o tracker_nio.o tracker_nio.c -I../common -I/usr/include/fastcommon cc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o tracker_relationship.o tracker_relationship.c -I../common -I/usr/include/fastcommon cc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o tracker_dump.o tracker_dump.c -I../common -I/usr/include/fastcommon cc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o ../common/linux_stack_trace.o ../common/linux_stack_trace.c -I../common -I/usr/include/fastcommon cc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -o fdfs_trackerd fdfs_trackerd.c ../common/fdfs_global.o tracker_proto.o tracker_mem.o tracker_service.o tracker_status.o tracker_global.o tracker_func.o fdfs_shared_func.o tracker_nio.o tracker_relationship.o tracker_dump.o ../common/linux_stack_trace.o -L/usr/local/lib -lpthread -ldl -rdynamic -lfastcommon -I../common -I/usr/include/fastcommon cc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o tracker_client_thread.o tracker_client_thread.c -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon cc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o storage_global.o storage_global.c -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon cc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o storage_func.o storage_func.c -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon cc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o storage_service.o storage_service.c -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon cc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o storage_sync.o storage_sync.c -I. -Itrunk_mgr -I../common -I../tracker -I../client -Ifdht_client -I/usr/include/fastcommon ... [root@tracker FastDFS]# ./make.sh install mkdir -p /usr/bin mkdir -p /etc/fdfs cp -f fdfs_trackerd /usr/bin if [ ! -f /etc/fdfs/tracker.conf.sample ]; then cp -f ../conf/tracker.conf /etc/fdfs/tracker.conf.sample; fi mkdir -p /usr/bin mkdir -p /etc/fdfs cp -f fdfs_storaged /usr/bin if [ ! -f /etc/fdfs/storage.conf.sample ]; then cp -f ../conf/storage.conf /etc/fdfs/storage.conf.sample; fi mkdir -p /usr/bin mkdir -p /etc/fdfs mkdir -p /usr/lib64 cp -f fdfs_monitor fdfs_test fdfs_test1 fdfs_crc32 fdfs_upload_file fdfs_download_file fdfs_delete_file fdfs_file_info fdfs_appender_test fdfs_appender_test1 fdfs_append_file fdfs_upload_appender /usr/bin if [ 0 -eq 1 ]; then cp -f libfdfsclient.a /usr/lib64; fi if [ 1 -eq 1 ]; then cp -f libfdfsclient.so /usr/lib64; fi mkdir -p /usr/include/fastdfs cp -f ../common/fdfs_define.h ../common/fdfs_global.h ../common/mime_file_parser.h ../common/fdfs_http_shared.h ../tracker/tracker_types.h ../tracker/tracker_proto.h ../tracker/fdfs_shared_func.h ../storage/trunk_mgr/trunk_shared.h tracker_client.h storage_client.h storage_client1.h client_func.h client_global.h fdfs_client.h /usr/include/fastdfs if [ ! -f /etc/fdfs/client.conf.sample ]; then cp -f ../conf/client.conf /etc/fdfs/client.conf.sample; fi 

至此FastDFS在 tracker上安裝完成,全部的可執行文件位於 /usr/bin 目錄下,以fdfs開頭的文件

[root@tracker FastDFS]# ll /usr/bin/fd*
-rwxr-xr-x. 1 root root 257631 10月 28 11:29 /usr/bin/fdfs_appender_test -rwxr-xr-x. 1 root root 257424 10月 28 11:29 /usr/bin/fdfs_appender_test1 -rwxr-xr-x. 1 root root 247664 10月 28 11:29 /usr/bin/fdfs_append_file -rwxr-xr-x. 1 root root 247340 10月 28 11:29 /usr/bin/fdfs_crc32 -rwxr-xr-x. 1 root root 247723 10月 28 11:29 /usr/bin/fdfs_delete_file -rwxr-xr-x. 1 root root 248850 10月 28 11:29 /usr/bin/fdfs_download_file -rwxr-xr-x. 1 root root 248584 10月 28 11:29 /usr/bin/fdfs_file_info -rwxr-xr-x. 1 root root 260848 10月 28 11:29 /usr/bin/fdfs_monitor -rwxr-xr-x. 1 root root 886610 10月 28 11:29 /usr/bin/fdfs_storaged -rwxr-xr-x. 1 root root 264031 10月 28 11:29 /usr/bin/fdfs_test -rwxr-xr-x. 1 root root 263208 10月 28 11:29 /usr/bin/fdfs_test1 -rwxr-xr-x. 1 root root 374872 10月 28 11:29 /usr/bin/fdfs_trackerd -rwxr-xr-x. 1 root root 248730 10月 28 11:29 /usr/bin/fdfs_upload_appender -rwxr-xr-x. 1 root root 249676 10月 28 11:29 /usr/bin/fdfs_upload_file [root@tracker FastDFS]# 

全部的配置文件在 /etc/fdfs/ 目錄下

[root@tracker FastDFS]# ll /etc/fdfs/ 總用量 20 -rw-r--r--. 1 root root 1461 10月 28 11:29 client.conf.sample -rw-r--r--. 1 root root 7647 10月 28 11:29 storage.conf.sample -rw-r--r--. 1 root root 7102 10月 28 11:29 tracker.conf.sample [root@tracker FastDFS]# 

至此 FastDFS在tracker上安裝完成,如下進行配置

2. 配置

進入到 /etc/fdfs 目錄下,複製模版文件到 tracker.conf

[root@tracker fdfs]# cp tracker.conf.sample tracker.conf 

建立數據文件和日誌文件目錄

[root@tracker fdfs]# mkdir -pv /data/fastdfs/tracker mkdir: 已建立目錄 "/data" mkdir: 已建立目錄 "/data/fastdfs" mkdir: 已建立目錄 "/data/fastdfs/tracker" 

編輯 tracker.conf 文件,測試的時候只須要修改如下參數便可

disabled=false #啓用配置文件 port=22122 #設置 tracker 的端口號 base_path=/data/fastdfs/tracker #設置 tracker 的數據文件和日誌目錄(需預先建立) http.server_port=8080 #設置 http 端口號 

這個http.server_port=8080 指的是在tracker服務器上啓動http服務進程,如:apache或者nginx 啓動時所監聽的端口,這個彷佛是能夠不用管的,由於tracker自己就沒有安裝http服務

3.運行

直接使用 fdfs_trackerd 來啓動tracker進程,而後使用netstat 查看端口是否起來。

[root@tracker fdfs]# fdfs_trackerd /etc/fdfs/tracker.conf restart [root@tracker fdfs]# netstat -antp | grep trackerd tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 14520/fdfs_trackerd [root@tracker fdfs]# 

也能夠查看日誌看服務是否正常運行

[root@tracker tracker]# cat /data/fastdfs/tracker/logs/trackerd.log [2014-10-28 13:53:43] INFO - FastDFS v5.04, base_path=/data/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 [2014-10-28 13:53:43] INFO - local_host_ip_count: 2, 127.0.0.1 10.10.10.124 

4.設置開機自動啓動

[root@tracker tracker]# echo "/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart" >> /etc/rc.local [root@tracker tracker]# cat /etc/rc.local #!/bin/sh # # This script will be executed *after* all the other init scripts. # You can put your own initialization stuff in here if you don't # want to do the full Sys V style init stuff. touch /var/lock/subsys/local /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart [root@tracker tracker]# 

至此tracker上的安裝與配置結束。

3、storage的安裝與配置

1.安裝

如下操做是在 10.10.10.120 storage1上操做

利用上傳 FastDFS_v5.04.tar.gz 和 libfastcommon-master.zip 至 storage服務器的/usr/local/src 目錄下

[root@server1 src]# rz rz waiting to receive. Starting zmodem transfer. Press Ctrl+C to cancel. Transferring FastDFS_v5.04.tar.gz... 100% 335 KB 335 KB/sec 00:00:01 0 Errors [root@server1 src]# ls FastDFS_v5.04.tar.gz [root@server1 src]# rz rz waiting to receive. Starting zmodem transfer. Press Ctrl+C to cancel. Transferring libfastcommon-master.zip... 100% 95 KB 95 KB/sec 00:00:01 0 Errors [root@server1 src]# ll 總用量 432 -rw-r--r-- 1 root root 343477 10月 27 09:26 FastDFS_v5.04.tar.gz -rw-r--r-- 1 root root 97548 10月 28 11:14 libfastcommon-master.zip [root@server1 src]# 

解壓安裝 libfastcommon

[root@server1 src]# unzip libfastcommon-master.zip [root@server1 libfastcommon-master]# ll 總用量 24 -rw-r--r-- 1 root root 2397 10月 26 11:53 HISTORY -rw-r--r-- 1 root root 582 10月 26 11:53 INSTALL -rw-r--r-- 1 root root 1341 10月 26 11:53 libfastcommon.spec -rwxr-xr-x 1 root root 2151 10月 26 11:53 make.sh -rw-r--r-- 1 root root 617 10月 26 11:53 README drwxr-xr-x 2 root root 4096 10月 26 11:53 src [root@server1 libfastcommon-master]# ./make.sh cc -Wall -D_FILE_OFFSET_BITS=64 -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o hash.lo hash.c cc -Wall -D_FILE_OFFSET_BITS=64 -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o chain.lo chain.c cc -Wall -D_FILE_OFFSET_BITS=64 -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o shared_func.lo shared_func.c cc -Wall -D_FILE_OFFSET_BITS=64 -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o ini_file_reader.lo ini_file_reader.c cc -Wall -D_FILE_OFFSET_BITS=64 -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o logger.lo logger.c cc -Wall -D_FILE_OFFSET_BITS=64 -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o sockopt.lo sockopt.c cc -Wall -D_FILE_OFFSET_BITS=64 -g -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -fPIC -o base64.lo base64.c ... [root@server1 libfastcommon-master]# ./make.sh install mkdir -p /usr/lib64 install -m 755 libfastcommon.so /usr/lib64 mkdir -p /usr/include/fastcommon install -m 644 common_define.h hash.h chain.h logger.h base64.h shared_func.h pthread_func.h ini_file_reader.h _os_bits.h sockopt.h sched_thread.h http_func.h md5.h local_ip_func.h avl_tree.h ioevent.h ioevent_loop.h fast_task_queue.h fast_timer.h process_ctrl.h fast_mblock.h connection_pool.h /usr/include/fastcommon 

解壓安裝 FastDFS_v5.04.tar.gz

[root@server1 src]# tar xf FastDFS_v5.04.tar.gz [root@server1 src]# cd FastDFS [root@server1 FastDFS]# ll 總用量 132 drwxr-xr-x 3 8980 users 4096 9月 21 22:14 client drwxr-xr-x 2 8980 users 4096 9月 21 22:14 common drwxr-xr-x 2 8980 users 4096 9月 21 22:14 conf -rw-r--r-- 1 8980 users 35067 9月 21 22:14 COPYING-3_0.txt -rw-r--r-- 1 8980 users 2802 9月 21 22:14 fastdfs.spec -rw-r--r-- 1 8980 users 31224 9月 21 22:14 HISTORY drwxr-xr-x 2 8980 users 4096 9月 21 22:14 init.d -rw-r--r-- 1 8980 users 7755 9月 21 22:14 INSTALL -rwxr-xr-x 1 8980 users 5735 9月 21 22:14 make.sh drwxr-xr-x 2 8980 users 4096 9月 21 22:14 php_client -rw-r--r-- 1 8980 users 2380 9月 21 22:14 README.md -rwxr-xr-x 1 8980 users 1768 9月 21 22:14 restart.sh -rwxr-xr-x 1 8980 users 1680 9月 21 22:14 stop.sh drwxr-xr-x 4 8980 users 4096 9月 21 22:14 storage drwxr-xr-x 2 8980 users 4096 9月 21 22:14 test drwxr-xr-x 2 8980 users 4096 9月 21 22:14 tracker [root@server1 FastDFS]# [root@server1 FastDFS]# ./make.sh cc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o ../common/fdfs_global.o ../common/fdfs_global.c -I../common -I/usr/include/fastcommon cc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o tracker_proto.o tracker_proto.c -I../common -I/usr/include/fastcommon cc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o tracker_mem.o tracker_mem.c -I../common -I/usr/include/fastcommon cc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o tracker_service.o tracker_service.c -I../common -I/usr/include/fastcommon cc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O -DDEBUG_FLAG -DOS_LINUX -DIOEVENT_USE_EPOLL -c -o tracker_status.o tracker_status.c -I../common -I/usr/include/fastcommon ... [root@server1 FastDFS]# ./make.sh install mkdir -p /usr/bin mkdir -p /etc/fdfs cp -f fdfs_trackerd /usr/bin if [ ! -f /etc/fdfs/tracker.conf.sample ]; then cp -f ../conf/tracker.conf /etc/fdfs/tracker.conf.sample; fi mkdir -p /usr/bin mkdir -p /etc/fdfs cp -f fdfs_storaged /usr/bin if [ ! -f /etc/fdfs/storage.conf.sample ]; then cp -f ../conf/storage.conf /etc/fdfs/storage.conf.sample; fi mkdir -p /usr/bin mkdir -p /etc/fdfs mkdir -p /usr/lib64 cp -f fdfs_monitor fdfs_test fdfs_test1 fdfs_crc32 fdfs_upload_file fdfs_download_file fdfs_delete_file fdfs_file_info fdfs_appender_test fdfs_appender_test1 fdfs_append_file fdfs_upload_appender /usr/bin if [ 0 -eq 1 ]; then cp -f libfdfsclient.a /usr/lib64; fi if [ 1 -eq 1 ]; then cp -f libfdfsclient.so /usr/lib64; fi mkdir -p /usr/include/fastdfs cp -f ../common/fdfs_define.h ../common/fdfs_global.h ../common/mime_file_parser.h ../common/fdfs_http_shared.h ../tracker/tracker_types.h ../tracker/tracker_proto.h ../tracker/fdfs_shared_func.h ../storage/trunk_mgr/trunk_shared.h tracker_client.h storage_client.h storage_client1.h client_func.h client_global.h fdfs_client.h /usr/include/fastdfs if [ ! -f /etc/fdfs/client.conf.sample ]; then cp -f ../conf/client.conf /etc/fdfs/client.conf.sample; fi 

安裝完成後,可執行文件在/usr/bin/下以 fdfs 開頭

[root@server1 FastDFS]# ll /usr/bin/fdfs_*
-rwxr-xr-x 1 root root 257631 10月 28 14:18 /usr/bin/fdfs_appender_test -rwxr-xr-x 1 root root 257424 10月 28 14:18 /usr/bin/fdfs_appender_test1 -rwxr-xr-x 1 root root 247664 10月 28 14:18 /usr/bin/fdfs_append_file -rwxr-xr-x 1 root root 247340 10月 28 14:18 /usr/bin/fdfs_crc32 -rwxr-xr-x 1 root root 247723 10月 28 14:18 /usr/bin/fdfs_delete_file -rwxr-xr-x 1 root root 248850 10月 28 14:18 /usr/bin/fdfs_download_file -rwxr-xr-x 1 root root 248584 10月 28 14:18 /usr/bin/fdfs_file_info -rwxr-xr-x 1 root root 260848 10月 28 14:18 /usr/bin/fdfs_monitor -rwxr-xr-x 1 root root 886610 10月 28 14:18 /usr/bin/fdfs_storaged -rwxr-xr-x 1 root root 264031 10月 28 14:18 /usr/bin/fdfs_test -rwxr-xr-x 1 root root 263208 10月 28 14:18 /usr/bin/fdfs_test1 -rwxr-xr-x 1 root root 374872 10月 28 14:18 /usr/bin/fdfs_trackerd -rwxr-xr-x 1 root root 248730 10月 28 14:18 /usr/bin/fdfs_upload_appender -rwxr-xr-x 1 root root 249676 10月 28 14:18 /usr/bin/fdfs_upload_file [root@server1 FastDFS]# 

配置文件在 /etc/fdfs 目錄下

[root@server1 FastDFS]# ll /etc/fdfs/ 總用量 20 -rw-r--r-- 1 root root 1461 10月 28 14:18 client.conf.sample -rw-r--r-- 1 root root 7647 10月 28 14:18 storage.conf.sample -rw-r--r-- 1 root root 7102 10月 28 14:18 tracker.conf.sample [root@server1 FastDFS]# 

2.配置

進入到 /etc/fdfs 目錄下,複製/usr/local/src/FastDFS/conf/* 下面的全部文件到當前目錄下(/etc/fdfs)

[root@server1 FastDFS]# cd /etc/fdfs/ [root@server1 fdfs]# cp /usr/local/src/FastDFS/conf/* . [root@server1 fdfs]# ll 總用量 64 -rw-r--r-- 1 root root 1461 10月 29 14:33 client.conf -rw-r--r-- 1 root root 858 10月 29 14:33 http.conf -rw-r--r-- 1 root root 31172 10月 29 14:33 mime.types -rw-r--r-- 1 root root 3697 10月 29 14:34 mod_fastdfs.conf -rw-r--r-- 1 root root 7646 10月 28 14:34 storage.conf -rw-r--r-- 1 root root 105 10月 29 14:33 storage_ids.conf -rw-r--r-- 1 root root 7102 10月 29 14:33 tracker.conf [root@server1 fdfs]# 

編輯配置文件 storage.conf 測試的時候,只需修改如下內容便可

[root@server1 fdfs]# vim storage.conf disabled=false #啓用配置文件 group_name=group1 #組名,根據實際狀況修改 port=23000 #設置 storage 的端口號 base_path=/data/fastdfs/storage #設置 storage 的日誌目錄(需預先建立) store_path_count=1 #存儲路徑個數,須要和 store_path 個數匹配 store_path0=/data/fastdfs/storage #存儲路徑 tracker_server=10.10.10.124:22122 #tracker 服務器的 IP 地址和端口號 http.server_port=8080 #設置storage上啓動的http服務的端口號,如安裝的nginx的端口號 

3.運行

[root@server1 fdfs]# fdfs_storaged /etc/fdfs/storage.conf restart 

查看端口是否起來

[root@server1 fdfs]# netstat -antp | grep storage tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN 10316/fdfs_storaged [root@server1 fdfs]# 

觀察日誌 /data/fastdfs/storage/logs/storaged.log 看運行狀況

mkdir data path: FB ... mkdir data path: FC ... mkdir data path: FD ... mkdir data path: FE ... mkdir data path: FF ... data path: /data/fastdfs/storage/data, mkdir sub dir done. [2014-10-28 14:42:55] 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 [2014-10-28 14:42:55] INFO - file: storage_func.c, line: 175, tracker_client_ip: 10.10.10.120, my_server_id_str: 10.10.10.120, g_server_id_in_filename: 2013923850 [2014-10-28 14:42:55] INFO - local_host_ip_count: 2, 127.0.0.1 10.10.10.120 [2014-10-28 14:42:55] INFO - file: tracker_client_thread.c, line: 310, successfully connect to tracker server 10.10.10.124:22122, as a tracker client, my ip is 10.10.10.120 [2014-10-28 14:43:25] INFO - file: tracker_client_thread.c, line: 1235, tracker server 10.10.10.124:22122, set tracker leader: 10.10.10.124:22122 

看到先建立二級目錄,而後已經成功鏈接到tracker

可使用 fdfs_monitor 來查看一下storage的狀態,看是否已經成功註冊到了tracker

[root@server2 logs]# fdfs_monitor /etc/fdfs/storage.conf 

也能夠如下命令來監控服務器的狀態

[root@tracker ~]# fdfs_monitor /etc/fdfs/client.conf 

結果以下:

[2014-10-28 15:57:54] DEBUG - base_path=/data/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 10.10.10.124:22122
group count: 1
Group 1:
group name = group1
disk total space = 14020 MB
disk free space = 10267 MB
trunk free space = 0 MB
storage server count = 2
active server count = 2
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 = 10.10.10.120   ip_addr = 10.10.10.120 ACTIVE   http domain =   version = 5.04   join time = 2014-10-28 14:42:43   up time = 2014-10-28 14:42:43   total storage = 14020 MB   free storage = 10385 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 = 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 = 2014-10-28 15:56:42   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 = 10.10.10.122   ip_addr = 10.10.10.122 (shizhouliang.mobimtech.local) ACTIVE   http domain =   version = 5.04   join time = 2014-10-28 15:53:51   up time = 2014-10-28 15:53:51   total storage = 14020 MB   free storage = 10267 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 = 10.10.10.120   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 = 2014-10-28 15:56:53   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 

看到ACTIVE,就說明已經成功註冊到了tracker。

4.設置開機啓動

[root@server1 fdfs]# echo "/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart" >> /etc/rc.local [root@server1 fdfs]# cat /etc/rc.local #!/bin/sh # # This script will be executed *after* all the other init scripts. # You can put your own initialization stuff in here if you don't # want to do the full Sys V style init stuff. touch /var/lock/subsys/local /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart 

至此 storage 已經成功安裝,再把另一臺服務器也一樣的步驟進行安裝。

等第二臺storage2(10.10.10.122)安裝完成併成功啓動後,看日誌會發現

[2014-10-28 15:54:05] INFO - file: storage_sync.c, line: 2698, successfully connect to storage server 10.10.10.120:23000 

說明已經成功鏈接到另一臺storage了。

也可使用

[root@server2 logs]# fdfs_monitor /etc/fdfs/storage.conf 

來查看一下storage2的狀態

4、在storage上安裝配置nginx

如下操做是在 storage1 10.10.10.120 上操做

1.安裝nginx

上傳 fastdfs-nginx-module_v1.16.tar.gz nginx-1.4.7.tar.gz pcre-8.36.tar.gz zlib-1.2.8.tar.gz 到storage服務器上的/usr/local/src 目錄下

[root@server1 src]# rz rz waiting to receive. Starting zmodem transfer. Press Ctrl+C to cancel. Transferring fastdfs-nginx-module_v1.16.tar.gz... 100% 17 KB 17 KB/sec 00:00:01 0 Errors Transferring nginx-1.4.7.tar.gz... 100% 751 KB 751 KB/sec 00:00:01 0 Errors Transferring pcre-8.36.tar.gz... 100% 1962 KB 1962 KB/sec 00:00:01 0 Errors Transferring zlib-1.2.8.tar.gz... 100% 557 KB 557 KB/sec 00:00:01 0 Errors 

解壓各個文件,而後編譯安裝nginx

[root@server1 src]# tar xf nginx-1.4.7.tar.gz [root@server1 src]# tar xf pcre-8.36.tar.gz [root@server1 src]# tar xf zlib-1.2.8.tar.gz [root@server1 src]# tar xf fastdfs-nginx-module_v1.16.tar.gz [root@server1 src]# cd nginx-1.4.7 [root@server1 nginx-1.4.7]# ls auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src [root@server1 nginx-1.4.7]# ./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/fastdfs-nginx-module/src --with-pcre=/usr/local/src/pcre-8.36 --with-zlib=/usr/local/src/zlib-1.2.8 

出現如下錯誤:

cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I /usr/local/include/fastdfs -I /usr/local/include/fastcommon/ -I /usr/local/src/pcre-8.36 -I /usr/local/src/zlib-1.2.8 -I objs -I src/http -I src/http/modules -I src/mail \  -o objs/addon/src/ngx_http_fastdfs_module.o \  /usr/local/src/fastdfs-nginx-module/src/ngx_http_fastdfs_module.c 在包含自 /usr/local/src/fastdfs-nginx-module/src/ngx_http_fastdfs_module.c:6 的文件中: /usr/local/src/fastdfs-nginx-module/src/common.c:21:25: 錯誤:fdfs_define.h:沒有那個文件或目錄 /usr/local/src/fastdfs-nginx-module/src/common.c:22:20: 錯誤:logger.h:沒有那個文件或目錄 /usr/local/src/fastdfs-nginx-module/src/common.c:23:25: 錯誤:shared_func.h:沒有那個文件或目錄 /usr/local/src/fastdfs-nginx-module/src/common.c:24:25: 錯誤:fdfs_global.h:沒有那個文件或目錄 /usr/local/src/fastdfs-nginx-module/src/common.c:25:21: 錯誤:sockopt.h:沒有那個文件或目錄 /usr/local/src/fastdfs-nginx-module/src/common.c:26:23: 錯誤:http_func.h:沒有那個文件或目錄 /usr/local/src/fastdfs-nginx-module/src/common.c:27:30: 錯誤:fdfs_http_shared.h:沒有那個文件或目錄 /usr/local/src/fastdfs-nginx-module/src/common.c:28:25: 錯誤:fdfs_client.h:沒有那個文件或目錄 /usr/local/src/fastdfs-nginx-module/src/common.c:29:27: 錯誤:local_ip_func.h:沒有那個文件或目錄 /usr/local/src/fastdfs-nginx-module/src/common.c:30:30: 錯誤:fdfs_shared_func.h:沒有那個文件或目錄 /usr/local/src/fastdfs-nginx-module/src/common.c:31:26: 錯誤:trunk_shared.h:沒有那個文件或目錄 

以上的這個錯誤是因爲沒找到 頭文件致使的,找了找緣由,在編譯fastdf模塊的時候會找這個地方/usr/local/include尋找fastdfs主程序的fastcommon和fastdfs這2個目錄下的頭文件,可是在編譯安裝的fastdfs主程序的時候,卻把這2個目錄放到了/usr/include下面了,因而複製這2個目錄到/usr/local/include下

[root@server1 src]# cp -rf /usr/include/fast* /usr/local/include/ [root@server1 src]# ls /usr/local/include/ fastcommon fastdfs [root@server1 src]# 

因而再次編譯

[root@server1 src]# cd nginx-1.4.7 [root@server1 nginx-1.4.7]# ./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/fastdfs-nginx-module/src --with-pcre=/usr/local/src/pcre-8.36 --with-zlib=/usr/local/src/zlib-1.2.8 [root@server1 nginx-1.4.7]# make && make install 

此次終於編譯安裝經過。

2.準備啓動腳本

編輯 /etc/init.d/nginx,以下內容:

#!/bin/bash # nginx Startup script for the Nginx HTTP Server # it is v.1.4.7 version. # chkconfig: - 85 15 # description: Nginx is a high-performance web and proxy server. # It has a lot of features, but it's not for everyone. # processname: nginx # pidfile: /usr/local/nginx/logs/nginx.pid # config: /usr/local/nginx/conf/nginx.conf nginxd=/usr/local/nginx/sbin/nginx nginx_config=/usr/local/nginx/conf/nginx.conf nginx_pid=/usr/local/nginx/logs/nginx.pid nginx_lock=/var/lock/subsys/nginx RETVAL=0 prog="nginx" # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 0 [ -x $nginxd ] || exit 0 # Start nginx daemons functions. start() {  nginx_is_run=`ps -ef | egrep 'nginx:\s*(worker|master)\s*process' | wc -l`  if [ ${nginx_is_run} -gt 0 ];then   echo "nginx already running...."   exit 1  fi  echo -n $"Starting $prog: "  daemon $nginxd -c ${nginx_config}  RETVAL=$?  echo  [ $RETVAL = 0 ] && touch ${nginx_lock}  return $RETVAL } # Stop nginx daemons functions. stop() {  echo -n $"Stopping $prog: "  killproc $nginxd  RETVAL=$?  echo  [ $RETVAL = 0 ] && rm -f ${nginx_lock} ${nginx_pid} } # Reload nginx config file reload() {  echo -n $"Reloading $prog: "  #kill -HUP `cat ${nginx_pid}`  killproc $nginxd -HUP  RETVAL=$?  echo } # See how we were called. case "$1" in  start)   start   ;;  stop)   stop   ;;  reload)   reload   ;;  restart)   stop   start   ;;  status)   status $prog   RETVAL=$?   ;;  *)   echo $"Usage: $prog {start|stop|restart|reload|status|help}"   exit 1 esac 

3.將 FastDFS 的 nginx 插件模塊的配置文件

copy 到 FastDFS 配置文件目錄

[root@server1 src]# cp fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/ 

4.修改nginx配置文件

① 修改nginx的監聽端口

將 server 段中的 listen 端口號改成 8080:

[root@server1 nginx]# vim /usr/local/nginx/conf/nginx.conf listen 8080; 

② 在 server 段中添加fastdfs的配置

這裏的group[1-3] 能夠匹配 group1,group2,group3,固然group也能夠是其餘的名字

location ~ /group[1-3]/M00 { root /data/fastdfs/storage/data; ngx_fastdfs_module; } 

/data/fastdfs/storage/data 這個是指向 真正存儲文件的地方,該目錄下有這些個二級目錄

[root@server1 src]# cd /data/fastdfs/storage/data/ [root@server1 data]# ll 總用量 1036 drwxr-xr-x 258 root root 4096 10月 28 14:42 00 drwxr-xr-x 258 root root 4096 10月 28 14:42 01 drwxr-xr-x 258 root root 4096 10月 28 14:42 02 drwxr-xr-x 258 root root 4096 10月 28 14:42 03 drwxr-xr-x 258 root root 4096 10月 28 14:42 04 drwxr-xr-x 258 root root 4096 10月 28 14:42 05 drwxr-xr-x 258 root root 4096 10月 28 14:42 06 drwxr-xr-x 258 root root 4096 10月 28 14:42 07 drwxr-xr-x 258 root root 4096 10月 28 14:42 08 drwxr-xr-x 258 root root 4096 10月 28 14:42 09 drwxr-xr-x 258 root root 4096 10月 28 14:42 0A drwxr-xr-x 258 root root 4096 10月 28 14:42 0B drwxr-xr-x 258 root root 4096 10月 28 14:42 0C drwxr-xr-x 258 root root 4096 10月 28 14:42 0D drwxr-xr-x 258 root root 4096 10月 28 14:42 0E drwxr-xr-x 258 root root 4096 10月 28 14:42 0F drwxr-xr-x 258 root root 4096 10月 28 14:42 10 

5.修改 fastdfs的nginx模塊的配置文件 mod_fastdfs.conf

通常只需改動如下幾個參數便可:

base_path=/data/fastdfs/storage      #保存日誌目錄 tracker_server=10.10.10.124: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=/data/fastdfs/storage #存儲路徑 http.need_find_content_type=true # 從文件 擴展 名查 找 文件 類型 ( nginx 時 爲true) group_count = 1 #設置組的個數 

而後在末尾添加分組信息,目前只有一個分組,就只寫一個

[group1] group_name=group1 storage_server_port=23000 store_path_count=1 store_path0=/data/fastdfs/storage 

6.創建 M00 至存儲目錄的符號鏈接

[root@server1 fdfs]# ln -s /data/fastdfs/storage/data /data/fastdfs/storage/data/M00 [root@server1 fdfs]# ll /data/fastdfs/storage/data/M00 lrwxrwxrwx 1 root root 26 10月 29 11:22 /data/fastdfs/storage/data/M00 -> /data/fastdfs/storage/data 

至此nginx和FastDFS 插件模塊設置完成

7.啓動nginx

[root@server1 nginx]# chmod u+x /etc/init.d/nginx [root@server1 nginx]# chkconfig --add nginx [root@server1 nginx]# chkconfig nginx on [root@server1 nginx]# service nginx start 正在啓動 nginx: [肯定] [root@server1 nginx]# service nginx status nginx (pid 26500) 正在運行... 

查看nginx的日誌 錯誤日誌logs/error.log 看是否有問題

[2014-10-29 14:35:29] INFO - local_host_ip_count: 2, 127.0.0.1 10.10.10.120 [2014-10-29 14:35:29] INFO - fastdfs apache / nginx module v1.15, response_mode=proxy, base_path=/tmp, url_have_group_name=1, group_count=1, connect_timeout=2, network_timeout=30, tracker_server_count=1, if_alias_prefix=, local_host_ip_count=2, anti_steal_token=0, token_ttl=0s, anti_steal_secret_key length=0, token_check_fail content_type=, token_check_fail buff length=0, load_fdfs_parameters_from_tracker=1, storage_sync_file_max_delay=86400s, use_storage_id=0, storage server id count=0, flv_support=1, flv_extension=flv [2014-10-29 14:35:29] INFO - group 1. group_name=group1, storage_server_port=23000, path_count=1, store_path0=/data/fastdfs/storage 

也能夠訪問 http://10.10.10.120:8080

看到沒什麼錯誤,至此在storage1上安裝配置nginx結束。

再在storage2上以相同的步驟來安裝nginx。

5、安裝nginx反向代理及緩存服務器

如下操做在 10.10.10.123 上操做

1.安裝nginx

將所需的軟件包上傳至服務器/usr/local/src下

[root@fastdfs-nginx ~]# cd /usr/local/src/ [root@fastdfs-nginx src]# ls [root@fastdfs-nginx src]# rz rz waiting to receive. Starting zmodem transfer. Press Ctrl+C to cancel. Transferring nginx-1.4.7.tar.gz... 100% 751 KB 751 KB/sec 00:00:01 0 Errors Transferring ngx_cache_purge-2.1.tar.gz... 100% 10 KB 10 KB/sec 00:00:01 0 Errors Transferring pcre-8.36.tar.gz... 100% 1962 KB 1962 KB/sec 00:00:01 0 Errors Transferring zlib-1.2.8.tar.gz... 100% 557 KB 557 KB/sec 00:00:01 0 Errors 

解壓各個軟件包

[root@fastdfs-nginx src]# tar xf nginx-1.4.7.tar.gz [root@fastdfs-nginx src]# tar xf ngx_cache_purge-2.1.tar.gz [root@fastdfs-nginx src]# tar xf pcre-8.36.tar.gz [root@fastdfs-nginx src]# tar xf zlib-1.2.8.tar.gz [root@fastdfs-nginx src]# cd nginx-1.4.7 

編譯安裝nginx

[root@fastdfs-nginx nginx-1.4.7]# ./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/ngx_cache_purge-2.1 --with-pcre=/usr/local/src/pcre-8.36/ --with-zlib=/usr/local/src/zlib-1.2.8 checking for OS + Linux 2.6.32-431.el6.x86_64 x86_64 checking for C compiler ... found + using GNU C compiler + gcc version: 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) checking for gcc -pipe switch ... found checking for gcc builtin atomic operations ... found checking for C99 variadic macros ... found checking for gcc variadic macros ... found checking for unistd.h ... found checking for inttypes.h ... found ... Configuration summary + using PCRE library: /usr/local/src/pcre-8.36/ + OpenSSL library is not used + md5: using system crypto library + sha1: using system crypto library + using zlib library: /usr/local/src/zlib-1.2.8 nginx path prefix: "/usr/local/nginx" nginx binary file: "/usr/local/nginx/sbin/nginx" nginx configuration prefix: "/usr/local/nginx/conf" nginx configuration file: "/usr/local/nginx/conf/nginx.conf" nginx pid file: "/usr/local/nginx/logs/nginx.pid" nginx error log file: "/usr/local/nginx/logs/error.log" nginx http access log file: "/usr/local/nginx/logs/access.log" nginx http client request body temporary files: "client_body_temp" nginx http proxy temporary files: "proxy_temp" nginx http fastcgi temporary files: "fastcgi_temp" nginx http uwsgi temporary files: "uwsgi_temp" nginx http scgi temporary files: "scgi_temp" [root@fastdfs-nginx nginx-1.4.7]# make && make install 

至此 nginx 以及 nginx cache purge 插件模塊安裝完成。

2.配置

準備nginx的啓動腳本,內容同上面的storage安裝時的腳本,並加入到系統的服務,開機啓動

建立nginx的緩存目錄

[root@fastdfs-nginx nginx]# mkdir -pv /var/cache/nginx/proxy_cache/tmp mkdir: 已建立目錄 "/var/cache/nginx" mkdir: 已建立目錄 "/var/cache/nginx/proxy_cache" mkdir: 已建立目錄 "/var/cache/nginx/proxy_cache/tmp" 

增長系統打開文件數的限制

[root@fastdfs-nginx nginx]# ulimit -SHn 102400 [root@fastdfs-nginx nginx]# echo "ulimit -SHn 102400" >> /etc/rc.local 

編輯 vim /usr/local/nginx/conf/nginx.conf 文件修改如下內容:

user  nobody;
worker_processes  1; error_log logs/error.log info; pid logs/nginx.pid; events {  worker_connections 65535;  use epoll; } http {  include mime.types;  default_type application/octet-stream;  sendfile on;  tcp_nopush on;  keepalive_timeout 65;  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 /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;  #設置 group1 的服務器  upstream fdfs_group1 {   server 10.10.10.120:8080 weight=1 max_fails=2 fail_timeout=30s;   server 10.10.10.122:8080 weight=1 max_fails=2 fail_timeout=30s;  }  log_format main '$remote_addr - $remote_user [$time_local] "$request" '      '$status $body_bytes_sent "$http_referer" '      '"$http_user_agent" "$http_x_forwarded_for"';  server {   listen 80;   server_name localhost;   access_log logs/host.access.log main;  #設置 group1 的反向代理參數  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 10.10.10.0/24;   deny all;   proxy_cache_purge http-cache $1$is_args$args;  }  } } 

使用 /usr/local/nginx/sbin/nginx -t 來測試配置文件語法的正確性

[root@fastdfs-nginx nginx]# ./sbin/nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful 

3.啓動nginx

[root@fastdfs-nginx nginx]# service nginx start 正在啓動 nginx: [肯定] 

查看監聽的端口

[root@fastdfs-nginx conf]# netstat -antp | grep nginx tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 20526/nginx [root@fastdfs-nginx conf]# 

6、測試上傳文件

如下操做在tracker服務器(10.10.10.124)上進行

1.建立client 使用的日誌目錄

[root@tracker tracker]# mkdir -pv /data/fastdfs/client mkdir: 已建立目錄 "/data/fastdfs/client" 

2. 修改客戶端的配置文件/etc/fdfs/client.conf

修改如下參數便可:

base_path=/data/fastdfs/client #日誌存放路徑 tracker_server=10.10.10.124:22122 #tracker 服務器 IP 地址和端口號 http.tracker_server_port=8080 #tracker 服務器的 http 端口號 ,這一項感受沒什麼用處,tracker都沒有啓用http服務 

3.上傳一個圖片

[root@tracker ~]# fdfs_upload_file /etc/fdfs/client.conf 1.jpg group1/M00/00/00/CgoKeFRQqaaASsgNAAEgRqu1UiU712.jpg [root@tracker ~]# 

獲得了一個如上的一個地址 group1/M00/00/00/CgoKeFRQqaaASsgNAAEgRqu1UiU712.jpg

可使用fdfs_file_info 來查看上傳文件的信息

[root@tracker ~]# fdfs_file_info /etc/fdfs/client.conf group1/M00/00/00/CgoKeFRQqaaASsgNAAEgRqu1UiU712.jpg
source storage id: 0
source ip address: 10.10.10.120
file create timestamp: 2014-10-29 16:47:34 file size: 73798 file crc32: 2880786981 (0xABB55225) 

這個信息裏面能夠看到 這個文件上傳的時候 首先上傳到了10.10.10.120這臺服務器,文件的建立時間、文件的大小

4.使用瀏覽器訪問一下該地址

完整的URL是這樣的http://10.10.10.123/group1/M00/00/00/CgoKeFRQqaaASsgNAAEgRqu1UiU712.jpg

10.10.10.123 就是nginx反向代理緩存服務器

成功訪問到圖片

查看一下nginx的訪問日誌,能夠看到狀態碼是 200OK.

[root@fastdfs-nginx ~]# tail -1 /usr/local/nginx/logs/host.access.log 10.10.10.46 - - [29/Oct/2014:16:48:43 +0800] "GET /group1/M00/00/00/CgoKeFRQqaaASsgNAAEgRqu1UiU712.jpg HTTP/1.1" 200 73798 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36" "-" [root@fastdfs-nginx ~]# 

查看nginx的緩存目錄,看是否已經緩存成功

[root@fastdfs-nginx ~]# ll -R /var/cache/nginx/proxy_cache/ /var/cache/nginx/proxy_cache/: 總用量 8 drwx------. 3 nobody nobody 4096 10月 29 16:47 e drwxr-xr-x. 2 nobody root 4096 10月 29 16:47 tmp /var/cache/nginx/proxy_cache/e: 總用量 4 drwx------. 2 nobody nobody 4096 10月 29 16:47 a8 /var/cache/nginx/proxy_cache/e/a8: 總用量 76 -rw-------. 1 nobody nobody 74110 10月 29 16:47 54408edb44f74ab4da965506f54a6a8e 在此已經緩存成功 /var/cache/nginx/proxy_cache/tmp: 總用量 0 [root@fastdfs-nginx ~]# 

5. 清除緩存

若要清除該圖片的緩存,能夠在文件 URL 以前加上 purge 便可,以下圖

http://10.10.10.123/purge/group1/M00/00/00/CgoKeFRQqaaASsgNAAEgRqu1UiU712.jpg

6. 配置瀏覽器端查看是否命中緩存

可使用Chrome瀏覽器的開發工具,查看響應的頭部信息來查看是否命中緩存,要啓用此功能,修改nginx的主配置文件以下:

在location /group1/M00 段增長這2個行

add_header  X-Via  $server_addr; add_header X-Cache-Status $upstream_cache_status; 

最終效果

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;  add_header X-Via $server_addr;  add_header X-Cache-Status $upstream_cache_status; } 

重啓nginx

[root@fastdfs-nginx ~]# service nginx restart 中止 nginx: [肯定] 正在啓動 nginx: [肯定] [root@fastdfs-nginx ~]# 

清空chrome瀏覽器的緩存,清除那張圖片在nginx中的緩存

第一次訪問

顯示MISS,表明緩存中沒有

第二次 ctrl+F5 強制刷新訪問

已經顯示HIT,表明已經命中緩存

至此 FastDFS + nginx 反向代理緩存搭建完畢。

7、優化部分

一、Tracker優化

1)    max_connections=10000或更大響應參數增大內存消耗增長該參數需修改單一進程同時可打開文件數量(* soft nofile 65536 * hard nofile 65536)的限制後生效。
2)    work_threads=12 cpu數量此處設置cpu核心數量
3)    thread_stack_size=256
測試配置以下
work_threads=12
    thread_stack_size=256
    max_connections=65535

二、Storage優化

work_threads= work_threads + 1 + (disk_reader_threads + disk_writer_threads) * store_path_count= 15

disk_rw_separated:磁盤讀寫是否分離
disk_reader_threads:單個磁盤讀線程數
disk_writer_threads:單個磁盤寫線程數
若是磁盤讀寫混合,單個磁盤讀寫線程數爲讀線程數和寫線程數以後
對於單盤掛載方式,磁盤讀寫線程分別設置爲1便可
若是磁盤作了RAID,那麼須要酌情加大讀寫線程數,這樣才能最大程度地發揮磁盤性能
buff_size=512增大提高磁盤IO的另一個技巧,一次儘量多寫入或多讀取。也就是說,將程序的讀寫buffer設置得儘量大一些。例如日誌或者redo log的寫入,不是每次調用都直接寫磁盤,而是先緩存到內存中,等buffer滿了再寫入磁盤,也能夠定時寫入磁盤。 測試配置以下 
thread_stack_size=512KB  
 disk_reader_threads = 4  disk_writer_threads = 4  buff_size=512  max_connections=65535  accept_threads=10  work_threads=16a 

以上配置壓力測試上傳併發2w 事務平均響應時間0.46秒,4w事務平均響應時間2.2秒。

8、FastDFS使用流程

1.上傳文件

FastDFS 提供了多種方式上傳文件:

使用 fdfs_upload_file 上傳
使用 C 語言客戶端接口上傳
使用 PHP 客戶端接口上傳
使用 Java 客戶端接口上傳
使用 Python 客戶端接口上傳
使用.NET 客戶端接口上傳

根據具體狀況選擇使用。上傳均支持斷點續傳。

若是Java的客戶端,在API的配置文件中配置 tracker服務器,若是有多個tracker服務器,就配置多臺

WEB-INF/classes/fdfs_client.conf

connect_timeout = 2
network_timeout = 30
charset = UTF-8 http.tracker_http_port = 8080 http.anti_steal_token = no http.secret_key = FastDFS1234567890 tracker_server =192.168.10.27:22122 tracker_server = 192.168.10.28:22122 

2.下載文件

使用 fdfs_download_file 經過 tracker 服務器下載
使用 nginx 經過 http 方式直接從 storage 下載(支持斷點續傳,做者推薦)

3.監視服務器資源

使用 fdfs_monitor 查看 tracker 和全部 group 的運行狀況

[root@tracker ~]# fdfs_monitor /etc/fdfs/client.conf [2014-10-31 14:09:20] DEBUG - base_path=/data/fastdfs/client, 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 10.10.10.124:22122 group count: 1 Group 1: group name = group1 disk total space = 14020 MB disk free space = 10224 MB trunk free space = 0 MB storage server count = 2 active server count = 2 storage server port = 23000 storage HTTP port = 8080 store path count = 1 subdir count per path = 256 current write server index = 1 current trunk file id = 0 Storage 1:  id = 10.10.10.120  ip_addr = 10.10.10.120 ACTIVE  http domain =  version = 5.04  join time = 2014-10-28 14:42:43  up time = 2014-10-29 14:14:44  total storage = 14020 MB .... Storage 2:  id = 10.10.10.122  ip_addr = 10.10.10.122 ACTIVE  http domain =  version = 5.04  join time = 2014-10-28 15:53:51  up time = 2014-10-28 15:53:51  total storage = 14020 MB .... 
相關文章
相關標籤/搜索