詳細說明-CentOS7部署FastDFS+nginx模塊(包含集羣方式)

軟件下載

# 已經事先把所需軟件下載好並上傳到/usr/local/src目錄了
https://github.com/happyfish100/libfastcommon/archive/V1.0.43.tar.gz
https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.22.tar.gz
https://github.com/happyfish100/fastdfs/archive/V6.06.tar.gz
https://github.com/happyfish100/fastdfs-client-java/archive/V1.28.tar.gz
https://openresty.org/download/openresty-1.15.8.3.tar.gz

基礎環境設置

安裝依賴組件

yum -y install  gcc gcc-c++ libevent
yum -y groupinstall 'Development Tools'

安裝libfastcommon

cd /usr/local/src
tar -zxvf libfastcommon-1.0.43.tar.gz
cd libfastcommon-1.0.43
./make.sh
./make.sh install

# 檢查文件是否存在,確保在/usr/lib路徑下有libfastcommon.so,沒有的話建立超連接或者複製一份
ll /usr/lib | grep "libf"
lrwxrwxrwx   1 root root     27 Apr  2 10:07 libfastcommon.so -> /usr/lib64/libfastcommon.so

安裝fastdfs

cd /usr/local/src
tar -zxvf fastdfs-6.06.tar.gz
cd fastdfs-6.06
./make.sh
./make.sh install

# FastDFS的配置文件默認安裝到/etc/fdfs目錄下

# 安裝成功後將fastdfs-6.06/conf下的倆文件拷貝到/etc/fdfs/下
cd conf
cp http.conf mime.types /etc/fdfs/
cd /etc/fdfs/
[root@bogon fdfs]# ll
total 68
-rw-r--r-- 1 root root  1909 Apr  2 10:15 client.conf.sample
-rw-r--r-- 1 root root   965 Apr  2 10:16 http.conf
-rw-r--r-- 1 root root 31172 Apr  2 10:16 mime.types
-rw-r--r-- 1 root root 10246 Apr  2 10:15 storage.conf.sample
-rw-r--r-- 1 root root   620 Apr  2 10:15 storage_ids.conf.sample
-rw-r--r-- 1 root root  9138 Apr  2 10:15 tracker.conf.sample

fdfs_trackerd配置並啓動

# 建立tracker工做目錄,storage存儲目錄(選擇大磁盤空間)等
mkdir -p /opt/{fdfs_tracker,fdfs_storage,fdfs_storage_data}

cd /etc/fdfs/
cp tracker.conf.sample tracker.conf
vim tracker.conf
    disabled = false # 配置tracker.conf這個配置文件是否生效,由於在啓動fastdfs服務端進程時須要指定配置文件,因此須要使次配置文件生效。false是生效,true是屏蔽。
    bind_addr = # 程序的監聽地址,若是不設定則監聽全部地址,能夠設置本地ip地址,注意,不能設置爲127.0.0.1,不然storage註冊時會報錯:ERROR - file: storage_func.c, line: 1361, conf file "/etc/fdfs/storage.conf", tracker: "127.0.0.1:22122" is invalid, tracker server ip can't be 127.0.0.1
    port = 22122 #tracker監聽的端口
    base_path = /opt/fdfs_tracker # tracker保存data和logs的路徑
    http.server_port=8080 # http服務端口,保持默認

# 啓動fdfs_trackerd
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start

# 查看/opt/fdfs_tracker目錄,發現目錄下多了data和logs兩個目錄

# 查看端口號,驗證啓動狀況
[root@bogon fdfs]# ps -ef | grep fdfs
root       2119      1  0 10:22 ?        00:00:00 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
[root@bogon fdfs]# ss -tulnp | grep 22122
tcp    LISTEN     0      128       *:22122      *:*    users:(("fdfs_trackerd",pid=2119,fd=5))

# 命令行選項
Usage: /usr/bin/fdfs_trackerd <config_file> [start|stop|restart]

# 設置開機自啓動
echo "/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart" | tee -a /etc/rc.d/rc.local

fdfs_storage配置並啓動

與tracker不一樣的是,storage還須要一個目錄用來存儲數據,因此在上面步驟中另外多建了兩個目錄fdfs_storage_data,fdfs_storagehtml

