淘宝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为主

原文地址:https://www.cnblogs.com/tutuye/p/3727395.html