FastDFS : 開啓鑽牛角尖模式搞FastDFS集羣

目錄

本文目的

最近在學習FastDFS集羣時引發了許多思考.本篇主要介紹集羣搭建的步驟和我個人一些理解.本文引入了當前網上很多博文的圖片和步驟,主要以某平臺分佈式系統系列教程FastDFS部分爲基礎,闡述我FastDFS集羣搭建方法及我個人對集羣理解.

FastDFS介紹

FastDFS是一個開源的分佈式文件系統,它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件爲載體的在線服務,如相冊網站、視頻網站等等。

FastDFS服務端有兩個角色:跟蹤器(tracker)和存儲節點(storage)。跟蹤器主要做調度工作,在訪問上起負載均衡的作用。存儲節點存儲文件,完成文件管理的所有功能:存儲、同步和提供存取接口。

FastDFS同時對文件的meta data進行管理。所謂文件的meta data就是文件的相關屬性,以鍵值對(key value pair)方式表示,如:width=1024,其中的key爲width,value爲1024。文件meta data是文件屬性列表,可以包含多個鍵值對。FastDFS系統結構如下圖所示:

這裏寫圖片描述

FastDFS交互過程

FastDFS上傳交互過程

這裏寫圖片描述

  1. client詢問tracker上傳到的storage,不需要附加參數;
  2. tracker返回一臺可用的storage;
  3. client直接和storage通訊完成文件上傳。

客戶端 client 發起對 FastDFS 的文件傳輸動作,是通過連接到某一臺 Tracker Server 的指定端口來實現的,Tracker Server 根據目前已掌握的信息,來決定選擇哪一臺 Storage Server ,然後將這個 Storage Server 的地址等信息返回給 client,然後 client 再通過這些信息連接到這臺 Storage Server,將要上傳的文件傳送到給 Storage Server上。

FastDFS下載交互過程

這裏寫圖片描述

  1. client詢問tracker下載文件的storage,參數爲文件標識(卷名和文件名);
  2. tracker返回一臺可用的storage;
  3. client直接和storage通訊完成文件下載。

FastDFS集羣規劃

FastDFS 集羣規劃:
跟蹤服務器1:192.168.1.131 edu-dfs-tracker-1
跟蹤服務器2:192.168.1.132 edu-dfs-tracker-2
存儲服務器1:192.168.1.135 edu-dfs-storage-group1-1
存儲服務器2:192.168.1.136 edu-dfs-storage-group1-2
存儲服務器3:192.168.1.137 edu-dfs-storage-group2-1
存儲服務器4:192.168.1.138 edu-dfs-storage-group2-2
環境:CentOS 6.6
用戶:root
FastDFS v5.05
libfastcommon-master.zip(是從FastDFS和FastDHT中提取出來的公共C函數庫)
fastdfs-nginx-module_v1.16.tar.gz
nginx-1.6.2.tar.gz
fastdfs_client_java._v1.25.tar.gz
源碼地址:https://github.com/happyfish100/
下載地址:http://sourceforge.net/projects/fastdfs/files/
官方論壇:http://bbs.chinaunix.net/forum-240-1.html
這裏寫圖片描述

FastDFS集羣配置

FastDFS依賴安裝

(所有跟蹤服務器和存儲服務器均執行如下操作)
編譯和安裝所需的依賴包: # yum install make cmake gcc gcc-c++

安裝libfastcommon

下載libfastcommon-master.zip/usr/local/src目錄
下載地址:https://github.com/happyfish100/libfastcommon

# cd /usr/local/src/ 
# unzip libfastcommon-master.zip 
# cd libfastcommon-master 
# ./make.sh 
# ./make.sh install 

要注意libfastcommon的安裝位置.後邊會用到.可能是:/usr/lib64/libfastcommon.so
/usr/lib64/libfdfsclient.so
也可能是:/usr/local/lib/libfastcommon.so
/usr/local/lib/libfdfsclient.so
,這裏大家安裝完libfastcommon留意一下安裝到什麼位置

