集群存储(ISCSI、NFS、MFS)Linux7【转】

1、存储网络划分

DAS :Direct-Attached Storage 直接附加存储
优点:不可取代
技术简单
传输速率最高
缺点:不可共享(存储设备与磁盘相互绑定)

NAS :Network Attached Storage 网络附加存储
优点:实现了共享,不要求存储设备直连本机,只需在同局域网下即可
技术相对简单
缺点:速率较慢

SAN :Storage Area Network:存储区域网络 将用户访问网络以及存储网络进行分割
优点:存储安全性较高
存储速率较高
缺点:价格贵 技术难

 

2、存储技术分类

块存储 ISCSI
优点:速率块 不可取代 可以简单的方式实现数据的可用性
缺点:不可共享 以及 文件系统的约束

文件存储 NFS
优点:实现了数据共享、构建资金较低
缺点:速率较慢

分布式存储、对象存储 MFS
优点:实现了数据共享、读写效率高、有更高的磁盘IO 网络 IO,存储量级更高
缺点:造价高 难度实现大

 

3、网络拓扑 + 存储技术

块存储 + DAS
块存储 + NAS
块存储 + SAN
文件存储 + NAS
NFS: NetworkFilesystem
分布式存储 + SAN
MFS:MooseFS 驯鹿
RHCS:红帽集群套件

 

4、ISCSI 小型计算机系统接口

iSCSI( Internet Small Computer System Interface ),又称为 IP-SAN。由 IETF 提出,并于 2003 年 2 月 11 日成为正式的标准。与传统的 SCSI 技术比较起来,iSCSI 技术有以下三个革命性的变化:
1.把原来只用于本机的 SCSI 协议透过 TCP/IP 网络发送,使连接距离可作无限的地域延伸
2.连接的 服务器 数量无限( 原来的 SCSI-3 的上限是 15 )
3.由于是服务器架构,因此也可以实现在线扩容以至动态部署

1、iSCSI 的工作方式

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

2、构建实验

服务器 Target 端 LVM 整合

# 服务器关机添加硬盘
$ pvcreate /dev/sdb
$ vgcreate vg0 /dev/sdb
$ lvcreate -L 5G -n lv0 vg0
$ mkfs.ext4 /dev/vg0/lv0

 

ISCSI Target 端安与创建 IQN 标签

$ yum -y install scsi-target-utils
$ service tgtd start
$ chkconfig tgtd on
$ tgtadm -L iscsi -o new -m target -t 1 -T iqn.2021-01.com.hongfu:lvm
# tgtadm -L iscsi -o new -m target -t 1(可以是间断的数字,但不可以重复) -T iqn.2021-01.com.hongfu:lvm(iqn的行业命名规则:iqn.year-month.一级域.二级域:自定义字符串)
$ tgtadm -L iscsi -o show -m target

 

绑定 IQN 标签到存储设备

$ tgtadm -L iscsi -o new -m logicalunit -t 1 -l 1 -b /dev/vg0/lv0
# tgtadm -L(指定驱动类型) iscsi -o new -m (管理的对象) logicalunit -t (tat标签) 1 -l(逻辑存储单元LUN的标签) 1 -b (设备名称,数字可以随便指定但不可重复) /dev/vg0/lv0
$ tgtadm -L iscsi -o bind -m target -t 1 -I 192.168.1.0/24
# tgtadm -L iscsi -o bind -m target -t (iqn的绑定号) 1 -I (指定哪个网段可以访问过来) 192.168.1.0/24

 

客户端配置

$ yum -y install iscsi-initiator-utils
$ iscsiadm -m discovery -t st -p 192.168.1.10
# iscsiadm -m discovery -t st(全局扫描) -p 192.168.1.10(被扫描的机器即服务器)
登录
$ iscsiadm -m node -T iqn.2021-01.com.hongfu:lvm --login
退出
$ iscsiadm -m node -T iqn.2021-01.com.hongfu:lvm --logout
查看
$ fdisk -l
客户端想要使用的话需要分区、格式化、挂载
$ fdisk /dev/sdb
$ mkfs.ext4 /dev/sdb1
$ mkdir /iscsimount
$ vim /etc/fstab
/dev/sdb /iscsimount ext4 defaults,_netdev 0 0
$ mount -a
验证读写
$ cat /var/log/message >> /iscsimount/1.txt
再添加时需要刷新才能看到
$ iscsiadm -m node -T iqn.2021-01.com.hongfu:lvm --logout
$ iscsiadm -m node -T iqn.2021-01.com.hongfu:lvm --login

 

