分布式文件系统(DFS)
指文件系统管理的物理存储资源不一定直接连接在本地节点上
而是通过计算机网络与节点相连
分布式文件系统的设计基于客户机/服务器模式
一个典型的网络可能包括多个多个用户访问的服务器
对等特性允许一些系统扮演客户机和服务器的双重角色

分布式文件系统的特点
分布式文件系统可以有效解决数据的存储和管理难题
将固定于摸个地点的某个文件系统,扩展到任意多个地点/多个文件系统
众多的节点组成一个文件系统网络
每个节点可以分布在不同的地点,通过网络进行节点间的通信和数据传输
使用分布式文件系统时,无需关心数据是存储在哪个节点上
或者是从哪个节点获取的,只需要像使用本地文件系统一样管理和存储文件系统中的数据

衡量分布式文件系统的优劣
数据的存储方式
无论采用何种存储方式,目的都是为了保证数据的存储安全和方便获取
数据的读取速率
包括响应用户读取文件的请求,定位数据文件所在的节点,读取实际硬盘中数据文件的时间
不同节点间的数据传输时间以及一部分处理器的处理时间等
数据的安全机制
采取冗余,备份,镜像等方式

常用的分布式文件系统
Lustre
一个大规模的,安全可靠的,具备高可用的集群文件系统,他是由sun公司开发和维护
Hadoop
不仅是一个用于存储的分布式文件系统,而是设计用来在由通过计算机设备组成的大型集群上执行分布式应用的框架
OpenAFS
一套开源的分布式文件系统,允许系统之间通过局域网和广域网来分享档案和资源
googleFS
一个可扩展分布式文件系统,用于大型的,分布式的,对大量数据进行访问的应用

服务器角色
与单机的文件系统不同,分布式文件系统不是将这些数据放在一块硬盘上,由上层操作系统来管理
数据存放在一个服务器集群上,由集群中的服务器各尽其责,通力合作,提供整个文件系统的服务
重要的服务器包括:
主控服务器
数据服务器

主控服务器:
master管理各个数据服务器收集它们的信息,了解所有数据服务器的生存现状
然后给它们分配任务
主控服务器上放着所有的文件目录信息,要找一个文件,必须先访问它
数据服务器:
存放数据的服务器,设计为冗余模式
主要的工作模式就是定期向主控服务器汇报其状况,然后等待并处理命令,更快更安全的存放好数据

数据分布
以块的方式存储
把文件数据切成数据块,将数据块存储在数据服务器上
以独立文件的方式存储
每台数据服务器存储独立的文件,每台数据服务器存储相同的文件,实现冗余及负载均衡

——————————————————————————————————————————————————————————

FastDFS
一款开源分布式文件系统,用纯c语言实现,支持linux freebsd aix等unix系统
功能包括文件存储,文件同步,文件访问 文件上传,下载等
解决了大容量存储和负载均衡的问题
特别适合以文件为载体的在线服务,如相册网站,视频网站等

FastDFS服务器端有两个角色:跟踪器(tracker)和存储节点(storage)
跟踪器:主要做调度工作,在访问上起负载均衡的作用
存储节点:完成文件管理的所有功能,即存储,同步和提供存取接口,同时对文件的元数据进行管理

FastDFS系统结构
跟踪器和存储节点都可以由一台或多台服务器构成
跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务
跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减小
采用了分组存储方式
集群由一个或多个组构成,集群存储总容量为集群中所有组的存储容量之和
一个组由一台或多台存储服务器组成,同组内的多台存储节点服务器之间是互备关系
同组存储服务器上的文件是完全一致的
文件上传,下载,删除等操作可以在组内任意一台存储服务器节点上进行
一个组的存储容量为该组内存储服务器容量最小那个
采用分组存储方式的好处是灵活,可控性较强
一个分组服务器访问压力大时,可以在该组增加存储服务器来充服务能力(纵向扩容)
当系统容量不足时,可以增加组来扩充(横向扩容)
不同组内的存储服务器之间不会相互通信,同组内的存储服务器之间会相互连接进行文件同步
binlog中只记录文件名,不记录问价内容
文件同步只在同组内的存储服务器之间进行,采用push方式,即源头服务器同步给目标服务器

搭建配置FastDFS服务器
环境:准备4台服务器,第一台作为tracker,后三台作为storage并为storage准备磁盘
qemu-img create -f qcow2 /var/lib/libvirt/images/st1.img 20G
qemu-img create -f qcow2 /var/lib/libvirt/images/st2.img 20G
qemu-img create -f qcow2 /var/lib/libvirt/images/st3.img 20G
地址规划:主机tarcker :192.168.4.1
主机storage1:192.168.4.2
主机storage2:192.168.4.3
主机storage3:192.168.4.4
FastDFS官网:http://bbs.chinaunix.net/forum-240-1.html

安装配置tracke服务器(源码安装,别忘了gcc gcc-c++)
需要三个依赖包
libevent-devel-1.4.13-4.el6.x86_64.rpm
libevent-doc-1.4.13-4.el6.noarch.rpm
libevent-headers-1.4.13-4.el6.noarch.rpm
[root@tracker ~]# yum -y install lib*
[root@tracker ~]# tar -xf FastDFS_v4.06.tar.gz
[root@tracker FastDFS]# ./make.sh
[root@tracker FastDFS]# ./make.sh install
[root@tracker FastDFS]# cp init.d/fdfs_trackerd /etc/init.d/
[root@tracker ~]# mkdir -pv /data/fastdfs
[root@tracker FastDFS]# vim /etc/fdfs/tracker.conf(修改配置文件)
# the base path to store data and log files
base_path=/data/fastdfs(工作目录,写刚刚创建的目录)
# max concurrent connections this server supported
max_connections=4096(最大线程数,默认256)
# if use storage ID instead of IP address
# default value is false
# since V4.00
use_storage_id = true(默认false,改为true)
[root@tracker FastDFS]# cp conf/storage_ids.conf /etc/fdfs/(拷贝配置文件)
[root@tracker FastDFS]# vim /etc/fdfs/storage_ids.conf(修改配置文件)
1000001 group1 192.168.4.2(写storage的主机)
1000001 group1 192.168.4.3
1000001 group1 192.168.4.4
[root@tracker FastDFS]# /etc/init.d/fdfs_trackerd start; chkconfig fdfs_trackerd on
[root@tracker FastDFS]# netstat -tlnp | grep :22122(查看端口,确定服务启动)
tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 2490/fdfs_trackerd

安装配置storage服务器,及准备磁盘(三台主机主机做相同的操作)
需要三个依赖包
libevent-devel-1.4.13-4.el6.x86_64.rpm
libevent-doc-1.4.13-4.el6.noarch.rpm
libevent-headers-1.4.13-4.el6.noarch.rpm
[root@storage1 ~]# yum -y install lib*
[root@storage1 ~]# tar -xf FastDFS_v4.06.tar.gz
[root@storage1 FastDFS]# ./make.sh
[root@storage1 FastDFS]# ./make.sh install
[root@storage1 FastDFS]# cp init.d/fdfs_storaged /etc/init.d/
[root@storage1 ~]# mkdir -pv /data/fastdfs
[root@storage1 ~]# vim /etc/fdfs/storage.conf(修改配置文件)
# the base path to store data and log files
base_path=/data/fastdfs(工作目录)
max_connections=4096(最大并发数)
store_path_count=1(几个路径写几个)
store_path0=/data/fastdfs(第一条路径)
tracker_server=192.168.4.1:22122(tracker服务器地址)
upload_priority=10(优先级)
[root@storage1 ~]# parted /dev/vdb(分区)
(parted) mklabel gpt
(parted) mkpart primary ext4 1M -1
[root@storage1 ~]# mkfs.ext4 /dev/vdb1(格式化)
[root@storage1 ~]# blkid /dev/vdb1(查看uuid号)
/dev/vdb1: UUID="75889d5b-a85b-4028-b50d-c5dfc6bd136f" TYPE="ext4"
[root@storage1 ~]# vim /etc/fstab(开机自动挂载)
UUID=75889d5b-a85b-4028-b50d-c5dfc6bd136f /data/fastdfs/ ext4 defaults 0 0
[root@storage1 ~]# mount -a(检查配置文件有没有错误)
[root@storage1 ~]# /etc/init.d/fdfs_storaged start; chkconfig fdfs_storaged on
storage会为用户创建辅助文件
[root@storage1 ~]# cat /data/fastdfs/data/.data_init_flag 初始化信息
[root@storage1 ~]# cat /data/fastdfs/data/storage_stat.dat 统计信息
[root@storage1 ~]# cat /data/fastdfs/data/sync/binlog.index 当前binlog文件索引号
[root@storage1 ~]# cat /data/fastdfs/data/sync/binlog.000 日志

