分布式文件系统(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
——————————————————————————————————————————————————————————————————————————————