ISCSI 使用配置文件进行持久化

ISCSI 服务器端

添加磁盘
$ yum -y install scsi-target-utils
$ vim /etc/tgt/targets.conf
# 添加下面标签
<target iqn.2021-01.com.hongfu:sdb>
<backing-store /dev/sdb>
# 可以是一个分区,可以是一个目录,可以是一个块设备
vendor_id wangyang
lun 6
</backing-store>
incominguser iscsiuser iscsiuser
# 用户名 密码
initiator-address 192.168.1.0/24
</target>
$ service tgtd start
$ chkconfig tgtd on
$ tgtadm --lld iscsi --mode target --op show

 

ISCSI 客户端

$ yum -y install iscsi-initiator-utils
$ vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2021-01.com.hongfu:sdb
$ vim /etc/iscsi/iscsid.conf
# 取消注释并修改
node.session.auth.authmethod = CHAP
node.session.auth.username = iscsiuser
node.session.auth.password = iscsiuser
$ service iscsi start
$ chkconfig iscsi on
$ iscsiadm -m discovery -t st -p 192.168.1.10:3260
$ iscsiadm -m node -T iqn.2021-01.com.hongfu:sdb -p 192.168.1.10 -l
$ fdisk /dev/sdb
$ mkfs.ext4 /dev/sdb1
$ partprobe /dev/sdb1
$ mkdir /iscsimount
$ vim /etc/fstab
/dev/sdb /iscsimount ext4 defaults,_netdev 0 0
$ mount -a
$ fdisk -l #查看
验证
$ while 2>1; do cat /var/log/messages >> /iscsimount/1.txt; done
复制SSH渠道
$ du -sh /iscsimount/1.txt

 

5、NFS 网络文件系统

1、NFS 简介

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

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

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

NFS服务协议:RPC (remote procedure call )远程过程调用协议

NFS客户端和服务端通讯过程
1)首先服务器端启动RPC服务,并开启111端口
2)启动NFS服务,并向RPC注册端口信息
3)客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口
4)服务端的RPC(portmap)服务反馈NFS端口信息给客户端。
5)客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。

NFS进程
①.nfsd:最主要的 NFS 服务提供程序,这个 daemon 主要的功能就是管理客户端是否能够使用服务器文件系统挂载信息,其中还包含判断这个登录用户的 ID
②.rpc.mountd:这个 daemon 主要功能则是管理 NFS 的文件系统。当 client 端顺利通过 rpc.nfsd 登入主机后,在它可以使用 NFS 服务器提供规定文件之前,还会经过文件使用权限的认证程序。它会去读取 NFS 的配置  文件/etc/exports 来对比客户端的权限,当通过这一关之后,client 端也就取得使用 NFS 文件的权限
③.rpc.lockd ( 非必要 ):这个 daemon 用于管理文件的锁定方面,当多个客户端同时尝试写入某个文件时就可以对该文件造成一些问题。rpc.lockd 则可以用来克服这此问题。但 rpc.lockd 必须要同时在客户端和服务器端都开启才行
④.rpc.statd ( 非必要 ):这个 daemon 可以用来检查文件的一致性,若发生因为客户端同时使用同一个文件造成文件损坏时,rpc.statd 可以用来检测并尝试恢复该文件

端口
RPC 通讯:111
NFS Server 通讯:2049
数据通讯:随机端口
umountd 端口:“32768–65535” udp/tcp
unlockmgr 端口:“32768–65535” udp/tcp
控制端口范围:vim /etc/sysconfig/nfs
RQUOTAD_PORT=30001
LOCKD_TCPPORT=30002
LOCKD_UDPPORT=30002
MOUNTD_PORT=30003
STATD_PORT=30004

2、NFS 构建

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

访问权限选项:
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值

Server 端安装并开启服务