安裝FastDFS

下載地址:https://github.com/happyfish100/fastdfs/releases

解壓

# cd /usr/local/src/ 
# tar -zxvf FastDFS_v5.05.tar.gz 
# cd FastDFS 

編譯、安裝

(編譯前要確保已經成功安裝了libfastcommon)

# ./make.sh 
# ./make.sh install 

採用默認安裝的方式安裝,安裝後的相應文件與目錄:

  • 服務腳本在:
    /etc/init.d/fdfs_storaged
    /etc/init.d/fdfs_tracker
  • 配置文件在(樣例配置文件):
    /etc/fdfs/client.conf.sample
    /etc/fdfs/storage.conf.sample
    /etc/fdfs/tracker.conf.sample
  • 命令工具在/usr/bin/目錄下的:
    fdfs_appender_test1
    fdfs_append_file
    fdfs_crc32 fdfs_delete_file
    fdfs_download_file
    fdfs_file_info fdfs_monitor
    fdfs_storaged fdfs_test
    fdfs_test1 fdfs_trackerd
    fdfs_upload_appender
    fdfs_upload_file
    stop.sh
    restart.sh

因爲FastDFS服務腳本設置的bin目錄是/usr/local/bin,但實際命令安裝在/usr/bin,可以進入 /user/bin目錄使用以下命令查看fdfs的相關命令:

# cd /usr/bin/ 
# ls | grep fdfs 

因此需要修改FastDFS服務腳本中相應的命令路徑,也就是把/etc/init.d/fdfs_storaged/etc/init.d/fdfs_tracker兩個腳本中的/usr/local/bin修改成/usr/bin,更改方法:使用查找替換命令進統一修改:%s+/usr/local/bin+/usr/bin

注意:以上操作無論是配置tracker還是配置storage都是必須的,而tracker和storage的區別主要是在安裝完fastdfs之後的配置過程中。

配置Tracker (192.168.1.131 、192.168.1.132)

修改tracker.conf

# cd /etc/fdfs/ 
# cp tracker.conf.sample tracker.conf 
# vi /etc/fdfs/tracker.conf

修改的內容如下:

disabled=false   #啓用
port=22122       #tracker的端口號,一般採用22122這個默認端口 
base_path=/fastdfs/tracker      #tracker的數據文件和日誌目錄 

其它參數保留默認配置,具體配置解釋請參考官方文檔說明:http://bbs.chinaunix.net/thread-1941456-1-1.html

創建數據目錄:

mkdir -p /fastdfs/tracker(參考基礎目錄base_path配置)

打開tracker端口(默認爲22122):

vi /etc/sysconfig/iptables
添加如下行:-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT
重啓防火牆: service iptables restart

啓動Tracker:

# /etc/init.d/fdfs_trackerd start 

初次成功啓動,會在/fastdfs/tracker目錄下創建data、logs兩個目錄,可以通過以下兩個方法驗證是否啓動成功:

  1. 查看22122端口監聽情況:netstat -unltp | grep fdfs
  2. 通過以下命令查看tracker的啓動日誌,看是否有錯誤:tailf /fastdfs/tracker/logs/trackerd.log

關閉Tracker:

# /etc/init.d/fdfs_trackerd stop 

設置tracker開機啓動:

# vi /etc/rc.d/rc.local 

添加以下內容: /etc/init.d/fdfs_trackerd start

配置storage(192.168.1.135 、192.168.1.136、192.168.1.137 、192.168.1.138)

# cd /etc/fdfs/ 
# cp storage.conf.sample storage.conf
# vi /etc/fdfs/storage.conf 

修改的內容如下:

disabled=false                   #啓用配置文件 
group_name=group1               #組名(第一組爲group1,第二組爲group2) 
port=23000                      #storage的端口號,同一個組的storage端口號必須相同                        
base_path=/fastdfs/storage       #設置storage的日誌目錄 
store_path0=/fastdfs/storage     #存儲路徑 
store_path_count=1               #存儲路徑個數,需要和store_path個數匹配 
tracker_server=192.168.1.131:22122  #tracker服務器的IP地址和端口 
tracker_server=192.168.1.132:22122  #多個tracker直接添加多條配置 
#設置http端口號 (其它參數保留默認配置,具體配置解釋請參考官方文檔說明: http://bbs.chinaunix.net/thread-1941456-1-1.html )  
http.server_port=8888           

這裏着重介紹一下tracker_server參數,這個參數如果設置了tracker外網ip,那麼storage也會以外網ip形式存在於我們整個集羣中(這句有點難理解,我們可以通過fdfs_moniter命令查看storage的ip,如果storage配置的tracker是tracker內網ip,那麼這個storage的ip也爲內網,反之如果我們在storage配置tracker時使用的外網ip,那麼這個storage的ip爲外網ip),我最近在看官網論壇很多人問到外網部署的問題。大部分情況storage是不大可能部署在外網的。因爲storage之間要做文件同步,外網的話網絡io是個不小的問題。

當然有些同學會有疑問如果不部署在外網,外網如何訪問到storage,這裏我們完全可以配置tracker是使用內網ip,這樣storage之間同步都會走內網。但是訪問storage我們用storage外網ip。或者使用後文提到的storage的nginx負載均衡策略。

同時我還做了一個無聊的測試,storage內外網混部。這種情況如果上傳文件到了一個配置外網tracker地址的storage(A),那麼A向B(配置tracker內網地址)同步文件是同步不過去的。因爲對於A來講B是一個內網storage(AB不同子網),但是如果文件上傳到了B上,B同步給A卻可以。

創建數據目錄:

參考基礎目錄base_path配置,mkdir -p /fastdfs/storage

防火牆中打開storage端口(默認爲23000):

(略)

啓動Storage:

# /etc/init.d/fdfs_storaged start

初次成功啓動,會在/fastdfs/storage目錄下創建數據目錄data 和日誌目錄logs,各節點啓動,使用 tailf /fastdfs/storage/logs/storaged.log 命令監聽存儲節點日誌,可以看到存儲節點鏈接到跟蹤器,並提示哪一個爲leader跟蹤器。同時也會看到同一組中的其他節點加入進來的日誌信息。
查看23000端口監聽情況:netstat -unltp|grep fdfs

所有Storage節點都啓動之後,可以在任一Storage節點上使用如下命令查看集羣信息:/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

關閉Storage:

# /etc/init.d/fdfs_storaged stop 

設置FastDFS存儲器開機啓動:

(略)

文件上傳測試 ( 192.168.1.131 )

修改Tracker服務器中的客戶端配置文件:

# cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf 
# vi /etc/fdfs/client.conf      

配置如下:

base_path=/fastdfs/tracker 
tracker_server=192.168.1.131:22122 
tracker_server=192.168.1.132:22122 

執行文件上傳命令:

# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /usr/local/src/FastDFS_v5.05.tar.gz 

返回ID號:(能返回以下文件ID,說明文件上傳成功)

group1/M00/00/00/wKgBh1Xtr9-AeTfWAAVFOL7FJU4.tar.gz 
group2/M00/00/00/wKgBiVXtsDmAe3kjAAVFOL7FJU4.tar.gz 

在各storage上安裝Nginx

fastdfs-nginx-module作用說明

FastDFS 通過Tracker 服務器,將文件放在 Storage 服務器存儲,但是同組存儲服務器之間需要進入文件複製,有同步延遲的問題。假設Tracker服務器將文件上傳到了192.168.1.135,上傳成功後文件ID 已經返回給客戶端。此時 FastDFS 存儲集羣機制會將這個文件同步到同組存儲 192.168.1.136,在文件還沒有複製完成的情況下,客戶端如果用這個文件ID在192.168.1.136上取文件,就會出現文件無法訪問的錯誤。而fastdfs-nginx-module可以重定向文件連接到源服務器取文件,避免客戶端由於複製延遲導致的文件無法訪問錯誤。

