集群化存储

文章目录

一、集群化存储概述

集群存储简介

  在集群里,一组独立的节点或主机可以像一个系统一样步调一致地工作。它们不仅可以共享公用的存储阵列或者SAN(存储区域网文件系统),也可以拥有只有一个命名空间的公用文件系统。

  集群存储是将多台存储设备中的存储空间聚合成一个能够给应用服务器提供统一访问接口和管理界面的存储池,应用可以通过该访问接口透明地访问和利用所有存储设备上的磁盘,可以充分发挥存储设备的性能和磁盘利用率。数据将会按照一定的规则从多台存储设备上存储和读取,以获得更高的并发访问性能。

1.1 用于存储的网络技术

1.1.1 Direct-Attached Storage(DAS 直接附加存储)

  直接附加存储与服务器主机之间的连接通道通常采用SCSI连接,随着服务器CPU的处理能力越来越强,存储硬盘空间越来越大,阵列的硬盘数量越来越多,SCSI通道将会成为IO瓶颈;服务器主机SCSI ID资源有限,能够建立的SCSI通道连接有限。

  直接附加存储依赖服务器 主机操作系统进行数据的IO读写和存储维护管理, 数据备份和恢复要求占用服务器主机资源(包括CPU、系统IO等),数据流需要回流主机再到服务器连接着的 磁带机(库),数据备份通常占用服务器主机资源20-30%,因此许多企业用户的日常数据备份常常在深夜或业务系统不繁忙时进行,以免影响正常业务系统的运行。直接附加存储的数据量越大,备份和恢复的时间就越长,对服务器硬件的依赖性和影响就越大。

网络拓扑
在这里插入图片描述
说明: 直接附加存储,等同于存储设备通过数据线、光缆、SATA 直连主机

优点

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

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


1.1.2 Network Attached Storage(NAS 网络附加存储)

  network attached storage网络附加存储(NAS)是连接到计算机网络的文件级计算机数据存储服务器,其提供对异构客户端组的数据访问。NAS专门用于通过硬件,软件或配置提供文件。NAS系统是联网设备,包含一个或多个存储驱动器,通常安排在逻辑冗余存储容器或RAID中。网络附加存储消除了从网络上的其他服务器提供文件服务的责任。它们通常使用网络文件共享协议(如NFS,SMB或AFP)提供对文件的访问。

网络拓扑

在这里插入图片描述
说明: 网络附加存储,通过网络在存储主机与使用主机之间传输数据

优点

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

缺点: 存储速率较慢


1.1.3 Storage Area Network(SAN 存储区域网络)

  存储区域网络(Storage Area Network SNA),即通过特定的互连方式连接的若干台存储服务器组成一个单独的数据网络,提供企业级的数据存储服务。 SAN 是一种特殊的高速网络,连接网络服务器和诸如大磁盘阵列或备份磁带库的存储设备,SAN 置于 LAN 之下,而不涉及 LAN。利用 SAN,不仅可以提供大容量的存储数据,而且地域上可以分散,并缓解了大量数据传输对于局域网的影响。SAN 的结构允许任何服务器连接到任何存储阵列,不管数据置放在哪里,服务器都可直接存取所需的数据。

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

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

优点

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

缺点

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

1.2 实现存储的技术分类

1.2.1 块存储

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

优点

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

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

1.2.2 文件存储、网络存储

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

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

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


1.2.3 对象存储、分布式存储、存储桶

常见设备

在这里插入图片描述
优点

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

缺点

  • 造价昂贵
  • 技术实现难度较高

1.3 常见的一些存储名词以及背后使用技术对应关系

文件存储、网络存储               FTP、SAMBA、Apache、Nginx 
对象存储、分布式存储、云存储      CEPH、MooseFS、RHCS、ClusterFS 
块存储                         ISCSI

1.4 存储实现技术与存储网络之间的联系

1.4.1 块存储 + DAS

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

结构拓扑

在这里插入图片描述