$ yum -y install rpcbind nfs-utils
$ mkdir -p /nfs/1
$ vim /etc/exports
/nfs/1 192.168.1.0/24(rw,async,no_root_squash) 192.168.2.0/24(ro)
或
/nfs/1 192.168.1.20(rw,async,no_root_squash) 192.168.2.10(ro)
# /etc/exports文件的配置格式为:
# NFS共享目录 NFS客户端地址1(网段或ip)(参数1,参数2,参数3......) 客户端地址2(参数1,参数2,参数3......)
# NFS共享目录 NFS客户端地址(参数1,参数2,参数3......)
$ service rpcbind start
$ service nfs start
# 为了使NFS服务器能正常工作,需要启动rpcbind和nfs两个服务,并且rpcbind一定要先于nfs启动。

 

client 端

$ showmount -e ip #查看挂载情况 ip为服务器端ip
$ mkdir /mount
$ mount -t nfs ip:/nfs/1 /mount # ip为服务器端ip

 

验证

$ cd /mount
$ touch aa
$ cat /var/log/messages >> aa
$ cat aa

 

相关常用命令

启动NFS服务器
# service rpcbind start
# service nfs start
停止NFS服务器
# service nfs stop
# service rpcbind stop
查询NFS服务器状态
# service rpcbind status
# service nfs status
设置NFS服务器的自动启动状态,设置rpcbind和nfs服务在系统运行级别2345自动启动。
# chkconfig --level 2345 rpcbind on
# chkconfig --level 2345 nfs on
查看RPC服务器开启了哪些端口
# rpcinfo –p localhost
自动挂载:/etc/fstab
格式:
<server>:</remote/export> </local/directory> nfs < options> 0 0
# 192.168.115.10:/home/zhangsan /media/zhangsan nfs defaults 0 0
# mount –a

 

6、MFS 分布式文件系统

1、MFS 简介

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

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

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

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

4、MFS 组件说明
1.MFS文件系统共有4个角色,分别是
管理服务器 — Master Server
元数据日志服务器 — Metalogger
数据存储服务器 — Chunk Server
客户端 — Client

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

②元数据备份服务器 Metadata backup servers 简称 metalogger :
负责备份管理服务器的变化日志,文件类型为changelog_ml.*.mfs,以便于在管理服务器出现问题时接替期进行工作。这类服务器是在mfs1.6版本后新增的服务,可以把元数据日志保留在管理服务器中,也可以单独存在一台服务器中。为保证数据的安全性和可靠性,建议单独使用一台服务器来存放元数据日志,需要注意的是,元数据日志守护进程跟管理服务器在同一个服务器,备份元数据日志服务器作为它的客户端,从管理服务器取得日志文件进行备份。

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

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

5.MFS 的数据操作流程

1.查
遍历 ls /root
C 连接 M 发送遍历目录请求
M 检索元数据信息返回至 C
C 展现数据
查看文件内容 cat a.txt
C 连接 M 发起查看文件请求
M 检索元数据信息,返回 chunkip port id 至 C
C 连接对应的 chunkserver 的 块,读取数据

2.删
删除 rm filename
C 连接 M 发起删除文件请求
M 删除对应文件的元数据信息,并且将删除真实文件数据块的操作加入的对应节点的异步清除队列中,到达清除时间后,chunkserver 负责清除自己的无效块数据,返回成功请求至 C

3.增加文件
copy
C 连接 M 发送拷贝文件请求,发送目标元数据信息
M 选择最优节点,要求创建新块
chunkserver 创建完新块以后,返回块ID 至 M
M 将新块 ID 返回至 C
C 连接至对应chunkserver 新块写入数据,写入完成后,向 M 发送关闭文件请求
M 连接新块确认数据信息,更新元数据

