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=http://www.likecs.com/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=http://www.likecs.com/status.html 592 593 #利用什么标识进行检查