淘宝TFS使用笔记(一):初识TFS

淘宝TFS使用笔记(一):初识TFS

一、简介

TFS(Taobao File System)是淘宝自主开发的一个分布式文件系统,适用于海量小文件存储。

官方首页:http://code.taobao.org/p/tfs/wiki/index/

SVN地址:http://code.taobao.org/svn/tfs/

wiki中已经含有详细的tfs详细介绍、部署指南、配置文件详解(基于tfs-2.2.16)

拓展:http://blog.yunnotes.net/index.php/tfs/

(阿里工程师写的tfs博客,面向广大群众,适合在官方的基础上阅读)

话说真的是很难部署,真是淘宝太(t)费(f)事(s)

二、安装

官方推荐使用gcc-4.1.2编译tfs,高版本gcc编译会出现这样或那样的问题,实际试用中情况也是如此,所以建议对c不太熟悉的,还是照着4.1.2版本来

测试环境:

OS:centos 5.8(自带gcc-4.1.2)

TFS版本:2.2.16

TB-common-utils版本:18(svn)

TAIR版本:2255(svn)

我的安装包清单:

通过centos官方yum源可以解决的

yum install uuidd zlib-devel autoconf automake libtool

Mysql

mysql-5.5.36-1.el5.remi.x86_64.rpm

mysql-devel-5.5.36-1.el5.remi.x86_64.rpm

mysql-libs-5.5.36-1.el5.remi.x86_64.rpm

其它包

libunwind-1.1.tar.gz

gperftools-2.1.zip

jemalloc-3.5.1.tar.bz2

淘宝

tb-common-utils-release-18.tar.gz #svn checkout -r 18 http://code.taobao.org/svn/tb-common-utils/trunk/ tb-common-utils

tair-release-2255.tar.gz #svn checkout http://code.taobao.org/svn/tair/trunk/ tair

tfs-release-2.2.16.tar.gz #http://code.taobao.org/svn/tfs/tags/release-2.2.16/

以下几个tfs版本都是建议淘宝厂外人员使用的

http://code.taobao.org/svn/tfs/tags/release-2.2.16/ #官方wiki介绍的版本

http://code.taobao.org/svn/tfs/branches/dev_for_outer_users/ #顾名思义厂外人员使用

http://code.taobao.org/svn/tfs/branches/stable-2.5.x/ #顾名思义稳定版

但是各版本之间有何差异?我是找不到changelog,每个版本的描述都是一模一样的…唉,用起来有点不安心

安装过程,参考我的脚本吧:

1: mkdir -p /home/install/tfs

2: cd /home/install/tfs/

3:

4: yum install uuidd zlib-devel autoconf automake libtool

5:

6: wget http://mysoft/install/tfs/mysql-5.5.tar.gz

7: wget http://mysoft/install/tfs/gperftools-2.1.zip

8: wget http://mysoft/install/tfs/jemalloc-3.5.1.tar.bz2

9: wget http://mysoft/install/tfs/libunwind-1.1.tar.gz

10: wget http://mysoft/install/tfs/tair-release-2255.tar.gz

11: wget http://mysoft/install/tfs/tb-common-utils-release-18.tar.gz

12: wget http://mysoft/install/tfs/tfs-release-2.2.16.tar.gz

13: wget http://mysoft/install/tfs/tfs-stable-2.5.x.tar.gz

14: wget http://mysoft/install/tfs/tfs-dev_for_outer_users.tar.gz

15:

16: tar zxf mysql-5.5.tar.gz

17: cd mysql

18: rpm -ivh *

19: cd ..

20:

21: tar zxf libunwind-1.1.tar.gz

22: cd libunwind-1.1

23: ./configure && make && make install

24: cd ..

25:

26: unzip gperftools-2.1.zip

27: cd gperftools-2.1

28: ./configure && make && make install

29: cd ..

30:

31: tar xf jemalloc-3.5.1.tar.bz2

32: cd jemalloc-3.5.1

33: ./configure && make && make install

34: cd ..

35:

36: tar zxf tb-common-utils-release-18.tar.gz

37: cd tb-common-utils-release-18

38: export TBLIB_ROOT="/usr/local/tb_lib"

39: chmod u+x build.sh

40: ./build.sh

41: cd ..

42:

43: tar zxf tair-release-2255.tar.gz

44: cd tair-release-2255

45: ./bootstrap.sh

46: ./configure --prefix=/usr/local/tair

47: make && make install

48: cd ..

49:

50: tar zxf tfs-release-2.2.16.tar.gz

51: cd release-2.2.16/

52: ./build.sh init

53: ./configure --prefix=/usr/local/tfs --with-tair-root=/usr/local/tair/ --with-tblib-root=/usr/local/tb_lib/

54: make && make install

55: cd ..

三、磁盘配置

centos5.x默认仅支持ext3,从之前大量小文件的应用来讲,最好升级到ext4