4.修改文件 vi xxx
文件是新文件
C 连接 M 发起创建文件请求
M 选择对应 chunkserver 创建新块
chunkserve 创建新块(临时块) 返回至 M
M 返回 chunkserver ip port id 至 C
C 连接对应 chunkserver 写入数据
C 向 M 发起关闭文件请求
M 连接 chunkserver 查看块
如果块为空
更新元数据信息
如果块有数据
按照 64 MB 分配原则,创建块拷贝临时块数据至 新块,更新元数据信息
文件是已经存在
C 连接 M 发起修改文件请求
M 连接至 CHUNKSERVER ,通知创建临时块拷贝源块数据
CHunkserver 临时块 IP PORT ID 发送至M
M 将 临时块 IP PORT ID 发送给 C
C 连接至对应的临时块修改数据,修改完成后,通知 M 关闭文件响应
M 连接临时块对比源块数据
如果数据一致
删除临时块,更新元数据信息
如果数据不一致
按照 64MB 原则,创建新块,将临时块数据拷贝至新块,删除临时块以及源块,更新元数据信息

6、补充描述

①、Master 记录着管理信息,比如:文件路径|大小|存储的位置(ip,port,chunkid)|份数|时间等,元数据信息存在于内存中,会定期写入metadata.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 去存

2、MFS 构建

实验环境说明
①.关闭防火墙、selinux
②.所有节点配置时间同步服务器
③.节点说明(MFS集群并不是只需要5台服务器,需要根据实际环境设定方案,此处5台只是为了实验)

192.168.1.10 MfsMaster
192.168.1.20 Mfsmetadata
192.168.1.30 MfsChunkServer
192.168.1.40 MfsChunkServer
192.168.1.50 MfsClient


④.源码包下载地址:源码包下载地址是:http://ppa.moosefs.com/src/moosefs-3.0.84-1.tar.gz

1、MfsMaster 服务器

