一、简介
TFS(Taobao File System)是淘宝自主开发的一个分布式文件系统,适用于海量小文件存储。
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为主