FastDFS运维友好那些事儿(一)

Stella981
• 阅读 716

    最近有人在FastDFS QQ技术交流群里爆料,说网上有人吐槽FastDFS是最难配置的一款开源软件。我当时在群里反驳说FastDFS自带配置文件示例,绝大多数配置项使用默认值即可,实际需要设置的配置项就十个左右。刚才统计了一下最新的配置文件示例,tracker.conf中有52个配置项,storage.conf中有59个配置项。嗯,居然有这么多,把我也吓了一跳。

众多配置项的好处主要体现在功能定制化和系统调优灵活性。如果你对某些系统调优和功能特性有需要,比如更好的运行性能、小文件合并存储、日志轮转和定期清除、binlog自动压缩和解压等等,可能就不会嫌弃配置项繁多了。

先抛开FastDFS配置这个梗,FastDFS一直在努力提高运维友好性。日志记录如何详尽周全且不冗余绝对营养之类的,属于软件开发的基本功,这里就不多说了。列举FastDFS几个充分体现运维友好性的功能和特性如下:

  1. 更换单盘后自动恢复单盘数据

  2. storage server支持动态增加存储路径(通常是增加磁盘)

  3. 日志轮转和定期清除

  4. binlog自动压缩和解压(V6.01支持的功能,已完成开发)

   本文将对1、2这两个和磁盘有关的功能特性进行介绍。

   先说1这个特性,更换单盘后自动恢复该盘上的数据,V2.08就实现了这个功能。

判断一个单盘(FastDFS为存储路径store_path)是否需要恢复数据的逻辑为:检测$store_path/data/目录下的两个子目录00/00/ 和 FF/FF/(每级子目录采用默认256个的情况下)是否存在,如果其中一个不存在,则自动建立所需子目录,并启动单盘数据自动恢复。

单盘数据恢复逻辑:

  1. 从tracker server获取一台可用的storage server作为源服务器;

  2. 从源storage server拉取该存储路径(按store_path顺序对应)的binlog,并存储到本地;

  3. 根据本地binlog从源storage server复制文件到$store_path/data/下对应目录;

  4. 单盘数据恢复完成后,才能对外提供服务。

   我们再看2这个特性,storage server支持动态增加存储路径,这个特性应该是V3.05开始支持的。这个功能本身并不复杂,但有一点需要大家注意一下:一个group内的所有storage server的存储路径数量必须一致,配置不一致的storage server将无法加入集群。

群里偶尔有人反映说storage server增加磁盘后日志报错,这是因为同一group内的storage server的存储数量不同导致的。用fdfs_monitor可以查看集群中的服务器列表和状态,查看存储路径数目是否一致的命令行示例:

fdfs_monitor /etc/fdfs/client.conf list group1 | grep store | grep path | grep count

    输出的第一个store path count为group接受的存储路径数,其余为各个storage server的存储路径数。当该group下所有storage server的存储路径数相同,group才会接受最新的存储路径数。

如果出现废弃的storage server而导致存储路径数量不一致,需要将其从集群中删除,命令行示例:

fdfs_monitor /etc/fdfs/client.conf delete    

    为了防止误操作,不允许删除状态为ACTIVE的storage server。

删除后该storage server的状态为DELETED,如果看着不爽,重启tracker server后该storage server将从集群中消失。

    查看一个group内storage server的IP地址及状态列表:

fdfs_monitor /etc/fdfs/client.conf list group1 | grep ip_addr

查看一个group内storage server的id列表(storage采用server id特性的情况下使用):

fdfs_monitor /etc/fdfs/client.conf list group1 | grep '^\s*id'

     注:以上命令行示例中的group1为需要查看的group(存储分组)名称,修改为你要查看的group名称即可。

下一篇文章将介绍日志轮转和定期清除、binlog自动压缩和解压这两个功能,敬请期待。

本文分享自微信公众号 - FastDFS分享与交流(fastdfs100)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
3年前
FastDFS性能调优know how
众所周知,软件性能调优不是一撮而就的事情,它是一个反复磨合的过程。下面介绍FastDFS几个性能调优相关的重要参数,供大家参考。1.最大并发连接数配置文件:tracker.conf和storage.conf  参数名:max\_connections  缺省值:256,默认配置:1024  FastDF
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
Unity5.6.4f1 配置WebGL教程
Unity5.6.4f1发布WebGL的配置教程步骤一:先查看自带的Unity是否yi配置好WebGL的项,若无,则可遵循以下教程来设置!(https://oscimg.oschina.net/oscnet/54612ae3d9b094f1db96b00b1c81a5fe432.png)步骤二:下图是我已经设置好的,未设置
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Java服务总在半夜挂,背后的真相竟然是... | 京东云技术团队
最近有用户反馈测试环境Java服务总在凌晨00:00左右挂掉,用户反馈Java服务没有定时任务,也没有流量突增的情况,Jvm配置也合理,莫名其妙就挂了
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这