還有一個原因我們必須要安裝fastdfs-nginx-module,fastdfs本身提供了http支持,但是原有的http支持不很好。所以我們這裏安裝fastdfs-nginx-module對外提供http服務

安裝fastdfs-nginx-module

上傳fastdfs-nginx-module_v1.16.tar.gz/usr/local/src,執行以下命令解壓:

# cd /usr/local/src/ 
# tar -zxvf fastdfs-nginx-module_v1.16.tar.gz  

修改fastdfs-nginx-module的config配置文件vi /usr/local/src/fastdfs-nginx-module/src/config

CORE_INCS="$CORE_INCS /usr/local/include/fastdfs /usr/local/include/fastcommon/" 
 #修改爲:CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/" 這裏就是上邊提到需要我們留意的安裝路徑

上傳當前的穩定版本Nginx(nginx-1.6.2.tar.gz)到/usr/local/src目錄

安裝編譯Nginx所需的依賴包:yum install gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel

安裝Nginx

# cd /usr/local/src/ 
# tar -zxvf nginx-1.6.2.tar.gz 
# cd nginx-1.6.2 
# ./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/fastdfs-nginx-module/src 
# make && make install 

配置fastdfs-nginx-module

複製fastdfs-nginx-module源碼中的配置文件到/etc/fdfs目錄,並修改

# cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/    
# vi /etc/fdfs/mod_fastdfs.conf 

第一組Storage的mod_fastdfs.conf配置與第二組配置只有group_name不同: group_name=group2

connect_timeout=10 
base_path=/tmp 
tracker_server=192.168.1.131:22122 
tracker_server=192.168.1.132:22122 
storage_server_port=23000 
group_name=group1           #第一組group_name
url_have_group_name = true 
store_path0=/fastdfs/storage 

這裏很多博客更改了[group1],[group2]這一段,實際測試結果是這一段是沒有必要設置的。這個共從1.x版本開始提供,到現在已經5.x版本。不設置這些參數情況下如果group1上的文件依然可以通過group2上的任意storage的nginx訪問。

複製 FastDFS 的部分配置文件到/etc/fdfs 目錄

# cd /usr/local/src/FastDFS/conf
# cp http.conf mime.types /etc/fdfs/

在/fastdfs/storage 文件存儲目錄下創建軟連接,將其鏈接到實際存放數據的目錄

# ln -s /fastdfs/storage/data/ /fastdfs/storage/data/M00

配置 Nginx

# vi /usr/local/nginx/conf/nginx.conf user root;

配置如下:

worker_processes 1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       8888;
        server_name  localhost;
        location ~/group([0-9])/M00 {
            #alias /fastdfs/storage/data;
            ngx_fastdfs_module;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
root html; }
    } 
}

說明:
A、8888 端口值是要與/etc/fdfs/storage.conf 中的 http.server_port=8888 相對應,因爲 http.server_port 默認爲 8888,如果想改成 80,則要對應修改過來。

B、Storage 對應有多個 group 的情況下,訪問路徑帶 group 名,如/group1/M00/00/00/xxx, 對應的 Nginx 配置爲:

location ~/group([0-9])/M00 {
         ngx_fastdfs_module;
}

C、如查下載時如發現老報 404,將 nginx.conf 第一行 user nobody 修改爲 user root 後重新啓動。

防火牆打開Nginx 8888端口

(略)

啓動 Nginx

/usr/local/nginx/sbin/nginx
重啓命令:/usr/local/nginx/sbin/nginx -s reload

設置 Nginx 開機啓動vi /etc/rc.local加入/usr/local/nginx/sbin/nginx

文件下載測試

通過瀏覽器訪問測試下載剛剛上傳的文件

