学习FastDfs(二)
分布式文件系统(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(二)的更多相关文章
- crawler4j 学习(二)
crawler4j 学习(二) 实现控制器类以制定抓取的种子(seed).中间数据存储的文件夹.并发线程的数目: public class Controller { public static voi ...
- 从零开始学习jQuery (二) 万能的选择器
本系列文章导航 从零开始学习jQuery (二) 万能的选择器 一.摘要 本章讲解jQuery最重要的选择器部分的知识. 有了jQuery的选择器我们几乎可以获取页面上任意的一个或一组对象, 可以明显 ...
- Android Animation学习(二) ApiDemos解析:基本Animators使用
Android Animation学习(二) ApiDemos解析:基本Animatiors使用 Animator类提供了创建动画的基本结构,但是一般使用的是它的子类: ValueAnimator.O ...
- AspectJ基础学习之二搭建环境(转载)
AspectJ基础学习之二搭建环境(转载) 一.下载Aspectj以及AJDT 上一章已经列出了他的官方网站,自己上去download吧.AJDT是一个eclipse插件,开发aspectj必装,他可 ...
- WPF的Binding学习笔记(二)
原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...
- AJax 学习笔记二(onreadystatechange的作用)
AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...
- MyBatis学习系列二——增删改查
目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ...
- MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存
目录(?)[-] 二SQL语句映射文件2增删改查参数缓存 select insert updatedelete sql parameters 基本类型参数 Java实体类型参数 Map参数 多参数的实 ...
- MyBatis学习 之 二、SQL语句映射文件(1)resultMap
目录(?)[-] 二SQL语句映射文件1resultMap resultMap idresult constructor association联合 使用select实现联合 使用resultMap实 ...
- UML学习(二)-----类图
UML学习(二)-----类图 http://www.cnblogs.com/silent2012/archive/2011/09/07/2169946.html http://www.cnblogs ...
随机推荐
- python为什么是高级语言和解释型编程语言?它是如何粘合其它语言写的代码的?
学习python之初,不知道大家对于python有没有疑惑,应当是有的.这里我整理出来了自己的一些疑惑,供大家参考. 为什么python是高级程序设计语言 Java,C,C++这些语言是高级语言, ...
- linux系统挂载磁盘
linux系统挂载磁盘 ## 将硬盘挂载到/mnt/disk1下 # 检查磁盘状态,确认分区 fdisk -l # 格式化磁盘(分区) mkfs.ext4 /dev/sda #根据机器上的命名 以sd ...
- k-NN——算法实现
k-NN 没有特别的训练过程,给定训练集,标签,k,计算待预测特征到训练集的所有距离,选取前k个距离最小的训练集,k个中标签最多的为预测标签 约会类型分类.手写数字识别分类 计算输入数据到每一个训练数 ...
- 将ISO镜像文件制作成USB disk
制作USB Live盘有Universal USB Installer.UNetbootin.WinSetupFromUSB.LinuxLive USB Creator.YUMI(Your Unive ...
- SpringMVC入门一:基础知识(依赖、注解、文件上传/下载、拦截器、异常处理等)
为了使Spring可插入MVC架构,SpringFrameWork在Spring基础上开发SpringMVC框架,从而使用Spring进行WEB开发时可以选择使用Spring的SpringMVC框架作 ...
- 对SQL中游标的认识
游标用于按顺序遍历结果集.但一般情况下,应尽量避免使用游标.原因: 1. 游标违背了关系模型,即按集合来考虑问题的思想: 2. 游标逐行对纪录进行操作,会带来额外的开销,使用游标的解决方案通常比使用集 ...
- 自己动手写Vector【Cherno C++教程】
动手写一个Vector 本文是对<最好的C++教程>的动手写数据结构部分的一个整理,主要包含91p动手写Array数组和92p动手写Vector数组的内容. 自己动手来写这些数据结构是学习 ...
- 统计学中数据分布的偏度(skewness)和峰度(kurtosis)
- 《前端运维》一、Linux基础--05Shell运算符
今天我们来学习下Shell运算符,Shell跟其他的编程语言一样,也支持多种运算符,包括: 算数运算符 关系运算符 布尔运算符 字符串运算符 文件测试运算符 那下面,我们就一一来学习一下这些运算符. ...
- RocketMQ 事务消息示例分析
@ 目录 1 示例模式 2 安装与配置 RocketMQ 3 运行服务 3.1 启动 NameServer 3.2 启动 broker 4 生产者 4.1 事务监听器 4.2 事务消息生产者 5 消费 ...