Linux云计算之集群化存储

一、集群化存储概述

  1. 用于存储的网络技术

1)DAS Direct-Attached Storage

说明: 直接附加存储,等同于存储设备通过数据线、光缆、SATA 直连主机

优点:

  • 技术简单
  • 传输效率最高

缺点: 存储设备与主机相互绑定,不利于后期扩展与共享

网络拓扑

在这里插入图片描述

2)Network Attached Storage

说明: 网络附加存储,通过网络在存储主机与使用主机之间传输数据

优点:

  • 技术相对简单
  • 不要求存储设备直连本机,只需在局域网下即可

缺点: 存储速率较慢

网络拓扑
在这里插入图片描述

3)Storage Area Network

说明: 存储区域网络,将生产网络与存储网络进行隔离,有效增加各部效率,减轻网络设备压力,适合大并发业务

优点

  • 存储安全性较高
  • 存储速率较高

缺点

  • 造价昂贵
  • 技术难度相对较高

网络拓扑
在这里插入图片描述

  1. 实现存储的技术分类

1)块存储

常见设备

在这里插入图片描述

优点

  • 可用通过 Raid、LVM 等简单技术实现高可用
  • 可独立使用

缺点: 不利用在多台网络设备之间进行共享

2)文件存储、网络存储

常见设备

在这里插入图片描述

优点

  • 构建资金较低
  • 可在不同主机之间共享存储

缺点: 读写效率低,传输效率慢

3)对象存储、分布式存储、存储桶

常见设备
在这里插入图片描述

优点

  • 读写效率高
  • 可在不同主机之间共享存储

缺点

  • 造价昂贵
  • 技术实现难度较高
  1. 常见的一些存储名词以及背后使用技术对应关系
文件存储、网络存储				FTP、SAMBA、Apache、Nginx
对象存储、分布式存储、云存储 		CEPH、MooseFS、ClusterFS
块存储							ISCSI
  1. 存储实现技术与存储网络之间的联系

1)块存储 + DAS

结构描述: 块存储直连主机设备是最常见的存储方式,也是后边所有存储方式的基石

结构拓扑

在这里插入图片描述
2)块存储 + NAS

结构描述: 将块设备通过局域网共享至其他使用主机节点,提升空间利用率,便于后期扩展

结构拓扑
在这里插入图片描述

3)块存储 + SAN

结构描述: 将块设备通过局域网络共享至其他使用主机节点,提升空间利用率。并且将用户访问网络与存储网络相隔离,利用提升存储效率以后后期维护扩展

结构拓扑

在这里插入图片描述
4)文件存储 + NAS

结构描述: 利用共享服务将文件通过网络传输至使用设备,便于文件在多台机器之间的共享操作

结构拓扑

在这里插入图片描述

5)对象存储 + SAN

结构描述: 利用分布式文件存储结构提升文件读写并发效率,并且将用户访问网络与存储网络相隔离,利用提升存储效率以后后期维护扩展

结构拓扑

在这里插入图片描述

二、文件存储 —— NFS

  1. NFS 概述

1)何为 NFS ?

NFS (Network File System)即网络文件系统,是 FreeBSD 支持的文件系统中的一种,它允许网络中的计算机之间通过 TCP/IP 网络共享资源。在 NFS 的应用中,本地 NFS 的客户端应用可以透明地读写位于远端 NFS 服务器上的文件,就像访问本地文件一样。NFS 最早是由 Sun 公司发展出来的,后被逐渐完整以及整合至 Linux 内核

2)NFS 功能

它就是可以透过网络,让不同的主机、不同的操作系统可以共享存储

3)NFS 原理

NFS 在文件传送或信息传送过程中依赖于 RPC 协议。远程过程调用(Remote Procedure Call)是能使客户端执行其他系统程序的一种机制所以只要用到 NFS 的地方都要启动 RPC 服务,不论是 NFS SERVER 或者 NFS CLIENT。这样 SERVER 和 CLIENT 才能通过 RPC 来实现 PROGRAM PORT的对应。可以这么理解 RPC 和 NFS 的关系:NFS是一个文件系统,而RPC 是负责信息的传输

4)NFS 优点

  • 节省本地存储空间,将常用的数据存放在一台 NFS 服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用
  • 用户不需要在网络中的每一台机器上都建有 Home 目录,Home 目录可以放在 NFS 服务器上且可以在网络上被访问使用
  • 一些存储设备 CDROM 和 Zip 等都可以在网络上被别的机器使用。这可以减少整个网络上可移动介质设备的数量
  1. NFS 安装及配置