http://192.168.1.135:8888/group1/M00/00/00/wKgBh1Xtr9-AeTfWAAVFOL7FJU4.tar.gz
http://192.168.1.137:8888/group2/M00/00/00/wKgBiVXtsDmAe3kjAAVFOL7FJU4.tar.gz

這裏我們通過一個例子講解nginx模塊的原理:
現在講group1配置三臺storage,分別爲ABC,當我們上傳一個文件到A(A是tracker給我指定的)。A接收文件後會啓動兩個線程來將文件同步給B和C。文件同步完成後我們將A和C上的文件更改一個名字(隨便一個什麼),出現如下現象:

  • 通過A的nginx無法下載到文件
  • 通過B的nginx可以下載到文件
  • 通過C的nginx無法下載到文件

出現這個情況的原因是,nginx當接到一個文件下載請求時會先到自己本地尋找這個文件,如果找不到會根據文件url找到這個文件最初被上傳的storage(本例中是A)。將請求轉發給源storage的nginx,如果還沒請求到就返回錯誤。

如上例子如果我們同group內只有兩個storage,那組內的storage安裝nginx後自動實現了高可用。但是如果組內是三個storage,實際是一個僞高可用狀態。

在tracker(192.168.1.131、192.168.1.132)上安裝 Nginx

經過上邊配置我們知道我們的集羣現在還存在兩個問題

  • 同組三臺以上storage僞高可用狀態
  • 同組storage缺少負載均衡
  • storage上的nginx沒有緩存

爲了解決以上問題,我們爲所有storage的nginx再安裝nginx,這個nginx不一定、不一定、不一定在tracker上安裝。重要的事情說三遍。tracker的負載均衡,高可用是在我們客戶端調用tracker時候實現的。比如如下配置(java客戶端配置文件):

connect_timeout = 2
network_timeout = 30
charset = ISO8859-1
http.tracker_http_port = 8888
http.anti_steal_token = no
tracker_server=192.100.139.121:22122
tracker_server=192.100.139.122:22122 

包括我們後續用到的keepalived也不是爲了tracker做的雙機熱備,多個tracker是對等結構。
那麼爲什麼在tracker上安裝storage的nginx的nginx(這句話很繞,大家努力理解下吧),我猜想的原因應該是爲了保證如果宕機,那麼上傳和下載一起宕機。再者就是爲了資源的有效利用,因爲tracker的機器壓力不會很大。

安裝依賴

# yum install gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel
openssl openssl-devel

安裝 Nginx

上傳 ngx_cache_purge-2.3.tar.gz 到/usr/local/src,解壓

# cd /usr/local/src/
# tar -zxvf ngx_cache_purge-2.3.tar.gz

上傳當前的穩定版本 Nginx(nginx-1.6.2.tar.gz)到/usr/local/src 目錄
編譯(添加 ngx_cache_purge 模塊)

# cd /usr/local/src/
# tar -zxvf nginx-1.6.2.tar.gz
# cd nginx-1.6.2
# ./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/ngx_cache_purge-2.3 # make && make install

配置 Nginx

設置負載均衡以及緩存vi /usr/local/nginx/conf/nginx.conf

配置如下

user  root;
worker_processes  1;

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

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
    use epoll;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    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 /fastdfs/cache/nginx/proxy_cache levels=1:2
    keys_zone=http-cache:200m max_size=1g inactive=30d;
    proxy_temp_path /fastdfs/cache/nginx/proxy_cache/tmp;

    upstream fdfs_group1 {
         server 192.168.1.135:8888 weight=1 max_fails=2 fail_timeout=30s;
         server 192.168.1.136:8888 weight=1 max_fails=2 fail_timeout=30s;
    }

    upstream fdfs_group2 {
         server 192.168.1.137:8888 weight=1 max_fails=2 fail_timeout=30s;
         server 192.168.1.138:8888 weight=1 max_fails=2 fail_timeout=30s;
    }

    server {
        listen       8000;
        server_name  localhost;
        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.1.0/24;
            deny all;
            proxy_cache_purge http-cache $1$is_args$args;
        }    
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

