前几天的安装了一台tfs,今天上午的时候刚刚到了机房。今天这里就给大家介绍下tfs的如何进行配置并启动。

  淘宝分布式文件系统有2个节点,NameServer负责Block的创建,删除,复制,均衡,整理,NameServer不负责实际数据的读写,实际数据的读写由!DataServer完成。DataServer主要的功能是的:负责实际数据的存储和读写,

  先将给大家看看我线上环境的配置。

1.nameserver

[root@kw-tfs1 conf]# pwd 

/usr/local/tfs228/tfs_bin/conf

[root@kw-tfs1 conf]# 

[root@kw-tfs1 conf]# pwd 

/usr/local/tfs228/tfs_bin/conf

[root@kw-tfs1 conf]# cat ns.conf 

[public]

#log file size default 1GB 

log_size=1073741824             #默认log文件超过1G会转存

#log file num default 64

log_num = 15             #保存的日志个数

#log file level default debug

log_level=info        #日志级别

#main queue size default 10240

task_max_queue_size = 10240      #工作队列

#listen port

port = 18108            #使用的端口 默认8108 建议修改

#work directoy

work_dir=/data/tfs_workdir   # 工作目录 日志会在这下面产生

#device name (vip device)

dev_name=eth0    # ns服务ip所在的设备名字

#work thread count default 4

thread_count = 4       #工作线程池

#ip addr(vip)

ip_addr = 192.168.1.150     #本机IP地址(vip),配置ha时为vip,没配置可以为主ns的ip,我们这里么有使用VIP,使用另外的方法实现

[nameserver]

safe_mode_time = 300    #系统保护时间 保护时间不做任务操作

#nameserver IP地址列表(master, salve的ip地址,只能以'|'分隔)

#单台nameserver时,另一个ip配置为无效ip即可

ip_addr_list = 192.168.1.150|192.168.1.152    #这里150是我们主的IP,152是我们slave的ip

group_mask = 255.255.255.255

block_max_size =  62914560  #Block size的最大值 

max_replication = 2   #block的最大副本 单台ds的时候请设置为1 

min_replication = 1   #已经没在使用了  

# use capacity ratio

use_capacity_ratio = 98  # dataserver 容量使用的百分比

# block use ratio

block_max_use_ratio = 98  #块容量使用的百分比

#heart interval time(seconds)

heart_interval = 2   # dataserver和nameserver之间的心跳时间

# object dead max time(seconds) default

object_dead_max_time = 300  # object死亡的最大时间 

#compact hour range (def 2~6)

compact_hour_range=2~6  

# cluster id defalut 1

cluster_id = 1  #集群号

# block lost, replicate ratio

replicate_ratio_ = 50  # Block当前备份数与最大备份数百分比,如果大于这个百分比,就开始复制

max_write_filecount = 100  #每个DataServer 主可写块的大小, default: 3

heart_thread_count = 2   #dataserver 与 nameserver 的心跳线程池的大小, default: 2

heart_max_queue_size = 10  #dataserver 与 nameserver 的心跳工作队列的大小, default: 10

repl_wait_time = 1800  #block 缺失备份时, 需要等待多长时间才进行复制, 单位(秒), default: 240

compact_delete_ratio =  15   #block进行压缩的比例, block 删除的文件的比例达到这个值时进行压缩

compact_max_load = 200  #block进行压缩时, dataserver的最大负载,超出这个值dataserver,不进行压缩

object_clear_max_time = 300  # object 清理的时间, 单位(秒), default: 300

#not use

max_wait_write_lease = 15  #nameserver上出现租约等待时, 阻塞线程最大个数, 这个值最好是工作线程的一半

#not use

lease_expired_time = 3  #租约删除的最长时间, 单位(小时), default: 1

#not use

max_lease_timeout = 30000

#not use

cleanup_lease_threshold = 102400 #清理租约的阀值, default: 102400

#not use

build_plan_interval = 10   #创建计划的间隔时间, 单位(秒), default: 30

#not use

run_plan_expire_interval = 120    #计划超时时间, 单位(秒), default: 120

#not use

build_plan_ratio = 25   #创建计划的百分比, 计划数量 = dataserver 数量 * build_plan_ratio

dump_stat_info_interval = 60000000  #定时dump统计信息的间隔时间, 单位(微秒), default: 60000000 

#not use

build_plan_default_wait_time = 2  #创建计划等待时间, 主要用有很多紧急复制时,单位(秒), default: 2

#not use

balance_max_diff_block_num = 5 #负载均衡时block相关的个数, default: 5

add_primary_block_count = 3  #每次新增Block的个数, default: 3

block_chunk_num = 32    #存储block桶的个数, default: 32

#not use

task_percent_sec_size = 200   #每个任务处理的预期时间, 单位(微秒), default: 200

task_max_queue_size = 10000

oplog_sync_max_slots_num = 1024  #同步日志缓冲区slot的大小, 超出这个值会写入磁盘, default: 1

oplog_sync_thread_num = 1


上面就是我线上ns的配置的文件,其中标红的地方被我修改了。如果你们是和我一样安装的2.28版本的同样修改上面的配置就能直接使用了。

启动ns 
mkdir /data/tfs_workdir  
/usr/local/tfs228/tfs_bin/scripts/tfs start_ns #停止的话使用stop_ns
netstat -nltp  |grep nameserver

51d43c65f65ff62f7fc215c4e439a678.png-wh_

从上面可以看到的 监听的ip和端口是的0.0.0.0和8108, ns配置文件中不管ip写的是内网还是外网的情况下都是监听0.0.0.0,所以我们还需要借助额外的iptables来增加安全性

iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT    #让我们自己机房能够正常访问
iptables -A INPUT -s 0.0.0.0/0 -p tcp -m tcp --dport 8108 -j DROP   #禁掉8108端口的访问

我这边线上的防火如下 :

ccfeb31d845035c153658f2e623b7552.png-wh_

iptables -X 
iptables -F 
#限制我们2个机房进出的网速的
iptables -A INPUT -s 192.168.2.0/24  -m limit --limit 1500/s --limit-burst 100 -j ACCEPT
iptables -A INPUT -s 192.168.3.0/24  -j DROP
iptables -A OUTPUT -d 192.168.2.0/24  -m limit --limit 1500/s --limit-burst 100 -j ACCEPT
iptables -A OUTPUT -d 192.168.3.0/24  -j DROP
#允许2个ip的的访问
iptables -A INPUT -s 192.168.2.0/24 -j ACCEPT
iptables -A INPUT -s 192.168.3.0/24 -j ACCEPT
#禁用其他ip访问的 9998-10011(我们ds使用端口)端口和8108(ns)  为了节约成本我这边将ns和ds安装在一起了,后续会分开
iptables -A INPUT -s 0.0.0.0/0 -p tcp -m tcp --dport 9998:10011 -j DROP 
iptables -A INPUT -s 0.0.0.0/0 -p tcp -m tcp --dport 8108 -j DROP


2.dataserver

[root@kw-tfs1 conf]# cat ds.conf
[public]
#log file size default 1GB
log_size=1073741824
#log file num default 64
log_num =  7
#log file level default debug
log_level=info
#main queue size default 10240
task_max_queue_size = 10240
#listen port
port = 9998     #  dataserver端口号从哪里开始
#work directoy
work_dir=/data/tfs_workdir   #工作目录
#device name
dev_name= eth0   #绑定ds的网络设备
#work thread count default 4
thread_count = 4
#ip addr
ip_addr = 192.168.2.3   #本机ds的ip
[dataserver]
#nameserver ip addr(vip)
ip_addr = 192.168.1.150      #ns的vip 没有就写主nsip,我这里就是主ns地址
ip_addr_list = 192.168.1.150|192.168.1.152   #主和备的ns地址没有备的就随便写一个ip

#nameserver port
port = 8108    #ns的端口号
#slave_nsip = 192.168.0.2
slave_nsip = 183.60.41.3:8108    #slave tfs机器的地址 (第二套tfs集群,我们这个已经下线了)
#heart interval time(seconds)
heart_interval = 2
check_interval = 2
replicate_threadcount = 2
dump_visit_stat_interval = 60
backup_type = 1
#not used.
backup_path = /data/tfs_workdir/backup
max_data_file_nums = 100
#max_crc_error_nums = 4
#max_eio_error_nums_ = 6
#expire_checkblock_time = 86000
#max_cpu_usage = 60
#dump_stat_info_interval = 60000000
mount_name = /kbfs/db    # mount路径  磁盘需要挂载到这里
mount_maxsize = 1854982720    #每个磁盘格式化的大小 这里使用的单盘2T参数

#mount_maxsize = 364996
base_filesystem_type = 1
superblock_reserve = 0
avg_file_size = 40960
mainblock_size = 67108864
extblock_size = 4194304
block_ratio = 1
hash_slot_ratio = 0.5
ds_thread_count = 4

这个就是我这边线上的dataserver参数了。

格式化的和启动ds

mkdir /data/tfs_workdir/backup -p   
mkdir /kbfs/db{1..7}      #格式化磁盘挂载地址
### 格式化7块磁盘(全新的)不是全新的,按照自己学习格式话就行了
mkfs.ext4 /dev/sdc <<END
y
END
mkfs.ext4 /dev/sdd <<END
y
END
mkfs.ext4 /dev/sde <<END
y
END
mkfs.ext4 /dev/sdf <<END
y
END
mkfs.ext4 /dev/sdg <<END
y
END
mkfs.ext4 /dev/sdh <<END
y
END
mkfs.ext4 /dev/sdb <<END
y
END

cat >>/etc/fstab <<END
/dev/sdb                /kbfs/db1                 ext4    defaults        0 0
/dev/sdc                /kbfs/db2                 ext4    defaults        0 0
/dev/sdd                /kbfs/db3                 ext4    defaults        0 0
/dev/sde                /kbfs/db4                 ext4    defaults        0 0
/dev/sdf                /kbfs/db5                 ext4    defaults        0 0
/dev/sdg                /kbfs/db6                 ext4    defaults        0 0
/dev/sdh                /kbfs/db7                 ext4    defaults        0 0
END
mount -a 
#开始格式为tfs块文件
/usr/local/tfs228/tfs_bin/scripts/stfs format 1-7   #格式的1-7磁盘  清除使用clear
/usr/local/tfs228/tfs_bin/scripts/tfs start_ds 1-7      #启动ds1-7 启动单个单个数字就好
e.g.
/usr/local/tfs228/tfs_bin/scripts/tfs stop_ds 1-7  #停止的1-7 
/usr/local/tfs228/tfs_bin/scripts/tfs stop_ds 4    #停止ds4
netstat -ntlp |grep dataserver

1b79a47fdaab0d24e16799c50dd50fa0.png-wh_

查看启动情况

826f306e8f860ac37cf44162b0f38ba2.png-wh_

最后看下我们线上使用的情况

0c6c2608c3897dd746135f66204fd413.png-wh_

好了今天给大家介绍的如何启动和淘宝分布式系统的ns和ds,下次我们来谈谈如何使用tfs系统存储小文件系统以及一些工具的介绍。