什么是FastDFS?

FastDFS是一个开源的轻量级分布式文件系统。它解决了大数据量存储和负载均衡等问题。特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务,如相册网站、视频网站等等。在UC基于FastDFS开发向用户提供了:网盘,社区,广告和应用下载等业务的存储服务。

FastDFS架构:

FastDFS服务端有三个角色:跟踪服务器(tracker server)、存储服务器(storage server)和客户端(client)。

  • tracker server:跟踪服务器,主要做调度工作,起负载均衡的作用。在内存中记录集群中所有存储组和存储服务器的状态信息,是客户端和数据服务器交互的枢纽。相比GFS中的master更为精简,不记录文件索引信息,占用的内存量很少。
  • storage server:存储服务器(又称:存储节点或数据服务器),文件和文件属性(Meta data)都保存到存储服务器上。Storageserver直接利用OS的文件系统调用管理文件。
  • client:客户端,作为业务请求的发起方,通过专有接口,使用TCP/IP协议与跟踪器服务器或存储节点进行数据交互。

Tracker Server:跟踪服务器,主要做调度工作,在访问上起负载均衡的作用。
Storage Server:存储服务器(又称数据服务器)。

存储节点采用了分组(group)的方式。存储系统由一个或多个group组成,group与group之间的文件是相互独立的,

所有group的文件容量累加就是整个存储系统中的文件容量。一个group可以由一台或多台存储服务器组成,一个group下的存储服务器中的文件都是相同的,group中的多台存储服务器起到了冗余备份和负载均衡的作用(一个组的存储容量为该组内存储服务器容量最小的那个,不同组的Storage server之间不会相互通信,同组内的Storage server之间会相互连
接进行文件同步)。

在group中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。

当存储空间不足或即将耗尽时,可以动态添加group。只需要增加一台或多台服务器,并将它们配置为一个新的group,
这样就扩大了存储系统的容量。

FastDFS两个角色:Tracker server和Storage server。Tracker server作为中心结点,其主要作用是负载均衡和调度。Tracker server在内存中记录分组和Storage server的状态等信息,不记录文件索引信息,占用的内存量很少。
另外,客户端(应用)和Storage server访问Tracker server时,Tracker server扫描内存中的分组和Storage server信息,然后给出应答。由此可以看出Tracker server非常轻量化,不会成为系统瓶颈。

FastDFS中的Storage server在其他文件系统中通常称作Trunk server或Data server。Storage server直接利用OS的文件系统存储文件。FastDFS不会对文件进行分块存储,客户端上传的文件和Storage server上的文件一一对应(FastDFS中的文件标识分为两个部分:组名和文件名,二者缺一不可)。

fastDFS下载地址:http://code.google.com/p/fastdfs/downloads/list
libevent官网: http://libevent.org/

目前最新版:https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
目前最新版:http://fastdfs.googlecode.com/files/FastDFS_v4.06.tar.gz

系统环境:
fastdfs_tracker centos6.5_64 ip:192.168.1.50
fastdfs_storage_s1 centos6.5_64 ip:192.168.1.51
fastdfs_storage_s2 centos6.5_64 ip:192.168.1.52
fastdfs_client centos6.5_64 ip:192.168.1.54

selinux关闭,iptables关闭。

配置tracker:
先装libevent,后fastdfs

1
2
3
4
5
6
7
8
[root@centos-6.5-x64 ~]#yum install -y gcc gcc-c++
[root@centos-6.5-x64 ~]#tar zxvf libevent-2.0.21-stable
[root@centos-6.5-x64 ~]#tar zxvf FastDFS_v4.06.tar.gz
[root@centos-6.5-x64 ~]#cd libevent-2.0.21-stable
[root@centos-6.5-x64 libevent-2.0.21-stable]#./configure && make && make install
[root@centos-6.5-x64 libevent-2.0.21-stable]# cd
[root@centos-6.5-x64 ~]#cd FastDFS
[root@centos-6.5-x64 FastDFS]#sh make.sh && sh make.sh install

fastdfs的配置文件路径默认在 /etc/fdfs/
[root@centos-6.5-x64 ~]#cd /etc/fdfs/
[root@centos-6.5-x64 fdfs]#ll
总用量 56
-rw-r–r– 1 root root 1463 4月 23 04:10 client.conf
-rw-r–r– 1 root root 858 4月 23 04:10 http.conf
-rw-r–r– 1 root root 31172 4月 23 04:10 mime.types
-rw-r–r– 1 root root 7460 4月 23 04:10 storage.conf
-rw-r–r– 1 root root 6621 4月 23 04:10 tracker.conf

client.conf 客户端上传配置文件
storage.conf 文件存储服务器配置文件
tracker.conf 负责均衡调度服务器配置文件
http.conf http服务器配置文件(可忽略不用)

跟fastdfs相关的命令都在 /usr/local/bin/ 下

编辑tracker配置文件:
[root@centos-6.5-x64 fdfs]#grep -v “#” tracker.conf | grep -v “^$”