1)安装如那件包介绍

  • nfs-utils:这个是 NFS 服务主程序(包含 rpc.nfsd、rpc.mountd、daemons)
  • rpcbind:这个是 CentOS6.X 的 RPC 主程序(CentOS5.X 的为 portmap)

2)NFS Server 配置代码记录

yum -y install rpcbind nfs-utils		#服务器端安装 rpcbind 和 NFS-utils 软件包
/etc/init.d/rpcbind status		# 查看 rpcbind 当前状态
LANG=en	#查看当前语言
lsof -i :111
rpcinfo -p localhost
/etc/init.d/nfs.status
lsof -i :2049

3)配置文件 /etc/exports 书写规则

/etc/exports 文件的配置格式为:
		NFS 共享目录 NFS 客户端地址1(参数1,参数2,参数3 ....) 客户端地址2(参数1,参数2,参数3....)
		NFS 共享目录 NFS 客户端地址1(参数1,参数2,参数3 ....) 
showmount -e ip
mount -t nfs ip:/file /file1		#在客户端进行 NFS 的挂载操作

4)共享权限解释

rw:read-write,可读写,注意,仅仅这里设置成读写客户端还是不能正常写入,还要正确地设置共享目录的权限;
ro:read-only,只读;
sync:文件同时写入硬盘和内存;
async:文件暂存于内存,而不是直接写入内存;
no_root_squash:NFS 客户端连接服务端时如果使用的是 root 的话,那么对服务端分享的目录来说,也拥有 root 权限。显然开启这项是不安全的;
root_squash:NFS 客户端连接服务端时如果使用的是 root 的话,那么对服务端分享的目录来说,拥有匿名用户权限,通常他将使用 nobody 或 nfsnobody 身份;
all_squash:不论 NFS 客户端连接服务端时使用什么用户,对服务端分享的目录来说都是拥有匿名用户权限;
anonuid:匿名用户的 UID 值,通常是 nobody 或 nfsnobody,可以在此处自行设定;
anongid:匿名用户的 GID 值;

三、分布式存储 —— MFS

  1. 什么是 MFS?

1)MFS 相关介绍

MooseFS 是一个具备冗余容错功能的分布式网络文件系统,它将数据分别存放在多个物理服务器或单独磁盘或分区上,确保一份数据有多个备份副本,然而对于访问 MFS 的客户端或者用户来说,整个分布式网络文件系统集群看起来就像一个资源一样,从其对文件系统的情况看 MooseFS 就相当于 UNIX 的文件系统

2)MFS 的特性说明

  • 高可靠性:每份数据可以设置多个备份(多份数据),并可以存储在不同的主机上
  • 高可扩展性:可以很轻松的通过增加主机的磁盘容量或增加主机数量来动态扩展整个文件系统的存储量
  • 高可容错性:我们可以通过对 mfs 进行系统设置,实现当数据文件被删除后的一段时间内,依旧存放于主机的回收站中,以备误删除恢复数据
  • 高数据一致性:及时文件被写入、访问时,我们依然可以轻松完成对文件的一致性快照

3)MFS 缺点

  • master 目前是单点,虽然会把数据信息同步到备份服务器,但是恢复需要时间
  • master 服务器对主机的内存要求略高
  • 默认 metalogger 复制元数据时间较长(可调整)

内存使用问题

对于 master 服务器来说,资源型要求就是内存大小,为了整个系统访问更快,mfs 会把所有访问的元数据 metadada 信息放在内存中提供用户访问,因此,当文件数量增加时,内存使用量就会增加,根据官方说法,处理一百万个文件 chunkserver,大概需要 300M 的内存空间。据此,推算如果未来要出来 1 个亿的文件 chunkserver,大概需要 30G 内存空间

4)MFS 的应用场景

  • 大规模高并发的线上数据存储及访问(小文件,大文件都适合)
  • 大规模的数据处理,如日志分析,小文件强调性能不用 HDFS
  1. MFS 组件说明

1)管理服务器

管理服务器 managing server 简称 master:这个组件的角色是管理整个 nfs 文件系统的主服务器,除了分发用户请求外,还用来存储整个文件系统中每个数据文件的 metadata 信息,metadate(元数据)信息包括文件(也可以是目录,socket,管道,块设备等)的大小,属性,文件的位置路径等

2)元数据备份服务器

元数据备份服务器 Metadata backup servers 简称 metalogger:这个组件的作用是备份管理服务器 master 的变化的 metadata 信息日志文件,文件类型为 changelog_ml.*mfs。以便于在管理服务器出问题时,可以经过简单的操作即可让新的主服务器进行工作

