分布式文件系统(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. Weblogic补丁升级常见问题

    转至:https://blog.csdn.net/weixin_44659716/article/details/106804177 常用企业级版本:Weblogic 11g(weblogic10.3 ...

  2. c/c++ 常见字符串处理函数总结 strlen/sizeof strcpy/memcpy/strncpy strcat/strncat strcmp/strncmp sprintf/sscanf strtok/split/getline atoi/atof/atol

    这里总结工作中经常用到的一些c/c++的字符串处理方法,标黑的是使用频率较高的   1.strlen函数:计算目标字符串长度,    格式:strlen(字符指针指向区域) 注意1:①不包含字符串结束 ...

  3. RT-Thread学习2 —— 内存管理学习记录

    RT-Thread学习2 -- 内存管理学习记录1 小内存管理算法(mem.c) 1. 小内存管理法: 小内存管理算法是一个简单的内存分配算法.初始时,它是一块大的内存.当需要分配内存块时,将从这个大 ...

  4. SQL Server--设置用IP地址登录

    问题概述:新安装的SQL Server数据库无法用IP地址登录. 是因为 SQL Server  "服务器网络实用工具"中禁用了"命名管道"所致! 在sqlse ...

  5. [源码解析] NVIDIA HugeCTR,GPU 版本参数服务器 --(9)--- Local hash表

    [源码解析] NVIDIA HugeCTR,GPU 版本参数服务器 --(9)--- Local hash表 目录 [源码解析] NVIDIA HugeCTR,GPU 版本参数服务器 --(9)--- ...

  6. linux下的硬盘分区、格式化、挂载

    linux下的MBR(msdos)分区.格式化.挂载 在linux下,需要使用一块硬盘. 需要进行以下四步: 识别硬盘-----分区规划-----格式化-----挂载 步骤一:分区规划 MBR模式分区 ...

  7. laravel 实现详情分页

    选择合适的PHP框架及前端框架布局页面(10分) 首先展示出分类列表,每个分类下只显示3条信息,无需分页 (30分) 在列表页 点击文章标题进入详细页面,对应的文章点击量+1(30分) 在详细页面点击 ...

  8. 1. 企业级调度器LVS初识、工作模式详解

    想学习更多相关知识请看博主的个人博客 1. LVS官网 LVS 时全球最流程的四层负载均衡开源软件. LVS 官网:http://www.linuxvirtualserver.org/ 2.Linux ...

  9. 七天接手react项目 —— state&事件处理&ref

    state&事件处理&ref 在 react 起步 一文中,我们学习了 react 相关知识:jsx.组件.props.本篇将继续研究 state.事件处理和ref. state St ...

  10. LGP5824口胡

    万 恶 之 源 十 二 重 计 数 法 先鸽子了 球有序,盒子有序 答案明显为 \(m^n\). 球有序,盒子有序,每个盒子最多放一个 答案明显为 \(\binom{m}{n}n!\). 球有序,盒子 ...