TFS(Taobao File System)完整部署文檔

1、測試環境準備php

拓撲:mysql

wKiom1Yt246Q4-ChAADLwkZJUo0546.jpg

服務器NSsql

系統:CentOS release 5.8 (Final)(Kernel:2.6.18-308.el5)vim

IP:192.168.0.250centos

硬盤:1塊硬盤硬盤(sda)服務器

服務器DS1網絡

系統:CentOS release 5.8 (Final)(Kernel:2.6.18-308.el5)
app

IP:192.168.0.251
負載均衡

硬盤:3塊硬盤(sda、sdb、sdc)運維

服務器DS2

系統:CentOS release 5.8 (Final)(Kernel:2.6.18-308.el5)

IP:192.168.0.252

硬盤:3塊硬盤(sda、sdb、sdc)

注:以上系統以最少化安裝,無需安裝任何組件,且系統最佳兼容爲GCC4.1.2

2、獲取並安裝TFS

在NA、DS一、DS2上所有安裝,如需測試,在客戶端也能夠裝一個(注:如下步驟三臺NS、DS一、DS2服務器都要安裝)

一、安裝依賴包:不一樣LINUX系統有不一樣的依賴包環境,建議環境與文檔一致才能保證不走彎路。

獲取官方文檔:http://tfs.taobao.org/

                      http://blog.yunnotes.net/index.php/category/tfs/


yum install -y automake.noarch libtool.x86_64 readline-devel.x86_64 zlib-devel.x86_64     

此以依賴包是官方定義的安裝包,這裏不涉及mysql,因此不安裝mysql-devel.                                  yum -y install subversion                                                                        

默認centos 5.8不集成svn客戶端,這裏須要安裝一下,方便獲取TFS官方軟件

yum -y install gcc*                                                                      

tb-common-utils所須要的依賴包

yum -y install ncurses ncurses-devel                                               

tfs須要的另外一個依賴包


二、安裝tb-common-utils:TFS使用tb-common-utils軟件包,tb-common-utils包含淘寶使用的基礎系統庫tbsys和網絡庫tbnet兩個組件。

安裝tb-common-utils前須要設置環境變量TBLIB_ROOT,tbsys和tbnet將會被安裝TBLIB_ROOT對應的路徑(必須是絕對路徑)下,TFS會在這個路徑下查找tbsys、tbnet頭文件和庫。


下例爲設置TBLIB_ROOT環境變量:

vim /etc/profile                           

編輯profile文件

export TBLIB_ROOT=/home/tb-common-utils  

添加/home/tb-common-utils,且必定是絕對路徑,並且必定要寫準確你的tb-common-utils必定存在/home目錄下

source /etc/profile                          

刷新環境變量


獲取tb-common-utils源碼並安裝

[root@Test-2 home]# svn co -r 18 http://code.taobao.org/svn/tb-common-utils/trunk tb-common-utils   

注意: 這裏不要checkout最新版本,version18之後的修改致使部分接口不能前向兼容。

[root@Test-2 home]# cd tb-common-utils/                                                    

[root@Test-2 tb-common-utils]# sh build.sh                                                 

直接安裝

[root@Test-2 tb-common-utils]# echo $?


三、安裝TFS(Taobao File System)


[root@Test-2 home]# svn co http://code.taobao.org/svn/tfs/branches/dev_for_outer_users tfs 

獲取nfs

[root@Test-2 tfs]# cd tfs/  

[root@Test-2 tfs]# sh build.sh init                                                        

[root@Test-2 tfs]# ./configure --prefix=/app/tfs --without-tcmalloc --with-release         

參數請看備註1

[root@Test-2 tfs]# make 

[root@Test-2 tfs]# make install


備註1:--prefix 指定tfs安裝路徑,默認會被安裝到~/tfs_bin目錄

           --with-release 指定按release版本的參數進行編譯,若是不指定這個參數,則會按開發版本比較             嚴格的參數編譯,包含-Werror參數,全部的警告都會被當錯誤,在高版本gcc下會致使項目編               譯不過,不少開源用戶反饋  的編譯問題都跟這個有關,由於gcc高版本對代碼的檢查愈來愈嚴               格,淘寶內部使用的gcc版本是gcc-4.1.2。

至此,TFS已經安裝成功了,你能夠開始部署TFS服務。

3、部署TFS(Taobao File System)

