FastDFS是一個開源的輕量級分布式文件系統,它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。FastDFS特別適合以文件為載體的在線服務,多圖片、多視頻的服務等等。
先普及一下在fastDFS的結構中的一些概念:
在fastDFS中,共分為三個部分:client、tracker Server、storage Server;→ 其中的client是用來對fastDFS發起操作的,如上傳、下載;→ 其中的tracker Server是一個調配角色(中間人),當我們在client發起操作請求后,需要tracker Server來將我們與storage Server聯系起來,它是負載均衡的核心;→ 其中storage Server可以理解為倉庫,文件的存儲就在於storage Server,一個完整的fastDFS的存儲結構中,最大單位為group(或volume),通常以group來划分文件類型,如圖片類型為一個group、視頻類型為一個group等等,而一個group內,含有一個或多個storage Server。重點:storage Server是文件存儲的核心,但它並不是文件存儲中的最大單位,很多初學者會在這個地方迷惑。
一、兩個角色:
FastDFS服務端有兩個角色:跟蹤器(tracker)和存儲節點(storage)。
①跟蹤器(tracker)
tracker Server是fastDFS的協調者(中間人角色);完整的fastDFS服務運行期間,我們將對無法對storage Server進行直接管理,僅僅我們發起的操作會對storage Server內的文件進行操作,而真正對storage Server進行管理的是tracker Server——每個storage Server在啟動后,會連接tracker Server並告知之自己的信息(如所在group),並且在tracker Server與該storage Server之間保持連接,兩個角色之間會進行信息的交流,tracker Server會根據storage Server的反饋信息,在內存中(tracker Server不需要持久化任何數據)建立group==>[storage server list]映射表。
在fastDFS集群中,多個tracker Server之間的信息數據會進行同步,而這一機制並不是由tracker Server之間互相完成的,而是由storage Server完成的。因為在storage Server的配置文件有該fastDFS服務中的所有tracker Server,storage Server會為每一個tracker Server創建一個通信線程,在storage Server與tracker Server通信過程中,如果該tracker Server返回的該group的storage Server列表信息相對於本機較少,那么storage Server就會將該tracker Server上所沒有的該group的storage Server列表信息同步給該tracker Server。這就使得各tracker Server之間的數據保持一致。
②存儲節點(storage)
storage Server是存儲的角色,存儲文件由storage Server進行管理。每一個storage Server的數據存儲目錄會有兩級子目錄,每一級都有256個子文件夾,一共有256*256=65536個文件夾。當有新文件被寫入時,會以hash的方式被路由到其中的某個子目錄下,然后新文件數據直接作為一個本地文件存儲到該目錄中。
storage Server以group【或volume(一個意思)】為單位組織,即便整個fastDFS只有一個storage Server,它也有一個group。
在fastDFS集群中,以group為單位可以方便負載均衡,由tracker Server配合可以實現改組內訪問壓力的均衡;也可以方便副本(即備份)數量的定制,同一組內的storage Server的數量減一,即為副本的數量。
在一個group內的storage Server之間的數據會互為備份,這一功能是由后台線程完成的。當客戶端將一個文件寫入group內的一個storage Server,則會認為文件寫入成功,后台線程便會將文件同步到該group內的storage Server。注意:由於一個group內的storage Server數據互為備份,所以存儲空間的容量由該group內的最小容量的storage Server決定。
同一個group內的storage Server在寫文件后,會寫一份binlog,這個binlog記錄着文件名等元信息,它用於后台的同步,每個storage Server會記錄向該group內其他storage Server的同步進度,記錄進度的方式是時間戳,為的是避免機器down掉失去同步進度,以便在機器重啟后接着進度繼續同步。同時storage Server的同步進度會以元數據發送給tracker Server,以便在client訪問文件時,作為tracker Server選擇服務的storage Server的參考(即哪台strong Server上有該文件)。
圖解:
二、文件的Upload過程
1、選擇tracker Server
當集群不止一個tracker Server時,由於tracker Server之間是數據互為同步,完全對等,客戶端任意選擇即可。
2、選擇存儲的group
這個是tracker.conf配置文件的兩項,其中的store_lookup用來選擇group的規則;當tracker接收到upload file的請求時,會為該文件分配一個可以存儲該文件的group,支持如下選擇group的規則: 1. Round robin,所有的group間輪詢 2. Specified group,指定某一個確定的group 3. Load balance,剩余存儲空間多多group優先。當store_lookup為2時,可通過store_group進行指定group。
3、選擇storage Server
這個是tracker.conf配置文件的一項,其中的store_server用來選擇storage Server的規則;當選定group后,tracker會在group內選擇一個storage server給客戶端,支持如下選擇storage的規則: 1. Round robin,在group內的所有storage間輪詢 2. First server ordered by ip,按ip排序 3. First server ordered by priority,按優先級排序(優先級在storage上配置)。
4、選擇storage path
這個是tracker.conf配置文件的一項,其中的store_path用來選擇storage path的規則;當分配好storage server后,客戶端將向storage發送寫文件請求,storage將會為文件分配一個數據存儲目錄,支持如下規則: 1. Round robin,多個存儲目錄間輪詢 2. 剩余存儲空間最多的優先。
5、選擇目錄並生成文件名
當選定存儲目錄后,storage Server會為文件生成一個file_id,然后將文件路由到一個二級目錄,並以file_id為文件名存儲到該子目錄。當文件存儲到某個子目錄后,即認為該文件存儲成功,接下來會為該文件生成一個文件名,文件名由group、存儲目錄、兩級子目錄、fileid、文件后綴名(由客戶端指定,主要用於區分文件類型)拼接而成。
三、文件的下載及Nginx模塊
訪問過程:
client發送download請求給某個tracker Server,必須帶上文件名信息,tracke Server從文件名中解析出文件的group、大小、創建時間等信息,然后為該請求選擇一個storage Server用來服務該download請求。
HTTP訪問支持:
FastDFS的tracker Server和storage Server都內置了http協議的支持,客戶端可以通過http協議來下載文件,tracker在接收到請求時,通過http的redirect機制將請求重定向至文件所在的storage Server上;除了內置的http協議外,FastDFS還提供了通過apache或nginx擴展模塊下載文件的支持。
Nginx擴展模塊:
在storage Server節點與tracker Server節點都需要安裝nginx模塊。
目的:
1、在storage Server安裝nginx模塊是結合fastdfs-nginx-module模塊提供的Http訪問服務,同時解決group中storage Serve而服務器的同步延遲;可能有些同學不理解,通俗一下:
假設Tracker服務器將文件上傳到了192.168.1.80,文件ID已經返回客戶端,這時,后台會將這個文件復制到192.168.1.30,如果復制沒有完成,客戶端就用這個ID在192.168.1.30取文件,肯定會出現錯誤。這個fastdfs-nginx-module可以重定向連接到源服務器取文件,避免客戶端由於復制延遲的問題,出現錯誤。
2、在tracker Server上安裝nginx模塊是為了反向代理到storage Server上的nginx,並進行負載均衡,同時利用ngx_cache_purge模塊實現緩存。
四、配置文件詳解
(摘自XuJiaqing的博客)
1、tracker Server的配置詳解