yum install e4fsprogs

通过fdisk重建分区

然后再mkfs.ext4、mount命令处理就可以了~

测试环境中dataserver配置6块磁盘,分别mount在

/data1、/data2、/data3、/data4、/data5、/data6

四、TFS配置

现在tfs的使用人数不多,配置这块的文档较少,虽然每一个参数描述都很仔细,但是具体的参数调优上还有待深入

网络环境(要隐藏真实IP,不要在意细节~)

vip: 192.168.1.1

ns:192.168.2.1、192.168.2.2

ds段:192.168.3.x

Nameserver(双核4G虚拟机)

多数情况下使用默认设置,目前修改到的地方如下(关于配置文件详解,请参考http://code.taobao.org/p/tfs/wiki/deploy/ns.conf/)

< log_size = 536870912

< log_num = 64

< work_dir = /www/app/tfs

< dev_name = eth1

< thread_count = 2

< ip_addr = 192.168.1.1

< safe_mode_time = 300

< ip_addr_list = 192.168.2.1|192.168.2.2

< block_max_size = 7549747

< max_replication = 2

< min_replication = 2

< use_capacity_ratio = 98

< block_max_use_ratio = 98

< max_wait_write_lease = 1

Dataserver(8核16G,6块1T硬盘物理机)

多数情况下使用默认设置,目前修改到的地方如下(关于配置文件详解,请参考http://code.taobao.org/p/tfs/wiki/deploy/ds.conf/)

< work_dir = /www/tfs

< dev_name = eth1

< thread_count = 7

< ip_addr = 192.168.3.1

< ip_addr = 192.168.1.1

< ip_addr_list = 192.168.2.1|192.168.2.2

< port = 8108

< write_sync_flag = 1

< block_max_size = 83886080

< backup_path = /www/app/tfs

< mount_name = /data

< mount_maxsize = 882376704 #(kb)--841.5G,磁盘使用率为97%

< avg_file_size = 40960 #(byte) default

< mainblock_size = 7549747 #(byte) default

< extblock_size = 419430 #(byte) default

PS:刚刚才发现一个很神奇的地方,ds配置中自身IP设置与VIP设置得arg都是“ip_addr”~屌炸天

TFS初始化和运行

nameserver启停

/usr/local/tfs/scripts/tfs start_ns

/usr/local/tfs/scripts/tfs stop_ns

dataserver初始化、启停

/usr/local/tfs/scripts/stfs format 1-6 #1-6 = mount_name的1-6,看ds配置中也就是/data1~/data6

/usr/local/tfs/scripts/tfs start_ds 1-6

/usr/local/tfs/scripts/tfs stop_ds 1-6

五、NameServer的高可用

淘宝官方建议使用heartbeat做高可用,但在测试环境一直配置不成功,我是测tfs,不是测heartbeat啊…

项目时间拖了太久,然后直接使用了keepalived,前进的道路一片光明~

keepalived-1.1.15.tar.gz

默认编译安装即可~

编辑/etc/keepalived/keepalived.conf

global_defs {

router_id tfs_ns

}

vrrp_script chk_nameserver {

script "killall -0 nameserver"

interval 2 # check every 2 seconds

weight 2 # add 2 points of prio if OK

}

vrrp_instance VI_1 {

state MASTER

interface eth1

virtual_router_id 23

priority 101

advert_int 1

virtual_ipaddress {

192.168.1.1/16 brd 192.168.255.255 dev eth1 label eth1:0

}

track_interface {

eth1

}

track_script {

chk_nameserver

}

}

实际使用中发现:

1.TFS监测到vip在虚拟网卡上时,才能正常工作,否则两台nameserver会将自己置为slave,这时只可读不可写

所以keepalived.conf的VIP需要绑定在eth1:0上

virtual_ipaddress {

192.168.1.1

}

这样的写法是不行滴

2.vip从主ns漂移到备ns后,tfs服务立即可用;但从备ns切换到主ns时,开始10s左右上传文件会失败,随后正常

可能这也是为什么通过heartbeat做高可用时,不会确定某一台做主,而是认定当前运行的ns为主

相关推荐

如何注销微信实名认证:步骤与注意事项详解
bet28365365娱乐场

如何注销微信实名认证:步骤与注意事项详解

📅 07-03 👁️ 9807
同程旅行:出境游重启1个月,泰国最火爆
365bet繁体中文

同程旅行:出境游重启1个月,泰国最火爆

📅 06-28 👁️ 4942
奔跑吧兄弟第五季在哪里录制
365bet繁体中文

奔跑吧兄弟第五季在哪里录制

📅 07-01 👁️ 8391
合成/旗帜图案配方
365bet繁体中文

合成/旗帜图案配方

📅 07-03 👁️ 6043
支付宝怎么给中石化加油卡充值?
365bet繁体中文

支付宝怎么给中石化加油卡充值?

📅 06-28 👁️ 6612