按以上 nginx 配置文件的要求,創建對應的緩存目錄:

# mkdir -p /fastdfs/cache/nginx/proxy_cache
# mkdir -p /fastdfs/cache/nginx/proxy_cache/tmp

打開防火牆

(略)

啓動 Nginx

啓動 Nginx : /usr/local/nginx/sbin/nginx
重啓 Nginx : /usr/local/nginx/sbin/nginx -s reload
設置 Nginx 開機啓動 : vi /etc/rc.local 加入:/usr/local/nginx/sbin/nginx

tracker上的nginx文件下載測試

前面直接通過訪問 Storage 節點中的 Nginx 的文件

http://192.168.1.135:8888/group1/M00/00/00/wKgBh1Xtr9-AeTfWAAVFOL7FJU4.tar.gz
http://192.168.1.137:8888/group2/M00/00/00/wKgBiVXtsDmAe3kjAAVFOL7FJU4.tar.gz 

現在可以通過 Tracker 中的 Nginx 來進行訪問
通過 Tracker1 中的 Nginx 來訪問

http://192.168.1.131:8000/group1/M00/00/00/wKgBh1Xtr9-AeTfWAAVFOL7FJU4.tar.gz 
http://192.168.1.131:8000/group2/M00/00/00/wKgBiVXtsDmAe3kjAAVFOL7FJU4.tar.gz 

通過 Tracker2 中的 Nginx 來訪問

http://192.168.1.132:8000/group1/M00/00/00/wKgBh1Xtr9-AeTfWAAVFOL7FJU4.tar.gz 
http://192.168.1.132:8000/group2/M00/00/00/wKgBiVXtsDmAe3kjAAVFOL7FJU4.tar.gz

很重要:在tracker上爲storage的nginx做負載均衡和高可用解決了上述三個問題,但是也帶來了一個新問題。大家知道fastdfs在已有group上添加storage或者創建一個新的group(這個需求很實際,比如業務量增加,需要更多的空間存儲文件)時,是不需要重啓fastdfs的。但是一旦在tracker上安裝了nginx,nginx配置的upstream包含了所有group以及group中的storage。會直接導致當我們添加新的storage或者group的時候必須重啓tracker上的nginx。

添加新group或者storage順序如下:
1. 要先更改tracker1上的nginx
2. 重啓tracker1的nginx(此時不會斷業務,後文keepalived會提到)
3. 更改tracker2上的nginx
4. 重啓tracker2的nginx
5. 啓動新加入的group的storage的nginx
6. 啓動新加入的group的storage
如果是新添加group,那麼第2步重啓更改後的nginx不會出現問題,因爲此時新的group還沒有啓動,所以不會有新group的文件下載請求
如果是新添加storage(向已有group添加),在第2步是有可能出現下載重試的。原因是group原有的下載請求可能被負載均衡到的新添加的storage上,但是此時新storage還沒有啓動,不過沒關係我們剛剛配置的tracker上的max_fails=2可以幫我做容錯。建議配置成max_fails=[storage數]

ps:新添加tracker我沒太細想,正常生產環境添加tracker的情況還是比較少的。除非有單實例轉向集羣,這個肯定是要停機更新的。

使用 Keepalived實現雙機熱備

現在我們解決最後兩個問題
1. tracker上的nginx宕機如何解決
2. 如何給客戶端提供一個唯一的下載路徑

分別在192.168.1.131 192.168.1.132:8000 服務器安裝Keepalived實現雙機熱備,具體配置大家自己查一查吧。這篇不講了,寫的好累 - -

最終通過

http://vip:88/dfs/group1/M00/00/00/wKgBh1Xtr9-AeTfWAAVFOL7FJU4.tar.gz

訪問圖片就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章