1 # is this config file disabled 2 3 # false for enabled 4 5 # true for disabled 6 7 disabled=false 8 9 #當前配置是否不可用false可用,true不可用 10 11 12 13 # bind an address of this host 14 15 # empty for bind all addresses of this host 16 17 bind_addr= 18 19 #是否綁定IP如果一個服務器上有多個IP則設置哪個IP可用,如果不設置則不限制 20 21 22 23 # the tracker server port 24 25 port=22122 26 27 28 29 #默認端口為22122 如果不沖突,則盡量不要修改 30 31 # connect timeout in seconds 32 33 # default value is 30s 34 35 connect_timeout=30 36 37 #針對socket套接字函數connect的連接超時時間設置 38 39 40 41 # network timeout in seconds 42 43 # default value is 30s 44 45 network_timeout=60 46 47 #設置網絡超時,單位秒,發送或接收數據時,如果在超時時間之后依然不能進行,則本次網絡通訊失敗 48 49 50 51 # the base path to store data and log files 52 53 base_path=/home/fdfs 54 55 #配置保存根目錄地址,這個目錄必須存在,子目錄將自動創建,保存數據和日志文件呢 56 57 58 59 # max concurrent connections this server supported 60 61 max_connections=256 62 63 #服務器支持的最大連接數 64 65 66 67 # work thread count, should <= max_connections 68 69 # default value is 4 70 71 # since V2.00 72 73 work_threads=1 74 75 #工作線程數,通常設置為CPU數量 76 77 78 79 # the method of selecting group to upload files 80 81 # 0: round robin 82 83 # 1: specify group 84 85 # 2: load balance, select the max free space group to upload file 86 87 store_lookup=2 88 89 #上傳組(卷)的方式:0輪詢,1:指定,2:負載平衡(剩余空間最大選擇) 90 91 92 93 # which group to upload file 94 95 # when store_lookup set to 1, must set store_group to the group name 96 97 store_group=group2 98 99 #如果上一參數選擇1方式,即制定組名,當前參數用來設置指定的組,如果選擇其他方式,當前參數無效 100 101 102 103 # which storage server to upload file 104 105 # 0: round robin (default) 106 107 # 1: the first server order by ip address 108 109 # 2: the first server order by priority (the minimal) 110 111 store_server=0 112 113 #同組推送方式0.輪詢方式,1.根據ip地址進行排序選擇第一個服務器,2.根據優先級進行排序(優先級由storeServer的配置文件中upload_priority屬性設置) 114 115 116 117 # which path(means disk or mount point) of the storage server to upload file 118 119 # 0: round robin 120 121 # 2: load balance, select the max free space path to upload file 122 123 store_path=0 124 125 #選擇哪個文件目錄進行上傳(一個StoreServer上面可以有多個base_path)0.輪詢,2.剩余空間最大 126 127 128 129 # which storage server to download file 130 131 # 0: round robin (default) 132 133 # 1: the source storage server which the current file uploaded to 134 135 download_server=0 136 137 #選擇哪個storeServer最為下載服務器,0.輪詢,1.哪個為源則哪個下載 138 139 140 141 # reserved storage space for system or other applications. 142 143 # if the free(available) space of any stoarge server in 144 145 # a group <= reserved_storage_space, 146 147 # no file can be uploaded to this group. 148 149 # bytes unit can be one of follows: 150 151 ### G or g for gigabyte(GB) 152 153 ### M or m for megabyte(MB) 154 155 ### K or k for kilobyte(KB) 156 157 ### no unit for byte(B) 158 159 ### XX.XX% as ratio such as reserved_storage_space = 10% 160 161 reserved_storage_space = 10% 162 163 #系統保留空間大小,用來保證系統和其他應用的正常運行 164 165 166 167 #standard log level as syslog, case insensitive, value list: 168 169 ### emerg for emergency 170 171 ### alert 172 173 ### crit for critical 174 175 ### error 176 177 ### warn for warning 178 179 ### notice 180 181 ### info 182 183 ### debug 184 185 log_level=info 186 187 #日志級別 188 189 190 191 #unix group name to run this program, 192 193 #not set (empty) means run by the group of current user 194 195 run_by_group= 196 197 #使用那個系統用戶組運行FastDFS,默認為啟動線程的用戶組 198 199 200 201 #unix username to run this program, 202 203 #not set (empty) means run by current user 204 205 run_by_user= 206 207 #使用那個系統用戶運行FastDFS。默認為啟動線程的用戶 208 209 210 211 # allow_hosts can ocur more than once, host can be hostname or ip address, 212 213 # "*" means match all ip addresses, can use range like this: 10.0.1.[1-15,20] or 214 215 # host[01-08,20-25].domain.com, for example: 216 217 # allow_hosts=10.0.1.[1-15,20] 218 219 # allow_hosts=host[01-08,20-25].domain.com 220 221 allow_hosts=* 222 223 #設置可以連接當前tracker的IP范圍,包括client和store_server,* 代表所有 224 225 226 227 # sync log buff to disk every interval seconds 228 229 # default value is 10 seconds 230 231 sync_log_buff_interval = 10 232 233 #同步或刷新日志到本地硬盤的時間間隔,單位:秒 234 235 236 237 # check storage server alive interval seconds 238 239 check_active_interval = 120 240 241 #檢測storage_server的存活狀態時間間隔,單位:秒,本參數要大於storage server的心跳包發送間隔一般為2-3倍 242 243 244 245 # thread stack size, should >= 64KB 246 247 # default value is 64KB 248 249 thread_stack_size = 64KB 250 251 #tracker server的線程棧大小,要求大於等於64K 252 253 254 255 # auto adjust when the ip address of the storage server changed 256 257 # default value is true 258 259 storage_ip_changed_auto_adjust = true 260 261 #當storage server的IP發生變化時集群是否自動調整。只有在storage server進程重啟時才能完成自動調整 262 263 264 265 # storage sync file max delay seconds 266 267 # default value is 86400 seconds (one day) 268 269 # since V2.00 270 271 storage_sync_file_max_delay = 86400 272 273 #存儲服務器之間同步文件的最大延遲時間,缺省為1天,可以根據實際情況進行調整 274 275 276 277 # the max time of storage sync a file 278 279 # default value is 300 seconds 280 281 # since V2.00 282 283 storage_sync_file_max_time = 300 284 285 #同步一個文件需要消耗的最大時間,缺省為300秒,即5分鍾 286 287 288 289 # if use a trunk file to store several small files 290 291 # default value is false 292 293 # since V3.00 294 295 use_trunk_file = false 296 297 #是否使用小文件合並存儲特性,缺省關閉,打開時可以減少碎片文件的出現,但同時加大服務器的負載 298 299 300 301 # the min slot size, should <= 4KB 302 303 # default value is 256 bytes 304 305 # since V3.00 306 307 slot_min_size = 256 308 309 #為trunk file分配的最小字節數,比如一個文件只有16字節,根據當前設置,也會為其分配256字節 310 311 312 313 # the max slot size, should > slot_min_size 314 315 # store the upload file to trunk file when it's size <= this value 316 317 # default value is 16MB 318 319 # since V3.00 320 321 slot_max_size = 16MB 322 323 #為trunk file分配的最大字節數,如果文件小於大小則使用trunk方式存儲,當文件大小大於這個數值是直接保存到一個文件中(不采用合並存儲方式) 324 325 326 327 # the trunk file size, should >= 4MB 328 329 # default value is 64MB 330 331 # since V3.00 332 333 trunk_file_size = 64MB 334 335 #trunk file的大小,不建議設置過大 336 337 338 339 # if create trunk file advancely 340 341 # default value is false 342 343 # since V3.06 344 345 trunk_create_file_advance = false 346 347 #是否提前創建好trunk文件,只用當這個參數設置為true時下面的3個以trunk_create_file開頭的參數將不用設置 348 349 350 351 # the time base to create trunk file 352 353 # the time format: HH:MM 354 355 # default value is 02:00 356 357 # since V3.06 358 359 trunk_create_file_time_base = 02:00 360 361 #創建trunk file的起始時間點,當前為凌晨2點開始 362 363 364 365 # the interval of create trunk file, unit: second 366 367 # default value is 38400 (one day) 368 369 # since V3.06 370 371 trunk_create_file_interval = 86400 372 373 #提前創建trunk file的時間間隔,默認為1天 374 375 376 377 # the threshold to create trunk file 378 379 # when the free trunk file size less than the threshold, will create 380 381 # the trunk files 382 383 # default value is 0 384 385 # since V3.06 386 387 trunk_create_file_space_threshold = 20G 388 389 #提前創建trunk file時,需要達到的空閑trunk大小 390 391 #例如:當前配置為20G,現在空閑的trunk file大小為4G,那么只創建16G的trunk file 392 393 394 395 # if check trunk space occupying when loading trunk free spaces 396 397 # the occupied spaces will be ignored 398 399 # default value is false 400 401 # since V3.09 402 403 # NOTICE: set this parameter to true will slow the loading of trunk spaces 404 405 # when startup. you should set this parameter to true when neccessary. 406 407 trunk_init_check_occupying = false 408 409 #trunk file 初始化時,是否檢查可用空間是否被占用 410 411 412 413 # if ignore storage_trunk.dat, reload from trunk binlog 414 415 # default value is false 416 417 # since V3.10 418 419 # set to true once for version upgrade when your version less than V3.10 420 421 trunk_init_reload_from_binlog = false 422 423 #是否無條件從trunk binlog中加載trunk可用空間信息 424 425 426 427 # if use storage ID instead of IP address 428 429 # default value is false 430 431 # since V4.00 432 433 use_storage_id = false 434 435 #是否使用 serverID作為storage server標識 436 437 438 439 # specify storage ids filename, can use relative or absolute path 440 441 # since V4.00 442 443 storage_ids_filename = storage_ids.conf 444 445 #use_storage_id設置為true,才需要設置本參數,詳見源碼目錄下的conf/storage_ids.conf 446 447 #這個文件中設置組名、serverID和對應的IP地址 448 449 450 451 # id type of the storage server in the filename, values are: 452 453 ## ip: the ip address of the storage server 454 455 ## id: the server id of the storage server 456 457 # this paramter is valid only when use_storage_id set to true 458 459 # default value is ip 460 461 # since V4.03 462 463 id_type_in_filename = ip 464 465 #use_storage_id設置為true時才需要設置本參數 466 467 468 469 470 471 # if store slave file use symbol link 472 473 # default value is false 474 475 # since V4.01 476 477 store_slave_file_use_link = false 478 479 #存儲從文件是否采用symbol link(符號鏈接)方式 480 481 #如果設置為true,一個從文件將占用兩個文件:原始文件及指向它的符號鏈接 482 483 484 485 # if rotate the error log every day 486 487 # default value is false 488 489 # since V4.02 490 491 rotate_error_log = false 492 493 #是否定期輪轉error log,目前僅支持一天輪轉一次 494 495 496 497 # rotate error log time base, time format: Hour:Minute 498 499 # Hour from 0 to 23, Minute from 0 to 59 500 501 # default value is 00:00 502 503 # since V4.02 504 505 error_log_rotate_time=00:00 506 507 #error log定期輪轉的時間節點,rotate_error_log參數設置為true時,本參數有效 508 509 510 511 # rotate error log when the log file exceeds this size 512 513 # 0 means never rotates log file by log file size 514 515 # default value is 0 516 517 # since V4.02 518 519 rotate_error_log_size = 0 520 521 #error log按大小進行輪轉 0代表不按大小進行輪轉,否則當error log文件達到大小則輪轉 522 523 524 525 # if use connection pool 526 527 # default value is false 528 529 # since V4.05 530 531 use_connection_pool = false 532 533 #是否使用連接池 534 535 536 537 # connections whose the idle time exceeds this time will be closed 538 539 # unit: second 540 541 # default value is 3600 542 543 # since V4.05 544 545 connection_pool_max_idle_time = 3600 546 547 #連接池鏈接的最大生存時間,單位秒,use_connection_pool設置為true時有效 548 549 550 551 # HTTP port on this tracker server 552 553 http.server_port=8080 554 555 #http服務端口,默認情況下V4.06是不安裝http服務的,詳見INSTALL文件 556 557 558 559 # check storage HTTP server alive interval seconds 560 561 # <= 0 for never check 562 563 # default value is 30 564 565 http.check_alive_interval=30 566 567 #檢查長鏈接的存活時間30秒 568 569 570 571 # check storage HTTP server alive type, values are: 572 573 # tcp : connect to the storge server with HTTP port only, 574 575 # do not request and get response 576 577 # http: storage check alive url must return http status 200 578 579 # default value is tcp 580 581 http.check_alive_type=tcp 582 583 #長鏈接的存在方式,當前配置為tcp方式 584 585 586 587 # check storage HTTP server alive uri/url 588 589 # NOTE: storage embed HTTP server support uri: /status.html 590 591 http.check_alive_uri=/status.html 592 593 #利用什么標識進行檢查
2、storage Server配置詳解

