FastDFS 和nginx整合(三)


1 在tracker上安裝nginx

nginx的安裝細節(jié)參考nginx文檔。
一個tracker對應(yīng)多個storage,通過nginx對storage負載均衡。

在每個tracker上安裝nginx,兩個 nginx為主備高可用。

創(chuàng)建nginx-fdfs.conf配置文件:

#storage群group1組
upstream storage_server_group1{
        server 192.168.101.5:80 weight=10;
        server 192.168.101.6:80 weight=10;
    }
    #storage群group2組
upstream storage_server_group2{
        server 192.168.101.7:80 weight=10;
        server 192.168.101.8:80 weight=10;
    }

   server {
    listen 80;
    server_name ccc.test.com;
    
    location /group1{
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://storage_server_group1;
    }
location /group2{
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://storage_server_group2;
    }
}

2 在Storage上安裝nginx

2.1 FastDFS-nginx-module

將FastDFS-nginx-module_v1.16.tar.gz傳至/usr/local/下

cd /usr/local

tar -zxvf FastDFS-nginx-module_v1.16.tar.gz

cd FastDFS-nginx-module/src

修改config文件將/usr/local/路徑改為/usr/

目錄

將FastDFS-nginx-module/src下的mod_FastDFS.conf拷貝至/etc/fdfs/下

cp mod_FastDFS.conf /etc/fdfs/

并修改mod_FastDFS.conf的內(nèi)容:

vi /etc/fdfs/mod_FastDFS.conf
base_path=/home/FastDFS
tracker_server=192.168.101.3:22122
tracker_server=192.168.101.4:22122
url_have_group_name=true #url中包含group名稱
store_path0=/home/FastDFS/fdfs_storage #指定文件存儲路徑

如果有多個,將libfdfsclient.so拷貝至/usr/lib下

cp /usr/lib64/libfdfsclient.so /usr/lib/

創(chuàng)建nginx/client目錄

mkdir -p /var/temp/nginx/client

2.2 nginx安裝

添加FastDFS-nginx-module模塊

./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

2.3 nginx配置文件

新建一個nginx配置文件nginx-fdfs.conf.

touch nginx-fdfs.conf.

用編輯器打開并添加如下內(nèi)容(添加server):

server {
        listen       80;
        server_name  192.168.101.7;

        location /group1/M00/{
                root /home/fastdfs/fdfs_storage/data;
                ngx_fastdfs_module;
        }
}

說明:
server_name指定本機ip
location /group1/M00/:group1為nginx 服務(wù)FastDFS的分組名稱,M00是FastDFS自動生成編號,對應(yīng)store_path0=/home/FastDFS/fdfs_storage,如果FastDFS定義store_path1,這里就是M01

3 測試

通過java客戶端上傳文件,使用瀏覽器訪問,比如訪問上傳圖片測試的文件:

訪問storage:
http://192.168.101.5/group1/M00/00/00/wKhlBVVY2M-AM_9DAAAT7-0xdqM485_big.png
ip地址改為192.168.101.6也行,因為同一個分組的storage文件互相同步。

訪問tracker:
http://192.168.101.3/group1/M00/00/00/wKhlBVVY2M-AM_9DAAAT7-0xdqM485_big.png
ip地址改為192.168.101.4也行。

使用域名訪問tracker (推薦):
兩個tracker的nginx為主備,對外由vip提供服務(wù),使用域名訪問如下:
比如vip對應(yīng)的域名為img.test.com:
http://img.test.com/group1/M00/00/00/wKhlBVVY2M-AM_9DAAAT7-0xdqM485_big.png

4 tracker.conf

1 基本配置

disable
#func:配置是否生效
#valu:true、false
disable=false
bind_addr
#func:綁定IP
#valu:IP地址
bind_addr=192.168.6.102
port
#func:服務(wù)端口
#valu:端口整數(shù)值
port=22122
connect_timeout
#func:連接超時
#valu:秒單位正整數(shù)值
connect_timeout=30
network_timeout
#func:網(wǎng)絡(luò)超時
#valu:秒單位正整數(shù)值
network_timeout=60
base_path
#func:Tracker數(shù)據(jù)/日志目錄地址
#valu:路徑
base_path=/home/michael/fdfs/base4tracker
max_connections
#func:最大連接數(shù)
#valu:正整數(shù)值
max_connections=256
work_threads
#func:線程數(shù),通常設(shè)置CPU數(shù)
#valu:正整數(shù)值
work_threads=4
store_lookup
#func:上傳文件的選組方式。
#valu:0、1或2。
# 0:表示輪詢
# 1:表示指定組
# 2:表示存儲負載均衡(選擇剩余空間最大的組)
store_lookup=2
store_group
#func:指定上傳的組,如果在應(yīng)用層指定了具體的組,那么這個參數(shù)將不會起效。另外如果store_lookup如果是0或2,則此參數(shù)無效。
#valu:group1等
store_group=group1
store_server
#func:上傳服務(wù)器的選擇方式。(一個文件被上傳后,這個storage server就相當于這個文件的storage server源,會對同組的storage server推送這個文件達到同步效果)
#valu:0、1或2
# 0: 輪詢方式(默認)
# 1: 根據(jù)ip 地址進行排序選擇第一個服務(wù)器(IP地址最小者)
# 2: 根據(jù)優(yōu)先級進行排序(上傳優(yōu)先級由storage server來設(shè)置,參數(shù)名為upload_priority),優(yōu)先級值越小優(yōu)先級越高。
store_server=0
store_path
#func:上傳路徑的選擇方式。storage server可以有多個存放文件的base path(可以理解為多個磁盤)。
#valu:
# 0: 輪流方式,多個目錄依次存放文件
# 2: 存儲負載均衡。選擇剩余空間最大的目錄存放文件(注意:剩余磁盤空間是動態(tài)的,因此存儲到的目錄或磁盤可能也是變化的)
store_path=0
download_server
#func:下載服務(wù)器的選擇方式。
#valu:
# 0:輪詢(默認)
# 1:IP最小者
# 2:優(yōu)先級排序(值最小的,優(yōu)先級最高。)
download_server=0
reserved_storage_space
#func:保留空間值。如果某個組中的某個服務(wù)器的剩余自由空間小于設(shè)定值,則文件不會被上傳到這個組。
#valu:
# G or g for gigabyte
# M or m for megabyte
# K or k for kilobyte
reserved_storage_space=1GB
log_level
#func:日志級別
#valu:
# emerg for emergency
# alert
# crit for critical
# error
# warn for warning
# notice
# info for information
# debug for debugging
log_level=info
run_by_group / run_by_user
#func:指定運行該程序的用戶組
#valu:用戶組名或空
run_by_group=