cd /etc/fdfs/
cp storage.conf.sample storage.conf
vim storage.conf
    disabled=false # 啓用這個配置文件
    group_name=group1 #組名,根據實際狀況修改,文件連接中會用到
    port=23000 #設置storage的端口號,默認是23000,同一個組的storage端口號必須一致
    base_path = /opt/fdfs_storage # #設置storage數據文件和日誌目錄,注意,這個目錄最好有大於50G的磁盤空間
    store_path_count=1 #存儲路徑個數,須要和store_path個數匹配 
    store_path0 = /opt/fdfs_storage_data # 實際保存文件的路徑,注意,這個目錄最好有大於50G的磁盤空間
    tracker_server = 192.168.75.5:22122 # tracker監聽地址和端口號,要與tracker.conf文件中設置的保持一致
    http.server_port=8888 #設置 http 端口號
    
# 啓動fdfs_storaged
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start

# 查看端口號,驗證啓動狀況
[root@bogon fdfs]# ps -ef | grep "fdfs_storaged"
root       2194      1  7 10:36 ?        00:00:01 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
[root@bogon fdfs]# ss -tulnp | grep "fdfs"
tcp    LISTEN     0      128       *:23000      *:*     users:(("fdfs_storaged",pid=2194,fd=5))
tcp    LISTEN     0      128       *:22122      *:*     users:(("fdfs_trackerd",pid=2119,fd=5))

# 命令行選項
Usage: /usr/bin/fdfs_trackerd <config_file> [start|stop|restart]

# 設置開機自啓動
echo "/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart" | tee -a /etc/rc.d/rc.local

校驗整合

要肯定一下,storage是否註冊到了tracker中去java

/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

成功後能夠看到:ip_addr = 192.168.75.5 ACTIVEnginx

使用FastDFS自帶工具測試

cd /etc/fdfs/
cp client.conf.sample client.conf
vim client.conf
    base_path = /opt/fdfs_tracker # tracker服務器文件路徑
    tracker_server = 192.168.75.5:22122 #tracker服務器IP地址和端口號
    http.tracker_server_port = 8080 # tracker服務器的http端口號,必須和tracker的設置對應起來

上傳一張圖片1.jpg到Centos服務器上的 /tmp 目錄下,進行測試,命令以下:c++

/usr/bin/fdfs_test /etc/fdfs/client.conf upload /tmp/1.jpg
This is FastDFS client test program v6.06

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.fastken.com/ 
for more detail.

[2020-04-02 10:47:57] DEBUG - base_path=/opt/fdfs_tracker, connect_timeout=5, 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

tracker_query_storage_store_list_without_group: 
        server 1. group_name=, ip_addr=192.168.75.5, port=23000

group_name=group1, ip_addr=192.168.75.5, port=23000
storage_upload_by_filename
group_name=group1, remote_filename=M00/00/00/wKhLBV6FUl6AA0eTACSnIi51C7k037.jpg
source ip address: 192.168.75.5
file timestamp=2020-04-02 10:47:58
file size=2402082
file crc32=779422649
example file url: http://192.168.75.5:8080/group1/M00/00/00/wKhLBV6FUl6AA0eTACSnIi51C7k037.jpg
storage_upload_slave_by_filename
group_name=group1, remote_filename=M00/00/00/wKhLBV6FUl6AA0eTACSnIi51C7k037_big.jpg
source ip address: 192.168.75.5
file timestamp=2020-04-02 10:47:58
file size=2402082
file crc32=779422649
example file url: http://192.168.75.5:8080/group1/M00/00/00/wKhLBV6FUl6AA0eTACSnIi51C7k037_big.jpg

以上圖中的文件地址:http://192.168.75.5:8080/group1/M00/00/00/wKhLBV6FUl6AA0eTACSnIi51C7k037.jpg對應storage服務器上的/opt/fdfs_storage_data/data/00/00/wKhLBV6FUl6AA0eTACSnIi51C7k037.jpg文件;git

組名:group1
磁盤:M00
目錄:00/00
文件名稱:wKhLBV6FUl6AA0eTACSnIi51C7k037.jpg
注意圖片路徑中的8080端口,這個是tracker的端口



github

上傳的圖片會被上傳到咱們建立的fdfs_storage_data目錄下,會有四個圖片文件:vim

