设置开机自动挂载
[root@loctfs scripts]# vi /etc/fstab
/dev/sdb1 /data/tfs1 ext4 defaults 1 2
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为挂载点的序号 具体可以看官网说明) //分配第一个存储区
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
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块
server -w \\随机列出dataserver的可写块
machine -a \\列出dataserver的使用报道。
这里需要注意如果用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
这 里我使用put上传/opt/test.jpg这张图,顺便说下,TFS目 前限制了文件大小为2M, 适合于一些小于2M数 据的存放。终端默认上传命令put ,超过2M用putl,回车后会返回一大堆字符,注意看最后一行是fail还是success,如果是fail,请检测下配置文件、端口等。如果是 success则说明已经上传上去。
往返回的信息上找些我们要的数据 : Block ID和block中的File ID;我们传的文件大小为1997540,下图可以看到文件被割成2个块 1048576和948964 ;储存在192.168.0.25 blockid: 889, fileid: 1
到这里文件写入就完成了。
读取文件:现在我们有几个信息:
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
上图可以看到,block 889 里面只有一个文件fileid 1 size为1997540(跟我们上传的一样大)。
取出来:
read_file_data 889 1 /tmp/test1.jpg
没有报错。我们去看看/tmp/test141.jpg
是的,我们取出来了!!!
还没有完,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