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