在成功安裝TFS以後,在你的安裝目錄(默認爲~/tfs_bin),包含幾個子目錄bin、conf、include、lib、logs、script等。

bin:包含tfs全部的可執行程序文件,如nameserver(NS)、dataserver(DS)、tfstool。

conf:包含tfs的配置文件,如NS的配置文件ns.conf,DS的配置文件ds.conf。

include:包含TFS客戶端庫相關的頭文件,應用程序使用TFS須要包含這些頭文件。

lib: 包含TFS客戶端的靜/動態庫,應用程序使用TFS須要鏈接libtfsclient。

logs:用於存儲TFS運行過程當中的日誌。

script:包含tfs經常使用的一些運維腳本,如stfs用於格式化DS, tfs啓動/中止NS、DS。

~/tfs_bin/conf目錄下包含TFS的配置文件模板,在部署前須要根據環境修改配置文件,下面對NS,DS一些關鍵的配置項進行說明,全部配置項使用key=value的形式進行配置,每行一項,在行首加#可直接註釋配置項使之不生效;使用者應該根據實際狀況,修改conf/ns.conf、conf/ds.conf這兩個配置文件,本次個人安裝中,安裝目錄conf下沒有這些.conf結尾的配置文件。

一、安裝NS(NameServer)

安裝過程當中若是報錯,請參考FAQ,大部分緣由多是由於GCC版本的問題。

開始安裝前,先介紹一下ns.conf的相關重要參數,以下:

[public] 通用配置

log_size=1073741824   

日誌文件大小,當日志大小超過這個配置值時,TFS會進行rotate,產生新的日誌文件, 建議不修改

log_num=64  

最多保存的日誌文件個數,超出會刪除最舊的日誌文件,建議不修改

log_level=info  

日誌級別(error,warn,info,debug),生產環境建議info級別, 測試環境建議使用debug級別

task_max_queue_size=10240  server

最大的請求隊列長度,超出會直接丟掉請求包,可根據實際狀況修改

work_dir=/home/xxxx/tfs  

TFS工做目錄,強烈建議直接設置爲TFS的安裝目錄,以方便運維管理

dev_name=bond0  

server使用的網卡名,須要修改成你機器的某個網卡名

ip_addr=xx.xx.xx.201  

server服務的ip地址,必須是dev_name網卡上的IP地址,若是NS配置了HA,此處配置vip

port=8100 

server服務的端口號,根據實際環境修改, 該配置項建議全部DS保持相同

[nameserver] 該區域的配置只針對NS有效

safe_mode_time=360  

seconds NS啓動後的保護時間,在該時間內,NS不會構建任何複製、遷移等任務

ip_addr_list=xx.xx.xx.201|192.168.0.254  

若是使用HA,則配置vip對應的兩個節點的實際ip;若是沒有使用HA,第一項配置與ip_addr相同,第二項能夠隨便配置一個無效的地址(如本例中192.168.0.254是無效的IP地址)

group_mask=255.255.255.255  

用於區分機架的子網掩碼,可根據實際網絡環境修改。若是你配置爲255.255.255.255,那麼任意兩個ip不一樣的機器都被認爲在不一樣的機架;若是你配置爲255.255.255.0, 那麼192.168.0.x與192.168.0.y將被認爲在同一個機架,依次類推;TFS數據塊的多個副本不能分佈在同一個機架內,以提升可靠性。

max_replication=2  

副本數,機器數必須大於副本數,單機環境測試,只能設置爲1,不然不能存數據

cluster_id=1  

集羣ID,存文件後生成的文件名會包含這個ID,建議不修改

block_max_size=75497472  Bytes

保持與dataserver下mainblock_size配置一致,建議不修改

repl_wait_time=180  

seconds 當NS檢測到block丟失時,等待多長時間開始複製block,可根據實際狀況修改

compact_delete_ratio=10  

表明10%,當NS發現block中文件刪除比例超出該比例,開始對block進行壓縮,回收刪除文件的存儲空間

compact_hour_range=1~10  

表明1點~10點,NS只會在1-10點間進行block壓縮,建議設置爲訪問低峯時間段

balance_percent=0.05  

表明5%,負載均衡時,當DS存儲容量超出平均值5%時,就會被選擇爲數據遷移源,低於平均值5%,就會被選爲數據遷移目標

