对于淘宝TFS分布式文件系统的功能、原理、优势等就不多做介绍了,这里主要说明配置方面。
可访问TFS开源官网:
3台 64位CentOS5.8 1G内存
nameserver 192.168.0.10
dataserver1 192.168.0.13
dataserver2 192.168.0.25
下面的一些配置不考虑单机跑多个dataserver、 dataserver+ nameserver 的情况.
一、配置基本环境
yum update
需要确保安装了automake autoconfig 和 libtool,使用auotmake --version查看,一般情况下已安装。 1.4以上版本需要安装libuuid-devel,zlib-devel,mysql-devel三个开发包
[root@locatfs local]# yum install readline-devel readline
[root@locatfs local]# yum install ncurses-devel.x86_64 ncurses.x86_64
[root@locatfs local]# yum install -y automake libtool libxslt groff pcre-devel gcc* zlib-devel
[root@locatfs local]# yum install e4fsprogs e4fsprogs-devel //ext4
加载ext4模块,让系统支持ext4文件系统
[root@locatfs local]# modprobe ext4
升级autoconf
[root@locatfs local]# whereis autoconf
[root@locatfs local]# rpm -qf /usr/bin/autoconf
[root@locatfs local]# /usr/bin/autoconf -V
[root@locatfs local]# rpm -e --nodeps autoconf-2.59-12
[root@locatfs local]# tar zxvf autoconf-latest.tar.gz
[root@locatfs local]# cd autoconf-2.69
[root@locatfs local]# ./configure --prefix=/usr
[root@locatfs local]# make
[root@locatfs local]# make install
[root@locatfs local]# /usr/bin/autoconf -V #查看是否安装成功
二、升级安装高版本mysql
1.安装配置yum源
wget
wget
rpm -ivh *.rpm
2.编辑/etc/yum.repos.d/remi.repo
#vi /etc/yum.repos.d/remi.repo
在这个文件的最后增加一行:priority=1
保存退出。
3.编辑/etc/yum.repos.d/epel-testing.repo,
#vi /etc/yum.repos.d/epel-testing.repo
在这个文件的最后增加一行:priority=1
保存退出。
4.编辑/etc/yum.repos.d/epel.repo
#vi /etc/yum.repos.d/epel.repo
在这个文件的最后增加一行:priority=1
保存退出。
5.使用yum --enablerepo=remi list mysql php 检查是否有可升级版本。发现有版本可以升级到mysql5.5.11和php5.3.6。
6.使用命令yum --enablerepo=remi update mysql 进行升级,升级mysql的时候会一并升级PHP,有些提示我都选择Y,直到升级结束。整个过程包含下载、安装。
yum --enablerepo=remi install mysql-server mysql.x86_64 mysql-devel.x86_64
三、下载安装TFS(亦可参照官网)
[root@locatfs local]# cd /opt
[root@locatfs local]# svn checkout tb-common-utils
[root@locatfs local]# svn checkout tfs
还有gtest(自行上网下载)
1.安装gtest
[root@locatfs local]# unzip gtest-1.6.0.zip
[root@locatfs local]# cd gtest-1.6.0
[root@locatfs local]# ./configure
[root@locatfs local]# make
[root@locatfs local]# cd make/
[root@locatfs local]# make
[root@locatfs local]# ./sample1_unittest
2.编译和安装tbnet, tbsys库
[root@locatfs local]# vi /etc/profile
添加
export TBLIB_ROOT=/usr/local/tb/lib
[root@locatfs local]# source /etc/profile
进入tb-common-utils文件夹, 执行build.sh进行安装.
[root@locatfs local]# cd tb-common-utils/
[root@locatfs local]# chmod +x *.sh
[root@locatfs local]# ./build.sh
3.编译安装tfs
进入 tfs 目录
[root@locatfs local]# cd tfs/
[root@locatfs local]# ./build.sh init
[root@locatfs local]# ./configure
#如果提示找不到/usr/local/tfs/scripts/cs_sync
# 把tfs下的cs_sync.sh复制成cs_sync 执行:cp -a ./scripts/cs_sync.sh /root/tfs_bin/scripts/cs_sync
[root@locatfs local]# make
[root@locatfs local]# make install
四、配置启动
参考TFS_HA.docx
具体下载目录在 /2012年资料/8月/7日/淘宝TFS分布式文件系统亲测
目前的情况
tfs安装在 /root/tfs_bin
tbsys、tbnet 安装在 /usr/local/tb/
/usr/local/tfs/conf/共有三个文件需要配置:
ns.conf、ads.conf和ds.conf
其中
ns.conf 用于启动nameserver //只运行dataserver的服务器不用配置。
ads.conf和ds.conf 用于启动dataserver //只运行nameserver的服务器不用配置。
nameserver和dataserver的启动顺序不限
1.配置nameserver
这里直接贴测试后的配置文件:ns.conf
该文件位于/usr/local/tfs/conf下,自行添加
cat ns.conf
[public]
##日志文件的size,默认 1GB
log_size=1073741824
#保留日志文件的个数,默认 64
log_num = 4
#日志文件的级别, 默认 debug
log_level = error //不然日志会很大
#工作队列size, 默认 10240
task_max_queue_size = 10240
#nameserver监听端口
port =8888
#工作目录,也就是tfs的安装目录
work_dir=/root/tfs_bin
#网络设备,即通信网卡,一般用内网
dev_name= eth0
#工作线程池 default 4
thread_count = 4
#本机IP地址(vip),配置ha时为vip,没配置可以为主ns的ip
ip_addr = 192.168.0.10
[nameserver]
#系统保护时间,单位(秒), default: 300
#保护时间内不进行任何操作,包括添加block等
safe_mode_time = 300
#nameserver IP地址列表(master, salve的ip地址,只能以'|'分隔)
#单台nameserver时,另一个ip配置为无效ip即可
ip_addr_list = 192.168.0.10|192.168.0.2
#Ip地址 mask
#用于区分dataserver所在的子网,选择不同子网的dataserver备份数据
group_mask = 255.255.255.255
#Block size的最大值, 单位(字节)
block_max_size = 83886080 //这个值到底怎么配置好,有待实验。 必须 >= dataserver的mainblock_size,推荐设置一致。
#Block 最大备份数, default: 2
#单台dataserver时,需要配置为1
max_replication = 2
#Block 最小备份数, default: 2
#单台dataserver时,需要配置为1
min_replication = 2
#DataServer 容量使用的百分比, default: 98
use_capacity_ratio = 98
#Block使用的百分比, default: 95
block_max_use_ratio = 98
#Dataserver 与 nameserver 的心跳时间, 单位(秒), default: 2
heart_interval = 2
# object 死亡的最大时间, 单位(秒), default: 86400
object_dead_max_time = 3600
# 集群号
cluster_id = 1
# Block当前备份数与最大备份数百分比,如果大于这个百分比,就开始复制
replicate_ratio_ = 50
#每个DataServer 主可写块的大小, default: 3
max_write_filecount = 16
#dataserver 与 nameserver 的心跳线程池的大小, default: 2
heart_thread_count = 2
#dataserver 与 nameserver 的心跳工作队列的大小, default: 10
heart_max_queue_size = 10
#block 缺失备份时, 需要等待多长时间才进行复制, 单位(秒), default: 240
repl_max_time = 60
#block进行压缩的比例, block 删除的文件的比例达到这个值时进行压缩
compact_delete_ratio = 15
#block进行压缩时, dataserver的最大负载,超出这个值dataserver,不进行压缩
compact_max_load = 200
# object 清理的时间, 单位(秒), default: 300
object_clear_max_time = 300
#nameserver上出现租约等待时, 阻塞线程最大个数, 这个值最好是工作线程的一半
max_wait_write_lease = 15
#租约删除的最长��间, 单位(小时), default: 1
lease_expired_time = 3
#最大租约超时时间
max_lease_timeout = 3000
#清理租约的阀值, default: 102400
cleanup_lease_threshold = 102400
#创建计划的间隔时间, 单位(秒), default: 30
build_plan_interval = 10
#计划超时时间, 单位(秒), default: 120
run_plan_expire_interval = 120
#创建计划的百分比, 计划数量 = dataserver 数量 * build_plan_ratio
build_plan_ratio = 25
#定时dump统计信息的间隔时间, 单位(微秒), default: 60000000
dump_stat_info_interval = 60000000
#创建计划等待时间, 主要用有很多紧急复制时,单位(秒), default: 2
build_plan_default_wait_time = 2
#负载均衡时block相关的个数(这个参数有点问题, 以后会改成百分比), default: 5
balance_max_diff_block_num = 5
#每次新增Block的个数, default: 3
add_primary_block_count = 3
#存储block桶的个数, default: 32
block_chunk_num = 32
#每个任务处理的预期时间, 单位(微秒), default: 200
task_percent_sec_size = 200
#每个任务队列的最大size
task_max_queue_size = 10000
#同步日志缓冲区slot的大小, 超出这个值会写入磁盘, default: 1
oplog_sync_max_slots_num = 1024
#同步日志线程池的大小, default: 1
oplog_sync_thread_num = 1
启动nameserver
执行scripts目录下的tfs
cd /usr/local/tfs/scripts
./tfs start_ns
执行正常返回:
查看监听端口:
说明nameserver启动成功。