一. 存储服务概述介绍:
NFS是Network File System的缩写,中文意思是网络文件系统,
主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录
互联网中小型网站集群机构后端常用NFS进行数据共享 (新华日报)
大型网站,那么有可能还会用到更复杂的分布式文件系统,例如:Moosefs(mfs)、GlusterFS(*)、FastDFS
NFS发展历史
总结: 没有NFS共享存储时,实现数据统一存储会非常复杂
A 主机本地保存数据目录 /A_data 部署rsync服务
图片A 19:00 传输到A主机上 19:01 数据同步
编写定时任务 每分钟
rsync -az /A_data/ --delete rsync_backup@172.16.1.2::B_data --password-file=/etc/rsync.password
rsync -az /A_data/ --delete rsync_backup@172.16.1.3::C_data --password-file=/etc/rsync.password
B 主机本地保存数据目录 /B_data 部署rsync服务
图片B 19:01 传输到B主机上 19:02 数据同步
编写定时任务 每分钟
rsync -az /B_data/ --delete rsync_backup@172.16.1.1::A_data --password-file=/etc/rsync.password
rsync -az /B_data/ --delete rsync_backup@172.16.1.3::C_data --password-file=/etc/rsync.password
C 主机本地保存数据目录 /C_data 部署rsync服务
编写定时任务 每分钟
rsync -az /C_data/ --delete rsync_backup@172.16.1.1::A_data --password-file=/etc/rsync.password
rsync -az /C_data/ --delete rsync_backup@172.16.1.2::B_data --password-file=/etc/rsync.password
存储数据 A(10G) --> A服务器 (30G 300元) B(10G) ---> B服务器(10G 300元) C(10G) ---> C服务器(10G 300元) 900
A 服务器 (10G)100
B 服务器 (10G)100 存储服务器 30G 300 磁盘成本 600
C 服务器 (10G)100
NFS好处:
1. 节省本地存储空间,将常用的数据存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用。
2. 用户不需要在网络中的每个机器上都建有Home目录,Home目录可以放在NFS服务器上且可以在网络上被访问使用。
3. 一些存储设备如软驱、CDROM和Zip(一种高储存密度的磁盘驱动器与磁盘)等都可以在网络上被别的机器使用。这可以减少整个网络上可移动介质设备的数量。
二. 存储服务存储原理:
1)存储数据原理
a 在存储客户端创建本地存储数据目录
b 在存储服务端创建共享存储数据目录
c 实现客户端目录和存储目录建立挂载
客户端目录中操作数据等价于存储服务器目录中操作数据
三. 存储服务部署过程:
预备知识:rpc --- 远程过程调用服务程序 (类似于中介)
服务端部署过程:
第一个历程:安装软件程序
yum install -y rpcbind nfs-utils
# rpm -qa rpcbind
rpcbind-0.2.0-48.el7.x86_64
# rpm -qa nfs-utils
nfs-utils-1.3.0-0.65.el7.x86_64
第二个历程:编写配置文件
vim /etc/exports
/data web*(rw)
配置文件样例:
/projects proj*.local.domain(rw)
/usr *.local.domain(ro) @trusted(rw)
① ② ③
① 设置定义数据存储目录
② 定义允许哪些主机存储数据
定义网段信息 定义地址信息 定义主机名称信息
③ 定义存储数据参数
第三个历程:创建存储目录
mkdir /data
chown nfsnobody.nfsnobody /data
第四个历程:编写本地解析配置文件
vim /etc/hosts
172.16.1.7 web01
172.16.1.8 web02
172.16.1.9 web03
第五个历程:启动服务程序
systemctl start rpcbind
systemctl start nfs
客户端部署过程:
需要部署出3台web服务器
第一个历程:安装软件程序
yum install -y nfs-utils
第二个历程:挂载应用存储服务
mount -t nfs 172.16.1.31:/data /mnt
四. 存储服务配置文件:
rw------------------是否允许向存储目录中存储数据 存储目录可读可写
ro------------------是否允许向存储目录中存储数据 存储目录只读状态
async---------------异步传输数据 客户端(存储数据) ---- 服务端 (内存) ---> 服务端(磁盘)
sync----------------同步传输数据 客户端(存储数据) ---- 服务端 (磁盘)
root_squash---------是否将用户信息做映射转换 将root用户身份进行转换 (默认转换用户nfsnobody)
no_root_squash------是否将用户信息做映射转换 将root用户身份不做转换
all_squash----------是否将用户信息做映射转换 将普通用户身份进行转换 (默认转换用户nfsnobody)
no_all_squash-------是否将用户信息做映射转换 将普通用户身份不做转换
anonuid-------------指定映射用户身份信息(uid)
anongid-------------指定映射用户身份信息(gid)
五. 存储服务相关命令:
rpcinfo --- 查看nfs服务注册信息
rpcinfo -p 172.16.1.31
showmount --- 查看可用挂载目录信息
showmount -e 172.16.1.31
exportfs --- 管理nfs服务运行状态
exportfs -rv
六. 存储服务客户端配置:
a. 客户端挂载操作
临时挂载操作: mount -t nfs 存储服务器地址:存储目录 本地挂载点目录
永久挂载操作:
方法一: 利用/etc/rc.local
方法二: 利用/etc/fstab
172.16.1.31:/data /mnt nfs defaults 0 0
PS: 关注系统启动顺序
先加载/etc/fstab ---> 启动网络服务 ---> 加载/etc/fstab(systemctl start remote-fs.target)
b. 客户端挂载参数
cat /proc/mounts
172.16.1.31:/data /mnt nfs4 rw,relatime,vers=4.1,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=172.16.1.7,local_lock=none,addr=172.16.1.31 0 0
mount -o 挂载参数
rsize 提示数据存储效率,减缓存储服务器压力 在客户端内存中设置了缓存
wsize 提升数据读取效率,减缓存储服务器压力 在客户端内存中设置了缓冲
hard 实现长连接挂载操作 (对于架构而言,配置hard容易造成耦合度过程) 架构师
soft 实现长连接挂载操作(具有超时时间timeo=600) (对于架构而言,配置soft可以实现解耦) 架构师
proto 网络挂载时选择通讯协议 (tcp/udp)
atime 访问存储数据时,会消耗磁盘IO, 影响磁盘性能
noatime 访问存储数据时,不要更改atime属性信息, 不会消耗磁盘IO, 减少磁盘性能消耗 优化
diratime 访问存储目录时,会消耗磁盘IO, 影响磁盘性能
nodiratime 访问存储目录时,不要更改目录atime属性信息, 不会消耗磁盘IO, 减少磁盘性能消耗 优化
==========================================================================
存储服务权限说明:*****
1)存储服务端配置文件参数没有设置正确(rw/ro xxx_squash)
2) 存储服务端存储目录本身权限配置问题
3)存储客户端挂载参数配置问题 (ro)
4)存储目录权限继承关系 (服务端配置文件中不要有目录层级配置)
==========================================================================
七. 存储服务企业应用:
弃用NFS案例: 如何解决NFS服务单点故障
读取数据时:弃用NFS服务(将存储数据和web服务器数据做同步), 让用户读取web服务器本地数据
写入数据时:弃用NFS服务(写入数据到本地 将数据进行恢复同步),让用户写入web服务器本地数据
八. 分布式存储:
一、HDFS原理
1. 当HDFS集群启动之时,DataNode会向NameNode发送信息,包括Block存储位置,DataNode地址。
Client向NameNode汇报当前上传文件的信息(Block数量、文件上传时间、文件权限、拥有着)。
2. Client将大文件切割成一个个的block块(以字符为单位进行切割)。
Client向NameNode发送请求,获得BlockId号,存储Block。
3. Client拿到BlockId号和DataNode地址开始上传文件。
1)NameNode返回给Client一批地址后,这些DataNode之间形成一个PipeLine管道。
2)Client把Block块切割成一个个Packet(64K)不断地往管道中输送。这样可以实现并发执行存储 ,从而提高上传效率。
1.数据备份机制
考虑到数据安全问题,需要给数据进行备份,默认有两个副本文件。
第一个Block存储在负载不是很高的一台服务器上。
第一个备份文件Block存储在与第一个Block不同的机架随机一台服务器上。
第二个备份文件存储在与第一个备份文件相同机架上的随机一台服务器。
2.持久化机制
防止系统故障导致数据丢失,故采用持久化机制。
在NameNode启动的过程中,生成edits和fsimage两个空文件;
SecondaryNameNode拉取edits文件进行重演,从而产生元数据,然后元数据与fsimage合并完成后,将新的fsimage(fsimage.CheckPoint)推送给NameNode;
在SecondaryNameNode读取edits文件的同时,NameNode会创建edits.new这个文件,来存储SecondaryNameNode在合并过程中,其他数据的操作。
3.安全模式
安全模式是HDFS所处的一种特殊状态,在这种状态下,文件系统只接受读数据请求(能查看文件目录,但是无法读取文件内容),而不接受删除、修改等变更请求。
安全模式下NameNode所做的工作:
加载fsimage,加载到内存中。
若edits文件不为空,那么namenode自己来合并。
检查DataNode是否存活。
若DataNode死亡,则指挥DataNode进行备份操作。
4.NameNode的作用
接收客户端的请求。
管理元数据(文件的上传时间、文件权限、文件属主)。
管理集群。
收集DataNode汇报的Block列表信息。
每一个DataNode的位置信息。
5.DataNode作用
存储源数据,向NameNode发送心跳。
接收客户端的读请求。
6.HDFS写流程
client计算大文件的block数量;
client会向NameNode汇报(当前大文件的block数,当前大文件属主、权限,文件上传时间);
client切割block;
client向NameNode请求block块的Id号以及地址;
由于NameNode掌控全局,管理所有的DataNode,所以它将负载不高的DataNode地址返回给client;
client拿到地址后,找到Data去上传数据;
Data将block存储完毕后,会向NameNode汇报当前的存储情况。
7.HDFS读流程
client请求NameNode获得block的位置信息,因为NameNode里存放了block位置信息的元数据。
Namenode返回所有block的位置信息,并将这些信息返回给客户端。
客户端拿到block的位置信息读取block信息,采用就近原则。
二、HDFS的搭建
搭建集群的三种模式:
1.伪分布式:在一台服务器上,启动多个进程,分别表示各个角色。
2.完全分布式:在多台服务器上,每台服务器启动不同角色的进程,使用多台服务器组成HDFS集群。
3.高可用的完全分布式:多一个NameNode的备份。