TFS install
-
1. 硬盘分区
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19parted /dev/sdb
print
mklabel gpt
mkpart primary 1 -1
quit
mkfs.ext4 /dev/sdb1
e2label /dev/sdb1 /data/disk1
parted /dev/sdc
print
mklabel gpt
mkpart primary 1 -1
quit
mkfs.ext4 /dev/sdc1
e2label /dev/sdc1 /data/disk2
parted /dev/sda
print
mklabel gpt
这里系统盘会占用一些空间,从300GB开始
1 | mkpart primary 300GB 6001GB |
2. TFS 格式化数据盘
1 | ./script/stfs format 1-3 |
由于硬盘比较大 耗时会比较长
格式化成功后,会发现/data/disk1,/data/disk2, /data/disk3 下面产生了一堆以数字命名的文件(1-n),因为TFS的block文件是以数字命名的,从1开始递增编号。
3. 启动NameServer
1 | ./bin/nameserver -f conf/ns.conf -d |
4. 启动DataServer
1 | ./bin/dataserver -f conf/ds.conf -i 1 -d |
5. 测试
./bin/tfstool -s 33.73.192.37:8100 -i "put testfile"
将本地testfile存入tfs, -s 指定nameserver的ip:port。 如果成功,会打印 put testfile => T1QEBXXDpXXXXXXXXX success. 类似的消息,其中T开头一串字符是TFS为这个文件生成的文件名,一共18个字符;要想从TFS取出该文件时,需要指定该文件名。
./bin/tfstoo -s 33.73.192.371:8100 -i "get T1QEBXXDpXXXXXXXXX localfile"
从TFS读取T1QEBXXDpXXXXXXXXX,存储到本地localfile中;如果成功,会打印fetch T1QEBXXDpXXXXXXXXX => localfile success.类似的消息。
6. 通过浏览器访问
- 防火墙
1
2firewall-cmd --permanent --add-port=7500/tcp
systemctl restart firewalld.service
http://33.73.192.37:7500/v1/tfs/T1DyhTByJT1RCvBVdK
7. TODO
- [ ] TFS Nameserver HA配置
8. 参考
附
NS.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22[public]
log_size=1073741824
log_num=64
log_level=info
task_max_queue_size=10240
emergency_replicate_queue=5 # 网上的资料没看到这个配置,不加的话会一直打印日志
work_dir=/home/tfs/tfs
dev_name=enp1s0f0 # server使用的网卡名,需要修改为你机器的某个网卡名
ip_addr=33.73.192.37 # server服务的ip地址,必须是dev_name网卡上的IP地址,如果NS配置了HA,此处配置vip
port=8100 #server服务的端口号,根据实际环境修改, 该配置项建议所有DS保持相同
[nameserver]
safe_mode_time=360 #seconds NS启动后的保护时间,在该时间内,NS不会构建任何复制、迁移等任务
ip_addr_list=33.73.192.37|192.168.0.254 #如果使用HA,则配置vip对应的两个节点的实际ip;如果没有使用HA,第一项配置与ip_addr相同,第二项可以随便配置一个无效的地址(如本例中192.168.0.254是无效的IP地址)
group_mask=255.255.255.224 #用于区分机架的子网掩码,可根据实际网络环境修改。如果你配置为255.255.255.255,那么任意两个ip不同的机器都被认为在不同的机架;如果你配置为255.255.255.0, 那么192.168.0.x与192.168.0.y将被认为在同一个机架,依次类推;TFS数据块的多个副本不能分布在同一个机架内,以提高可靠性。
max_replication=1 # 副本数,机器数必须大于副本数,单机环境测试,只能设置为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~5 #代表1点~5点,NS只会在1-50点间进行block压缩,建议设置为访问低峰时间段
balance_percent=0.05 # 代表5%,负载均衡时,当DS存储容量超出平均值5%时,就会被选择为数据迁移源,低于平均值5%,就会被选为数据迁移目标DS.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39[public]
log_size=1073741824
log_num=64
log_level=info
task_max_queue_size=10240
work_dir=/home/tfs/tfs
dev_name=enp1s0f0 # server使用的网卡名,需要修改为你机器的某个网卡名
ip_addr=33.73.192.37 # server服务的ip地址,必须是dev_name网卡上的IP地址,如果NS配置了HA,此处配置vip
port=8200 #server服务的端口号,根据实际环境修改, 该配置项建议所有DS保持相同
[dataserver]
ip_addr=33.73.192.37 # NS的ip地址,如果配置了HA,则为vip
ip_addr_list=33.73.192.37 #|192.168.0.254 # 与nameserver区域的ip_addr_list配置保持一致(254这个如果保留会一直打印错误日志)
port=8100 # NS服务监听的端口
heart_interval=2 #seconds,DS向NS发送心跳的时间间隔,可根据实际环境修改
mount_name=/data/disk #DS数据目录,如果机器上有2块盘,则它们应该挂载在/data/disk1、/data/disk2,依次类推
mount_maxsize=5205042452 # KB, 磁盘实际使用的空间,应该小于df命令Available一项的输出
base_filesystem_type = 1
#超级块存存储的保留位置,default: 0
superblock_reserve = 0
#平均文件的大小, 单位(字节) 100K
avg_file_size = 102400
#主块的大小, 单位(字节)
#每个数据存储块的大小
mainblock_size = 7549747
#扩展块的大小, 单位(字节)
extblock_size = 419430
#主块与扩展的比例
block_ratio = 0.5
#hash桶的比例
hash_slot_ratio = 0.5
ds_thread_count = 4Nginx-TFS部分配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
gzip on;
tfs_upstream tfs_ns {
server 127.0.0.1:8100;
type ns;
}
server {
listen 7500;
server_name localhost;
tfs_keepalive max_cached=100 bucket_count=10;
//cronolog 没装 tfs_log "pipe:/usr/sbin/cronolog -p 30min /path/to/nginx/logs/cronolog/%Y/%m/%Y-%m-%d-%H-%M-tfs_access.log";
tfs_log "/home/tfs/nginxtfs/install/nginx/logs/tfs_access.log";
location = /favicon.ico {
log_not_found off;
}
location / {
tfs_pass tfs://tfs_ns;
}
}
}