2012-05-05 01:15:57|  分类: 分布式文件系统 |  标签:淘宝tfs  tfs  tfs分布式文件系统  分布式文件系统  |字号 订阅

from:博客地址:
http://blog.163.com/a12333a_li/ 
李坤山

2012-5-8 修改:
使用了centos5.4 64位系统
tfs -Version=2.1.1
#行表示注释

对于淘宝TFS分布式文件系统的功能、原理、优势等就不多做介绍了,这里主要说明配置方面。
如果你对TFS一无所知,那直接跳到第(四)部份,看看它能做什么吧。
有想了解的同学可访问TFS开源官网:

         tfs相关文档:http://code.taobao.org/p/tfs/wiki/index/

tfs交流论坛:http://code.taobao.org/p/tfs/issues/

新浪微博: @淘宝tfs


系统环境:
3台 64位centos5.4    1G内存
nameserver    192.168.41.140
dataserver1    192.168.41.141
dataserver2    192.168.41.142  
下面的一些配置不考虑单机跑多个dataserver、 dataserver+ nameserver 的情况.
一些普通的命令我就不注释了,不明白的可以新浪微博上@li_83  

一:
下载安装(亦可参照官网):
svn co http://code.taobao.org/svn/tfs/branches/tfs-dev-2.1.1  tfs   //版本
yum install -y libuuid-devel zlib-devel mysql-devel     //一些基本库
yum install  e4fsprogs e4fsprogs-devel -y     //ext4
svn checkout http://code.taobao.org/svn/tb-common-utils/trunk/ tb-common-utils
cd    tb-common-utils/
export TBLIB_ROOT="/usr/local/tb/lib"    //定于tbsys和tbnet的安装目录
chmod 777 build.sh 
./build.sh 
cd  ..
cd  tfs-1.4
./build.sh init
./configure --prefix=/usr/local/tfs
make
#如果make出错执行以下语句
find ./ -name  Makefile -exec sed -i 's/\-Werror//g' {} \;    //忽烈一些警告信息
#如果提示数据库出错 
#修改mysql_database_helper.cpp 
#include </usr/local/mysql/include/mysql/mysql.h>   //原文值<mysql.h>根据自己的mysql路径修改,可用find查找.
#include </usr/local/mysql/include/mysql/errmsg.h> //原文<errmsg.h >同上
#如果提示
checking if MySQL version is >= 5.1.48... no  到mysql去下个   MySQL高于5.1.48的rpm包,我用的是5.1.62.下载地址:
#http://mysql.ntu.edu.tw/Downloads/MySQL-5.1/MySQL-server-community-5.1.62-1.rhel5.x86_64.rpm
#http://mysql.ntu.edu.tw/Downloads/MySQL-5.1/MySQL-devel-community-5.1.62-1.rhel4.x86_64.rpm
#如果提示找不到/usr/local/tfs/scripts/cs_sync  
# 把tfs下的cs_sync.sh复制成cs_sync 执行:cp -a ./scripts/cs_sync.sh /usr/local/tfs/scripts/cs_sync
make
make install
到这里安装就结束了,其实任何工具安装都不难,难的是怎么配置,维护,调优。嗯,继续吧

二:
配置:
目前的情况
tfs安装在 /usr/local/tfs 
tbsys、tbnet 安装在  /usr/local/tb/
 /usr/local/tfs/conf/共有三个文件需要配置:
ns.conf、ads.conf和ds.conf 
其中
ns.conf  用于启动nameserver                        
//只运行dataserver的服务器不用配置。
ads.conf和ds.conf   用于启动dataserver     //只运行nameserver的服务器不用配置。
nameserver和dataserver的启动顺序不限
这里直接贴测试后的配置文件:
a)      ns.conf  ns.conf  ns.conf  ns.conf  ns.conf  ns.conf  ns.conf  ns.conf  ns.conf 
nameserver   IP  192.168.41.151  需要修改的加深了

cat  ns.conf
[public]
##日志文件的size,默认 1GB
log_size=1073741824

#保留日志文件的个数,默认 64
log_num = 4

#日志文件的级别, 默认 debug
log_level = error       //不然日志会很大

#工作队列size,  默认  10240
task_max_queue_size = 10240

#nameserver监听端口
port =8888

#工作目录,也就是tfs的安装目录
work_dir=/usr/local/tfs