3)数据存储服务器组

数据存储服务器组 data servers(chunk servers)简称 data:这个组件就是真正存放数据文件实体的服务器了,这个角色可以有多台不同的物理服务器或不同的磁盘及分区来充当,当配置数据的副本多于一份时,据写入到一个数据服务器后,会根据算法在其他数据服务器上进行同步备份

4)客户机服务器组

客户机服务器组(client servers)简称 client:这个组件就是挂载并使用 mfs 文件系统的客户端,当读写文件时,客户端首先会连接主管理服务器获取数据的 metadata 信息,然后根据得到的 metadata 信息,访问数据服务器读取或写入文件实体,mfs 客户端通过 fuse mechanism 实现挂载 mfs 文件系统的,因此,只有系统支持 fuse,就可以作为客户端访问 mfs 整个文件系统

  1. 数据操作组件之间的协同过程

基础结构拓扑

在这里插入图片描述
1)MFS 的读数据过程

  • client 当需要一个数据时,首先向 master server 发起查询请求;
  • 管理服务器检索自己的数据,获取到数据所在的可用数据服务器位置 ip | port | chunkid;
  • 管理服务器将数据服务器的地址发送给客户端;
  • 客户端向具体的数据服务器发起数据获取请求;
  • 数据服务器将数据发送给客户端;

2)MFS 的写数据过程

  • 当客户端有数据写需求时,首先向管理服务器提供文件元数据信息请求存储地址(元数据信息如:文件名 | 大小 | 分数等);
  • 管理服务器根据写文件的元数据信息,到数据服务器创建新的数据块;
  • 数据服务器返回创建成功的消息;
  • 管理服务器将数据服务器的地址返回给客户端(chumkIP | port | chunkid);
  • 客户端向数据服务器写数据;
  • 数据服务器返回给客户端写成功的消息;
  • 客户端将此次写完成结束信号和一些信息发送到管理服务器来更新文件的长度和最后修改时间;

3)MFS 的删除文件过程

  • 客户端有删除操作时,首先向 Master 发送删除信息;
  • Master 定位到相应元数据信息进行删除,并将 chunk server 上块的删除操作加入队列异步清理;
  • 响应客户端删除成功的信号

4)MFS 修改文件内容的过程

  • 客户端有修改文件内容时,首先向 Master 发送操作信息;
  • Master 申请新的块给 .swp 文件;
  • 客户端关闭文件后,会向 Master 发送关闭信息;
  • Master 会检测内容是否有更新,若有,则申请新的快存放更改后的文件,删除原有块和 .swap 文件块;
  • 若无,则直接删除 .swp 文件块

5)MFS 重命名文件的过程

  • 客户端重命名文件时,会向 Master 发送操作信息;
  • Master 直接修改元数据信息中文件名;返回重命名完成信息;

6)MFS 遍历文件的过程

  • 遍历文件不需要访问 chunk server,当有客户端遍历请求时,向 Master 发送操作信息;
  • Master 返回相应元数据信息;
  • 客户端接收到信息后显示;
  1. 补充描述
  • Master 记录着管理信息,比如:文件路径 | 大小 | 存储的位置(ip,port,chunkid)| 份数 | 时间等,元数据信息存在于内存中,会定期写入 metadate.mfs.back 文件中,定期同步到 metalogger,操作实时写入 changelog.*.mfs,实时同步到 metalogger 中。master 启动将 metadata.mfs 载入内存,重命名为 metadata.mfs.back 文件。
  • 文件以 chunk 大小存储,每 chunk 最大为 64M,小于 64M 的,该 chunk 的大小即为该文件大小(验证实际 chunk 文件略大于实际文件),超过 64M 的文件将被切分,以每一份(chunk)的大小不超过 64M 为原则;块的生成遵循规则;目录循环写入(00-FF 256个目录循环,step 为2)、chunk 文件递增生成、大文件切分目录连续。
  • Chunkserver 上的剩余存储空间要大于 1GB(Reference Guide 有提到),新的数据才会被允许写入,否则,你会看到 No space left on device 的提示,实际中,测试发现当磁盘使用率达到 95% 左右的时候,就已经不行写入了,当时可用空间为 1.9GB。
  • 文件可以有多份 copy,当 goal 为 1 时,文件会被随机存到一台 chunkserver 上,当 goal 的数大于 1 时,copy 会由 master 调度保存到不同的 chunkserver 上,goal 的大小不要超过 chunkserver 的数量,否则多出的 copy ,不会有 chunkserver 去存。
  1. MFS 集群构建

