一、 tfs安装 1、软件包

需要确保安装了automake autoconfig 和 libtool,使用auotmake --version查看,一般情况下已安装 、gtest库(http://code.google.com/p/googletest/downloads/list)、安装tbsys和tbnet(http://code.taobao.org/svn/tb-common-utils/trunk/ tb-common-utils)

2、安装

编译和安装tbnet, tbsys

取得源代码后, 先指定环境变量 TBLIB_ROOT为需要安装的目录。这个环境变量在后续tfs的编译安装中仍旧会被使用到. 比如要安装到当前用户的lib目录下, 则指定

svn checkout  http://code.taobao.org/svn/tb-common-utils/trunk/ tb-common-utils

cd tb-common-utils

export TBLIB_ROOT="/usr/local/lib"

chmod 755 build.sh

./build.sh 进如安装流程执行相关编译。

tar -jxvf gtest-1.6.0.tar.bz2

cd gtest-1.6.0

./configure

make

编译安装tfs

进入 tfs 目录
运行 ./build.sh init
运行 ./configure

安装mysql 存在依赖关系然后安装mysql-devel

yum install mysql-devel
运行 make 进行编译

[rmsyncoplog.o] 错误 1 make[3]: Leaving directory `/home/tfs/src/tools/nameserver' make[2]: * [all-recursive] 错误 1 make[2]: Leaving directory `/home/tfs/src/tools' make[1]: * [all-recursive] 错误 1 make[1]: Leaving directory `/home/tfs/src' make: * [all-recursive] 错误 1

如出现以上错误 因为系统非64位导致
运行 make install 进行安装

其他安装配置

安装:

安装底层开发包

svn checkout  http://code.taobao.org/svn/tb-common-utils/trunk/ tb-common-utils

export TBLIB_ROOT="/tb/lib"

mdkir -p /tb/lib
cd tb-common-utils

chmod 755 *.sh

./build.sh

进行安装

wget http://googletest.googlecode.com/files/gtest-1.6.0.zip

tar -jxvf gtest-1.6.0.tar.bz2

cd gtest-1.6.0

./configure

make;make install

echo "/usr/local/lib" >/etc/ld.so.conf

ldconfig

cd /root/tfs

chmod 755 *.sh

./build.sh init

./configure --prefix=/usr/local/tfs

make

make install

配置TFS

tfs会被编译安装至目录:~/tfs_bin。~/tfs_bin/conf目录提供了tfs.conf实例配置。共有三个配置文件:ns.conf、ads.conf和ds.conf,其中ns.conf用于启动nameserver, ads.conf和ds.conf用于启动dataserver。
nameserver和dataserver的启动顺序不限

1.TFS的Nameserver(172.16.23.176)主配置[ns.conf配置文件]

[public]

#日志文件的size,default 1GB
log_size=1073741824

#保留日志文件的个数,default 64
log_num = 64

#日志文件的级别, default debug
log_level=debug

#工作队列size, default 10240
task_max_queue_size = 10240

#监听端口, 1024 ~ 65535
port = 8108

#工作目录
work_dir=/usr/local/tfs

#网络设备
dev_name= eth0

#工作线程池 default 4
thread_count = 4

#本机IP地址(vip),配置ha时为vip,没配置可以为主nsip
ip_addr = 172.16.23.175

[nameserver]

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

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

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

group_mask = 255.255.255.255

#Block size的最大值, 单位(字节)
block_max_size = 83886080

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

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

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

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

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

# 集群号
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: 86400
object_dead_max_time = 86400

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

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

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

#清理租约的阀值, 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

task_max_queue_size = 10000

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

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

3dataserver ds.conf配置

[public]

#日志文件的size,default 1GB

log_size=1073741824

#保留日志文件的个数,default 64

log_num = 64

#日志文件的级别, default debug

log_level=debug

#工作队列size, default 10240

task_max_queue_size = 10240

#监听端口, 1024 ~ 65535

port = 9998

#工作目录

work_dir = /usr/local/tfs

#网络设备

dev_name= eth0

#工作线程池 default 4

thread_count = 4

#本机IP地址(vip)

ip_addr = 172.16.23.178 #(当前dataserver ip)

[dataserver]

#!NameServer vip地址

ip_addr = 172.16.23.175 #(虚拟ip用于ha)

#!nameserver IP地址列表(master, salve的ip地址,只能以'|'分隔)

ip_addr_list = 172.16.23.176|172.16.23.177 (主从nameserver)

#!NameServer 监听的端口, 1024 ~ 55535

port =8108 #监听端口设置9999(淘宝配置)是否可行

#备集群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

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

dump_visit_stat_interval = 60

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

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

backup_type = 1

#备件路径

backup_path = /home/tfs

#最大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路径

mount_name = /home/disk (必须有disk目录 否则无法上传)

#mount 时磁盘的大小, 单位(KB)

mount_maxsize = 14194304

#文件系统类型: 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

#主块的大小, 单位(字节)

mainblock_size = 83886080

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

extblock_size = 419430

#主块与扩展的比例

block_ratio = 0.5

#hash桶的比例

hash_slot_ratio = 0.5

#启动线程数量

ds_thread_count = 4

ds.conf中关于Nameserver的三个配置项必须和ns.conf中的一致,

[dataserver]

#!NameServer vip地址
ip_addr = 172.16.23.175

#!nameserver IP地址列表(master, salve的ip地址,只能以'|'分隔)
ip_addr_list = 172.16.23.176|172.16.23.177

#!NameServer 监听的端口, 1024 ~ 55535
port = 8108 否则ds将无法和ns通信。

4、dataserver 中ads配置[ads.conf配置文件]

[public]

#日志文件的size,default 1GB

log_size=1073741824

#保留日志文件的个数,default 64

log_num = 64

#日志文件的级别, default debug

log_level=debug

#工作队列size,default 10240

task_max_queue_size = 10240

#监听端口, 1024 ~ 65535

port = 12000

#工作目录

work_dir = /usr/local/tfs

#网络设备

dev_name = eth0

#工作线程池size, default 4

thread_count = 4

#本机ip地址

ip_addr = 172.16.23.178 (当前dataserver ip)

[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 = 172.16.23.175 #(虚拟ip地址用户ha)

#!NameServer监听的端口

port = 8108

[dataserver]

#!DataServer监听的端口

port = 9998

#!DataServer lock file路径

lock_file = /usr/local/tfs/bin/dataserver

#!DataServer 加载点路径

mount_name = /home/disk

5、启动nameserver

/root/tfs_bin/scripts/tfs start_ns

6、停止nameserver

/root/tfs_bin/scripts/tfs stop_ns

7、查看nameserver运行状态

/root/tfs_bin/scripts/tfs check_ns

其它命令通过执行./tfs 脚本查看

8、dataserver配置、启动

现有TFS可以在一台服务器上启动多个DataServer进程。一般每个DataServer进程负责一个磁盘。

1、将数据盘格式化成EXT4文件系统,并挂载到/data/tfs1至/data/tfs(i),其中i为磁盘号。

启动步骤:destroyed successful

加载ext4模块,让系统支持ext4文件系统

modprobe ext4

 

image

2.安装ext4格式工具

yum –y install e4fsprogs e4fsprogs-devel

 

image

3.建立数据目录

mkdir /home/disk1

mkdir /home/disk2

mkdir /home/disk3

4.格式硬盘

mkfs.ext4 /dev/sdb

mkfs.ext4 /dev/sdc

mkfs.ext4 /dev/sdd

5.挂载硬盘(必须有新加入磁盘)

mount /dev/sdb /tmp/disk1

mount /dev/sdc /home/disk2

mount /dev/sdd /home/disk3

vi /etc/fstab

/dev/sdb /tmp/disk1 ext4 defaults 1 2

6.查看挂载分区

 

image

image

2、存储区预分配 执行scripts下的stfs format n (n为挂载点的序号,具体用法见stfsUsage)。例如stfs format 2,4-6 则会对/data/tfs2,

/root/tfs_bin/scripts/stfs format 1

/data/tfs4,/data/tfs5,/data/tfs6,进行预分配。运行完后会在生成/data/tfs2, /data/tfs4,/data/tfs5,/data/tfs6下预先创建主块,扩展块及相应的统计信息。

运行data server。有两种方法:

1、通过adminserver来启动dataserver(推荐): 执行scripts下的./tfs admin_ds

/root/tfs_bin/scripts/tfs admin_ds 默认启动3 dataserver_1 dataserver_2 dataserver_3

2、直接启动dataserver,执行scripts下的./tfs start_ds 1,2-4, 则会启动dataserver1,dataserver2,dataserver3,dataserver4。

/root/tfs_bin/scripts/tfs start_ds 1 (指定只启动一个进程)

3、检查和停止dataserver

/root/tfs_bin/scripts/tfs check_ds

/root/tfs_bin/scripts/tfs stop_ds 1 (/root/tfs_bin/scripts/tfs stop_admin)

测试dataserver写入:

/root/tfs_bin/bin/tfstool -s 172.16.23.176:8108

下载客户端:

svn co http://code.taobao.org/svn/tfs-client-java/trunk stable-2.2.3

错误汇总

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

3dataserver put 写入失败

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

 

image

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

max_replication = 2

min_replication = 1