#网络设备,即通信网卡,一般用内网
dev_name= eth0

#工作线程池 default  4
thread_count = 4

#本机IP地址(vip),配置ha时为vip,没配置可以为主ns的ip
ip_addr = 192.168.41.140

[nameserver]

#系统保护时间,单位(秒), default: 300
#保护时间内不进行任何操作,包括添加block等
safe_mode_time = 300 

#nameserver IP地址列表(master, salve的ip地址,只能以'|'分隔)
#单台nameserver时,另一个ip配置为无效ip即可
ip_addr_list = 192.168.41.140|192.168.0.2

#Ip地址 mask
#用于区分dataserver所在的子网,选择不同子网的dataserver备份数据 
group_mask = 255.255.255.255

#Block size的最大值, 单位(字节)  
block_max_size = 7549747     //这个值到底怎么配置好,有待实验。 必须 >= dataserver的mainblock_size,推荐设置一致。 
#Block 最大备份数, default: 2   
#单台dataserver时,需要配置为1
max_replication = 1

#Block 最小备份数, default: 2
#单台dataserver时,需要配置为1
min_replication = 1

#DataServer 容量使用的百分比, default: 98
use_capacity_ratio = 98

#Block使用的百分比, default: 95
block_max_use_ratio = 98

#Dataserver 与 nameserver 的心跳时间, 单位(秒), default: 2
heart_interval = 2

# object 死亡的最大时间, 单位(秒), default: 86400
object_dead_max_time = 3600

# 集群号 
cluster_id = 1

# Block当前备份数与最大备份数百分比,如果大于这个百分比,就开始复制
replicate_ratio_ = 50

#每个DataServer 主可写块的大小, default: 3
max_write_filecount = 16

#dataserver 与 nameserver 的心跳线程池的大小, default: 2
heart_thread_count = 2 

#dataserver 与 nameserver 的心跳工作队列的大小, default: 10
heart_max_queue_size = 10

#block 缺失备份时, 需要等待多长时间才进行复制, 单位(秒), default: 240
repl_max_time = 60

#block进行压缩的比例, block 删除的文件的比例达到这个值时进行压缩
compact_delete_ratio =  15  

#block进行压缩时, dataserver的最大负载,超出这个值dataserver,不进行压缩
compact_max_load = 200

# object 清理的时间, 单位(秒), default: 300
object_clear_max_time = 300

#nameserver上出现租约等待时, 阻塞线程最大个数, 这个值最好是工作线程的一半
max_wait_write_lease = 15

#租约删除的最长时间, 单位(小时), default: 1
lease_expired_time = 3

#最大租约超时时间
max_lease_timeout = 3000

#清理租约的阀值, default: 102400
cleanup_lease_threshold = 102400

#创建计划的间隔时间, 单位(秒), default: 30
build_plan_interval = 10

#计划超时时间, 单位(秒), default: 120
run_plan_expire_interval = 120

#创建计划的百分比, 计划数量 = dataserver 数量 * build_plan_ratio
build_plan_ratio = 25

#定时dump统计信息的间隔时间, 单位(微秒), default: 60000000
dump_stat_info_interval = 60000000 

#创建计划等待时间, 主要用有很多紧急复制时,单位(秒), default: 2
build_plan_default_wait_time = 2 

#负载均衡时block相关的个数(这个参数有点问题, 以后会改成百分比), default: 5
balance_max_diff_block_num = 5

#每次新增Block的个数, default: 3
add_primary_block_count = 3

#存储block桶的个数, default: 32
block_chunk_num = 32

#每个任务处理的预期时间, 单位(微秒), default: 200
task_percent_sec_size = 200 

#每个任务队列的最大
size 
task_max_queue_size = 10000

#同步日志缓冲区slot的大小, 超出这个值会写入磁盘, default: 1
oplog_sync_max_slots_num = 1024

#同步日志线程池的大小, default: 1
oplog_sync_thread_num = 1


b1)   ds.conf  ds.conf  ds.conf  ds.conf  ds.conf  ds.conf  ds.conf  ds.conf  ds.conf  ds.conf 
dataserver1    192.168.41.141   总的有2个文件 ds.conf 、ads.conf  [dataserver2]只要改下对应的IP即可
cat  ds.conf
[public]
#日志文件的size,默认 1GB
log_size = 1073741824
#保留日志文件的个数, 默认  64
log_num = 4

#日志文件的级别,  默认  debug
log_level = error
#工作队列size,  默认  10240
task_max_queue_size = 10240
#dataserver监听端口
port = 9998
#工作目录 tfs安装目录
work_dir=/usr/local/tfs
#网络设备 一般值内网,与nameserver通信的网卡
dev_name= eth0
#工作线程池 default 4
thread_count = 4
#本机IP地址
ip_addr = 192.168.41.141
[dataserver]
#NameServer 地址 如果有ha,用ha的vip地址
ip_addr = 192.168.41.140

#!nameserver IP地址列表(master, salve的ip地址,只能以'|'分隔)  nameserver主从IP
ip_addr_list = 192.168.41.140|192.168.0.2
#NameServer 监听的端口,必须写nameserver上配置的端口
port = 8888
#备集群NameServer的vip地址, 可以不用配置
#slave_nsip = 192.168.0.2

#备集群NameServer监听端口, 可以不用配置
#slave_nsport = 9999
#dataserver 与 nameserver心跳间隔时间, 单位(秒), default: 2
heart_interval = 2
check_interval = 2

#datafile失效时间, 单位(秒), default: 90
#expire_datafile_time = 90

#拷贝一个Block超时时间, 单位(秒), default: 180
#expire_clonedblock_time = 180

#压缩一个Block超时时间, 单位(秒), default: 600
#expire_compactblock_time = 600
#复制Block线程池的大小, default: 2
replicate_threadcount = 2

#是否写同步日志, defalut: 1
#write_sync_flag = 1
#block 最大size
block_max_size = 7549747       // 这个定义不是明白,跟下面的mainblock_size有什么区别,有什么联系,待更新

#定时dump统计信息的间隔时间, 单位(秒), default: 60
dump_visit_stat_interval = 60

#io操作的阀值, 超过此值时, 会警告
#max_io_warning_time = 0

#备件类型, 1: tfs, 2: nfs
backup_type = 1

#备件路径
backup_path = /mnt

#最大datafile值, default: 50
#max_data_file_nums = 50

#crc error的最大个数
#max_crc_error_nums = 4

#eio error的最大个数
#max_eio_error_nums_ = 6

#超时block检测时间, 单位(秒)
#expire_checkblock_time = 86000

#cpu使用率
#max_cpu_usage = 60

#dump 统计信息的间隔时间, 单位(微秒)
#dump_stat_info_interval = 60000000

#mount路径 很关键,一定要写对,不用加id号 如hda1挂载在/data/tfs1,也就是格式化成ext4的磁盘挂载点。
mount_name = /data/tfs 
#mount 时磁盘的大小, 单位(KB)  //这个功能不知道为什么要限制
mount_maxsize = 4194304     //最大的挂载空间,如果你的/data/tfs1有1T,而这里是设置了4G ,那只有4G的块可用空间,剩下的全部浪费。感谢hgp7369@126的提示.

#文件系统类型: 0: no initialize, 1: ext4, 2: ext3 posix fallocate, 3: ext3 ftruncate
base_filesystem_type = 1

#超级块存存储的保留位置,default: 0
superblock_reserve = 0

#平均文件的大小, 单位(字节)
avg_file_size = 40960

#主块的大小, 单位(字节)   重点,需要与nameserver的配置一样或者比它小
mainblock_size = 7549747      //每个数据存储块的大小 

#扩展块的大小, 单位(字节)
extblock_size = 419430

#主块与扩展的比例
block_ratio = 0.5   //这个参数也有带研究

#hash桶的比例
hash_slot_ratio = 0.5
ds_thread_count = 4
#访问控制ip mask, 可选
#access_control_ipmask = 192.168.0.1
#访问控制文件路径, 可选
#access_control_file = /home/xxxxx/xxxxxx/tfs/control.file

b2)  ads.conf  ads.conf  ads.conf  ads.conf  ads.conf  ads.conf  ads.conf   ads.conf 
 dataserver1   [dataserver2]的只要改下IP即可 ads实际上这个我实验的时候没有配置也是可以用。
cat ads.conf
[public]
#日志文件的size,default 1GB
log_size=1073741824
#保留日志文件的个数,default 64
log_num = 4 
#日志文件的级别, default debug
log_level=error
#工作队列size,default 10240
task_max_queue_size = 10240
#监听端口 adminserver
port = 12000
#工作目录 tfs安装目录
work_dir=/usr/local/tfs
#网络设备 一般内网网卡,与nameserver通信网卡名称
dev_name= eth0
#工作线程池size, default 4
thread_count = 4