安裝過程

注:請嚴格安裝一的依賴包安裝,不然會報錯。

[root@Qinglin-NS tfs]# cp  -a conf/ns.conf /app/tfs/conf/   

拷貝下載的目錄中的ns.con到安裝目錄下在的/app/tfs/conf中

[root@Qinglin-NS conf]# cd /app/tfs/conf/     

[root@Qinglin-NS conf]# vim ns.conf                           

編輯配置文件

[public]

#work directoy

work_dir=/app/tfs                                            

實際安裝好,且在./configuer中指定的路徑。

#listen port

port = 8100                                                   

默認的監聽端口

#device name

dev_name= eth0                                                

須要被訪問的網卡名稱,

#ip addr(vip) 

ip_addr = 192.168.3.250                                     

本地eth0網卡的ip地址

[nameserver]

safe_mode_time = 360                                          

ip_addr_list = 192.168.3.250|10.0.0.254                      

本次是NameServer,不須要HA,因此第一個IP要是本身本地IP,第二個IP隨便設置一個,且不能是通的網段,不然會出錯

group_mask=255.255.255.255                                    

按照4個255設置便可

二、安裝DS1與DS2(DataServer)

在本例的環境中,192.168.3.251/252上都附帶兩塊沒有使用的磁盤/dev/sdb、/dev/sdc,磁盤空間均爲一塊10G,另外一塊10G;TFS採用每一個DS進程管理一塊磁盤的方式,也就是說,每一個機器上都會運行2個DS進程,分別管理/dev/sdb、/dev/sdc, 而且這兩塊盤應該掛載到/data/disk一、/data/disk2兩個目錄(由於配置文件中指定mount_path爲/data/disk),啓動DS時指定序號(如一、2)這個DS進程就會加載對應目錄裏的數據(1對應/data/disk一、2對應/data/disk2,依次類推)開始服務。

對每一個機器上多個DS進程使用的端口,TFS也作了統一以方便運維,好比DS配置port爲8200,那麼序號爲1的DS進程會在8200端口監聽,序號爲2的DS進程會在8202端口監聽,依次類推,序號爲n的DS在8200 + (n - 1)* 2 號端口上監聽。強烈建議每一個DS public下的port項都配置相同的值,這樣根據端口號就能直接換算出DS的序號(序號一旦肯定,經過df命令就能肯定具體磁盤),對定位問題很方便。

另外,TFS的DS對存儲空間有本身獨特的管理方式,將可用的存儲空間分紅多個block進行管理,使用前DS須要先進行format(使用TFS提供的工具),預分配各個block的存儲空間,保證block的存儲空間在磁盤上連續(理論上),從而避免動態分配時產生大量的磁盤碎片,下降服務效率。

在兩臺機器上分別進行以下操做,準備好數據目錄:

(注,DS1和DS2基本相同,可是請注意IP和一些不同的參數,這裏不浪費篇幅再寫一次)


[root@Qinglin-DS1]# yum -y install e4fsprogs    

安裝ext4的格式化包,在後面的的格式化中須要用到,默認centos5.8是不帶的

[root@Qinglin-DS1]# fdisk -l                    

檢查本身硬盤是否存在兩塊多餘網卡,sda是系統使用的硬盤,這裏不寫了

Disk /dev/sdb: 10.7 GB, 10737418240 bytes

Disk /dev/sdc: 10.7 GB, 10737418240 bytes

[root@Qinglin-DS1 conf]# fdisk /dev/sdb          

對硬盤的格式化    n是新建分區,p是主要分區,1是第1個分區(且sdb1),wq爲保存

n

p

1

回車

回車

wq

[root@Qinglin-DS1 conf]# fdisk /dev/sdc           

對硬盤的格式化 

n

p

1

回車

回車

wq

[root@Qinglin-DS1 ~]# mkfs.ext4 /dev/sdb1      

格式化sdb1 文件系統爲ext4

[root@Qinglin-DS1 ~]# mkfs.ext4 /dev/sdc1

[root@Qinglin-DS1 ~]# mkdir -p /data/             

建立配置文硬盤掛載默認的路徑

[root@Qinglin-DS1 ~]# mkdir  /data/disk1          

建立掛載sdb1的文件夾,不建立沒法掛載

[root@Qinglin-DS1 ~]# mkdir  /data/disk2         

