FastDFS安裝部署(兩台服務器)


一、FastDFS架構

FastDFS包括Tracker serverStorage server, 客戶端請求Tracker server進行文件上傳、下載,通過Tracker server調度最終由Storage server完成文件上傳和下載。 Tracker server 的角色類似於dubboregistrymoniter、並不直接提供服務、而是storage server啟動時注冊到tracker server, client通過tracker server連接storage server, client不知道自己連接的是哪一台storage server, 連接完成后、上傳和下載是client直接請求storage server, 可類比於 dubbo consumer通過registry連接dubbo service 但、連接完成之后是consumerservice直接通信

 
fastdfs.jpg
文件上傳流程
 
文件上傳流程.png
文件下載流程
 
文件下載流程.png

1.Tracker Server

Tracker server作用是負載均衡和調度,通過Tracker server在文件上傳時可以根據一些策略找到Storage server提供文件上傳服務,可以將tracker稱為追蹤服務器或調度服務器

1.Storage Server

Storage server作用是文件存儲,客戶端上傳的文件最終存儲在Storage服務器上,Storage server沒有實現自己的文件系統而是利用操作系統的文件系統來管理文件。可以將storage稱為存儲服務器。

二、FastDFS安裝

1.安裝libfastcommon(tracker和storage兩台服務器都執行)

1. 下載:
wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz
2. 修改名字:mv V1.0.7 libfastcommon-1.0.7.tar.gz
3. 解壓:tar zxvf libfastcommon-1.0.7.tar.gz
4. cd libfastcommon-1.0.7/
5. 編譯:./make.sh
6. 安裝:./make.sh install

另外:
設置幾個軟鏈接、方便后續擴展nginx時使用:
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

2. 安裝 tracker和storage(tracker和storage兩台服務器都執行)

1. 下載:
wget https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz
2. 修改名字:mv V5.05 FastDFS_v5.05.tar.gz
3. 解壓:tar zxvf FastDFS_v5.05.tar.gz
4. 進入解壓后目錄:cd fastdfs-5.05/
5. 編譯:./make.sh
6. 安裝:./make.sh install

3. 修改tracker配置文件(tracker服務器執行)

2安裝完成后、在/etd/fdfs下有tracker的配置文件
復制一份:cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
mkdir -p /usr/local/fastdfs/tracker  (此處可以根據自己的情況和習慣存放)
base_path= /usr/local/fastdfs/tracker

啟動 tracker 服務:/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
重啟 tracker 服務:/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
查看是否有 tracker 進程:ps aux | grep tracker

4. storage(存儲節點)服務部署(storage服務器執行)

一般 storage 服務我們會單獨部署到一台服務器上,但是這里為了方便(~~我只有一台服務器~~)就安裝在同一台上了

如果單獨部署到一台服務器上、上邊tracker的部署步驟重新來一遍即可(第三步不用執行)
這里是同一台server、只修改配置~~

復制一份配置:cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
編輯:vim /etc/fdfs/storage.conf
base_path= /usr/local/fastdfs/

創建目錄:mkdir  /usr/local/fastdfs/storage/images-data
store_path0= /usr/local/fastdfs/storage/images-data

圖片實際存放路徑,如果有多個,這里可以有多行(要創建多個目錄):
store_path0=/opt/fastdfs/storage/images-data0
store_path1=/opt/fastdfs/storage/images-data1

subdir_count_per_path=256 
是用來配置目錄個數的、如果只是練習不做實際存儲服務、可改小一點兒

指定 tracker 服務器的 IP 和端口
tracker_server=192.168.1.114:22122 (192.168.1.114)是你的server服務器ip、本機也可以使用(0.0.0.0:22122)、記得不可使用127.0.0.1

5. 測試服務(storage服務器執行)

啟動 storage 服務:/usr/bin/fdfs_storaged /etc/fdfs/storage.conf,首次啟動會很慢,因為它在創建預設存儲文件的目錄
重啟 storage 服務:/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
查看是否有 storage 進程:ps aux | grep storage

6. 查看tracker是否可以正常與storage通信(storage服務器執行)

fdfs_monitor /etc/fdfs/storage.conf
...
Storage 1:
        id = 192.168.2.231
        ip_addr = 192.168.2.231  ACTIVE --若看到ACTIVE這個字樣、代表可以正常通信
...
查看storage和tracker是否正常啟動:
ps aux | grep fdfs

7. 使用fdfs_client測試(tracker服務器執行)

 

 

復制一份配置:cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
編輯:vim /etc/fdfs/client.conf

base_path= /usr/local/fastdfs/

指定 tracker 服務器的 IP 和端口
tracker_server=192.168.1.114:22122
log_level=info

echo asasasa > ~/test.txt

測試:fdfs_test /etc/fdfs/client.conf upload ~/test.txt 
可以看到如下圖所示、就是上傳成功了

 

 

 

 

 

 

8. 安裝Nginx和其插件(storage服務器執行)

如果Nginx已經安裝過,則僅需要fastdfs-nginx-module_v1.16.tar.gz
下載nginx:wget http://nginx.org/download/nginx-1.11.8.tar.gz
下載Nginx插件:wget http://jaist.dl.sourceforge.NET/project/fastdfs/FastDFS%20Nginx%20Module%20Source%20Code/fastdfs-nginx-module_v1.16.tar.gz
解壓 Nginx 模塊:tar zxvf fastdfs-nginx-module_v1.16.tar.gz
進入解壓后的目錄 
cd fastdfs-nginx-module
vim src/config
修改:去掉local、因為實際安裝fastdfs時、是放到了/usr/include下
1. CORE_INCS="$CORE_INCS /usr/local/include/fastdfs /usr/local/include/fastcommon/"
-> CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

2.  CORE_LIBS="$CORE_LIBS -L/usr/local/lib -lfastcommon -lfdfsclient"
-> CORE_LIBS="$CORE_LIBS -L/usr/lib -lfastcommon -lfdfsclient"

回到nginx的解壓目錄
cd ../nginx-1.11.8

./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--add-module=/usr/local/fastdfs-nginx-module/src



 make  &&   make install

9. 整合fastdfs-nginx-module和nginx(storage服務器執行)

copy fastdfs-nginx-module的配置文件到 /etc/fdfs下、方便查找
cp /home/nj/build/fastdfs-nginx-module/src/mod_fdfs.conf /etc/fdfs
vi /etc/fdfs/mod_fdfs.conf

base_path=/usr/local/fastdfs
tracker_server=192.168.1.114:22122
url_have_group_name = true
store_path0=/usr/local/fastdfs/storage

10. 然后配置Nginx,添加如下內容(storage服務器執行)

vim /usr/local/nginx/conf/nginx.conf

如下

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

pid       /usr/local/nginx/logs/nginx.pid;


events {
    worker_connections  1024;
}


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 {
            listen       80;
            server_name  192.xxx.xxx.xxx.xxx; #storage服務器的ip
            location ~/group[0-9]/ {
                    root    /usr/local/fastdfs/storage;
         ngx_fastdfs_module;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
            root   html;
            }
        }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

 

用瀏覽器訪問剛才步驟7中測試上傳的文件:

http://xxxx/group1/M00/00/00/fwAAAVu0UTSAZiNHAAAACE6c2W4921_big.txt

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM