FastDFS使用说明 一、 FastDFS介绍
FastDFS是为互联网应用量身定做的分布式文件系统,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务,FastDFS的架构和设计理念有其独到之处,主要体现在轻量级、分组方式和对等结构三个方面。
轻量级:FastDFS只有两个角色:Tracker server和Storage server。Tracker server作为中心结点,其主要作用是负载均衡和调度。Tracker server在内存中记录分组和Storage server的状态等信息,不记录文件索引信息,占用的内存量很少。另外,客户端(应用)和Storage server访问Tracker server时,Tracker server扫描内存中的分组和Storage server信息,然后给出应答。由此可以看出Tracker server非常轻量化,不会成为系统瓶颈。
分组方式:FastDFS采用了分组存储方式。集群由一个或多个组构成,集群存储总容量为集群中所有组的存储容量之和。一个组由一台或多台存储服务器组成,同组内的多台Storage server之间是互备关系,同组存储服务器上的文件是完全一致的。文件上传、下载、删除等操作可以在组内任意一台Storage server上进行。类似木桶短板效应,一个组的存储容量为该组内存储服务器容量最小的那个,由此可见组内存储服务器的软硬件配置最好是一致的。
图一 FastDFS系统架构
采用分组存储方式的好处:灵活、可控性较强。比如上传文件时,可以由客户端直接指定上传到的组。一个分组的存储服务器访问压力较大时,可以在该组增加存储服务器来扩充服务能力(纵向扩容)。当系统容量不足时,可以增加组来扩充存储容量(横向扩容)。采用这样的分组存储方式,可以使用FastDFS对文件进行管理,使用主流的Web server如Apache、nginx等进行文件下载。
对等结构:FastDFS集群中的Tracker server也可以有多台,Tracker server和Storage server均不存在单点问题。Tracker server之间是对等关系,组内的Storage server之间也是对等关系。传统的Master-Slave结构中的Master是单点,写操作仅针对Master。如果Master失效,需要
将Slave提升为Master,实现逻辑会比较复杂。和Master-Slave结构相比,对等结构中所有结点的地位是相同的,每个结点都是Master,不存在单点问题。 文件上传交互过程:
图二 文件上传流程 1. Client询问Tracker server上传到的Storage server;
2. Tracker server返回一台可用的Storage server,返回的数据为该Storage server的IP地址和端口;
3. Client直接和该Storage server建立连接,进行文件上传,Storage server返回新生成的文件ID,文件上传结束。 文件下载交互过程:
图三 文件下载流程
1. Client询问Tracker server可以下载指定文件的Storage server,参数为文件ID(包含组名和文件名);
2. Tracker server返回一台可用的Storage server;
3. Client直接和该Storage server建立连接,完成文件下载。
二、FastDFS的安装与部署
安装环境:CentOS6环境单服务器 安装内容:FastDFS
Nginx: 一个高性能的HTTP和反向代理服务器
fastdfs-nginx-module: 可以重定向连接到源服务器取文件,避免客户端由于同组内storage
服务器复制延迟的问题,出现错误。 1. fastdfs 下载页面地址:http://sourceforge.net/projects/fastdfs/files/
Nginx下载页面地址:http://sourceforge.net/projects/fastdfs/files/ fastdfs-nginx-module 下载页面地址 :
http://sourceforge.net/projects/fastdfs/files/FastDFS Nginx Module Source Code/ 2. 安装fastdfs 和nginx 需要的插件
yum install gettext gettext-devel libXft libXft-devel libXpm libXpm-devel automake autoconf libXtst-devel gtk+-devel gcc gcc-c++zlib-devel libpng-devel gtk2-devel glib-devel pcre*fastdfs
3. 系统环境 依赖库自行安装。 Centos : 192.168.2.102 tracker1: 192.168.2.102 storage1: 192.168.2.102
4. 编译安装配置 FastDFS_v4.06.tar.gz
.编译安装 (1) vi make.sh WITH_LINUX_SERVICE=1 (2) ./make.sh ./make.sh install tracker 配置 (1) vi /etc/fdfs/tracker.conf base_path=/fastdfs/data/tracker ( 2) mkdir -p /fastdfs/data/tracker ( 3) service fdfs_trackerd start ( 4) netstat -ntl tcp 0 0 0.0.0.0:22122 storage 配置( 1) # vi /etc/fdfs/storage.conf
# the name of the group this storage server belongs to
# 此台storage1所属的服务器组名,同组内storage数据完全相同 group_name=group1
# the base path to store data and log files # 放置data和log的目录 base_path=/home/storage/fastdfs
# store_path#, based 0, if store_path0 not exists, it's value is base_path # the paths must be exist # 放置文件的目录
store_path0=/home/storage/fastdfs
# tracker_server can ocur more than once, and tracker_server format is # \host:port\
# tracker server的ip和端口,此处可以写多个tracker server,每行一个 tracker_server=192.168.2.102:22122 tracker_server=192.168.2.103:22122 tracker_server=192.168.2.104:22122 # :wq(保存设置)
(2) mkdir -p /fastdfs/data/storage (3) service fdfs_storaged start (4) netstat -ntl tcp 0 0 0.0.0.0:23000
5. 安装配置 nginx-1.4.4 和 fastdfs-nginx-module_v1.15.tar.gz
(1) /configure --prefix=/usr/local/nginx --add-module=/home/fastdfs-nginx-module/src make make install
(2) cp /home/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/ vi /etc/fdfs/mod_fastdfs.conf base_path=/tmp
tracker_server=192.168.2.102:22122
tracker_server=192.168.2.103:22122 tracker_server=192.168.2.104:22122
group_name=g1
url_have_group_name = true store_path0=/fastdfs/data/storage (3) mkdir -p /fastdfs/data/storage (4) vi /usr/local/nginx/conf/nginx.conf user nginx nginx;
location /g1/M00 { root /fastdfs/data/storage/data; ngx_fastdfs_module; }
(5) ln -s /fastdfs/data/storage/data /fastdfs/data/storage/data/M00 (6) service iptables stop cd /usr/local/nginx/sbin/ ./nginx 6. 测试
(1) vi /etc/fdfs/client.conf base_path=/tmp
tracker_server=192.168.2.102:22122 http.tracker_server_port=80
(2) /usr/local/bin/fdfs_test /etc/fdfs/client.conf upload test.txt (3) 用浏览器打开返回的连接,返回内容跟 test.txt 一致,说明成功
三、 C#中使用FastDFS的配置
Web.Config文件配置如下:
Mongodb使用说明 一、Mongodb介绍
MongoDB 是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式备受当前IT从业人员的青睐。MongoDB很好的实现了面向对象的思想(OO思想),在MongoDB中每一条记录都是一个Document对象。MongoDB最大的优势在于所有的数据持久操作都无需开发人员手动编写SQL语句,直接调用方法就可以轻松的实现CRUD操作。
MongoDB具有以下特点:面向集合:意思是数据被分组到若干集合,这些集合称作聚集(collections). 在数据库里每个聚集有一个唯一的名字,可以包含无限个文档.。聚集是RDBMS中表的同义词,区别是聚集不需要进行模式定义;模式自由:意思是数据库并不需要知道你将存入到聚集中的文档的任何结构信息.实际上,你可以在同一个聚集中存储不同结构的文档;文档型:意思是我们存储的数据是键-值对的集合,键是字符串,值可以是数据类型集合里的任意类型,包括数组和文档. 我们把这个数据格式称作 “[BSON]”,mongodb的主要目标是在键/值存储方式(提供了高性能和高度伸缩性)以及传统的RDBMS系统(丰富的功能)架起一座桥梁,集两者的优势于一身。