1.4.2 块存储 + NAS

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

结构拓扑

在这里插入图片描述


1.4.3 块存储 + SAN

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

结构拓扑

在这里插入图片描述


1.4.4 文件存储 + NAS

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

结构拓扑

在这里插入图片描述


1.4.5 对象存储 + SAN

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

结构拓扑

在这里插入图片描述
能解决问题,越简单越好


二、文件存储 – NFS

2.1 NFS 概述

2.1.1 何为 NFS?

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


2.1.2 NFS 功能

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


2.1.3 NFS 原理

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


2.1.4 NFS 优点

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

2.2 NFS 安装及配置

2.2.1 安装软件包介绍

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

两台服务器
10.10.10.11
10.10.10.12


2.2.2 NFS Server 配置(10.10.10.11)

[root@localhost ~]$ yum -y install rpcbind nfs-utils # 服务器端安装 rpcbind 和 NFS-utils 软件包 
[root@localhost ~]$ mkdir /nfs1 /nfs2  #共享点
[root@localhost ~]$ chown -R nobody:nobody /nfs1 /nfs2 #给匿名用户权限

[root@localhost ~]$ vim /etc/exports #修改配置文件
/nfs1 10.10.10.12(rw,async,no_root_squash)
/nfs2 10.10.10.0/24(ro,async,no_root_squash)

[root@localhost ~]$ service nfs restart && service rpcbind restart
[root@localhost ~]$ service nfs restart #需要在重启下nfs

showmount -e ip #查看挂载情况 
[root@localhost ~]$ showmount -e 10.10.10.11
Export list for 10.10.10.11:
/nfs2 10.10.10.0/24
/nfs1 10.10.10.12

[root@localhost ~]$ cp -a /root/install.log /nfs1/

[root@localhost ~]$ cp -a /var/log/messages /nfs2/




[root@localhost ~]$ /etc/init.d/rpcbind status # 查看 rpcbind 当前状态 
LANG=en # 查看当前语言 
lsof –i :111 
rpcinfo –p localhost 
/etc/init.d/nfs status 
lsof –i :2049

2.2.3 NFS Client 配置(10.10.10.12)

[root@localhost ~]$ mkdir /nfs1 /nfs2 #挂载点
[root@localhost ~]$ chown -R nobody:nobody /nfs1 /nfs2 #给匿名用户权限

mount -t nfs ip:/file /file1 # 在客户端进行 NFS 的挂载操作
[root@localhost ~]$ mount -t nfs 10.10.10.11:/nfs1/ /nfs1/
#把nfs服务器的nfs1挂载到客户端的nfs1

[root@localhost ~]$ mount -t nfs 10.10.10.11:/nfs2/ /nfs2/
#这两个目录都是同步的


卸载客户端的挂载目录

[root@localhost ~]$ umount 挂载点
1
停止服务器端的共享

[root@localhost ~]$ exportfs -au
1
自动挂载:/etc/fstab

格式:服务器ip地址:/服务器共享目录  /本地挂载目录 nfs defaults 0 0 
1
[root@localhost ~]$ 10.10.10.11:/demo /demo nfs defaults 0 0 
[root@localhost ~]$ mount -a

2.2.4 配置文件 /etc/exports 书写规则

/etc/exports 文件的配置格式为: 
	NFS共享目录 NFS客户端地址 1(参数 1,参数 2,参数 3......) 客户端地址 2(参数 1,参数 2,参数 3......) 
	NFS共享目录 NFS客户端地址(参数 1,参数 2,参数 3......) 
	
		NFS共享目录: 共享目录是指 NFS 服务器共享给客户机使用的目录

		NFS客户端: 客户端是指网络中可以访问这个 NFS 共享目录的计算机
		NFS客户端常用的指定方式:
		      指定 ip 地址的主机:192.168.0.200
		      指定子网中的所有主机:192.168.88.0
		      指定域名的主机:www.baidu.com
		      指定域中的所有主机:*.baidu.com
		      所有主机:*



 