#tracker.conf 配置文件是否生效,false是生效,true是屏蔽。
disabled=false

#程序的监听地址,如果不设定则监听所有地址
bind_addr=

#tracker监听的端口
port=22122

#连接超时时间
connect_timeout=30

#tracker在通过网络发送接收数据的超时时间
network_timeout=60

#数据和日志的存放地点
base_path=/home/yuqing/fastdfs

#最大连接数
max_connections=256

#工作线程数一般为cpu个数
work_threads=4

#在存储文件时选择group的策略,0:轮训策略 1:指定某一个组 2:负载均衡,选择空闲空间最大的group.
store_lookup=2

#如果上面的store_lookup选择了1,则这里需要指定一个group
store_group=group2

#在group中的哪台storage做主storage,当一个文件上传到主storage后,就由这台机器同步文件到group内的其他storage上,0:轮训策略 1:根据ip地址排序,第一个 2:根据优先级排序,第一个
store_server=0

#选择文件上传到storage中的哪个(目录/挂载点),storage可以有多个存放文件的base path 0:轮训策略 2:负载均衡,选择空闲空间最大的
store_path=0

#选择那个storage作为主下载服务器,0:轮训策略 1:主上传storage作为主下载服务器
download_server=0

#系统预留空间,当一个group中的任何storage的剩余空间小于定义的值,整个group就不能上传文件了
reserved_storage_space = 10%

#日志信息级别
log_level=info

#进程以那个用户/用户组运行,不指定默认是当前用户
run_by_group=
run_by_user=

#允许那些机器连接tracker默认是所有机器
allow_hosts=*

#设置日志信息刷新到disk的频率,默认10s
sync_log_buff_interval = 10

#检测storage服务器的间隔时间,storage定期主动向tracker发送心跳,如果在指定的时间没收到信号,tracker人为storage故障,默认120s
check_active_interval = 120

#线程栈的大小,最小64K
thread_stack_size = 64KB

#storage的ip改变后服务端是否自动调整,storage进程重启时才自动调整
storage_ip_changed_auto_adjust = true

#storage之间同步文件的最大延迟,默认1天
storage_sync_file_max_delay = 86400

#同步一个文件所花费的最大时间
storage_sync_file_max_time = 300

#是否用一个trunk文件存储多个小文件
use_trunk_file = false

#最小的solt大小,应该小于4KB,默认256bytes
slot_min_size = 256

#最大的solt大小,如果上传的文件小于默认值,则上传文件被放入trunk文件中
slot_max_size = 16MB

#trunk文件的默认大小,应该大于4M
trunk_file_size = 64MB

trunk_create_file_advance = false
trunk_create_file_time_base = 02:00
trunk_create_file_interval = 86400
trunk_create_file_space_threshold = 20G
trunk_init_check_occupying = false
trunk_init_reload_from_binlog = false
use_storage_id = false
storage_ids_filename = storage_ids.conf
id_type_in_filename = ip
store_slave_file_use_link = false
rotate_error_log = false
error_log_rotate_time=00:00
rotate_error_log_size = 0
use_connection_pool = false
connection_pool_max_idle_time = 3600

#http服务是否生效,默认不生效,此项可能在4.0版本后剔除。不起作用且没有此行。
http.disabled=false

#http服务端口
http.server_port=8080

#检测storage上http服务的时间间隔,<=0表示不检测
http.check_alive_interval=30

#检测storage上http服务时所用请求的类型,tcp只检测是否可以连接,http必须返回200
http.check_alive_type=tcp

#通过url检测storage http服务状态
http.check_alive_uri=/status.html

#用include包含进http的其他设置,此项可能在4.0版本后剔除。不起作用。
##include http.conf

需要修改的地方是 base_path 改为自己的路径,这里改为:
base_path=/mnt/fastdfs_tracker

[root@centos-6.5-x64 fdfs]#mkdir /mnt/fastdfs_tracker
启动tracker:
[root@centos-6.5-x64 fdfs]#/usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf
/usr/local/bin/fdfs_trackerd: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory
[root@centos-6.5-x64 ~]#find / -name libevent-2.0.so.5
/root/libevent-2.0.21-stable/.libs/libevent-2.0.so.5
/usr/local/lib/libevent-2.0.so.5
[root@centos-6.5-x64 ~]#ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5#找不到库文件,搜索一下软链接过去即可。
[root@centos-6.5-x64 ~]#/usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf
[root@centos-6.5-x64 ~]#
[root@centos-6.5-x64 ~]#lsof -i:22122#端口启动
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
fdfs_trac 8287 root 5u IPv4 40633 0t0 TCP *:22122 (LISTEN)

配置storage_s1:

8
9
10
11
12
13
14
15
[root@centos-6.5-x64 ~]#tar zxvf libevent-2.0.21-stable
[root@centos-6.5-x64 ~]#tar zxvf FastDFS_v4.06.tar.gz
[root@centos-6.5-x64 ~]#cd libevent-2.0.21-stable
[root@centos-6.5-x64 libevent-2.0.21-stable]#./configure && make && make install
[root@centos-6.5-x64 libevent-2.0.21-stable]#cd
[root@centos-6.5-x64 ~]#cd FastDFS
[root@centos-6.5-x64 FastDFS]#sh make.sh && sh make.sh install
[root@centos-6.5-x64 FastDFS]#cd /etc/fdfs/
[root@centos-6.5-x64 fdfs]#ll
总用量 56
-rw-r--r-- 1 root root 1463 4月 23 04:52 client.conf
-rw-r--r-- 1 root root 858 4月 23 04:52 http.conf
-rw-r--r-- 1 root root 31172 4月 23 04:52 mime.types
-rw-r--r-- 1 root root 7460 4月 23 04:52 storage.conf
-rw-r--r-- 1 root root 6621 4月 23 04:52 tracker.conf

centos6.5 搭建fastdfs分布式存储图片的更多相关文章

  1. HTML5 Web缓存和运用程序缓存(cookie,session)

    这篇文章主要介绍了HTML5 Web缓存和运用程序缓存(cookie,session),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. ios – Objective-C中的Google用户serverAuthCode nil

    我正在尝试将GoogleSignIn框架集成到iOS应用程序中,并对服务器上的用户进行身份验证.我设法登录用户,但在–(void)signIn:(GIDSignIn*)signIndidSignInForUser:(GIDGoogleUser*)用户withError:(NSError*)错误委托方法,user.serverAuthCode为nil,我需要通过此服务器身份验证代码,嗯,验证服务器上

  3. xcode-server – Xcode服务器在哪里存储机器人?如何将机器人转移到另一台机器上?

    我使用Xcode和Xcode服务器创建了多个机器人.我想备份这些机器人并将其转移到另一台机器上.如何才能做到这一点?

  4. ios – CloudKit – 如何保存记录如果不存在

    我正在尝试创建一个包含唯一值的记录类型,并将作为另一个记录类型的目标引用对象.例如,录制类型–电影将包含用户提交的唯一电影列表.而且FavoriteMovies将包含用户参考和电影参考.用户可以从现有电影列表中进行选择,也可以向其中添加新电影.如果我创建一个新的电影记录,而另一个用户创建一个具有相同名称的新记录(在我检索电影列表之后,但在我尝试添加新电影之前),则会出现问题.这两个新记录被认为是具

  5. OpenStack: Storage 组件 Swift 和 Cinder

    本文介绍了OpenStackStorage,该产品为其他OpenStack项目提供了永久存储。根据文中对OpenStackCompute的描述,计算是计算工作量的核心。事实上,也可能出现这样的情况:应用程序在OpenStack环境以外的地方运行,具体情况取决于可重复、可扩展和可靠的存储,而且OpenStackStorage满足了所有这些规范。与之相反,OpenStackCinder表示块存储,类似于AmazonElasticBlockStore。对象存储Swift还是Cinder?对象中包括与OpenSt

  6. 发现 OpenStack: Storage 组件 Swift 和 Cinder

    根据文中对OpenStackCompute的描述,计算是计算工作量的核心。事实上,也可能出现这样的情况:应用程序在OpenStack环境以外的地方运行,具体情况取决于可重复、可扩展和可靠的存储,而且OpenStackStorage满足了所有这些规范。与之相反,OpenStackCinder表示块存储,类似于AmazonElasticBlockStore。回页首对象存储Swift还是Cinder?对象中包括与OpenStackObjectStorage系统中存储的文件相关的内容和所有可选元数据。

  7. 让你真正明白cinder与swift、glance的区别

    Cinder——提供块存储,类似于Amazon的EBS块存储服务,目前仅给虚机挂载使用。Cinder包含以下三个主要组成部分APIservice:Cinder-api是主要服务接口,负责接受和处理外界的API请求,并将请求放入RabbitMQ队列,交由后端执行。Cinder目前提供VolumeAPIV2Schedulerservice:处理任务队列的任务,并根据预定策略选择合适的VolumeService节点来执行任务。目前版本的cinder仅仅提供了一个SimpleScheduler,该调度器选择卷数量

  8. OpenStack简介

    OpenStack既是一个社区,也是一个项目和一个开源软件,它提供了一个部署云的操作平台或工具集。OpenStack云实例生命期所需的各种动作都将由Nova进行处理和支撑,这就意味着Nova以管理平台的身份登场,负责管理整个云的计算资源、网络、授权及测度。消息队列OpenStack内部在遵循AMQP的基础上采用消息队列进行通信。

  9. swift分布式存储多节点部署

    1、机器192.168.1.211ProxyNode192.168.1.212StorageNode192.168.1.213StorageNode192.168.1.214StorageNode系统为SLES11sp12、配置软件源因为公司服务器无法连外网,所以配置局域网源和本地源来搭建环境上传ISO镜像文件到各台机器SLES-11-SP4-DVD-x86_64-GM-DVD1.iso每台机器挂

  10. swift分布式存储性能测试以及破坏性测试

    延续上一个文章的做接下来的测试,环境是一个proxy和三个storage。

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部