• 浅谈fastDFS服务器


      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 #利用什么标识进行检查  
    tracker.conf

      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
    storage.conf

      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
    client.conf

      五、总结

      fastDFS是为集群而生,单机的fastDFS意义不大,因为fastDFS存在的意义在于其分布式文件系统,想要玩转fastDFS,仅仅掌握fastDFS是远远不够的。

  • 相关阅读:
    服务器组件
    SQLAlchemy
    SessionMiddleware源码分析
    java实现ftp文件上传下载,解决慢,中文乱码,多个文件下载等问题
    linux 实现自动创建ftp用户并创建文件夹
    window server 2008 配置ftp并实现用户隔离
    centos 6.5配置ftp服务器,亲测可用
    learnyounode 题解
    [写出来才有价值系列:node.js]node.js 02-,learnyounode
    Linux多台机器配置ssh免登录
  • 原文地址:https://www.cnblogs.com/1214804270hacker/p/9502450.html
Copyright © 2020-2023  润新知