2.2.5 共享权限解释

/etc/exports 配置文件参数解释

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

3.1 什么是 MFS?


3.1.1 MFS 相关介绍

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


3.1.2 MFS 的特性说明

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

3.1.3 MFS 缺点

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

内存使用问题

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


3.1.4 MFS 的应用场景

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

3.2 MFS 组件说明

3.2.1 管理服务器 (master)

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


3.2.2 元数据备份服务器 (metalogger)

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


3.2.3 数据存储服务器组 (data)

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


3.2.4 客户机服务器组 (client)

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


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

基础结构拓扑

在这里插入图片描述

3.3.1 MFS 的读数据过程

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

3.3.2 MFS 的写数据过程

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

3.3.3 MFS 的删除文件过程

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

3.3.4 MFS 修改文件内容的过程

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

3.3.5 MFS 重命名文件的过程

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

3.3.6 MFS 遍历文件的过程

  1. 遍历文件不需要访问 chunk server,当有客户端遍历请求时,向 Master 发送操作信息;
  2. Master 返回相应元数据信息;
  3. 客户端接收到信息后显示;

3.4 补充描述

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

3.5 MFS 集群构建

实验集群拓扑

在这里插入图片描述
五台服务器
10.10.10.11--------(master)
10.10.10.12--------(metadata)
10.10.10.13--------(chunkserver1)新添加一块20G的硬盘
10.10.10.14--------(chunkserver2)新添加一块20G的硬盘
10.10.10.15--------(client)


所需软件百度网盘
链接:https://pan.baidu.com/s/1wfgE3ISFsBddoO2JuMdRiA
提取码:ton9

3.5.1 MFS - Master Server (10.10.10.11)

上传mfs

[root@localhost ~]$ yum -y install lrzsz zlib zlib-devel #方便把软件直接拖到xshell里面
#上传moosefs-3.0.84-1.tar.gz 镜像文件到家目录

[root@localhost ~]$ tar zxf moosefs-3.0.84-1.tar.gz && cd moosefs-3.0.84

[root@localhost ~]$ useradd -s /sbin/nologin -M mfs # 创建 MFS 用户,用于 MFS 运行身份

[root@localhost ~]$ ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs # 编 译 安 装 MFS 软件
[root@localhost ~]$ make && make install

[root@localhost ~]$ chown -R mfs.mfs /usr/local/mfs/

