TFS是一个高可扩展、高可用、高性能、面向互联网服务的分布式文件系统,其设计目标是支持海量的非结构化数据的存储;TFS使用C++语言开发,需要运行在64bit Linux OS上,本文介绍如何在Linux环境编译安装TFS。

安装依赖的软件包

automake TFS基于automake工具构建

yum install automake.noarch

libtool automake需要使用libtool

yum install libtool.x86_64

realine 用于命令行编辑的库

yum install readline-devel.x86_64

libz-devel 用于数据压缩/解压缩

yum install zlib-devel.x86_64

uuid-devel 用于生成全局唯一ID

yum install e2fsprogs-devel.x86_64 

(安装这个还会报错error: uuid/uuid.h: No such file or directory),如下安装libuuid-devel即可。

  yum install libuuid-devel

tcmalloc google的内存管理库
需要先安装libunwind,源码安装http://ftp.twaren.net/Unix/NonGNU//libunwind/libunwind-1.1.tar.gz
源码安装gperftools http://gperftools.googlecode.com/files/gperftools-2.1.tar.gz

安装tb-common-utils
TFS使用tb-common-utils软件包,tb-common-utils包含淘宝使用的基础系统库tbsys和网络库tbnet两个组件;安装tb-common-utils前需要设置环境变量TBLIB_ROOT,tbsys和tbnet将会被安装TBLIB_ROOT对应的路径(必须是绝对路径)下,TFS会在这个路径下查找tbsys、tbnet头文件和库。

设置TBLIB_ROOT环境变量

在~/.bash_profile文件中加入,export TBLIB_ROOT=/usr/local/bin/, 然后执行source ~/.bash_profile
下载源码

# svn co -r 18 http://code.taobao.org/svn/tb-common-utils/trunk tb-common-utils

注意: 这里不要checkout最新版本,version18以后的修改导致部分接口不能前向兼容。编译安装

# cd tb-common-utils
# sh build.sh

如果一切顺利,tb-common-utils已经安装成功到$TBLIB_ROOT路径下;

安装TFS
TFS开源用户大都只使用TFS的基本功能,所以这个版本我们默认只编译TFS的nameserver,dataserver,client和tool,以去除对mysql的依赖,需要使用到rcserver(全局资源管理服务),metaserver(TFS自定义文件名服务)的用户请自行编译安装这两个服务。

下载源码

# svn co http://code.taobao.org/svn/tfs/branches/dev_for_outer_users

tfs编译安装

# cd tfs
# sh build.sh init
# ./configure --prefix=/tfs --with-release
# make
# make install

—prefix 指定tfs安装路径,默认会被安装到~/tfs_bin目录
—with-release 指定按release版本的参数进行编译,如果不指定这个参数,则会按开发版本比较严格的参数编译,包含-Werror参数,所有的警告都会被当错误,在高版本gcc下会导致项目编译不过,很多开源用户反馈的编译问题都跟这个有关,因为gcc高版本对代码的检查越来越严格,淘宝内部使用的gcc版本是gcc-4.1.2。

配置参考下面链接中部署篇即可。

启动

格式化数据目录

./scripts/stfs format 1
format ds 1 SUCCESSFULLY
mount name: /export/data/disk1 max mount size: 10000000 base fs type: 1 superblock reserve offset: 0 main block size: 75497472 extend block size: 4194304 block ratio: 0.5 file system version: 1 avg inner file size: 15360 hash slot ratio: 0.5
[2014-05-19 23:02:49] INFO blockfile_manager.cpp:1091 [139868697216800] super block mount point: /export/data/disk1.
[2014-05-19 23:02:49] INFO blockfile_manager.cpp:1171 [139868697216800] cal block count. avail data space: 10186942464, main block count: 121, ext block count: 242
tag TAOBAO
mount time 1400511769
mount desc /export/data/disk1
max use space 10240000000
base filesystem 1
superblock reserve 0
bitmap start offset 324
avg inner file size 15360
block type ratio 0.5
main block count 121
main block size 75497472
extend block count 242
extend block size 4194304
used main block count 0
used extend block count 0
hash slot ratio 0.5
hash slot size 2730
first mmap size 122880
mmap size step 4096
max mmap size 3686400
version 1
[2014-05-19 23:02:49] INFO blockfile_manager.cpp:1213 [139868697216800] cal bitmap count. item count: 364, slot count: 46

启动ns和ds,由于单机,各种配置都最简化。

./scripts/tfs start_ns
nameserver is up SUCCESSFULLY pid: 4717
./scripts/tfs start_ds 1
dataserver 1 is up SUCCESSFULLY pid: 4187

可选:

./scripts/tfs start_meta

./scripts/tfs start_rs

测试:

./bin/tfstool -s 198.58.98.112:8100 -i "put ./1.png"
put ./1.png => T19RETByJT1RCvBVdK success.
./bin/tfstool -s 198.58.98.112:8100 -i "get T19RETByJT1RCvBVdK /tmp/1.png"

安装配置nginx-tfs

安装json库yajl

git clone https://github.com/lloyd/yajl.git
cd yajl
./configure && make && make install

安装nginx 1.4.7(1.6.0 nginx-tfs模块编译报错)或tengine

nginx 1.4.7:

./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-ipv6 --add-module=../nginx-tfs-master/

make && make install

tengine:

./configure –prefix=/usr/local/tengine –add-module=/root/nginx-tfs-master/

make && make install

配置:

http {
tfs_upstream tfs_ns {
server 127.0.0.1:8100;
type ns;
#rcs_zone name=tfs1 size=128M;
#rcs_interface eth0;
#rcs_heartbeat lock_file=/logs/lk.file interval=10s;
}

tfs_body_buffer_size 2m;
tfs_send_timeout 3s;
tfs_connect_timeout 3s;
tfs_read_timeout 3s;

server {
listen 7500;
server_name 127.0.0.1;
client_max_body_size 4096m;

tfs_keepalive max_cached=50 bucket_count=10;
tfs_log "pipe:/usr/sbin/cronolog -p 30min /usr/local/nginx/logs/cronolog/%Y/%m/%Y-%m-%d-%H-%M-tfs_access.log";

location / {
tfs_pass tfs://tfs_ns;
}
}
}

如有多个vhost,需要端口转发。

测试:

#curl --data-binary @/tmp/m.png http://img.tietu.org/v1/tfs?suffix=.png\&simple_name=1
{
"TFS_FILE_NAME": "T1EtYTByJT1RCvBVdK.png"
}

参考:
TFS使用文档-安装篇 http://blog.yunnotes.net/index.php/install_document_for_tfs/
TFS使用文档-部署篇 http://blog.yunnotes.net/index.php/deploy_document_for_tfs/


ccj 于 11 天前 修改
0 回复
需要 登录 后方可回复, 如果你还没有账号你可以 注册 一个帐号。