淘宝TFS分布式文件系统亲测(3)

设置开机自动挂载

[root@loctfs scripts]# vi /etc/fstab

/dev/sdb1                /data/tfs1              ext4    defaults        1 2

启动dataserver

1.存储区预分配。
       执行scripts下的stfs format n (n为挂载点的序号,具体用法见stfs的Usage)。例如stfs format 2,4-6 则会对/data/tfs2,
/data/tfs4,/data/tfs5,/data/tfs6,进行预分配。运行完后会在生成/data/tfs2, /data/tfs4,/data/tfs5,/data/tfs6下预先创建主块,扩展块及相应的统计信息。
[root@locname conf]#  cd /usr/local/tfs/scripts
[root@locname scripts]# stfs format 1   (1为挂载点的序号 具体可以看官网说明) //分配第一个存储区

淘宝TFS分布式文件系统亲测

 
2.运行data server

有两种方法:
    1)通过adminserver来启动dataserver(推荐): 执行scripts下的./tfs admin_ds
    2)直接启动dataserver,执行scripts下的./tfs start_ds 2,4-6, 则会启动dataserver2,dataserver4,dataserver5,dataserver6

我们使用方法2)
./scripts/tfs start_ds 1  //启动dataserver的存储区1

淘宝TFS分布式文件系统 + php接口亲测

  3.检测与nameserver的通讯
192.168.0.13

 
192.168.0.25

 

 OK,一切正常。

五 验证

首先保证服务已经全部启动!
确认防火墙没有阻止到连接!
查看dataserver连接情况:
在nameserver端执行ssm命令查看检查到的dataserver的一些基本情况。
 /usr/local/tfs/bin/ssm -s 192.168.0.10:8888  
server -b    \\随即列出dataserver的block块

淘宝TFS分布式文件系统亲测

 

 server -w     \\随机列出dataserver的可写块 
machine -a
  \\列出dataserver的使用报道。

淘宝TFS分布式文件系统亲测

 

 这里需要注意如果用server -b 、-w后面的BLOCK数字,如果是0,说明没有可写块。检测ns  ads ds的配置文件,包括备份个数、主块大小知否一致.

如果看到上面的信息,那基本没问题了。

用tfstool上传一张图片:
客户端首先向nameserver发起写请求,nameserver需要根据dataserver上的可写块,容量和负载加权平均来选择一个可写的 block。并且在该block所在的多个dataserver中选择一个作为写入的master,这个选择过程也需要根据dataserver的负载以 及当前作为master的次数来计算,使得每个dataserver作为master的机会均等。master一段选定,除非master宕机,不会更 换,一旦master宕机,需要在剩余的dataserver中选择新的master。返回一个dataserver列表。

客户端向master dataserver开始数据写入操作。master server将数据传输为其他的dataserver节点,只有当所有dataserver节点写入均成功时,master server才会向nameserver和客户端返回操作成功的信息。“
也就是说客户端发起一个请求,nameserver先根据dataserver的
容量和负载 来选择一个dataserver来做为所有dataserver的master(除非master宕机,不会更换,宕机则自动重新选择)然后根据ns.conf的配置的备份数全部写入,才向nameserver和客户端返回操作成功信息。
OK,开始试试:
我们测试上传一张test.jpg,大小为1997540,记住这个大小,一会读取的时候对比下。

 

 /usr/local/tfs/bin/tfstool -s 192.168.0.10:8888

淘宝TFS分布式文件系统亲测

 

这 里我使用put上传/opt/test.jpg这张图,顺便说下,TFS目 前限制了文件大小为2M, 适合于一些小于2M数 据的存放。终端默认上传命令put ,超过2M用putl,回车后会返回一大堆字符,注意看最后一行是fail还是success,如果是fail,请检测下配置文件、端口等。如果是 success则说明已经上传上去。

淘宝TFS分布式文件系统亲测

 

 

 往返回的信息上找些我们要的数据 : Block ID和block中的File ID;我们传的文件大小为1997540,下图可以看到文件被割成2个块 1048576和948964 ;储存在192.168.0.25  blockid: 889, fileid: 1

淘宝TFS分布式文件系统亲测

 

 到这里文件写入就完成了。

读取文件:

现在我们有几个信息:
192.168.0.25上的
blockid: 889, fileid: 1   上传了一个1997540的文件(test.jpg)
好的,我们上去把它取出来。取文件的机器在linux只要有ds-client这个命令文件就可以,拷过来既可用。不一定要在name\data的其中一台上。
取之前,我们先来看个东西,看一个块里面存了什么

/ust/local/tfs/bin/ds_client -d 192.168.0.25:9998
list_file 889

淘宝TFS分布式文件系统亲测

 
 上图可以看到,block 889 里面只有一个文件fileid 1   size为1997540(跟我们上传的一样大)。
取出来:

read_file_data  889 1 /tmp/test1.jpg
 没有报错。我们去看看/tmp/test141.jpg

���宝TFS分布式文件系统 + php接口亲测

 是的,我们取出来了!!!
还没有完,tfs的强项我们还没看到,这里展示下:
刚刚我们是去192.168.0.25取文件,我们到另一台dataserve_192.168.0.13取看看,就当是25这台宕机了(备注:192.168.0.13 dataserver设置的监听端口是9999)

/ust/local/tfs/bin/ds_client -d 192.168.0.13:9999      \\同样取blockid: 889, fileid: 1 保存成test2.jpg
DataServer> read_file_data 889 1 /tmp/test2.jpg

也是成功的!然后我们对比下test1.jpg和test2.jpg
是的,是一样的!

错误汇总

1、ERROR create_fs_dir (blockfile_manager.cpp:1093) [-1208535344] make extend dir:/data/tfs1/extend/ error. ret: -1, error: 17

create tfs file system fail. ret: 1

/root/tfs_bin/scripts/stfs clear 1 已经存储分块,必须先清除

2、load_super_blk (blockfile_manager.cpp:684) [47494488000608] read super block error. ret: -2, desc: No such file or directory

忘记执行stfs format (n)

3、dataserver put 写入失败

配置多个dataserver 使用put写入时候出现以下错误

原因是 最大备份数和最小备份数不能采取默认值

max_replication = 2

min_replication = 1

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/f6692bab673fa67b105a8073a1051791.html