[root@localhost ~]$ chmod a+x /usr/local/mfs/sbin/* # 优化配置,使 MFS 命令便于调用
[root@localhost ~]$ ln -s /usr/local/mfs/sbin/* /usr/local/sbin/
[root@localhost ~]$ ln -s /usr/local/mfs/bin/* /usr/local/bin/

[root@localhost ~]$ cd /usr/local/mfs/etc/mfs # 启用 MFS-Master 节点配置文件
[root@localhost ~]$ cp -a mfsmaster.cfg.sample mfsmaster.cfg 
[root@localhost ~]$ cp mfsexports.cfg.sample mfsexports.cfg # 设置 MFS 挂载权限
[root@localhost ~]$ vim mfsexports.cfg 
#最后一行添加
10.10.10.0/24 . rw,alldirs,maproot=0
#rw,读写权限
#alldirs,任何目录都允许挂载
#maproot=0,登陆就是root用户
	 
[root@localhost ~]$ cp -a /usr/local/mfs/var/mfs/metadata.mfs.empty /usr/local/mfs/var/mfs/metadata.mfs 
# 拷贝 MFS 元数 据信息文件(初始) 

[root@localhost ~]$ mfsmaster start # 启动 MFS-Master 服务

[root@localhost ~]$ mfscgiserv #开启web页面

浏览器输入 10.10.10.11:9425就能访问,dns地址输入ip即可

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

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 = * # 用于存储服务器(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

3.5.2 MFS - Metadata Server (10.10.10.12)

#从远程服务器下载到本地
[root@localhost ~]$ scp root@10.10.10.11:/root/moosefs-3.0.84-1.tar.gz /root

[root@localhost ~]$ tar zxf moosefs-3.0.84-1.tar.gz && cd moosefs-3.0.84

[root@localhost ~]$ useradd -s /sbin/nologin -M mfs # 创建 MFS 用户,并编译安装 MFS 软件
[root@localhost ~]$ ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs # 编 译 安 装 MFS 软件
[root@localhost ~]$ make && make install

[root@localhost ~]$ chown -R mfs.mfs /usr/local/mfs/
[root@localhost ~]$ ln -s /usr/local/mfs/sbin/* /usr/local/sbin/
[root@localhost ~]$ ln -s /usr/local/mfs/bin/* /usr/local/bin/

[root@localhost ~]$ cd /usr/local/mfs/etc/mfs
[root@localhost ~]$ cp -a mfsmetalogger.cfg.sample mfsmetalogger.cfg # 拷贝 MFS 元数据服务配置文件
[root@localhost ~]$ vim mfsmetalogger.cfg
#取消下面两行注释
META_DOWNLOAD_FREQ = 2 # 设置完整同步间隔为 2 小时 
MASTER_HOST = 10.10.10.11 # 设置 MFS-Master 服务器 IP 地址

[root@localhost ~]$ chmod a+x /usr/local/mfs/sbin/* # 优化 MFS 服务配置,便于命令调用

[root@localhost ~]$ mfsmetalogger start # 启动 MFS-Logger 服务
[root@localhost ~]$ lsof -i :9419
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mfsmetalo 8111  mfs    8u  IPv4  18209      0t0  TCP 10.10.10.12:35921->10.10.10.11:9419 (ESTABLISHED)


[root@localhost ~]$ cd /usr/local/mfs/var/mfs/

3.5.3 MFS - Chunk Server (10.10.10.13)

#把新添加的硬盘分区
[root@localhost ~]$ fdisk /dev/sdb # 分区
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x05b4d994.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n #输入n,新建分区
Command action
   e   extended
   p   primary partition (1-4)
p #输入p,添加主分区
Partition number (1-4): 1  #输入1,1号分区
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610):  #直接回车,从头到尾使用所有空间
Using default value 2610
Command (m for help): w   #输入w保存
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

[root@localhost ~]$ mkfs.ext4 /dev/sdb1 # 格式化
[root@localhost ~]$ mkdir /mnt/mfs # 创建挂载点目录
[root@localhost ~]$ useradd -s /sbin/nologin -M mfs # 创建 MFS 用户
[root@localhost ~]$ mount -t ext4 /dev/sdb1 /mnt/mfs/ #挂载
[root@localhost ~]$ chown -R mfs.mfs /mnt/mfs/



#从远程服务器下载到本地
[root@localhost ~]$ scp root@10.10.10.11:/root/moosefs-3.0.84-1.tar.gz /root
[root@localhost ~]$ tar zxf moosefs-3.0.84-1.tar.gz && cd moosefs-3.0.84

[root@localhost ~]$ ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs # 编 译 安 装 MFS 软件
[root@localhost ~]$ make && make install

[root@localhost ~]$ chown -R mfs.mfs /usr/local/mfs/
[root@localhost ~]$ ln -s /usr/local/mfs/sbin/* /usr/local/sbin/
[root@localhost ~]$ ln -s /usr/local/mfs/bin/* /usr/local/bin/
[root@localhost ~]$ chmod a+x /usr/local/mfs/sbin/* # 优化 MFS 服务配置,便于命令调用


[root@localhost ~]$ cd /usr/local/mfs/etc/mfs
[root@localhost ~]$ cp -a mfschunkserver.cfg.sample mfschunkserver.cfg # 拷贝 Chunkserver 配置文件
[root@localhost ~]$ cp -a mfshdd.cfg.sample mfshdd.cfg #提供存储的配置文件

[root@localhost ~]$ vim mfschunkserver.cfg 
#修改如下配置
MASTER_HOST = 10.10.10.11 # 指定 MFS-Master 服务器地址 
MASTER_PORT = 9420 # 指定 MFS-Master 服务器端口 
HDD_CONF_FILENAME = /usr/local/mfs/etc/mfs/mfshdd.cfg # 指定提供存储的配置文 件位置
#这一行直接取消注释即可,不用修改



[root@localhost ~]$ vim /usr/local/mfs/etc/mfs/mfshdd.cfg # 修改 MFS 服务 HDD 路径
#最后一行添加
/mnt/mfs
#挂载点目录

[root@localhost ~]$ mfschunkserver start # 启动 MFSChunkserver


另一台Chunk Server服务器动态添加

3.5.4 MFS - Client Server (10.10.10.15)

[root@localhost ~]$ mount -t iso9660 /dev/cdrom /mnt/cdrom #挂载本地yum光盘
[root@localhost ~]$ yum -y install fuse fuse-devel fuse-libs # 安装 Fuse

#从远程服务器把moosefs下载到本地
[root@localhost ~]$ scp root@10.10.10.11:/root/moosefs-3.0.84-1.tar.gz /root
[root@localhost ~]$ tar zxf moosefs-3.0.84-1.tar.gz && cd moosefs-3.0.84 

[root@localhost ~]$ useradd -s /sbin/nologin -M mfs # 创建 MFS 用户

# 编译安装 MFS Client 工具
[root@localhost ~]$ ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver && make && make install

[root@localhost ~]$ chown -R mfs.mfs /usr/local/mfs/
[root@localhost ~]$ ln -s /usr/local/mfs/sbin/* /usr/local/sbin/
[root@localhost ~]$ ln -s /usr/local/mfs/bin/* /usr/local/bin/
[root@localhost ~]$ chmod a+x /usr/local/mfs/sbin/* # 优化 MFS 服务配置,便于命令调用

[root@localhost ~]$ mkdir /mfsclient
[root@localhost ~]$ mfsmount /mfsclient/ -H 10.10.10.11
[root@localhost ~]$ chown -R mfs.mfs /mfsclient/
[root@localhost ~]$ echo "1111111" > /mfsclient/1.txt

[root@localhost ~]$ mfsfileinfo /mfsclient/1.txt
/mfsclient/1.txt:
	chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
		copy 1: 10.10.10.13:9422 (status:VALID)


3.5.4 MFS - Chunk Server (10.10.10.14)

#把新添加的硬盘分区
[root@localhost ~]$ fdisk /dev/sdb # 分区
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x05b4d994.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n #输入n,新建分区
Command action
   e   extended
   p   primary partition (1-4)
p #输入p,添加主分区
Partition number (1-4): 1  #输入1,1号分区
First cylinder (1-2610, default 1):  #直接回车
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610):  #直接回车,从头到尾使用所有空间
Using default value 2610
Command (m for help): w   #输入w保存
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

[root@localhost ~]$ mkfs.ext4 /dev/sdb1 # 格式化
[root@localhost ~]$ mkdir /mnt/mfs # 创建挂载点目录
[root@localhost ~]$ useradd -s /sbin/nologin -M mfs # 创建 MFS 用户
[root@localhost ~]$ mount -t ext4 /dev/sdb1 /mnt/mfs/ #挂载
[root@localhost ~]$ chown -R mfs.mfs /mnt/mfs/





#从远程服务器把moosefs下载到本地
[root@localhost ~]$ scp root@10.10.10.11:/root/moosefs-3.0.84-1.tar.gz /root
[root@localhost ~]$ tar zxf moosefs-3.0.84-1.tar.gz && cd moosefs-3.0.84 

[root@localhost ~]$ ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs # 编 译 安 装 MFS 软件
[root@localhost ~]$ make && make install


[root@localhost ~]$ chown -R mfs.mfs /usr/local/mfs/
[root@localhost ~]$ ln -s /usr/local/mfs/sbin/* /usr/local/sbin/
[root@localhost ~]$ ln -s /usr/local/mfs/bin/* /usr/local/bin/
[root@localhost ~]$ chmod a+x /usr/local/mfs/sbin/* # 优化 MFS 服务配置,便于命令调用

[root@localhost ~]$ cd /usr/local/mfs/etc/mfs
[root@localhost ~]$ cp -a mfschunkserver.cfg.sample mfschunkserver.cfg # 拷贝 Chunkserver 配置文件
[root@localhost ~]$ cp -a mfshdd.cfg.sample mfshdd.cfg #提供存储的配置文件

[root@localhost ~]$ vim mfschunkserver.cfg 
#修改如下配置
MASTER_HOST = 10.10.10.11 # 指定 MFS-Master 服务器地址 
MASTER_PORT = 9420 # 指定 MFS-Master 服务器端口 

HDD_CONF_FILENAME = /usr/local/mfs/etc/mfs/mfshdd.cfg # 指定提供存储的配置文 件位置
#这一行直接取消注释即可,不用修改


[root@localhost ~]$ vim /usr/local/mfs/etc/mfs/mfshdd.cfg # 修改 MFS 服务 HDD 路径
#最后一行添加
/mnt/mfs
#挂载点目录

[root@localhost ~]$ mfschunkserver start # 启动 MFSChunkserver

#10.10.10.15客户端执行
[root@localhost ~]$ echo "2222" > /mfsclient/2.txt 
[root@localhost ~]$ mfsfileinfo /mfsclient/2.txt
/mfsclient/2.txt:
	chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
		copy 1: 10.10.10.13:9422 (status:VALID)
		copy 2: 10.10.10.14:9422 (status:VALID)


4. MFS 维护操作

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

#10.10.10.15客户端把2.txt删了
[root@localhost ~]$ rm -f /mfsclient/2.txt 

#要恢复删除的数据,进行一下操作
[root@localhost ~]$ mkdir /mfsback #创建一个目录
[root@localhost ~]$ mfsmount -m /mfsback -H 10.10.10.11

[root@localhost ~]$ cd /mfsback/trash
[root@localhost ~]$ yum -y install tree

[root@localhost ~]$ tree . >> /root/1.txt #查看这个文件,找到2.txt
├── 002
│   ├── 00000003|2.txt
├── 012
├── 020


[root@localhost ~]$ mv /mfsback/trash/002/00000003\|2.txt /mfsback/trash/undel/ #把这个文件放到undel目录下

#查看恢复文件
[root@localhost ~]$ ls -l /mfsclient/2.txt 
-rw-r--r-- 1 root root 5 12月 18 09:30 /mfsclient/2.txt

[root@localhost ~]$ mfsgettrashtime /mfsclient/2.txt #查看误删除时间
2.txt: 86400


4.2 快照功能

#10.10.10.15客户端操作
[root@localhost ~]$ cd /mfsclient
[root@localhost ~]$ mkdir back 
[root@localhost ~]$ chown mfs.mfs back/ 
[root@localhost ~]$ mfsmakesnapshot 1.txt back/ 
[root@localhost ~]$ cd back/ && ll
#类似于软连接

4.3 冗余 goal 设置

#10.10.10.15客户端操作

[root@localhost ~]$ cd /mfsclient
[root@localhost ~]$ vim 3.txt
[root@localhost ~]$ mfsfileinfo 3.txt 
3.txt:
	chunk 0: 0000000000000004_00000001 / (id:4 ver:1)
		copy 1: 10.10.10.13:9422 (status:VALID)
		copy 2: 10.10.10.14:9422 (status:VALID)
#两个副本


[root@localhost ~]$ mfssetgoal 1 3.txt
[root@localhost ~]$ mfsfileinfo 3.txt 
3.txt:
	chunk 0: 0000000000000004_00000001 / (id:4 ver:1)
		copy 2: 10.10.10.14:9422 (status:VALID)
#变为一个副本

4.4 还原 master

#10.10.10.11 master操作
[root@localhost ~]$ mfsmaster stop
[root@localhost ~]$ rm -rf /usr/local/mfs/var/mfs/*


#10.10.10.12 metadata操作
[root@localhost ~]$ scp /usr/local/mfs/var/mfs/* root@10.10.10.11:/usr/local/mfs/var/mfs/


#10.10.10.11 master操作
[root@localhost ~]$ mfsmaster -a #自动恢复


四、块存储之 ISCSI 服务

4.1 ISCSI 概述

4.1.1 ISCSI 与 SCSI 原理差别

在这里插入图片描述

小型计算机系统接口(英语:Small Computer System Interface; 简写:SCSI),一种用于计算机和智能设备之间(硬盘、软驱、光驱、打印机、扫描仪等)系统级接口的独立处理器标准。 SCSI是一种智能的通用接口标准。它是各种计算机与外部设备之间的接口标准。

iSCSI:Internet 小型计算机系统接口 (iSCSI:Internet Small Computer System Interface)。Internet 小型计算机系统接口(iSCSI)是一种基于 TCP/IP的协议,用来建立和管理 IP 存储设备、主机和客户机等之间的相互连接,并创建存储区域网络(SAN)。SAN 使得 SCSI 协议应用于高速数据传输网络成为可能,这种传输以数据块级别(block-level)在多个数据存储网络间进行。

iSCSI是一种存储设备远程映射技术,它可以将一个远程服务器上的存储设备映射到本地,并呈现为一个块设备(大白话就是磁盘)。从普通用户的角度,映射过来的磁盘与本地安装的磁盘毫无差异。


SCSI与ISCSI是两种不同的概念:

  • iSCSI,即internet SCSI,是IETF制订的一项标准,用于将SCSI数据块映射成以太网数据包。从根本上说,iSCSI协议是一种跨过IP网络来传输潜伏时间短的 SCSI数据块的方法;简单的说, iSCSI可以实现在IP网络上运行SCSI协议,使其能够在诸如高速千兆以太网上进行路由选择。

  • SCSI 的意义是小型计算机系统接口(Small Computer System Interface);今天的SCSI已划分为SCSI-1和SCSI-2,以及最新的SCSI-3三个类型。不过,目前最为流行的版本还要算是SCSI-2


4.1.2 常见用于 ISCSI 服务的网络拓扑类型

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

在这里插入图片描述

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

在这里插入图片描述


4.1.3 ISCSI 工作方式

工作模式 C/S 结构

  • 服务(设备)端 ---- target
  • 客户(应用)端 ---- initiator

在这里插入图片描述


4.2 ISCSI 服务构建

两台服务器
10.10.10.11------服务端(新添加一块磁盘)
10.10.10.12 -----客户端

4.2.1 lvm 整合 (10.10.10.11)

[root@localhost ~]$ pvcreate /dev/sdb # 创建物理卷 
Physical volume "/dev/sdb" successfully created


[root@localhost ~]$ vgcreate vg0 /dev/sdb # 创建卷组 
 Volume group "vg0" successfully created

[root@localhost ~]$ lvcreate -L 5G -n lv0 vg0 # 创建逻辑卷 
[root@localhost ~]$ mkfs -t ext4 /dev/vg0/lv0 # 对创建的逻辑卷进行格式化

4.2.2 在 target 端创建 IQN 标签 (10.10.10.11)

[root@localhost ~]$ mount -t iso9660 /dev/cdrom /mnt/cdrom #挂载本地yum源
[root@localhost ~]$ yum -y install scsi-target-utils # 安装包,创建 iSCSI 对象 

[root@localhost ~]$ service tgtd start # 开启服务 
[root@localhost ~]$ netstat -anpt | grep tgtd # 查看服务是否开启 

#tgtadm -L(指定驱动类型) iscsi -o(制定操作类型) new -m(制定管理的对象) target -t (制定当前存储资源 id 号)1 -T(制定 iqn 标签,命名规则:iqn.创建年.月.域名反写:自定义) iqn.2016-2.com.xdl.www:lvm 
[root@localhost ~]$ tgtadm -L iscsi -o new -m target -t 1 -T iqn.2021.01.com.test.www:lvm 


[root@localhost ~]$ tgtadm -L iscsi -o show -m target # 查看 target 创建的信息
Target 1: iqn.2021.01.com.test.www:lvm
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0 #LUN逻辑单元
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB, Block size: 1
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            Backing store type: null
            Backing store path: None
            Backing store flags: 
    Account information:
    ACL information:

4.2.3 绑定 IQN 标签到存储设备 (10.10.10.11)

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

4.2.4 客户端配置 (10.10.10.12)

[root@localhost ~]$ mount -t iso9660 /dev/cdrom /mnt/cdrom #挂载本地yum源
[root@localhost ~]$ yum -y install iscsi-initiator-utils

[root@localhost ~]$ iscsiadm -m discovery -t st -p 10.10.10.11#(指定服务器 IP 地址)

[root@localhost ~]$ iscsiadm -m node -T iqn.2021.01.com.test.www:lvm  --login # 在客户端进行挂载

[root@localhost ~]$ fdisk -l

#把新添加的硬盘分区
[root@localhost ~]$ fdisk /dev/sdb # 分区
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x05b4d994.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n #输入n,新建分区
Command action
   e   extended
   p   primary partition (1-4)
p #输入p,添加主分区
Partition number (1-4): 1  #输入1,1号分区
First cylinder (1-2610, default 1):  #直接回车
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610):  #直接回车,从头到尾使用所有空间
Using default value 2610
Command (m for help): w   #输入w保存
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

[root@localhost ~]$ mkfs.ext4 /dev/sdb1 #格式化
[root@localhost ~]$ mkdir /iscsi && mount -t ext4 /dev/sdb1 /iscsi/

#解除挂载
[root@localhost ~]$ umonut /iscsi/
[root@localhost ~]$ iscsiadm -m node -T iqn.2021.01.com.test.www:lvm  --logout # 在客户端进行卸载

[root@localhost ~]$ vim /etc/fstab #修改自动挂载文件,添加开机自启 
/dev/sdb /mnt ext4 defaults,_netdev 0 0 #(添加)

4.2.5 通过配置文件持久化配置

服务端(10.10.10.11)
快照恢复,然后添加一块硬盘

[root@localhost ~]$ mount -t iso9660 /dev/cdrom /mnt/cdrom #挂载本地yum源
[root@localhost ~]$ yum -y install scsi-target-utils # 安装包,创建 iSCSI 对象 

[root@localhost ~]$ vim /etc/tgt/targets.conf
<target iqn.2021.01.com.test:teststore.sdb>  #配置target名称       
        <backing-store /dev/sdb>  #配置共享磁盘
       	 	vendor_id test #配置发行商(任意)
        	lun 6  #配置LUN号
        </backing-store>
        
        incominguser iscsiuser iscsiuser  #配置认证的用户名和密码
        initiator-address 10.10.10.0/24   #配置允许的网段
</target> 


[root@localhost ~]$ service tgtd start # 开启服务 
[root@localhost ~]$ netstat -anpt | grep tgtd # 查看服务是否开启 

[root@localhost ~]$ tgtadm -L iscsi -o show -m target # 查看 target 创建的信息

客户端(10.10.10.12)

[root@localhost ~]$ vim /etc/iscsi/iscsid.conf
#修改下面三项
node.session.auth.authmethod = CHAP
node.session.auth.username = iscsiuser
node.session.auth.password = iscsiuser


[root@localhost ~]$ iscsiadm -m discovery -t st -p 10.10.10.11#(指定服务器 IP 地址)

[root@localhost ~]$ iscsiadm -m node -T iqn.2021.01.com.test:teststore.sdb  --login # 在客户端进行挂载

  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值