1)试验集群拓扑

在这里插入图片描述
2)实验代码记录

Master Server Node:

tar zxf moosefs-3.0.84-1.tar.gz
cd moosefs-3.0.84
useradd mfs -s /sbin/nologin	#创建MFS 用户,用于 MFS 运行身份
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs #编译安装 MFS 软件
make && make install
chmod a+x /usr/local/mfs/sbin/* # 优化配置,使 MFS 命令便于调用
ln -s /usr/local/mfs/sbin/* /usr/local/sbin/
cd /usr/local/mfs/etc/mfs # 启用 MFS-Master 节点配置文件
cp -a mfsmaster.cfg.sample mfsmaster.cfg
cp mfsexports.cfg.sample mfsexports.cfg #设置 MFS 挂载权限
vim mfsexports.cfg
	10.10.10.0/24 . rw.alldirs,maproot=0
cp /usr/local/mfs/var/mfs/metadata.mfs.empty /usr/local/mfs/var/mfs/metadata.mfs #拷贝 MFS 元数据信息文件(初始)
mfsmaster start # 启动 MFS-Master 服务

主配置配置文件说明解释:

WORKING_USER = mfs
WORKING_GROUP = mfs
SYSLOG_IDENT = mfsmaster #在 syslog 中的表示,说明这是 mfsmaster 产生的
LOCK_MEMORY = 0 #是否执行 mlockall()以避免 mfsmaster 内存溢出(默认为0)
NICE_LEVEL = -19 #运行的优先级(默认 -19,注意,这进程必须是 root 启动)
DATA_PATH = /usr/local/mfs/var/mfs # 数据存放路径,该目录下有三大类文件,changelog,sessions,stats
EXPORTS_FILENAME = /usr/local/mfs/etc/mfs/mfsexports.cfg #被挂载目录以及其权限控制文件的存放位置
BACK_LOGS = 50 #元数据的改变日志文件数量(默认是 50)
MATOML_LISTEN_HOST = * #元数据日志服务器监听的 IP 地址(默认是 * ,代表任何 IP)
MATOML_LISTEN_PORT = 9419 #元数据日志服务器监听的端口地址,默认是 9419
MATOCS_LISTEN_HOST = * # 用于UNC服务器(Chunk server)连接的 IP 地址
MATOCS_LISTEN_PORT = 9420 #是存储服务器(Chunk server) 连接的端口地址
REPLICATIONS_DELAY_INIT = 300 # 延迟复制的时间(默认是300)
CHUNKS_LOOP_MIN_TIME = 300 # chunks 的回环率
CHUNKS_SOFT_DEL_LIMIT = 10
CHUNKS_WRITE_REP_LIMIT = 2,1,1,4 #在一个循环里复制到一个 CHUNK Server 的最大 chunks 数目
CHUNKS_READ_REP_LIMIT = 10,5,2,5
MATOCL_LISTEN_PORT = 9421

Metadata Server Node:

useradd mfs -s /sbin/nologin # 创建 MFS 用户,并编译安装 MFS 软件
./configure --prefix=/usr/local/mfs --with-default-user=mfs --withdefault-group=mfs
make && make install
cp mfsmetalogger.cfg.sample mfsmetalogger.cfg # 拷贝 MFS 元数据服务配置文件
vim mfsmetalogger.cfg
	META_DOWNLOAD_FREQ = 2 # 设置完整同步间隔为 2 小时
	MASTER_HOST = 10.10.10.11 # 设置 MFS-Master 服务器 IP地址
chmod a+x /usr/local/mfs/sbin/* /usr/local/sbin/
mfsmetalogger start # 启动 MFS-Logger 服务
lsof -i :9419
cd /usr/local/mfs/var/mfs/

Chunk Server Node:

useradd mfs -s /sbin/nologin #创建 MFS 用户,给 MFS 运行提供身份
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-defaultgroup=mfs && make && make install # 编译安装 MFS 软件
cd /usr/local/mfs/etc/mfs/
cp mfschunkserver.cfg.sample mfschunkserver.cfg # 拷贝 Chunkserver 配置文件
vim mfschunkserver.cfg
	MASTER_HOST = mfsmaster # 指定 MFS-Master 服务器地址
	MASTER_PORT = 9420 # 指定 MFS-Master 服务器端口
	HDD_CONF_FILENAME = /usr/local/mfs/etc/mfs/mfshdd.cfg # 指定提供存储的配置文件位置
mkdir /mnt/sdb1 # 创建挂载点目录
vim /usr/local/mfs/etc/mfs/mfshdd.cfg # 修改 MFS 服务 HDD 路径
	/mnt/sdb1
fdisk /dev/sdb # 分区
partprobe
mkfs.ext4 /dev/sdb1 # 格式化
mount /dev/sdb1 /mnt/sdb1/
chown -R mfs.mfs /mnt/sdb1/
mfschunkserver start # 启动 MFSChunkserver

Client Node:

yum -y install fuse fuse-devel fuse-libs # 安装 Fuse
tar zxf moosefs-3.0.84-1.tar.gz
cd moosefs-3.0.84-1.tar.gz
cd moosefs-3.0.84 # 编译安装 MFS Client 工具
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-defaultgroup=mfs --disable-mfsmaster --disable-mfschunkserver && make && make install
/usr/local/mfs/bin/mfsmount /mnt/mfsclient/ -H 10.10.10.12

3)后期维护操作

误删除处理,垃圾回收站机制

mfssettrashtime 64800 /mnt/mfs/test1	#设置保存时间
mkdir /back
chown mfs.mfs /bck
mfsmount -m /back -H 10.10.10.11
tree . 	#定位删除文件目录
mv 002/00000002\ | 1.txt /back/trash/undel/
查看恢复文件

快照功能

mkdir bb
chown mfs.mfs bb/
mfsmakesnapshot 1.txt bb/
cd bb/
ll

冗余 goal 设置

mfssetgoal 3 /mnt/mfs/test1
mfssetgoal /mnt/mfs/test1
mfsfileinfo /mnt/mfs/test1

还原 master

mfsmaster -a

四、块存储之 ISCSI 服务

  1. ISCSI 概述

1)ISCSI 与 SCSI 原理差别

在这里插入图片描述
2)常见用于 ISCSI 服务的网络拓扑类型

SAN:Storage Area Network 存储区域网络,多采用告诉光纤通道,对速率、冗余性要求高

在这里插入图片描述

Network Attachment Storage, 网络附加存储,采用普通以太网,对速率、冗余无特别要求

在这里插入图片描述

3)ISCSI 工作方式

  • 工作模式 C/S 结构
    - 服务(设备)端 —— target
    - 客户(应用)端 —— initiator

  • 工作拓扑图

在这里插入图片描述

  1. ISCSI 服务构建记录

1)命令行方式 —— 临时构建(理解过程)

lvm 整合

pvcreate /dev/sdb		#创建物理卷
vgcreate vg0 /dev/sdb		# 创建卷组
lvcreate -L 1G -n lv0 vg0		# 创建逻辑卷
mkfs -t ext4 /dev/vg0/lv0		# 对创建的逻辑卷进行格式化

在 target 端创建 IQN 标签

yum -y install scsi-target-utilsyum		#安装包,创建 ISCSI 对象
service tgtd start		# 开启服务
netstat -anpt | grep tgtd		# 查看服务是否开启
tgtadm -L (指定驱动类型) iscsi -o(制定操作类型) new -m(制定管理的对象) target -t(制定当前存储资源 id 号)1 -T(制定 iqn 标签,命名规则:iqn.创建年-月.域名反写:自定义)
iqn.2016-2.com.xdl.www:lvm
example: tatadm -L iscsi -o new -m target -t 1 -T iqn.2016-2.com.xdl.www:lvm
tgtadm -L iscsi -o show -m target		#查看 target 创建的信息

绑定 IQN 标签到存储设备

tgtadm -L (指定驱动类型) iscsi -o new -m (管理的对象) logicalunit -t (tat标签) 1 -l (逻辑存储单元的标签) 1 -b (设备名称) /dev/vg0/lv0
tgtadm -L iscsi -o bind -m target -t 1 -I 192.168.66.12

客户端配置

yum -y install iscsi-initiator-utils
iscsiadm -m discovery -t st -p(指定服务器 IP 地址) 192.168.66.11
iscsiadm -m node -T iqn.2016-2.com.xdl.www:lvm --login		#在客户端进行挂载
iscsiadm -m node -T iqn.2016-2.com.xdl.www:lvm --logout		#在客户端进行卸载
vi /etc/fstab		修改自动挂载文件
		/dev/sdb		/mnt			ext4			defaults,_netdev			0 0  (添加)

2)配置文件修改方式 —— 永久生效 (生产环境使用)

vim /etc/tgt/targets.conf
	<target iqn.2016-2.com.xdl.www:lvm>
		backing-store /dev/vg0/lv0
		initiator-address 192.168.66.12
	</target>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值