TFS运维方案
2016-08-08Linux撒加5160°c
A+ A-TFS使用背景
天天拍车原有图片集中存放在由FastDFS构成的分布式文件系统中,在使用过程中对FastDFS进行过扩容,在扩容的过程中,发现FastDFS有如下的问题:
1、 集群扩容必须是以组为单位进行,每组机器必须有2台存储容量一致的机器构成,比较浪费机器
2、 扩容的机器如果使用裸盘,盘数过多对于Nginx的配置有影响
3、 Fastdfs-nginx-module不支持通过API接口进行图片的上传、删除、修改等,仅支持读取
4、 集群本身不支持负载均衡
为了规避FastDFS集群的一些弊端,选择使用TFS承担其图片存储的业务。
TFS优点:
1、 扩容只需要新增DS即可,集群自动对容量进行负载均衡,保持每台机器占用的空间大致相当;
2、 nginx-tfs模块支持通过API对图片进行上传、读取、修改、删除等操作,方便应用的开发;
3、 单机裸盘越多,单机可开启的DS进程就越多,是整机提供DS服务时性能更好
TFS缺点:
1、对运维人员技术要求过高,维护性较FastDFS差
TFS集群架构介绍
天天拍车TFS集群有2台Name Server、5台Data Server、2台Tengine with TFS构成,集群裸容量有120TB,在保留2份副本的情况下,集群可用总容量为60T,可提供服务的容量为总容量的90%,当集群使用容量超过90%时就可对集群进行扩容。
方案中Tengine TFS模块与Name Server之间,Name Server与Data Server之间均为长连接,降低内核TCP的开销
图片的处理由lua脚本调用gm指令来执行,lua脚本由Tengine with lua来实际处理。
图片上传、修改由安装了Tengine的虚拟机承担
图片的读取及缩放裁剪由安装了Tengine的物理机承担
TFS集群示意图
TFS集群情况
开源组件信息
TFS:2.2.16
Tengine:2.1.2
硬件信息
Tengine:1台物理机 1台虚拟机
Name Server:2台
Data Server:5台
TFS集群监控
Tfs.diskused:集群已使用容量
Tfs.disktotal:集群总容量
Tfs.conn:集群读取总连接
Tfs.block:集群总block数
Tfs.block_0:集群中损坏的block数量
Tfs.block_1:集群中还未复制的block数量
Tfs.block_2:集群中副本数为2的block数量
TFS集群注意事项
1、 扩容
当整个集群的可用容量超过90%时就需要对DS进行扩容了,因新加机器会让现有DS迁移block到新加入的DS上,这时会导致网卡流量过大甚至满载,扩容须放在晚上业务低峰期进行,当然可以创建crontab,通过admintool在合适的时间开启和关闭迁移TASK。
2、 硬盘损坏
发现DS有损坏的硬盘的时候,操作流程应为停止对应磁盘的DS进程->更换新的硬盘->使用stfs格式化该硬盘->启动磁盘对应的DS进程
3、 出现坏块
当集群中的DS出现坏块时既某个block的副本数为0时,可通过admintool进入NS命令行管理界面使用remove_block移除坏块,坏块较多时可结合ssm写脚本来处理
4、 RAID与non-RAID
DS的机器不建议使用RAID,因TFS本身支持多个block的副本,所以不需要硬件层面的RAID来做保障,而应直接将每块磁盘配置为non-RAID模式,提升单机DS的整体IOPS
TFS优化事项
1、 DS可用挂载容量
mount_maxsize配置一般为单块磁盘容量的95%,单位为字节
2、 配置文件中对平均文件大小的设置
avg_file_size单位为字节,可根据集群提供的业务场景进行估算,例如存放图片,图片平均大小为150K,就可以配置为avg_file_size=153600
3、 MTU以及巨型帧的开启
服务器增加MTU可以在传输数据时明显缩短网络传输所好用的时间,同时提升服务器吞吐能力,一般服务器建议MTU设置为9000,在与服务器相连的交换机上开启巨型帧,保证数据从源到目的整个链路都可以支持9000的MTU
4、 Tengine TFS模块中的超时时间的设置
tfs_send_timeout 600s;Nginx发送请求到tfs ns的超时时间
tfs_connect_timeout 30s;Nginx与tfs ns建立连接的超时时间
tfs_read_timeout 600s;Nginx从tfs ns读取数据的超时时间
5、 Tengine开启tfo以及reuseport
TFO以及SO_REUSEPORT均为提升Tengine性能的功能,其中需要TFO功能的话需要将服务器内核升级到3.10。
SO_REUSEPORT功能是将Tengine监听的端口可以监听在所有nginx进程上提升性能,该功能在CentOS 6.5以上的内核中直接支持,编译Tengine时将自动编译进该功能,可以在nginx.conf的event段设置reuse_port on即可开启。
6、 集群状态的查看
ssm –s NSIP:PORT –i block查看集群中所有block的信息
ssm –s NSIP:PORT –i server查看集群中所有server中每块磁盘的信息
ssm –s NSIP:PORT –i machine 查看集群中每台DS的整机容量信息