#本机ip地址
ip_addr = 192.168.41.141
[adminserver]
#检测的间隔时间, 单位(秒), default: 5
check_interval = 5
#失败的次数的阀值, default: 5
check_count = 5
#死亡个数的阀值
warn_dead_count = 3
#kill server之前等待时间
ds_fkill_waittime = 15
#dataserver启动命令脚本
ds_script = /usr/local/tfs/bin/dataserver -f /usr/local/tfs/conf/ds.conf -d
#监控的dataserver列表
ds_index_list = 1,2,3
[nameserver]
#!NameServer的vip
ip_addr = 192.168.41.140

#!NameServer监听的端口
port = 8888
[dataserver]
#!DataServer监听的端口
port = 9999

#!DataServer lock file路径
lock_file = /usr/local/tfs/logs/dataserver

#!DataServer 加载点路径
mount_name = /data/tfs

到这里配置文件就结束了,好好理解上的一些注释。

三:
启动服务:
nameserver启动:
执行scripts目录下的tfs
cd /usr/local/tfs/scripts
./tfs start_ns 
执行正常返回:
淘宝TFS分布式文件系统 + php接口 [亲测] - 李坤山 - 李坤山的断悬的linux
 
 查看监听端口:
淘宝TFS分布式文件系统 + php接口 [亲测] - 李坤山 - 李坤山的断悬的linux
 
说明nameserver启动成功。

dataserver启动:
首先需要格式化一个分区为ext4文件系统,并挂载到/data/tfs1至/data/tfs(i),其中i为磁盘号。注意上面的 mount_name = /data/tfs  没有加(i) 
假设你是用虚拟机,添加一个硬盘hda,然后执行:
fdisk /dev/hda
n   //具体看fdisk用法
e   //具体看fdisk用法
 //具体看fdisk用法
mkfs.ext4 /dev/hda11
mount /dev/hda1 /data/tfs1/
淘宝TFS分布式文件系统 + php接口 [亲测] - 李坤山 - 李坤山的断悬的linux
 这样就挂载上去了
cd /usr/local/tfs/scripts 
stfs format 1   (1为挂载点的序号 具体可以看官网说明) //分配第一个存储区
./scripts/tfs start_ds 1  //启动dataserver的存储区1
淘宝TFS分布式文件系统 + php接口 [亲测] - 李坤山 - 李坤山的断悬的linux
 检测与nameserver的通讯
192.168.41.141
淘宝TFS分布式文件系统 + php接口 [亲测] - 李坤山 - 李坤山的断悬的linux
192.168.41.142
淘宝TFS分布式文件系统 + php接口 [亲测] - 李坤山 - 李坤山的断悬的linux
  OK,一切正常。

四:
验证:
首先保证服务已经全部启动!
确认防火墙没有阻止到连接!
查看dataserver连接情况:
在nameserver端执行ssm命令查看检查到的dataserver的一些基本情况。
 /usr/local/tfs/bin/ssm -s 192.168.41.140:8888  
server -b    \\随即列出dataserver的block块
淘宝TFS分布式文件系统 + php接口 [亲测] - 李坤山 - 李坤山的断悬的linux
 server -w     \\随机列出dataserver的可写块 
machine -a 
  \\列出dataserver的使用报道。
淘宝TFS分布式文件系统 + php接口 [亲测] - 李坤山 - 李坤山的断悬的linux
 
 这里需要注意如果用server -b 、-w后面的BLOCK数字,如果是0,说明没有可写块。检测ns  ads ds的配置文件,包括备份个数、主块大小知否一致.
如果看到上面的信息,那基本没问题了。
用tfstool上传一张图片:
这里稍微解释下TFS写流程的一些基础知识,引用官网的话
客户端首先向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,开始试试:
我们测试上传一张a12333a_li.jpg,大小为1550162,记住这个大小,一会读取的时候对比下。
淘宝TFS分布式文件系统 + php接口 [亲测] - 李坤山 - 李坤山的断悬的linux
 /usr/local/tfs/bin/tfstool -s 192.168.41.140:8888
淘宝TFS分布式文件系统 + php接口 [亲测] - 李坤山 - 李坤山的断悬的linux
 
这里我使用put上传/root/a12333a_li.jpg这张图,顺便说下,TFS目 前限制了文件大小为2M, 适合于一些小于2M数 据的存放。终端默认上传命令put ,超过2M用putl,回车后会返回一大堆字符,注意看最后一行是fail还是success,如果是fail,请检测下配置文件、端口等。如果是success则说明已经上传上去。
淘宝TFS分布式文件系统 + php接口 [亲测] - 李坤山 - 李坤山的断悬的linux
 往返回的信息上找些我们要的数据 : Block ID和block中的File ID;我们传的文件大小为1550162,下图可以看到文件被割成2个块 1048576和501586 ;储存在192.168.41.141  blockid: 3022, fileid: 1
淘宝TFS分布式文件系统 + php接口 [亲测] - 李坤山 - 李坤山的断悬的linux
 
 到这里文件写入就完成了。
读取文件:
现在我们有几个信息:
192.168.41.141 上的 
blockid: 3022, fileid: 1   上传了一个1550162 的文件(a12333a_li.jpg)
好的,我们上去把它取出来。取文件的机器在linux只要有ds-client这个命令文件就可以,拷过来既可用。不一定要在name\data的其中一台上。
取之前,我们先来看个东西,看一个块里面存了什么

/ust/local/tfs/bin/ds_client -d 192.168.41.141:9998
list_file 3022
淘宝TFS分布式文件系统 + php接口 [亲测] - 李坤山 - 李坤山的断悬的linux
 上图可以看到,block 3022 里面只有一个文件fileid 1   size为1550162(跟我们上传的一样大)。
取出来:

read_file_data  3022 1 /tmp/test141.jpg
淘宝TFS分布式文件系统 + php接口 [亲测] - 李坤山 - 李坤山的断悬的linux
 没有报错。我们去看看/tmp/test141.jpg
淘宝TFS分布式文件系统 + php接口 [亲测] - 李坤山 - 李坤山的断悬的linux
 是的,我们取出来了!!!
还没有完,tfs的强项我们还没看到,这里展示下:
刚刚我们是去192.168.41.141取文件,我们到另一台dataserve_192.168.41.142取看看,就当是141这台宕机了(备注:192.168.41.142 dataserver设置的监听端口是9999)

/ust/local/tfs/bin/ds_client -d 192.168.41.142:9999      \\同样取blockid: 3022, fileid: 1 保存成test142.jpg淘宝TFS分布式文件系统 + php接口 [亲测] - 李坤山 - 李坤山的断悬的linux
也是成功的!然后我们对比下test141.jpg和test142.jpg
淘宝TFS分布式文件系统 + php接口 [亲测] - 李坤山 - 李坤山的断悬的linux
是的,是一样的!

PHP接口:
tfs的php接口暂时还依赖rcserver这点让我觉得有点吃惊,觉得有点多余,而rcserver直接又与mysql有关系,至今我还不是很明白rcserver给的数据表里面各字段的含义。所以在php接口上,还是有点问题。
今天先把tfs的php插件先写出来,一开始安装这个插件真是费了很多劲,后来在雪崖(淘宝)童鞋的帮助下,终于解决了问题.
测试
环境
64位Centos的
tft --versoion  2.1.1
tail --version   2.3
php --version  5.3.9    //  5.2.x的环境没有测试,
雪崖给的php版本是20090626
方法:
1.安装淘宝的tair
   wget http://code.taobao.org/p/tair/file/19/tair-2.3-46.el5.x86_64.rpm
   rpm -ivh tair-2.3-46.el5.x86_64.rpm
 2.配置系统环境变量
   export TFS_ROOT='/usr/local/tfs'       //tfs的安装目录
   export TBLIB_ROOT='/usr/local/tb/lib'    //tbsys和tbnet的lib目录
   export TAIR_ROOT='/opt/csr/tair-2.3'     //tair的安装路径