配置FastDFS客户端
[root@python ~]# mkdir bin(创建一个bin目录)
[root@tracker ~]# cd /usr/local/bin/(在服务器端把配置文件复制过去)
[root@tracker ~]# scp fdfs_delete_file fdfs_upload_file fdfs_download_file fdfs_test /etc/fdfs/client.conf 192.168.4.5:/root/bin
[root@python bin]# vim client.conf
# the base path to store log files
base_path=/root/bin(工作目录)
tracker_server=192.168.4.1:22122(tracker主机ip)
[root@python bin]# ./fdfs_upload_file client.conf /etc/passwd(测试上传文件)
group1/M00/00/00/wKgEAlnHD3CAM8WTAAAEIOv-_n85532326(文件存放处及上传后的文件名)
[root@python bin]# ./fdfs_download_file client.conf group1/M00/00/00/wKgEAlnHD3CAM8WTAAAEIOv-_n85532326 passwd(测试下载。下载后的文件名)
[root@python bin]# ./fdfs_delete_file client.conf group1/M00/00/00/wKgEAlnHD3CAM8WTAAAEIOv-_n85532326(删除文件)
[root@storage1 ~]# ls /data/fastdfs/data/00/00/(storage服务器端查看上传的文件)

配置web访问,在storage服务器上安装nginx fastdfs-nginx-module(nginx模块)
[root@storage1 ~]# yum -y install pcre ocre-devel zlib zlib-decel
[root@storage1 ~]# tar -xf fastdfs-nginx-module_v1.16.tar.gz
[root@storage1 ~]# tar -xf nginx-1.8.0.tar.gz
[root@storage1 ~]# useradd -s /sbin/nologin nginx
[root@storage1 nginx-1.8.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --add-module=/root/fastdfs-nginx-module/src/
[root@storage1 nginx-1.8.0]# make
[root@storage1 nginx-1.8.0]# make install
[root@storage1 ~]# cp fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/(把配置文件拷贝到/etc/fdfs下)
[root@storage1 ~]# vim /etc/fdfs/mod_fastdfs.conf
tracker_server=192.168.4.1:22122(tracker服务器ip)
url_have_group_name = true(改为true)
store_path0=/data/fastdfs(本地存储路劲)
[root@storage1 ~]# vim /usr/local/nginx/conf/nginx.conf(修改nginx配置文件)
location / {
ngx_fastdfs_module;
}
[root@storage1 ~]# /usr/local/nginx/sbin/nginx(启动服务)
ngx_http_fastdfs_set pid=10522

客户端测试,先上传文件,再通过web方式查看
[root@python bin]# ./fdfs_upload_file client.conf /root/xx.txt
group1/M00/00/00/wKgEAlnHG_2AKp4iAAAAC7Shv9I745.txt
[root@python bin]# firefox http://192.168.4.2/group1/M00/00/00/wKgEAlnHG_2AKp4iAAAAC7Shv9I745.txt

——————————————————————————————————————————————————————————————————————————————

学习FastDfs(二)的更多相关文章

  1. crawler4j 学习(二)

    crawler4j 学习(二) 实现控制器类以制定抓取的种子(seed).中间数据存储的文件夹.并发线程的数目: public class Controller { public static voi ...

  2. 从零开始学习jQuery (二) 万能的选择器

    本系列文章导航 从零开始学习jQuery (二) 万能的选择器 一.摘要 本章讲解jQuery最重要的选择器部分的知识. 有了jQuery的选择器我们几乎可以获取页面上任意的一个或一组对象, 可以明显 ...

  3. Android Animation学习(二) ApiDemos解析:基本Animators使用

    Android Animation学习(二) ApiDemos解析:基本Animatiors使用 Animator类提供了创建动画的基本结构,但是一般使用的是它的子类: ValueAnimator.O ...

  4. AspectJ基础学习之二搭建环境(转载)

    AspectJ基础学习之二搭建环境(转载) 一.下载Aspectj以及AJDT 上一章已经列出了他的官方网站,自己上去download吧.AJDT是一个eclipse插件,开发aspectj必装,他可 ...

  5. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  6. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  7. MyBatis学习系列二——增删改查

    目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ...

  8. MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存

    目录(?)[-] 二SQL语句映射文件2增删改查参数缓存 select insert updatedelete sql parameters 基本类型参数 Java实体类型参数 Map参数 多参数的实 ...

  9. MyBatis学习 之 二、SQL语句映射文件(1)resultMap

    目录(?)[-] 二SQL语句映射文件1resultMap resultMap idresult constructor association联合 使用select实现联合 使用resultMap实 ...

  10. UML学习(二)-----类图

    UML学习(二)-----类图 http://www.cnblogs.com/silent2012/archive/2011/09/07/2169946.html http://www.cnblogs ...

随机推荐

  1. EasyUI Datagrid 数据网格

    前端用easyUI开发时,官方给的文档指导太少,网上找的又很慢,因此,我总结了一个后台返回数据后,用easyUI生成表格的方法,可编辑可分页: 1 function paginationTable(i ...

  2. 关于C#理解装箱与拆箱

    目录 1.理解装箱 2.理解拆箱 3.生成的 IL 代码 4.实际应用 5.小结 1.理解装箱 简单地说,装箱就是将一个值类型的数据存储在一个引用类型的变量中. 假设你一个方法中创建了一个 int 类 ...

  3. Python:Scrapy(四) 命令行相关

    学习自Scrapy 2.4.1 documentation 这一部分是对官方文档的学习,主要是理解翻译,来对之前的应用部分进行详细的理论补充. 1.保存爬取到的要素的方式: ①运行scrapy指令时, ...

  4. Vue之路由的使用

    零.传统路由与SPA的区别 传统开发方式下,URL改变后,就会立刻发生请求去请求整个页面,这样可能请求加载的资源过多,可能会让页面出现白屏. 在SPA(Single Page Application) ...

  5. DPLL 算法(求解k-SAT问题)详解(C++实现)

    \(\text{By}\ \mathsf{Chesium}\) DPLL 算法,全称为 Davis-Putnam-Logemann-Loveland(戴维斯-普特南-洛吉曼-洛夫兰德)算法,是一种完备 ...

  6. Scala语法1

    目录 main方法和def 函数 变量,类型转换,字符串分割拼接 文件读写和JDBC 面向对象编程 继承 case类,最常用的 main方法和def 函数 package scala_01 /** * ...

  7. SETTLE约束算法的批量化处理

    技术背景 在上一篇文章中,我们介绍了在分子动力学模拟中SETTLE约束算法的实现与应用,其中更多的是针对于单个的水分子.但由于相关代码是通过jax这一框架来实现的,因此对于多分子的体系,可以采用jax ...

  8. laravel7 搜索分页

    html: <form action="{{url('http://www.yanbing.com/fang/index')}}" method="get" ...

  9. PHP 的网站主要攻击方式有哪些?

    1.命令注入(Command Injection)2.eval 注入(Eval Injection)3.客户端脚本攻击(Script Insertion)4.跨网站脚本攻击(Cross Site Sc ...

  10. Mac下如何自动备份目录到七牛云?

    原文链接 七牛云是个很好用的图床,但是 Mac 下并没有什么很好用的客户端,每次上传都需要在网页上手动一个个传文件,十分麻烦,于是仔细看了下七牛云的部分文档,打算使用QRSBox来自动上传图片. QR ...