[root@bogon 00]# pwd
/opt/fdfs_storage_data/data/00/00
[root@bogon 00]# ll
total 4704
-rw-r--r-- 1 root root 2402082 Apr  2 10:47 wKhLBV6FUl6AA0eTACSnIi51C7k037_big.jpg
-rw-r--r-- 1 root root      49 Apr  2 10:47 wKhLBV6FUl6AA0eTACSnIi51C7k037_big.jpg-m
-rw-r--r-- 1 root root 2402082 Apr  2 10:47 wKhLBV6FUl6AA0eTACSnIi51C7k037.jpg
-rw-r--r-- 1 root root      49 Apr  2 10:47 wKhLBV6FUl6AA0eTACSnIi51C7k037.jpg-m

data下有256個1級目錄,每級目錄下又有256個2級子目錄,總共65536個文件,新寫的文件會以hash的方式被路由到其中某個子目錄下,而後將文件數據直接做爲一個本地文件存儲到該目錄中。瀏覽器

FastDFS和nginx結合使用

FastDFS經過Tracker服務器,將文件放在Storage服務器存儲,可是同組之間的服務器須要複製文件,有延遲的問題.
假設Tracker服務器將文件上傳到了172.20.132.57,文件ID已經返回客戶端,這時,後臺會將這個文件複製到172.20.132.57,若是複製沒有完成,客戶端就用這個ID在172.20.132.57取文件,確定會出現錯誤。
這個fastdfs-nginx-module能夠重定向鏈接到源服務器取文件,避免客戶端因爲複製延遲的問題,出現錯誤。
正是這樣,FastDFS須要結合nginx,因此取消原來對HTTP的直接支持。


服務器

在tracker上安裝 nginx

在每一個tracker上安裝nginx的主要目的是作負載均衡及實現高可用。若是隻有一臺tracker服務器能夠不配置nginx.
一個tracker對應多個storage,經過nginx對storage負載均衡;
app

在storage上安裝nginx(openresty)

cd /usr/local/src/
tar -zxvf fastdfs-nginx-module-1.22.tar.gz
cd fastdfs-nginx-module-1.22/src
cp mod_fastdfs.conf /etc/fdfs/
vim /etc/fdfs/mod_fastdfs.conf
    base_path=/opt/fdfs_storage # 與storage.conf配置中的保持一致
    tracker_server=192.168.75.5:22122 #tracker服務器的IP地址以及端口號
    url_have_group_name = true # url中包含group名稱
    store_path0=/opt/fdfs_storage_data #與storage.conf中的路徑保持一致
    group_count = 1 #設置組的個數
yum -y install pcre pcre-devel openssl openssl-devel zlib zlib-devel 
cd /usr/local/src
tar -zxvf openresty-1.15.8.3.tar.gz
cd openresty-1.15.8.3
./configure \
    --with-luajit \
    --with-http_stub_status_module \
    --with-http_ssl_module \
    --with-http_realip_module \
    --with-http_gzip_static_module \
    --add-module=/usr/local/src/fastdfs-nginx-module-1.22/src
gmake
gmake install

# 修改配置文件
vim /usr/local/openresty/nginx/conf/nginx.conf
    error_log  logs/error.log;
    pid      logs/nginx.pid;
    server{
        server_name  192.168.75.5; 
    }

# 啓動
/usr/local/openresty/nginx/sbin/nginx -c /usr/local/openresty/nginx/conf/nginx.conf

# 瀏覽器訪問,出現openresty歡迎頁面

# 設置nginx開機啓動
echo "/usr/local/openresty/nginx/sbin/nginx -c /usr/local/openresty/nginx/conf/nginx.conf" | tee -a /etc/rc.d/rc.local

# 再次修改配置文件,加載fastdfs模塊
vim /usr/local/openresty/nginx/conf/nginx.conf
    server{
        location /group1/M00/ {
            root /opt/fdfs_storage/data;
            ngx_fastdfs_module;
        }
    }

# 重載nginx
/usr/local/openresty/nginx/sbin/nginx -s reload

