zoukankan      html  css  js  c++  java
  • 淘宝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为主

  • 相关阅读:
    旋转数组中的最小数字
    二叉树的遍历:先序,中序,后序,递归,非递归,层次遍历
    重建二叉树
    Combination Sum II
    Combination Sum
    红黑树
    python 时间模块
    docker 常用命令
    python request 和requests 的区别
    python 面试题1
  • 原文地址:https://www.cnblogs.com/tutuye/p/3727395.html
Copyright © 2011-2022 走看看