一、配置参数
合并文件存储相关的配置都在tracker.conf中。配置完成后,重启tracker和storage server。
1、use_trunk_file :是否使用合并存储,缺省关闭。
2、slot_min_size:为一个小文件分配的最小空间,缺省256字节。即使你上传的文件只有0字节,也会分配这么多空间。
3、slot_max_size:使用合并存储的最大文件大小,缺省为16MB,超过这个size的文件,不会存储到trunk file中,而是作为一个单独的文件直接存储到文件系统中。
4、 trunk_file_size:trunk file大小,缺省为64MB。不要配置得过大或者过小,最好不要超过256MB。
5、trunk_create_file_advance:是否提前创建trunk file,缺省关闭。
6、trunk_create_file_time_base:提前创建trunk file的时间点,比如可以指定半夜02:00创建
7、trunk_create_file_interval:提前创建trunk file的时间间隔,单位为秒。如果一天创建一次,可以设置为86400。
8、trunk_create_file_space_threshold:创建trunk file需要达到的可用空间大小。如果空闲的trunk file空间大于本参数,则不会提前创建。
9、trunk_init_check_occupying:trunk server初始化加载空闲blocks时,是否检查对应trunk file,看这个block是否已被占用。缺省为false。启用了本参数,trunk server初始化时间将大大延长。除非必要,请不要打开本选项。
10、trunk_init_reload_from_binlog:忽略快照文件,只从trunk binlog中加载空闲block。缺省为false。只要当从v3.10以下版本升级到v3.10以上版本时,可能才需要打开本选项。
二、原理
1、storage server内置trunk manager的功能,在storage server上对trunk file可用区块进行管理。在一个时间点,一个group只有一台storage server提供管理和查询服务,简称trunk manager。该group的其余storage server作为备机,只接收binlog。
如何做到一个group只有一台storage server提供trunk管理服务,这个由tracker server统一协调完成。如果承担trunk manager那台storage server挂了,本组其余的一台storage server会自动升级为trunk manager,接替其工作。
2、trunk manager将trunk相关数据,全部存放到内存中管理。当storage server要存储一个小于阀值的文件(也就是小文件)时,先询问trunk manager,trunk manager返回存储到的trunk file文件名,以及存储起始的偏移量。当storage server成功完成文件存储后,向trunk manager报告。如果报告失败,则文件上传当失败处理。
3、trunk manager管理方案说明:
trunk manager将trunk相关数据,全部存放到内存中管理。对于trunk更新操作(包括增加和删除两种),会记录到单独的binlog文件中,有专门的线程(trunk_sync_thread_start创建该线程)将binlog文件同步给本组的其他storage server。为了节约内存空间,trunk file文件名,会单独存放。trunk file可用空间链表中,trunk filename采用指针方式指向。
当storage server向trunk manager请求分配文件空间时,trunk manager会先在内存中扫描有没有满足条件的可用trunk,如果有,那么直接返回。否则,一个创建trunk file,然后将新的trunk file记录到binlog和内存中,并完成分配