# 參考上面測試的那一步圖片url地址:http://192.168.75.5:8080/group1/M00/00/00/wKhLBV6FUl6AA0eTACSnIi51C7k037.jpg
使用nginxf訪問的話,實際地址是:http://192.168.75.5/group1/M00/00/00/wKhLBV6FUl6AA0eTACSnIi51C7k037.jpg
須要把tracker使用的8080端口去掉,不然沒法訪問
# 進一步完善nginx配置文件
    # 這個server設置的是storage nginx
    server {
        listen       9991;
        server_name  localhost;

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

        location ~/group1/M00 {
            root /opt/fastdfs_storage/data;
            ngx_fastdfs_module;
        }

        location = /50x.html {
            root   html;
        }
    }
    
    # 若訪問不到圖片須要配置這個軟鏈接
    # ln -s /opt/fastdfs_storage_data/data/ /opt/fastdfs_storage_data/data/M00
    
    # 這個server設置的是tracker nginx
    upstream fdfs_group1 {
        server 127.0.0.1:9991;
    }
    
    server {
        listen       80;
        server_name  localhost;
        
        location /group1/M00 {
            proxy_pass http://fdfs_group1;
        }
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

搭建集羣

集羣規劃(單tracker,雙storage)

虛擬機 	    IP 	                說明
tracker 	192.168.75.5 	tracker 服務器
storage01 	192.168.75.6 	storage01服務器【group1】
storage02 	192.168.75.7 	storage02服務器【group2】

軟件清單

fastdfs-6.06.tar.gz
fastdfs-client-java-1.28.tar.gz
fastdfs-nginx-module-1.22.tar.gz
libfastcommon-1.0.43.tar.gz
openresty-1.15.8.3.tar.gz

安裝步驟

1.tracker服務器

# 1. 安裝libfastcommon 模塊
# 2. 編譯安裝 FastDFS
# 3. 修改配置文件tarcker.conf和client.conf(測試上傳)

# vim /etc/fdfs/tracker.conf
    store_lookup=0  #採用輪詢策略進行存儲,0:輪詢 1:始終定向到某個group 2:選擇存儲空間最大的進行存儲

# 4. 開機啓動

2.storage服務器

# 1. 安裝libfastcommon 模塊
# 2. 編譯安裝 FastDFS
# 3. 修改配置文件storage.conf

# storage01 配置
# vim /etc/fdfs/storage.conf
group_name=group1
base_path=/home/fastdfs_storage
store_path0=/home/fastdfs_storage
tracker_server=192.168.75.6:22122
http.server_port=8888

# storage02 配置
# vim /etc/fdfs/storage.conf
group_name=group2
base_path=/home/fastdfs_storage
store_path0=/home/fastdfs_storage
tracker_server=192.168.75.7:22122
http.server_port=8888

# 4. 開機啓動
# 5. 安裝nginx和fastdfs-nginx-module模塊

# storage01 配置:
# vim /etc/fdfs/mod_fastdfs.conf
connect_timeout=10
base_path=/home/fastdfs_storage
url_have_group_name=true
store_path0=/home/fastdfs_storage
tracker_server=192.168.75.6:22122
group_name=group1

# storage02 配置:
# vim /etc/fdfs/mod_fastdfs.conf
connect_timeout=10
base_path=/home/fastdfs_storage
url_have_group_name=true
store_path0=/home/fastdfs_storage
tracker_server=192.168.75.7:22122
group_name=group2

# 6. 複製 FastDFS 安裝目錄的部分配置文件到 /etc/fdfs 目錄
cp http.conf mime.types /etc/fdfs/

# 7. 配置nginx
server {
    listen 8888;  
    server_name localhost; 
     
    location ~/group([0-9])/M00 {
        ngx_fastdfs_module;  
    }
    error_page 500 502 503 504 /50x.html;  
    location = /50x.html {  
        root html;  
    }  
}

3.測試

# vim /etc/fdfs/client.conf
    base_path=/home/fastdfs_tracker
    tracker_server=192.168.75.5:22122

/usr/bin/fdfs_upload_file /etc/fdfs/client.conf test.jpg

4. tracker安裝nginx

http {  
    include mime.types;  
    default_type application/octet-stream;  
    sendfile on;  
    keepalive_timeout 65;
    
    #group1
    upstream fdfs_group1 {
       server 192.168.75.6:8888;
    }
    
    #group2
    upstream fdfs_group2 {
       server 192.168.75.7:8888;
    }
    
    server {  
        listen 8000;  
        server_name localhost;
        
        location /group1/M00 {
           proxy_pass http://fdfs_group1;
        }

        location /group2/M00 {
           proxy_pass http://fdfs_group2;
        }

        error_page 500 502 503 504 /50x.html;  
        location = /50x.html {  
            root html;  
        }  
    }  
}
相關文章
相關標籤/搜索