1 #這個配置文件是否失效 2 3 disabled=false 4 5 #false為有效 true為無效 6 7 8 9 # 本storage server所屬的group名 10 11 group_name=group1 12 13 14 15 # 可以版定一個ip,默認為空,綁定所有ip 16 17 bind_addr= 18 19 20 21 # 本配置只有在bind_addr設置以后才生效 22 23 # 本機作為客戶端訪問其他服務時,是否使用綁定的ip去訪問其他服務器 24 25 client_bind=true 26 27 # storage server監聽端口 28 29 port=23000 30 31 #默認23000,如果不沖突,盡量不修改 32 33 34 35 # 連接超時時間,針對socket套接字函數connect,默認為30秒 36 37 connect_timeout=30 38 39 40 41 # 網絡通訊超時時間,默認是60秒 42 43 network_timeout=60 44 45 46 47 # 向tracker server發送心跳時間間隔,默認30秒 48 49 heart_beat_interval=30 50 51 52 53 # 向tracker server匯報磁盤使用情況時間間隔,默認為60秒 54 55 stat_report_interval=60 56 57 58 59 # 工作文件夾,日志也存在此(這里不是上傳的文件存放的地址) 60 61 base_path=/home/yuqing/fastdfs 62 63 64 65 # 本traceserver最大連接數 66 67 max_connections=256 68 69 70 71 # 發送或接收數據的buffer大小,工作隊列消耗的內存大小 = buff_size * max_connections 72 73 # 建議這個設置大於8k,默認256k 74 75 buff_size = 256KB 76 77 78 79 # 接收數據的線程數 80 81 # 默認1個 82 83 # since V4.07 84 85 accept_threads=1 86 87 88 89 # 工作線程數,小於max_connections 90 91 # 默認4個,通常設置為CPU核數,效率最高 92 93 work_threads=4 94 95 96 97 # 磁盤讀寫是否分離,默認為true 98 99 disk_rw_separated = true 100 101 102 103 # 磁盤讀取的線程數(每個工作文件夾) 104 105 # 對於磁盤讀寫不分離的模式,這個參數可以設置為0 106 107 # 默認為1 108 109 disk_reader_threads = 1 110 111 112 113 # 磁盤寫的線程數(每個工作文件夾) 114 115 # 對於磁盤讀寫不分離的模式,這個參數可以設置為0 116 117 # 默認為1 118 119 disk_writer_threads = 1 120 121 122 123 # 當發現沒有需要同步的文件時,需要等待sync_wait_msec毫秒再去binlog中檢查 124 125 # 不能設置為0,默認為50毫秒 126 127 sync_wait_msec=50 128 129 130 131 # 同步完一個文件后,休眠sync_interval毫秒后繼續同步下一個文件 132 133 sync_interval=0 134 135 136 137 # 允許存儲同步的開始時間 138 139 # Hour from 0 to 23, Minute from 0 to 59 140 141 sync_start_time=00:00 142 143 144 145 # 允許存儲同步的結束時間,也就是說,storage server只能在sync_start_time到sync_end_time這段時間內同步數據 146 147 # 默認是全天都可以同步 148 149 # Hour from 0 to 23, Minute from 0 to 59 150 151 sync_end_time=23:59 152 153 #由開始時間和結束時間,指定了同步時間的范圍 154 155 156 157 # 同步完write_mark_file_freq個文件后,如果markfile有變化,將mark file寫入磁盤 158 159 write_mark_file_freq=500 160 161 162 163 # 工作路徑個數(可以掛載多個磁盤),默認是1個 164 165 store_path_count=1 166 167 168 169 # 工作路徑列表,如果store_path0不設置,那么使用base_path存儲 170 171 # 設置的路徑一定是存在的文件夾 172 173 # 需要配置store_path_count個 174 175 store_path0=/home/yuqing/fastdfs 176 177 #store_path1=/home/yuqing/fastdfs2 178 179 180 181 # FastDFS是通過二級目錄來存儲文件的,該配置是每級目錄的文件夾數據 182 183 # 如果設置為256,那么會生成256*256=65535個文件夾 184 185 # 這個值默認大小256,可以設置區間1-256 186 187 subdir_count_per_path=256 188 189 190 191 # tracer server列表,多個tracer server的話,分行列出 192 193 tracker_server=192.168.209.121:22122 194 195 196 197 #日志級別 198 199 ### emerg for emergency 200 201 ### alert 202 203 ### crit for critical 204 205 ### error 206 207 ### warn for warning 208 209 ### notice 210 211 ### info 212 213 ### debug 214 215 log_level=info 216 217 218 219 # 運行本進程的Unix用戶組,如果不設置,默認是當前用戶所在的group 220 221 run_by_group= 222 223 224 225 # 運行本進程的用戶名,如果不設置,默認是當前用戶的用戶名 226 227 run_by_user= 228 229 230 231 # 可以連接到本機的主機ip范圍,*代表允許所有服務器 232 233 # 支持這樣的表達式:10.0.1.[1-15,20] or host[01-08,20-25].domain.com 234 235 allow_hosts=* 236 237 238 239 # 文件分布式存儲策略 240 241 # 0: 輪詢 242 243 # 1: 根據文件名hash結果隨機存儲 244 245 file_distribute_path_mode=0 246 247 # 本配置在 file_distribute_path_mode=0 時有效 248 249 250 251 # 當寫文件數據達到file_distribute_rotate_count值時,換輪換到另外一個路徑繼續寫入 252 253 # 本配置默認值是100 254 255 file_distribute_rotate_count=100 256 257 258 259 # 是否在寫大文件的時候,調用fsync落地文件 260 261 # 0:永遠不調用 262 263 # 其他數值:每寫入fsync_after_written_bytes個字節,調用一次fsync 264 265 # 默認為0 266 267 fsync_after_written_bytes=0 268 269 270 271 # 將緩存中的日志落地到磁盤的間隔時間,默認是10秒 272 273 sync_log_buff_interval=10 274 275 276 277 # 將緩存中的binlog落地到磁盤的間隔時間,默認是10秒 278 279 sync_binlog_buff_interval=10 280 281 282 283 # 將storage server緩存中的狀態數據落地到磁盤的間隔時間,默認是10秒 284 285 sync_stat_file_interval=300 286 287 288 289 # 線程棧大小,默認64k,不建議設置小於64k,默認512k 290 291 thread_stack_size=512KB 292 293 294 295 # 和 tracker.conf 中store_server= 2時的配置相對應,本storage server作為目標服務器,上傳文件的優先級,可以為負數。值越小,優先級越高。 296 297 # tracker.conf 中store_server參數的描述: 298 299 # 上傳文件選擇服務器的規則: 300 301 # 0:輪詢(默認) 302 303 # 1:按照IP排序,排在第一的server 304 305 # 2:按照優先級排序,最小的server 306 307 upload_priority=10 308 309 310 311 # 網卡別名,用ifconfig -a可以看到很多本機的網卡別名,類似eth0,eth0:0等等 312 313 # 多個網卡別名使用逗號分割,默認為空,讓系統自動選擇 314 315 if_alias_prefix= 316 317 318 319 # 是否檢查重復文件,如果設置成true,使用FastDHT來存儲文件索引 320 321 # 1 or yes: 需要檢查 322 323 # 0 or no: 不需要檢查 324 325 # 默認值是 0 326 327 check_file_duplicate=0 328 329 330 331 # 文件簽名形式,hash或md5,用來做文件排重,默認為hash 332 333 file_signature_method=hash 334 335 336 337 # 存儲文件索引的命名空間(在check_file_duplicate=1是生效) 338 339 key_namespace=FastDFS 340 341 342 343 # 是否和FastDHT之間使用長連接 344 345 # 0代表短鏈接,1代表長連接 346 347 # 默認值為0 348 349 keep_alive=0 350 351 352 353 # 可以使用#include filename來加載FastDHT服務器列表,filename可以是相對路徑(基於base_path) 354 355 # 在check_file_duplicate=1時有效 356 357 358 359 # 更多信息參見FastDHT的安裝須知 360 361 ##include /home/yuqing/fastdht/conf/fdht_servers.conf 362 363 364 365 # 是否記錄訪問日志 366 367 use_access_log = false 368 369 370 371 # 是否定期輪轉訪問日志,目前僅支持一天輪轉一次 372 373 rotate_access_log = false 374 375 376 377 # 如果按天輪轉訪問日志,具體生成新錯誤日志文件的時間 378 379 # Hour from 0 to 23, Minute from 0 to 59 380 381 access_log_rotate_time=00:00 382 383 384 385 # 是否定期輪轉錯誤日志,目前僅支持一天輪轉一次 386 387 rotate_error_log = false 388 389 390 391 # 如果按天輪轉錯誤日志,具體生成新錯誤日志文件的時間 392 393 # Hour from 0 to 23, Minute from 0 to 59 394 395 error_log_rotate_time=00:00 396 397 398 399 # 是否在錯誤訪問文件達到一定大小時生成新的訪問日志文件 400 401 # 0代表對日志文件大小不敏感 402 403 rotate_access_log_size = 0 404 405 406 407 # 是否在錯誤日志文件達到一定大小時生成新的錯誤日志文件 408 409 # 0代表對日志文件大小不敏感 410 411 rotate_error_log_size = 0 412 413 414 415 # 日志文件保存日期 416 417 # 0表示永久保存,不刪除 418 419 # 默認為0 420 421 log_file_keep_days = 0 422 423 424 425 # if skip the invalid record when sync file 426 427 # default value is false 428 429 # since V4.02 430 431 file_sync_skip_invalid_record=false 432 433 434 435 # 是否使用連接池 436 437 use_connection_pool = false 438 439 440 441 # 連接閑置超時時間,連接如果閑置的時間超過本配置,則關閉次連接,單位秒 442 443 connection_pool_max_idle_time = 3600 444 445 # storage server的http訪問方式的域名,如果域名為空,則只能使用ip訪問 446 447 http.domain_name= 448 449 450 451 # HTTP端口 452 453 http.server_port=8888
3、client的配置文件詳解

