淘寶TFS使用筆記(一):初識TFS

1、簡介php

TFS(Taobao File System)是淘寶自主開發的一個分佈式文件系統,適用於海量小文件存儲。html

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

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

wiki中已經含有詳細的tfs詳細介紹、部署指南、配置文件詳解(基於tfs-2.2.16)bootstrap

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

(阿里工程師寫的tfs博客,面向廣大羣衆,適合在官方的基礎上閱讀)網絡

話說真的是很難部署,真是淘寶太(t)費(f)事(s)app

 

2、安裝分佈式

官方推薦使用gcc-4.1.2編譯tfs,高版本gcc編譯會出現這樣或那樣的問題,實際試用中狀況也是如此,因此建議對c不太熟悉的,仍是照着4.1.2版原本svn

測試環境:

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 ..

 

3、磁盤配置

centos5.x默認僅支持ext3,從以前大量小文件的應用來說,最好升級到ext4

yum install e4fsprogs

經過fdisk重建分區

而後再mkfs.ext四、mount命令處理就能夠了~

測試環境中dataserver配置6塊磁盤,分別mount在

/data一、/data二、/data三、/data四、/data五、/data6

 

4、TFS配置

如今tfs的使用人數很少,配置這塊的文檔較少,雖然每個參數描述都很仔細,可是具體的參數調優上還有待深刻

網絡環境(要隱藏真實IP,不要在乎細節~)

vip: 192.168.1.1

ns:192.168.2.一、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

 

5、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爲主

相關文章
相關標籤/搜索