一、 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,没配置可以为主ns的ip
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
3、dataserver中 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
2.安装ext4格式工具
yum –y install e4fsprogs e4fsprogs-devel
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.查看挂载分区
2、存储区预分配 执行scripts下的stfs format n (n为挂载点的序号,具体用法见stfs的Usage)。例如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)
3、dataserver put 写入失败
配置多个dataserver 使用put写入时候出现以下错误
原因是 最大备份数和最小备份数不能采取默认值
max_replication = 2
min_replication = 1