1 文章目的
瞭解項目中使用FastDFS的原因和意義。
掌握FastDFS的架構組成部分,能說出tracker和storage的作用。
瞭解FastDFS+nginx上傳和下載的執行流程。
掌握FastDFS+nginx在項目中作爲圖片服務器,上傳和下載方法。
2 FastDFS介紹
2.1 什麼是FastDFS
一、FastDFS簡介
FastDFS
是由國人餘慶所開發,其項目地址:https://github.com/happyfish100
FastDFS
是一個輕量級的開源分佈式文件系統,主要解決了大容量的文件存儲和高併發訪問的問題,文件存取時實現了負載均衡。
支持存儲服務器在線擴容,支持相同的文件只保存一份,節約磁盤。
FastDFS
只能通過Client API訪問,不支持POSIX訪問方式。
FastDFS適合中大型網站使用,用來存儲資源文件(如:圖片、文檔、視頻等)
2.2 FastDFS架構
FastDFS的兩個核心概念分別是:Tracker(跟蹤器)、Storage(存儲節點)。
客戶端請求Tracker server進行文件上傳、下載,通過Tracker server調度最終由Storage server完成文件上傳和下載。
Tracker server作用是負載均衡和調度,通過Tracker server在文件上傳時可以根據一些策略找到Storage server提供文件上傳服務。可以將tracker稱爲追蹤服務器或調度服務器。
Storage server作用是文件存儲,客戶端上傳的文件最終存儲在Storage服務器上,Storage server沒有實現自己的文件系統而是利用操作系統的文件系統來管理文件。可以將storage稱爲存儲服務器。
如下圖
跟蹤器Tracker主要做調度工作,相當於mvc中的controller的角色,在訪問上起負載均衡的作用。跟蹤器和存儲節點都可以由一臺或多臺服務器構成,跟蹤器和存儲節點中的服務器均可以隨時增加或下線而不會影響線上服務,其中跟蹤器中的所有服務器都是對等的,可以根據服務器的壓力情況隨時增加或減少。
跟蹤器Tracker負責管理所有的Storage和group,每個Storage在啓動後會連接Tracker,告知自己所屬的group等信息,並保持週期性的心跳,tracker根據storage的心跳信息,建立group==>[storage server list]的映射表,Tracker需要管理的元信息很少,會全部存儲在內存中;另外tracker上的元信息都是由storage彙報的信息生成的,本身不需要持久化任何數據,這樣使得tracker非常容易擴展,直接增加tracker機器即可擴展爲tracker cluster來服務,cluster裏每個tracker之間是完全對等的,所有的tracker都接受stroage的心跳信息,生成元數據信息來提供讀寫服務。
存儲節點Storage採用了分卷[Volume](或分組[group])的組織方式,存儲系統由一個或多個組組成,組與組之間的文件是相互獨立的,所有組的文件容量累加就是整個存儲系統中的文件容量。
一個卷[Volume](組[group])可以由一臺或多臺存儲服務器組成,一個組中的存儲服務器中的文件都是相同的,組中的多臺存儲服務器起到了冗餘備份和負載均衡的作用,數據互爲備份,存儲空間以group內容量最小的storage爲準,所以建議group內的多個storage儘量配置相同,以免造成存儲空間的浪費。
2.2.1 Tracker 集羣
FastDFS集羣中的Tracker server可以有多臺,Tracker server之間是相互平等關係同時提供服務,Tracker server不存在單點故障。客戶端請求Tracker server採用輪詢方式,如果請求的tracker無法提供服務則換另一個tracker。
2.2.2 Storage集羣
Storage集羣採用了分組存儲方式。storage集羣由一個或多個組構成,集羣存儲總容量爲集羣中所有組的存儲容量之和。一個組由一臺或多臺存儲服務器組成,組內的Storage server之間是平等關係,不同組的Storage server之間不會相互通信,同組內的Storage server之間會相互連接進行文件同步,從而保證同組內每個storage上的文件完全一致的。一個組的存儲容量爲該組內存儲服務器容量最小的那個,由此可見組內存儲服務器的軟硬件配置最好是一致的。
採用分組存儲方式的好處是靈活、可控性較強。比如上傳文件時,可以由客戶端直接指定上傳到的組也可以由tracker進行調度選擇。一個分組的存儲服務器訪問壓力較大時,可以在該組增加存儲服務器來擴充服務能力(縱向擴容)。當系統容量不足時,可以增加組來擴充存儲容量(橫向擴容)。
2.2.3 Storage狀態收集
Storage server會連接集羣中所有的Tracker server,定時向他們報告自己的狀態,包括磁盤剩餘空間、文件同步狀況、文件上傳下載次數等統計信息。
2.2.4 文件上傳流程
客戶端上傳文件後存儲服務器將文件ID(file_id)返回給客戶端,此文件ID用於以後訪問該文件的索引信息。文件索引信息包括:組名,虛擬磁盤路徑,數據兩級目錄,文件名。
組名:文件上傳後所在的storage組名稱,在文件上傳成功後由storage服務器返回,需要客戶端自行保存。
虛擬磁盤路徑:storage配置的虛擬路徑,與磁盤選項store_path*對應。如果配置了store_path0則是M00,如果配置了store_path1則是M01,以此類推。
數據兩級目錄:storage服務器在每個虛擬磁盤路徑下創建的兩級目錄,用於存儲數據文件。
文件名:與文件上傳時不同。是由存儲服務器根據特定信息生成,文件名包含:源存儲服務器IP地址、文件創建時間戳、文件大小、隨機數和文件拓展名等信息。
2.2.5 文件下載流程
tracker根據請求的文件路徑即文件ID來快速定義文件。
比如請求下邊的文件:
1.通過組名tracker能夠很快的定位到客戶端需要訪問的存儲服務器組是group1,並選擇合適的存儲服務器提供客戶端訪問。
2.存儲服務器根據“文件存儲虛擬磁盤路徑”和“數據文件兩級目錄”可以很快定位到文件所在目錄,並根據文件名找到客戶端需要訪問的文件。
3 FastDFS+Nginx實現文件服務器
3.1 架構
3.1.1 架構圖
3.1.2 架構描述
出於高可用的需求tracker和storage都使用兩臺服務器,storage使用兩個組用以說明storage可以任意擴充組實現線性擴展。
3.1.2.1 client
client請求tracker進行文件上傳、下載、刪除。
client可以通過java client API方式進行文件上傳、下載、刪除。
client可以通過http方式進行文件下載。tracker通過nginx提供http下載接口。
client也可以直接訪問storage進行文件上傳、下載、刪除,但建議client通過tracker進行文件上傳、下載、刪除。
3.1.2.2 Tracker Server
每個tracker server互相平等,tracker server上部署nginx是爲了對外提供http文件下載接口,tracker上nginx只是起到負載均衡的作用。tracker的nginx會代理轉發至storage上的nginx。
tracker上的兩個nginx可以採用主備方式實現高可用。nginx高可用參數nginx文檔。
3.1.2.3 Storage Server
每臺storage上也部署nginx,storage上的nginx與tracker上的nginx有區別,storage上的nginx需要安裝FastDSF-nginx模塊,此模塊的作用是使用FastDFS和nginx進行整合,nginx對外提供http文件下載接口,注意:nginx只提供文件下載接口不提供上傳接口。文件上傳仍然通過java client API進行。
3.2 FastDFS--tracker安裝
分別在192.168.101.3和192.168.101.4上安裝tracker。
注:初次安裝可只安裝一臺tracker方便調試。
3.2.1 下載
tracker和storage使用相同的安裝包,下載地址:http://sourceforge.net/projects/FastDFS/ 或https://github.com/happyfish100/FastDFS(推薦)
本教程下載:FastDFS_v5.05.tar.gz
3.2.2 FastDFS安裝環境
FastDFS是C語言開發,建議在linux上運行,本教程使用Centos6.5作爲安裝環境。
安裝FastDFS需要先將官網下載的源碼進行編譯,編譯依賴gcc環境,如果沒有gcc環境,需要安裝gcc:yum install gcc-c++
3.2.3 .安裝libevent
FastDFS依賴libevent庫,需要安裝:
yum -y install libevent
3.2.4 安裝libfastcommon
libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS運行所需要的一些基礎庫。
將libfastcommonV1.0.7.tar.gz拷貝至/usr/local/下
cd /usr/local
tar -zxvf libfastcommonV1.0.7.tar.gz
cd libfastcommon-1.0.7
./make.sh
./make.sh install
注意:libfastcommon安裝好後會自動將庫文件拷貝至/usr/lib64下,由於FastDFS程序引用usr/lib目錄所以需要將/usr/lib64下的庫文件拷貝至/usr/lib下。
要拷貝的文件如下:
件如下:
3.2.5 tracker編譯安裝
將FastDFS_v5.05.tar.gz拷貝至/usr/local/下
tar -zxvf FastDFS_v5.05.tar.gz
cd FastDFS
./make.sh
./make.sh install
安裝成功將安裝目錄下的conf下的文件拷貝到/etc/fdfs/下。
3.2.6 配置
安裝成功後進入/etc/fdfs目錄:
拷貝一份新的tracker配置文件:
cp tracker.conf.sample tracker.conf
修改tracker.conf
vi tracker.conf
base_path=/home/yuqing/FastDFS
改爲:
base_path=/home/FastDFS
配置http端口:
http.server_port=80
3.2.7 啓動
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
啓動的日誌顯示先停止5619進程(實際環境不是5619)再啓動,如下圖:
注意:如果沒有顯示上圖要注意是否正常停止原有進程。
3.3 FastDFS--storage安裝
分別在192.168.101.5、192.168.101.6、192.168.101.7、192.168.101.8上安裝storage。
注:初次安裝可只安裝一臺storage方便調試。
3.3.1 安裝libevent
同tracker安裝
3.3.2 安裝libfastcommon
同tracker安裝。
3.3.3 storage編譯安裝
同tracker編譯安裝。
3.3.4 配置
安裝成功後進入/etc/fdfs目錄:
拷貝一份新的storage配置文件:
cp storage.conf.sample storage.conf
修改storage.conf
vi storage.conf
group_name=group1
base_path=/home/yuqing/FastDFS改爲:base_path=/home/FastDFS
store_path0=/home/yuqing/FastDFS改爲:store_path0=/home/FastDFS/fdfs_storage
#如果有多個掛載磁盤則定義多個store_path,如下
#store_path1=.....
#store_path2=......
tracker_server=192.168.101.3:22122 #配置tracker服務器:IP
#如果有多個則配置多個tracker
tracker_server=192.168.101.4:22122
#配置http端口
http.server_port=80
3.3.5 啓動
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
啓動的日誌顯示先停止8931進程(實際環境不是8931)再啓動,如下圖:
注意:如果沒有顯示上圖要注意是否正常停止原有進程。
3.4 上傳圖片測試
3.4.1 通過fdfs_test程序
FastDFS安裝成功可通過/usr/bin/fdfs_test測試上傳、下載等操作。
修改/etc/fdfs/client.conf
base_path=/home/fastdfs
tracker_server=192.168.101.3:22122
tracker_server=192.168.101.4:22122
使用格式:
/usr/bin/fdfs_test 客戶端配置文件地址 upload 上傳文件
比如將/home下的圖片上傳到FastDFS中:
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /home/tomcat.png
打印如下日誌:
This is FastDFS client test program v5.05
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.csource.org/
for more detail.
[2015-05-18 02:07:10] DEBUG - base_path=/home/FastDFS, 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
tracker_query_storage_store_list_without_group:
server 1. group_name=, ip_addr=192.168.101.5, port=23000
server 2. group_name=, ip_addr=192.168.101.6, port=23000
group_name=group1, ip_addr=192.168.101.5, port=23000
storage_upload_by_filename
group_name=group1, remote_filename=M00/00/00/wKhlBVVY2M-AM_9DAAAT7-0xdqM485.png
source ip address: 192.168.101.5
file timestamp=2015-05-18 02:07:11
file size=5103
file crc32=3979441827
example file url: http://192.168.101.5/group1/M00/00/00/wKhlBVVY2M-AM_9DAAAT7-0xdqM485.png
storage_upload_slave_by_filename
group_name=group1, remote_filename=M00/00/00/wKhlBVVY2M-AM_9DAAAT7-0xdqM485_big.png
source ip address: 192.168.101.5
file timestamp=2015-05-18 02:07:11
file size=5103
file crc32=3979441827
example file url: http://192.168.101.5/group1/M00/00/00/wKhlBVVY2M-AM_9DAAAT7-0xdqM485_big.png
http://192.168.101.5/group1/M00/00/00/wKhlBVVY2M-AM_9DAAAT7-0xdqM485_big.png就是文件的下載路徑。
對應storage服務器上的
/home/fastdfs/fdfs_storage/data/00/00/wKhlBVVY2M-AM_9DAAAT7-0xdqM485_big.png文件。
由於現在還沒有和nginx整合無法使用http下載。
3.4.2 通過java Client API
完整的測試方法參考測試源代碼。
public class FastdfsClientTest {
//客戶端配置文件
public Stringconf_filename ="F:\\workspace_indigo\\fastdfsClient\\src\\cn\\itcast\\fastdfs\\cliennt\\fdfs_client.conf";
//本地文件,要上傳的文件
public Stringlocal_filename ="F:\\develop\\upload\\linshiyaopinxinxi_20140423193847.xlsx";
//上傳文件
@Test
public void testUpload() {
for(int i=0;i<100;i++){
try {
ClientGlobal.init(conf_filename);
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getConnection();
StorageServer storageServer = null;
StorageClient storageClient = new StorageClient(trackerServer,
storageServer);
NameValuePair nvp [] = new NameValuePair[]{
new NameValuePair("item_id","100010"),
new NameValuePair("width","80"),
new NameValuePair("height","90")
};
String fileIds[] = storageClient.upload_file(local_filename,null,
nvp);
System.out.println(fileIds.length);
System.out.println("組名:" + fileIds[0]);
System.out.println("路徑: " + fileIds[1]);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
3.5 FastDFS 和nginx整合
3.5.1 在tracker上安裝nginx
nginx的安裝細節參考nginx文檔。
一個tracker對應多個storage,通過nginx對storage負載均衡。
在每個tracker上安裝nginx,兩個nginx爲主備高可用。
創建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;
}}
3.5.2 在Storage上安裝nginx
3.5.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的內容:
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/
創建nginx/client目錄
mkdir -p /var/temp/nginx/client
3.5.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
3.5.2.3 nginx配置文件
新建一個nginx配置文件nginx-fdfs.conf.
添加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服務FastDFS的分組名稱,M00是FastDFS自動生成編號,對應store_path0=/home/FastDFS/fdfs_storage,如果FastDFS定義store_path1,這裏就是M01
3.5.3 測試
通過java客戶端上傳文件,使用瀏覽器訪問,比如訪問上傳圖片測試的文件:
訪問storage:
http://192.168.101.5/group1/M00/00/00/wKhlBVVY2M-AM_9DAAAT7-0xdqM485_big.png
ip地址改爲192.168.101.6也行,因爲同一個分組的storage文件互相同步。
http://192.168.101.3/group1/M00/00/00/wKhlBVVY2M-AM_9DAAAT7-0xdqM485_big.png
ip地址改爲192.168.101.4也行。
使用域名訪問tracker (推薦):
兩個tracker的nginx爲主備,對外由vip提供服務,使用域名訪問如下:
比如vip對應的域名爲img.test.com:
http://img.test.com/group1/M00/00/00/wKhlBVVY2M-AM_9DAAAT7-0xdqM485_big.png
4 附錄
4.1 tracker.conf
1 基本配置
disable
#func:配置是否生效
#valu:true、false
disable=false
bind_addr
#func:綁定IP
#valu:IP地址
bind_addr=192.168.6.102
port
#func:服務端口
#valu:端口整數值
port=22122
connect_timeout
#func:連接超時
#valu:秒單位正整數值
connect_timeout=30
network_timeout
#func:網絡超時
#valu:秒單位正整數值
network_timeout=60
base_path
#func:Tracker數據/日誌目錄地址
#valu:路徑
base_path=/home/michael/fdfs/base4tracker
max_connections
#func:最大連接數
#valu:正整數值
max_connections=256
work_threads
#func:線程數,通常設置CPU數
#valu:正整數值
work_threads=4
store_lookup
#func:上傳文件的選組方式。
#valu:0、1或2。
# 0:表示輪詢
# 1:表示指定組
# 2:表示存儲負載均衡(選擇剩餘空間最大的組)
store_lookup=2
store_group
#func:指定上傳的組,如果在應用層指定了具體的組,那麼這個參數將不會起效。另外如果store_lookup如果是0或2,則此參數無效。
#valu:group1等
store_group=group1
store_server
#func:上傳服務器的選擇方式。(一個文件被上傳後,這個storage server就相當於這個文件的storage server源,會對同組的storage server推送這個文件達到同步效果)
#valu:0、1或2
# 0: 輪詢方式(默認)
# 1: 根據ip地址進行排序選擇第一個服務器(IP地址最小者)
# 2: 根據優先級進行排序(上傳優先級由storage server來設置,參數名爲upload_priority),優先級值越小優先級越高。
store_server=0
store_path
#func:上傳路徑的選擇方式。storage server可以有多個存放文件的base path(可以理解爲多個磁盤)。
#valu:
# 0: 輪流方式,多個目錄依次存放文件
# 2: 存儲負載均衡。選擇剩餘空間最大的目錄存放文件(注意:剩餘磁盤空間是動態的,因此存儲到的目錄或磁盤可能也是變化的)
store_path=0
download_server
#func:下載服務器的選擇方式。
#valu:
# 0:輪詢(默認)
# 1:IP最小者
# 2:優先級排序(值最小的,優先級最高。)
download_server=0
reserved_storage_space
#func:保留空間值。如果某個組中的某個服務器的剩餘自由空間小於設定值,則文件不會被上傳到這個組。
#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範圍。可設定多個值。
#valu
allow_hosts=
check_active_interval
#func:檢測 storage server存活的時間隔,單位爲秒。
# storage server定期向tracker server發心跳,
# 如果tracker server在一個check_active_interval內還沒有收到storage server的一次心跳,
# 那邊將認爲該storage server已經下線。所以本參數值必須大於storage server配置的心跳時間間隔。
# 通常配置爲storage server心跳時間間隔的2倍或3倍。
check_active_interval=120
thread_stack_size
#func:設定線程棧的大小。 線程棧越大,一個線程佔用的系統資源就越多。
# 如果要啓動更多的線程(V1.x對應的參數爲max_connections,V2.0爲work_threads),可以適當降低本參數值。
#valu:如64KB,默認值爲64,tracker server線程棧不應小於64KB
thread_stack_size=64KB
storage_ip_changed_auto_adjust
#func:這個參數控制當storage server IP地址改變時,集羣是否自動調整。注:只有在storage server進程重啓時才完成自動調整。
#valu:true或false
storage_ip_changed_auto_adjust=true
2 同步
storage_sync_file_max_delay
#func:同組storage服務器之間同步的最大延遲時間。存儲服務器之間同步文件的最大延遲時間,根據實際情況進行調整
#valu:秒爲單位,默認值爲1天(24*3600)
#sinc:v2.0
storage_sync_file_max_delay=86400
storage_sync_file_max_time
#func:存儲服務器同步一個文件需要消耗的最大時間,缺省爲300s,即5分鐘。
#sinc:v2.0
storage_sync_file_max_time=300
sync_log_buff_interval
#func:同步或刷新日誌信息到硬盤的時間間隔。注意:tracker server的日誌不是時時寫硬盤的,而是先寫內存。
#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字節
#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 相關
是否啓用 HTTP
#func:HTTP是否生效
#valu:true或false
http.disabled=false
HTTP 服務器端口號
#func:tracker server上的http port
#valu:
#note:只有http.disabled=false時才生效
http.server_port=7271
檢查Storage存活狀態的間隔時間(心跳檢測)
#func:檢查storage http server存活的間隔時間
#valu:單位爲秒
#note:只有http.disabled=false時才生效
http.check_alive_interval=30
心跳檢測使用的協議方式
#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 狀態的URI
#func:檢查storage http server是否alive的uri/url
#note:只有http.disabled=false時才生效
http.check_alive_uri=/status.html