3.编译安装tfs的php插件
   cd /root/tfs/src/phpclient
  /usr/local/php/bin/phpize --clean                                                                                             
  /usr/local/php/bin/phpize
  ./configure --with-php-config=/usr/local/php/bin/php-config
   cp -a  ../new_client/fsname.h  ./              //否则make的时候会提示错误
   cp -a  ../common   ./   //否则make的时候会提示错误 
   find ./ -name  Makefile -exec sed -i 's/\-Werror//g' {} \;      //否则make的时候会提示错误
   make
   make install   
   之后会生成在/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/(路径跟php的安装环境有关系)下生成一个tfs_client.so 文件,把它添加到php.ini里面即可。
  查看插件是否生效方式  /usr/local/php/bin/php  -m  当然,你也可以用phpinfo的形式来看
  淘宝TFS分布式文件系统 + php接口 - 李坤山 - 李坤山VS断悬
 php的插件就到这里结束。
 php接连tfs中间还有个rcserver,这个问题还没解决,把我的问题贴出来,如果有谁已经解决,一定要告诉我,谢谢了!
 rcserver我跟tfs的nameserver放在同一台。
 rcserver依赖mysql数据库,我们把数据库放在192.168.41.158
 cd tfs/sql/rcs
 mysql -uroot -p 
 >create database tfs_stat;
 >exit
  mysql tfs_stat <./create_table.sql
  mysql tfs_stat <./rc_test_info.sql
这样数据库里面的数据是淘宝提供的一些测试数据,需要改成自己环境的配置,这里我测试了很久,都没办法php解决接连问题,给的错误提示没看明白错在哪里。
cd /usr/local/tfs/conf
vi rc.conf   输入:
######
[public]
    log_level = info     (方便调试,线上感觉用error好点)
    log_num = 20
    log_size = 134217728
    work_dir = /usr/local/tfs

    thread_count = 4
    ip_addr = 192.168.41.140    //rcserver所在的IP
    dev_name = eth0        
    port = 7777   //监听端口

[rcserver]
    rc_monitor_interval = 60
    rc_stat_interval = 30
    rc_update_interval = 10
    rc_db_info = 192.168.41.158:3306:tfs_stat    //数据库信息
    rc_db_user = a12333a_li    //数据库用户
    rc_db_pwd = 123456           //数据库密码
#######
   启动rc服务:
    /usr/local/tfs/scripts/tfs start_rc
   淘宝TFS分布式文件系统 + php接口 - 李坤山 - 李坤山VS断悬
   然后切回到php的那台
  cd  tfs/tests/phpclient     //源包的目录
  执行
  /usr/local/php/bin/php  test.php 192.168.41.140:7777     tappkey00001                192.168.41.142 
  PHP          rcserver:port                key(在数据库里面)        本机IP
 我就栽在这里了,老是提示错误,错误提示:

 淘宝TFS分布式文件系统 + php接口 - 李坤山 - 李坤山VS断悬
 这是为什么呢。。。
待更新....
2012.6.16

分享到:        
阅读(3328)| 评论(9)| 转载 (0) |举报

最近读者

登录后,您可以在此留下足迹。
       

评论

点击登录|昵称:
 
10-16 09:41
天上一片云
请问博主知不知道TFS如何支持http访问的?TFS没有目录结构,难道所有文件都在/目录下?
回复
09-05 10:47
木叶
博主,在PHP插件第步的步骤能不能详细的解说一下个步骤的操作,感觉有点看不懂,
回复
09-06 11:46
 李坤山 回复 木叶
跟php的版本有关系,不知道你使用的是php几。
“php --version  5.3.9    //  5.2.x的环境没有测试,雪崖给的php版本是20090626”
雪崖是TFS的开发人员。
回复
09-05 11:10
木叶
博主 如果PHP是RPM包安装的,要怎么来支持TFS呢
回复
09-05 10:47
木叶

第3步那里

回复
08-20 13:57
请教一下博主,TFS和ZooKeeper相比怎么样啊,比如易用性、速度之类 的
回复
谢谢博主,太给力了,学习了
回复
05-07 13:36
ds中的mount_name所填写的路径必须存在,不然ds将无法启动,亲身经历,觉得淘宝应该改一下
mount_maxsize 这个要根据盘符的可用大小来设定,如果盘有1T,但是使用默认的配置大小,那就是这个盘只有4G的空间可用来存放文件,别的空间将不会被利用到
回复
05-08 23:21
谢谢关注。
ds中的mount_name所填写的路径必须存在,这个是必须的,否则在stfs format n 分配存储区的时候就应该出错了。存储区分配成功后,系统马上分配了很多mainblock_size 大小的块文件。ls /data/tfs1/
回复