[root@Qinglin-DS1 ~]# mount /dev/sdb1 /data/disk1 

掛載第sdb1 到/data/disk1 目錄下

[root@Qinglin-DS1 ~]# mount /dev/sdc1 /data/disk2  

[root@Qinglin-DS1 ~]# df                           

這塊比較重要,記錄sdb1和sdb2的available中的大小,後面要寫到配置文件中

Filesystem           1K-blocks      Used Available Use% Mounted on

/dev/sda2             18713004   3304476  14442620  19% /

/dev/sda1               101086     12218     83649  13% /boot

tmpfs                   513040         0    513040   0% /dev/shm

/dev/sdb1             10317828    154100   9639612   2% /data/disk1

/dev/sdc1             10317828    154100   9639612   2% /data/disk2

[root@Qinglin-DS1 tfs]# cp conf/ds.conf /app/tfs/conf/ 

移動配置文件到安裝目錄下,與NS同樣

[root@Qinglin-DS1 tfs]# cd /app/tfs/conf/             

[root@Qinglin-DS1 tfs]# vim /app/tfs/conf/ds.conf        

編輯配置文件

[public]

#listen port

port = 8200                                          

本機端口

#work directoy

work_dir=/app/tfs                                       

工做目錄

#device name

dev_name= eth0                                          

eth0爲工做網卡,鏈接ns

#ip addr 

ip_addr = 192.168.3.251                                  

本地eth0網卡IP

[dataserver]

#nameserver ip addr(vip)

ip_addr = 192.168.3.250                                 

NS的IP,向NS發送信息的地址

ip_addr_list = 192.168.3.250|10.0.0.254                

和NS一致

#nameserver port

port = 8100                                              

NS的端口

mount_name = /data/disk                                  

/data爲掛載的disk1和disk2的目錄,且爲dataserver的存儲目錄

mount_maxsize = 9639612                                  

掛載硬盤的大小,參考上面標黃處

[root@Qinglin-DS1 tfs]# pwd

/app/tfs

[root@Qinglin-DS1 tfs]# ./scripts/stfs format 1-2       

格式化tfs的文件,且爲/data/下的disk1與disk2

注,若是格式化錯誤,請先使用./scripts/stfs clear 1-2,清除硬盤寫的信息。


三、啓動NameServer與DataServer 1/2

啓動順序:先啓動DS,而後啓動NS

啓動DS1/DS2:


DS1:

[root@Qinglin-DS1 tfs]#  ./scripts/tfs start_ds 1-2   ==>1-2表明disk1和disk2

 dataserver 1 is up SUCCESSFULLY pid: 4180 

 dataserver 2 is up SUCCESSFULLY pid: 4185 

DS2:

[root@Qinglin-DS2 tfs]# ./scripts/tfs start_ds 1-2

 dataserver 1 is up SUCCESSFULLY pid: 22174 

 dataserver 2 is up SUCCESSFULLY pid: 22192 

檢查工做:

[root@Qinglin-NS tfs]# ps -ef|grep nameserver       

檢查進程已經啓動

root    29127     1  1 18:50 pts/0    00:01:48 /app/tfs/bin/nameserver -f/app/tfs/conf/ns.conf -d

root     29396  3147  0 20:45 pts/0    00:00:00 grep nameserver

[root@Qinglin-NS tfs]# netstat -lntup|grep nameserver 

檢查端口已經啓動

tcp        0      0 0.0.0.0:8100       0.0.0.0:*    LISTEN      29127/nameserver


啓動NS:


NS:

[root@Qinglin-NS tfs]#  ./scripts/tfs start_ns

nameserver is up SUCCESSFULLY pid: 29127 

[root@Qinglin-DS1 ~]# ps -ef|grep dataserver          

檢查進程啓動,且disk1和disk2都存在

root      4180     1  0 11:56 pts/0    00:00:01 /app/tfs/bin/dataserver -f /app/tfs/conf/ds.conf -d -i 1

root      4185     1  0 11:56 pts/0    00:00:02 /app/tfs/bin/dataserver -f /app/tfs/conf/ds.conf -d -i 2

root      4804  4775  0 13:54 pts/2    00:00:00 grep dataserver

[root@Qinglin-DS1 ~]# netstat -lntup|grep dataserver  

監測各端口已經啓動