1 # 連接超時時間 2 3 # 默認30秒 4 5 connect_timeout=30 6 7 8 9 # 網絡超時時間 10 11 # default value is 30s 12 13 network_timeout=60 14 15 16 17 # 工作文件夾,日志存在此 18 19 base_path=/home/yuqing/fastdfs 20 21 22 23 # tracer server列表,多個tracer server的話,分行列出 24 25 tracker_server=192.168.0.197:22122 26 27 28 29 #日志級別 30 31 ### emerg for emergency 32 33 ### alert 34 35 ### crit for critical 36 37 ### error 38 39 ### warn for warning 40 41 ### notice 42 43 ### info 44 45 ### debug 46 47 log_level=info 48 49 50 51 # 是否使用連接池 52 53 use_connection_pool = false 54 55 56 57 # 連接閑置超時時間,連接如果閑置的時間超過本配置,則關閉次連接,單位秒 58 59 connection_pool_max_idle_time = 3600 60 61 62 63 # 是否從tracer server讀取fastdfs的參數,默認為false 64 65 load_fdfs_parameters_from_tracker=false 66 67 68 69 70 71 72 73 # 是否使用storage id 替換 ip,默認為false 74 75 # 和tracker.conf該參數含義一樣 76 77 # 本配置只有在load_fdfs_parameters_from_tracker=false時生效 78 79 # 本配置默認為false 80 81 use_storage_id = false 82 83 84 85 # 指定storage id的文件名,允許使用絕對路徑 86 87 # 和tracker.conf該參數含義一樣 88 89 # 本配置只有在load_fdfs_parameters_from_tracker=false時生效 90 91 storage_ids_filename = storage_ids.conf 92 93 94 95 96 97 #HTTP settings 98 99 http.tracker_server_port=8080 100 101 102 103 #引入HTTP相關配置 104 105 ##include http.conf
五、總結
fastDFS是為集群而生,單機的fastDFS意義不大,因為fastDFS存在的意義在於其分布式文件系統,想要玩轉fastDFS,僅僅掌握fastDFS是遠遠不夠的。