$ vim /etc/sysconfig/network-scripts/ifcfg-eth1
# 此处网卡不能为 仅主机 模式,否则无法连接互联网
ONBOOT=yes
BOOTPROTO=dhcp
$ service network restart
$ ntpdate -u ntp1.aliyun.com
$ date
$ yum -y install chrony # 此安装包在第二张CD源中
$ vim /etc/chrony.conf
server 192.168.1.10 iburst # 此处 ip 可为本机ip,也可为 127.0.0.1
makestep 10 3 # 10秒内完成3次同步
allow 192.168.1.0/24 # 允许哪些客户端过来进行时间同步 # 取消注释并修改
local stratum 10 # 本地时间服务器的权重
$ service chronyd start
$ chkconfig chronyd on
$ yum -y install pcre pcre-devel zlib zlib-devel gcc gcc-c++ lrzsz
$ tar -xf moosefs-3.0.84-1.tar.gz
$ cd moosefs-3.0.84
$ useradd mfs -s /sbin/nologin -M
$ ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
$ make && make install
$ chown -R mfs.mfs /usr/local/mfs
$ ln -s /usr/local/mfs/bin/* /usr/local/bin/
$ ln -s /usr/local/mfs/sbin/* /usr/local/sbin/
$ cd /usr/local/mfs/etc/mfs
$ cp -a mfsmaster.cfg.sample mfsmaster.cfg
# 此文件都很合理了不需要修改
$ cp -a mfsexports.cfg.sample mfsexports.cfg
$ vim mfsexports.cfg
192.168.1.0/24 . rw,alldirs,maproot=0
# ! 配置文件说明
# 10.10.10.0/24
# .表示MFSMETA文件系统
# rw.alldirs,maproot=0 表示客户端拥有的权限。
$ cp -a /usr/local/mfs/var/mfs/metadata.mfs.empty /usr/local/mfs/var/mfs/metadata.mfs
$ mfsmaster start
$ mfscgiserv
# 查看端口, 确保启动成功
浏览器输入 192.168.1.10:9425 进入后再输入 192.168.1.10 查看网页

 

2、Mfsmetadata

$ yum -y install chrony
$ vim /etc/chrony.conf
server 192.168.1.10 iburst
$ service chronyd start
$ chkconfig chronyd on
$ yum -y install pcre pcre-devel zlib zlib-devel gcc gcc-c++ lrzsz
$ tar -xf moosefs-3.0.84-1.tar.gz
$ cd moosefs-3.0.84
$ useradd mfs -s /sbin/nologin -M
$ ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
$ make && make install
$ chown -R mfs.mfs /usr/local/mfs
$ ln -s /usr/local/mfs/bin/* /usr/local/bin/
$ ln -s /usr/local/mfs/sbin/* /usr/local/sbin/
$ cd /usr/local/mfs/etc/mfs
$ cp -a mfsmetalogger.cfg.sample mfsmetalogger.cfg
$ vim mfsmetalogger.cfg
META_DOWNLOAD_FREQ = 2
# 元数据备份文件下载请求频率, 默认是24小时, 即每2小时从master server上下载一个
MASTER_HOST = 192.168.1.10
# master server 的地址
MASTER_PORT = 9419
$ mfsmetalogger start
$ cd /usr/local/mfs/var/mfs/
# 查看工作目录下是否有元数据文件 changelog_ml_back.0.mfs changelog_ml_back.1.mfs metadata_ml.tmp

 

3、MfsChunkServer

添加磁盘
$ yum -y install chrony
$ vim /etc/chrony.conf
server 192.168.1.10 iburst
$ service chronyd start
$ chkconfig chronyd on
$ fdisk /dev/sdb
$ mkfs.ext4 /dev/sdb1
$ partprobe /dev/sdb1
$ mkdir /mfs
$ mount -t ext4 /dev/sdb1 /mfs
$ echo "mount -t ext4 /dev/sdb1 /mfs" >> /etc/rc.local
$ yum -y install pcre pcre-devel zlib zlib-devel gcc gcc-c++ lrzsz
$ tar -xf moosefs-3.0.84-1.tar.gz
$ cd moosefs-3.0.84
$ useradd mfs -s /sbin/nologin -M
$ ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
$ make && make install
$ chown -R mfs.mfs /usr/local/mfs
$ ln -s /usr/local/mfs/bin/* /usr/local/bin/
$ ln -s /usr/local/mfs/sbin/* /usr/local/sbin/
$ cd /usr/local/mfs/etc/mfs
$ cp -a mfschunkserver.cfg.sample mfschunkserver.cfg
$ vim mfschunkserver.cfg
MASTER_HOST = 192.168.1.10
MASTER_PORT = 9420 #指明master server 端口
HDD_CONF_FILENAME = /usr/local/mfs/etc/mfs/mfshdd.cfg # 这个指明哪个配置文件来配置共享磁盘的
$ cp -a mfshdd.cfg.sample mfshdd.cfg
$ vim mfshdd.cfg
/mfs #尾部添加
$ chown -R mfs.mfs /mfs
$ mfschunkserver start

 

4、MfsChunkServer

添加磁盘
$ yum -y install chrony
$ vim /etc/chrony.conf
server 192.168.1.10 iburst
$ service chronyd start
$ chkconfig chronyd on
$ fdisk /dev/sdb
$ mkfs.ext4 /dev/sdb1
$ partprobe /dev/sdb1
$ mkdir /mfs
$ mount -t ext4 /dev/sdb1 /mfs
$ echo "mount -t ext4 /dev/sdb1 /mfs" >> /etc/rc.local
$ yum -y install pcre pcre-devel zlib zlib-devel gcc gcc-c++ lrzsz
$ tar -xf moosefs-3.0.84-1.tar.gz
$ cd moosefs-3.0.84
$ useradd mfs -s /sbin/nologin -M
$ ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
$ make && make install
$ chown -R mfs.mfs /usr/local/mfs
$ ln -s /usr/local/mfs/bin/* /usr/local/bin/
$ ln -s /usr/local/mfs/sbin/* /usr/local/sbin/
$ cd /usr/local/mfs/etc/mfs
$ cp -a mfschunkserver.cfg.sample mfschunkserver.cfg
$ vim mfschunkserver.cfg
MASTER_HOST = 192.168.1.10
MASTER_PORT = 9420 #指明master server 端口
HDD_CONF_FILENAME = /usr/local/mfs/etc/mfs/mfshdd.cfg # 这个指明哪个配置文件来配置共享磁盘的
$ cp -a mfshdd.cfg.sample mfshdd.cfg
$ vim mfshdd.cfg
/mfs #尾部添加
$ chown -R mfs.mfs /mfs
$ mfschunkserver start

 

5、MfsClient

$ yum -y install chrony
$ vim /etc/chrony.conf
server 192.168.1.10 iburst
$ service chronyd start
$ chkconfig chronyd on
$ yum -y install fuse fuse-devel fuse-libs pcre pcre-devel zlib zlib-devel gcc gcc-c++ lrzsz
$ tar zxf moosefs-3.0.84-1.tar.gz
$ cd moosefs-3.0.84
$ useradd mfs -s /sbin/nologin -M
$ ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver && make && make install
$ chown -R mfs.mfs /usr/local/mfs
$ ln -s /usr/local/mfs/bin/* /usr/local/bin/
$ ln -s /usr/local/mfs/sbin/* /usr/local/sbin/
$ mkdir /mfsclient
$ /usr/local/mfs/bin/mfsmount /mfsclient/ -H 192.168.1.10
# -H 指定 master server IP
$ cd /mfsclient
验证写入数据
$ while 2>1; do echo "1111111110000aaaaaaa" >> 1.txt; done
再开一个窗口查看
$ du -sh 1.txt
相关查询命令
$ mfsgetgoal 1.txt # 查询 goal 块
$ mfsfileinfo 1.txt # 查询备份数
$ mfssetgoal 1 1.txt # 设置 goal 块数

 

6、其他相关操作

误删除处理,垃圾回收站机制(此找回需要知道文件名,否则很难找回)

$ mkdir /back
$ chown mfs.mfs /back
$ mfsmount -m /back -H 10.10.10.11 # master服务器ip
$ cd /back/trash
$ yum -y install tree
$ tree . >> /root/file.info
$ mv 003/00000003\|1.txt /back/trash/undel/
$ cd /mfsclient/
$ ls #可以看见文件已找回
$ mfssettrashtime 64800 /mnt/mfs/test1 # 设置文件在垃圾箱的时间

 

快照功能

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

 

冗余 goal 设置

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

 

还原 master

这里将 master 服务器恢复快照模拟 master 服务器失效了,
$ vim /etc/sysconfig/network-scripts/ifcfg-eth1
# 此处网卡不能为 仅主机 模式,否则无法连接互联网
ONBOOT=yes
BOOTPROTO=dhcp
$ service network restart
$ ntpdate -u ntp1.aliyun.com
$ date
$ yum -y install chrony # 此安装包在第二张CD源中
$ vim /etc/chrony.conf
server 192.168.1.10 iburst # 此处 ip 可为本机ip,也可为 127.0.0.1
makestep 10 3 # 10秒内完成3次同步
allow 192.168.1.0/24 # 允许哪些客户端过来进行时间同步 # 取消注释并修改
local stratum 10 # 本地时间服务器的权重
$ service chronyd start
$ chkconfig chronyd on
$ yum -y install pcre pcre-devel zlib zlib-devel gcc gcc-c++ lrzsz
$ tar -xf moosefs-3.0.84-1.tar.gz
$ cd moosefs-3.0.84
$ useradd mfs -s /sbin/nologin -M
$ ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
$ make && make install
$ chown -R mfs.mfs /usr/local/mfs
$ ln -s /usr/local/mfs/bin/* /usr/local/bin/
$ ln -s /usr/local/mfs/sbin/* /usr/local/sbin/
$ cd /usr/local/mfs/etc/mfs
$ cp -a mfsmaster.cfg.sample mfsmaster.cfg
# 此文件都很合理了不需要修改
$ cp -a mfsexports.cfg.sample mfsexports.cfg
$ vim mfsexports.cfg
192.168.1.0/24 . rw,alldirs,maproot=0
# ! 配置文件说明
# 10.10.10.0/24
# .表示MFSMETA文件系统
# rw.alldirs,maproot=0 表示客户端拥有的权限。
$ rm -rf /usr/local/mfs/var/mfs/metadata.mfs.empty
在Metalogger元数据备份服务器中
$ scp /usr/local/mfs/var/mfs/* root@192.168.1.10:/usr/local/mfs/var/mfs/
在 master 服务器中
$ chown -R mfs.mfs /usr/local/mfs/var/mfs/*
$ mfsmaster -a

 

转自

集群存储(ISCSI、NFS、MFS)-蒲公英云
https://dandelioncloud.cn/article/details/1590512959497646081

posted @ 2023-02-08 13:41  paul_hch  阅读(691)  评论(0编辑  收藏  举报