#func:
#valu:
run_by_user=
allow_hosts
#func:可以連接到tracker server的ip范圍??稍O(shè)定多個值。
#valu
allow_hosts=
check_active_interval
#func:檢測 storage server 存活的時間隔,單位為秒。
#      storage server定期向tracker server 發(fā)心跳,
#      如果tracker server在一個check_active_interval內(nèi)還沒有收到storage server的一次心跳,
#      那邊將認為該storage server已經(jīng)下線。所以本參數(shù)值必須大于storage server配置的心跳時間間隔。
#      通常配置為storage server心跳時間間隔的2倍或3倍。
check_active_interval=120
thread_stack_size
#func:設(shè)定線程棧的大小。 線程棧越大,一個線程占用的系統(tǒng)資源就越多。
#      如果要啟動更多的線程(V1.x對應(yīng)的參數(shù)為max_connections,V2.0為work_threads),可以適當降低本參數(shù)值。
#valu:如64KB,默認值為64,tracker server線程棧不應(yīng)小于64KB
thread_stack_size=64KB
storage_ip_changed_auto_adjust
#func:這個參數(shù)控制當storage server IP地址改變時,集群是否自動調(diào)整。注:只有在storage server進程重啟時才完成自動調(diào)整。
#valu:true或false
storage_ip_changed_auto_adjust=true

2 同步

storage_sync_file_max_delay
#func:同組storage服務(wù)器之間同步的最大延遲時間。存儲服務(wù)器之間同步文件的最大延遲時間,根據(jù)實際情況進行調(diào)整
#valu:秒為單位,默認值為1天(24*3600)
#sinc:v2.0
storage_sync_file_max_delay=86400
storage_sync_file_max_time
#func:存儲服務(wù)器同步一個文件需要消耗的最大時間,缺省為300s,即5分鐘。
#sinc:v2.0
storage_sync_file_max_time=300
sync_log_buff_interval
#func:同步或刷新日志信息到硬盤的時間間隔。注意:tracker server 的日志不是時時寫硬盤的,而是先寫內(nèi)存。
#valu:以秒為單位
sync_log_buff_interval=10

3 trunk 和 slot

#func:是否使用trunk文件來存儲幾個小文件
#valu:true或false
#sinc:v3.0
use_trunk_file=false

#func:最小slot大小
#valu:<= 4KB,默認為256字節(jié)
#sinc:v3.0
slot_min_size=256

#func:最大slot大小
#valu:>= slot_min_size,當小于這個值的時候就存儲到trunk file中。默認為16MB。
#sinc:v3.0
slot_max_size=16MB

#func:trunk file的size
#valu:>= 4MB,默認為64MB
#sinc:v3.0
trunk_file_size=64MB

4 HTTP 相關(guān)

是否啟用 HTTP
#func:HTTP是否生效
#valu:true或false
http.disabled=false
HTTP 服務(wù)器端口號
#func:tracker server上的http port
#valu:
#note:只有http.disabled=false時才生效
http.server_port=7271
檢查Storage存活狀態(tài)的間隔時間(心跳檢測)
#func:檢查storage http server存活的間隔時間
#valu:單位為秒
#note:只有http.disabled=false時才生效
http.check_alive_interval=30
心跳檢測使用的協(xié)議方式
#func:檢查storage http server存活的方式
#valu:
# tcp:連接到storage server的http端口,不進行request和response。
# http:storage check alive url must return http status 200.
#note:只有http.disabled=false時才生效
http.check_alive_type=tcp
檢查 Storage 狀態(tài)的 URI
#func:檢查storage http server是否alive的uri/url
#note:只有http.disabled=false時才生效
http.check_alive_uri=/status.html

鏈接

FastDFS分布式文件系統(tǒng)(一)
FastDFS+Nginx實現(xiàn)文件服務(wù)器(二)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容