tcp        0      0 0.0.0.0:8200                0.0.0.0:*                   LISTEN      4180/dataserver     

tcp        0      0 0.0.0.0:8201                0.0.0.0:*                   LISTEN      4180/dataserver     

tcp        0      0 0.0.0.0:8202                0.0.0.0:*                   LISTEN      4185/dataserver     

tcp        0      0 0.0.0.0:8203                0.0.0.0:*                   LISTEN      4185/dataserver


四、總體測試


[root@Test-2 tfs]# pwd

/app/tfs

[root@Test-2 tfs]# ./bin/ssm -s 192.168.3.250:8100 -i "machine -a"  

檢查是否經過ns獲取到DS的信息

  SERVER_IP     NUMS UCAP  / TCAP =  UR  BLKCNT  LOAD TOTAL_WRITE  TOTAL_READ  LAST_WRITE  LAST_READ  MAX_WRITE   MAX_READ

--------------- ---- ------------------ -------- ---- -----------  ----------  ----------  ---------  --------  ---------

  192.168.3.251     2 17.97G  18.28G  98%     230  10   1.4K     1     0     0     0     0    0     0   0     0   0     0

  192.168.3.252     2 17.89G  18.28G  97%     229  10      0     0  1.4K     1     0     0    0     0   0     0   0     0

Total : 2          4 35.86G  36.56G  98%     459  10   1.4K     1  1.4K     1     0     0    0     0

[root@Test-2 tfs]# ./bin/ssm -s 192.168.3.250:8100 -i "server -m"      

檢查是否生成block             

SERVER_ADDR           CNT MASTER BLOCK

192.168.3.251:8200     58    101   105   116   117   123   128   130   133   139   144

                            150   151   154   157   161   163   164   171   175   183

                            189   191   196   197   199   200   202   207   217   223

                            226   230   231   237   241   242   243   255   256   257

                            263   264   268   270   275   277   285   286   287   294

                            303   310   311   319   320   322   330   331

192.168.3.252:8200     55    111   112   115   118   119   127   129   131   135   140

                            142   146   152   153   165   167   168   173   178   179

                            180   182   190   204   208   209   218   219   220   227

                            232   244   245   251   252   258   261   265   269   278

                            281   288   289   290   292   297   301   302   304   306

                            312   313   315   323   324

192.168.3.251:8202     62    104   106   107   109   113   114   120   124   125   132

                            134   136   137   147   149   156   158   159   162   166

                            169   172   174   192   193   194   195   198   201   203

                            210   215   216   221   222   224   225   228   233   234

                            236   240   246   248   253   260   262   271   273   279

                            280   282   283   295   296   309   314   318   321   325

                            332   334

192.168.3.252:8202     50    102   108   110   121   122   126   138   141   143   145

                            148   155   160   176   177   181   185   186   187   188

                            205   206   211   212   214   229   235   238   239   247

                            249   254   267   272   274   276   284   291   293   298

                            299   300   307   308   316   317   326   327   328   329


五、上傳(PUT)與下載(GET)

上傳PUT:將本地testfile存入tfs, -s 指定nameserver的ip:port。 

若是成功,會打印 put testfile => T1QEBXXDpXXXXXXXXX success. 相似的消息,其中T開頭一串字符是TFS爲這個文件生成的文件名,一共18個字符;要想從TFS取出該文件時,須要指定該文件名。


[root@Test-2 tfs]#./bin/tfstool -s 192.168.3.251:8100    

進入上傳交互式界面

TFS>put /etc/init.d/network                             

上傳/etc/init.d/network文件到Nameserver

put /etc/init.d/network => T1ItETByJT1RCvBVdK success.    

看到succes即完成,且生成一個ID:T1ItETByJT1RCvBVdK,是下載的憑證。


下載GET:從TFS讀取T1QEBXXDpXXXXXXXXX,存儲到本地localfile中;若是成功,會打印fetch T1QEBXXDpXXXXXXXXX => localfile success.相似的消息。


TFS> get T1ItETByJT1RCvBVdK /home/network               

get下載,上傳的id號,下載的路徑和文件名

fetch T1ItETByJT1RCvBVdK => /home/network success.      

提示下載完成

TFS> quit                                               

退出

[root@Test-2 tfs]# ls /home/network                 

檢查路徑是否存在/home/network這個文件

/home/network

相關文章
相關標籤/搜索