集群--共享存储-ISCSI服务器--MFS服务器--NFS服务器

网络拓扑:

  • DAS(直接附加存储)

 普通磁盘

如:电脑内的磁盘,手机内的磁盘

优点:技术简单,传输速率更高

缺点:存储设备与磁盘相互绑定

  • NAS(网络附加存储)

用户网络和NAS处于同一个广播域

如:小米路由器上可以接磁盘的接口,接上后可以开启局域网内网共享,客户机可以通过网络访问到共享磁盘 ,可以当备份磁盘

优点:技术相对简单;不要求存储设备直连主机(通过网络),只需在同局域网下即可;不需要操作文件系统,DAS需要格式化等等

缺点:存储速率较慢

个人数据存储用CIF协议;服务器存储用NFS

  • SAN(存储区域网络)

用户网络和SAN不在同一个网络内

优点:存储安全性较高(用户网络和SAN不在同一个网络内);存储速率较高

缺点:造价昂贵(需要有交换机,网卡);技术难度相对较高


存储技术

  • 块存储

    

优点:可以通过Raid/LVM等提供保护;可以独立使用

缺点:不利于共享

  • 文件存储/网络存储

  

优点:可以再不同主机之间共享存储;构建资金低;不同操作文件系统

缺点:读写速率慢,传输速率慢

一般会与NAS结合起来

  • 分布式存储(包含上面所有的优点,速率快,能共享)

把共享存储服务器分布式,分布多个服务器存放不同数据(master存放元数据,chunk servers存放真实数据)

原理:超级快--记录存储文件的元信息(文件的详细信息);数据块--真正记录数据的地方;元数据服务器--超级快单独放在一个服务器上存储;真实数据服务器--数据块单独放在一个服务器上存储;客户访问文件先找元数据服务器,它把元数据信息返回给客户端并且告诉客户真实数据所在服务器的位置,然后客户去连接后端真实服务器获取数据,取数据会在多台服务器上去取,所以速率会很快

优点:读写效率高(把数据分散到不同服务器上存储);可在不同主机之间共享存储

缺点:造价昂贵;技术实现难度较高

  • 分布式

将一个文件拆分多份,把每一份放在不同的服务器进行存储

如果有一组文件,把组内的每一个文件单独放在不同的服务器进行存储(一般都用这一种)

MFS(驯鹿文件系统)--moosefs

  • 介绍:具备冗余容错功能的分布式网络文件系统,它将数据分别存放在多个物理服务器或单独磁盘或分区上三种方式,确保一份数据有多个备份副本,可以给FTP,web等提供后端存储。

这里的冗余指的是一份数据会备份到多个服务器内,可以手动指定,只有两台服务器同时损坏才会造成数据丢失

这里的容错指的是保护管理员误删除的,它会有一个类似于垃圾箱的功能(会将删除的数据放入垃圾箱内保存一段时间,定时清空)

  • MFS的优点:

a.高可靠性--每一份数据可以设置多个备份,并可以存储在不同的主机上

b.高可扩展性:可以轻松的通过主机的磁盘容量或增加主机数量来动态扩展整个文件系统的存储量

c.高可容错性:通过对mfs进行设置,实现当数据文件被删除后的一段时间内,依旧存放于主机的回收站里,以备误删除恢复数据

d.高数据一致性:即使文件被写入,访问时,依然可以轻松完成对文件的一致性快照(可以帮当前的文件拍出一个新的超级快)

  • MFS的缺点:

a.master是存放超级块的,目前是单节点,如果gg了,那么用户就访问不了。MFS企业版无单节点,社区版是单节点,但是我们使用社区版可以通过keepalived对master进行高可用

b.master服务器对主机的内存要求略高,因为master会把当前所有数据的元数据信息全部加载到内存中

c.复制元数据时间较长(可调整)

  • MFS的应用场景:

大规模高并发的数据存储及访问。在小型环境中共享存储内放着一些很小的文件,用分布式存储反而会更慢;

  • MFS的组件说明:

master服务器:存放元数据信息的服务器,会把数据放在master的内存进行索引操作

Metalogger服务器:备份Master服务器内的元数据。可以恢复元数据,可以有多个

data servers(chunk servers)数据存储服务器:存放真正数据文件的实体服务器,可以由三种不同类型的磁盘充当,物理服务器、磁盘、分区

client servers:挂载并使用MFS文件系统的客户端,当读写文件时,客户端首先会连接master服务器获取数据的实体服务器的位置,然后找实体服务器,访问服务器读取或写入,mfs客户端通过fuse mechanism实现挂载mfs文件系统的,因此,只有系统支持fuse(用户空间文件系统),就可以作为客户端访问mfs整个文件系统

  • MFS工作与客户端之间的方案:

遍历:ls,客户端连接master,检索内存数据返回元数据信息

删除:rm,客户端连接master,给master发出删除文件的请求---master定位要删除的元数据信息,删除元数据信息,将删除真实数据的请求加入到队列中,到达保存时间后,真实数据被删除---master返回信息,客户端响应

查看:cat,客户端连接master,给master发出要查看的文件的IP Port chunkid请求,master把IP Port chunkid返回给客户端,客户端拿着IP Port chunkid找chunkserver直接获取数据

拷贝文件:copy,客户端连接master,给master发出拷贝文件的请求,master确定chunkserver向对应chunkserver传输文件大小创建新块请求,chunkserver接受请求在当前目录创建新块用于写入数据创建成功后MFS返回chunkid给master,master发送IP port chunkid至客户端,客户端连接新块并向master发送关闭文件的请求,msater连接至新块检索判断最终大小以及修改时间更新当前元数据信息

修改文件:vim,客户端连接master,给master发出修改文件的请求,master向chunkserver告知拷贝新块(副本1),master将副本1的块的IP port chunkid返回给客户端,客户端连接副本1块,客户端开始修改,修改完成客户端向master发起文件关闭请求(文件如果未被修改,master连接至副本1块对比文件内容,如果一致,删除副本1块,更新元数据信息,比如是最终修改时间;文件如果被修改,master,master连接至副本1块对比文件内容,如果不一致,chunkserver创建副本2,副本2根据副本1的大小定制,将内容拷贝到副本2,chunkserver删除副本1块,将副本2id返回给master服务器,master更新源数据信息,修改元信息)


网络拓扑+存储技术

  • 块存储+DASSTAT线连接(成本低)

 

  • 块存储+NAS

 

  • 块设备+SAN

 

  • 文件存储+NAS

 

  • 分布式存储+SAN

  • ISCSI服务的搭建

ISCSI的工作方式:服务端--target   客户端---initator;ISCSI服务器是用来做共享的块设备的

LUN(逻辑单元):如果ISCSI有两块2T的磁盘,它只想让客户端使用50个G的话,那么它先把磁盘挂载到本地的/mnt/iscsi下,然后把目录指定成LUN,如果客户找LUN就相当于找的是/mnt/iscsi,如果要指定LUN,那么需要把LUN封装成一个IQN的标签,一个IQN标签会对应多个LUN,如果把IQN绑定给客户端,那么客户端就绑定了这两个35个G的磁盘

  

 

   

环境介绍:主机11模拟(ISCSI服务器)成一个块设备提供给客户端,让客户端能把它当做磁盘

步骤:在target端先创建IQN标签,再给IQN上创建LUN

1.先给11主机添加一块20G的新磁盘,创建逻辑卷组:

pvcreate /dev/sdb;vgcreate vg0 /dev/sdb;lvcreate -L 10G -n lv0 vg0;mkfs -t ext4 /dev/vg0/lv0 

2.target端创建IQN标签:

安装SCSI服务器端:yum install -y scsi-target-utils;service tgtd start;chkconfig tgtd on

在targer端创建IQN:tgtadm -L iscsi -o new -m target -t 1 -T(指定IQN标签) iqn.2020- 08.localdomain.localhost:hongfu
查看ISCSI:tgtadm -L(指定设备类型) iscsi -o(指定操作类型) show -m(管理端对象) target

-L(指定驱动类型)  -m(管理的对象)  -t(tat标签) -b(设备名称)  /dev/vg0/lv0(来源) bind(绑定)

IQN标签格式:iqn.年-月.域名反写:任意字符串

3.在IQN上创建LUN:

把LUN绑定在IQN上:tgtadm -L iscsi -o new -m logicalunit -t 1 -l(LUN的标签号) 1 -b /dev/vg0/lv0                                                        查看ISCSI:tgtadm -L iscsi -o show -m target                                                                                                                                        把lv0绑定至LUN1上,把LUN1绑定到tat1上(IQN标签)

4.ACL:只允许66网段访问

tgtadm -L iscsi -o bind -m target -t 1 -I 192.168.66.0/24                                                                                                                         查看ISCSI:tgtadm -L iscsi -o show -m target

  • 客户端配置

安装客户端:yum -y install iscsi-initiator-utils

扫描ISCSI服务器有没有可使用的IQN标签:iscsiadm -m discovery -t st -p 192.168.66.11  

挂载iqn标签:iscsiadm -m node -T iqn.2020- 08.localdomain.localhost:hongfu --login

查看是否挂载成功:fdisk -l;它会把iqn下的两个lun都挂载过来

创建目录:mkdir /mnt/iscsi1  /mnt/iscsi2;分区--fdisk /dev/sdb(/dev/sdc) 格式化:mkfs.ext4 /dev/sdb1(/dev/sdc1);

挂载块设备:mount /dev/sdb1 /mnt/iscsi1(/dev/sdc1 /mnt/iscsi2)

测试:写文件--

卸载iqn标签:iscsiadm -m node -T iqn.2020- 08.localdomain.localhost:hongfu --logout;查看:fdisk -l

可以多客户端同时挂载,但是有一个缺点,多个用户操作同一个客户端会对磁盘进行损坏

文件锁:单机文件锁---有效域在同一个操作系统内部,在同一个操作系统内,有人在使用磁盘的时候后会锁上磁盘入口,缺点是只                  能在一个系统内生效,另一个系统仍然可以挂载磁盘去操作,如果多用户同时写数据时会损坏磁盘

分布式文件锁:在一个分布式集群中生效,不同操作系统内只要是磁盘有人在使用就会锁上磁盘入口(被淘汰了)

注意:生产环境中会把一个iqn挂载到一台服务器上

开机自动挂载:在 /etc/fstab下写扫描ISCSI服务器有没有可使用的IQN标签、挂载iqn标签、挂载块设备


  • ISCSI服务器持久化搭建(利用块设备提供共享):

ISCSI服务器端:

安装iscsi服务:yum -y install scsi-target-utils

ISCSI灵活性:可以由分区提供,目录,块设备

编辑ISCSI配置文件:vim /etc/tgt/targets.conf

启动ISCSI服务端服务:service tgtd start;chkconfig tgtd on

查看:tgtadm --lld iscsi --mode target --op show

    

ISCSI客户端:

安装iscsi客户端服务:yum -y install iscsi-initiator-utils

写入ISCSI服务器用户和密码:vim /etc/iscsi/initiatorname.iscsi

编辑ISCSI客户端配置文件:vim /etc/iscsi/iscsid.conf

 连接时自动输入用户名和密码 

启动ISCSI客户端服务:

登录:

查看:fdisk -l

 

分区:fdisk /dev/sdb

 

刷新分区表:partprebe /dev/sdb1 ; fdisk -l 查看

 

格式化文件系统:mkfs.ext4 /dev/sdb1

测试结果:

写入---

卸载---卸载iqn标签:iscsiadm -m node -T iqn.2020-08.com.hongfu:sdb --logout


分布式存储(MFS)构建:

  • 环境准备:客户端192.168.66.15  master服务器192.168.66.11 metalogger服务器192.168.66.12                                                                    chunkserver192.168.66.13/14*2都下载

注意:元数据连接MSTER服务器,连接master的9419端口  chunkerserver连接master服务器,连接mster的9420端口 客户端连接9121的端口

  • 安装:11,12,13,14源码安装MFS

把源码包拉进Linux中

把源码包拉进Linux中
[root@localhost ~]# yum install -y zlib zlib-devel
[root@localhost ~]# tar -zxvf moosefs-3.0.84-1.tar.gz 
[root@localhost ~]# cd moosefs-3.0.84
[root@localhost moosefs-3.0.84]# useradd -s /sbin/nologin -M mfs
[root@localhost moosefs-3.0.84]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
[root@localhost moosefs-3.0.84]# make && make install

mfs目录下内容:

bin下是客户端的命令

sbin下是mfs服务的命令

share/mfscgi下是监控页

var/mfs,所有元数据信息都会保存到mfs下,每次mfs启动会把这个文件加载到内存中;启动服务的时候mfs会把mfs下的metadata.mfs变成metadata.mfs.back,元数据信息会定期写入到metadata.mfs.back中,定期同步到metalogge服务器r。操作实时写入changelog*.mfs,是增量备份,实时同步到metalogger服务器中


  • master服务器配置:/mfs/etc/mfs是样板文件,要启动什么样的角色就拷贝,开启即可

1.master服务器拷贝主配置文件    

2.master服务器拷贝用户挂载的权限文件:

3.master服务器拷贝元数据信息文件:

3. 修改此配置文件:vim mfsexports.cfg:

4.修改所属主和组:chown -R mfs:mfs /usr/local/mfs

5.开启服务:/usr/local/mfs/sbin/mfsmaster start

  


  • metalogger服务器配置:用于同步master元数据信息

1.metalogger服务器拷贝配置文件:                          master服务器地址                                                                                                                      master端口                                                                                                                                                   开启同步master后,多长时间备份一次     (2小时)

2.开启服务:

  • 检测结果:

lsof -i :监测同步连接

192.168.66.12:33167连接了192.168.66.11:9419 (数据正在传输)

12主机/usr/local/mfs/var/mfs同步过来了元数据信息:


  • 13和14chunkserver服务器配置:存放真实数据的部分

/usr/local/mfs/etc/mfs

1.chunkserver服务器拷贝配置文件:        master服务器地址                                                                                                               master端口                                                                                                                                                    chunkserver从master的哪个配置文件读取共享的文件:

2.拷贝共享文件,文件里写的是用什么目录或分区或磁盘给MFS提供存储能力(/mnt/mfs提供共享):                                                          在配置文件写:   创建目录:

3.给新添加的磁盘分区:fdisk /dev/sdb;partprobe /dev/sdb1;mkfs.ext4 /dev/sdb1                                                                             将目录挂载至磁盘:mount /dev/sdb1 /mnt/mfs  开机自启:echo "/bin/mount /dev/sdb1 /mnt/mfs" >> /etc/rc.local                          echo "/usr/local/mfs/sbin/mfschunkserver start" >> /etc/rc.local

修改所属主和组:chown -R mfs:mfs /usr/local/mfs;chown -R mfs:mfs /mnt/mfs

4.启动服务:/usr/local/mfs/sbin/mfschunkserver start

测试:

启动监控页:usr/local/mfs/sbin/mfscgiserv

浏览器访问:192.168.66.11:9425


  • 客户端服务器配置:用来连接master充当元数据信息索引服务器,chunkserver充当真实数据服务器

安装

把源码包拉进Linux中
[root@localhost ~]# yum install -y zlib zlib-devel fuse fuse-devel fuse-libs
[root@localhost ~]# tar -zxvf moosefs-3.0.84-1.tar.gz 
[root@localhost ~]# cd moosefs-3.0.84
[root@localhost moosefs-3.0.84]# useradd -s /sbin/nologin -M mfs
[root@localhost moosefs-3.0.84]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --with-disable-mfsmaster --with-disable-mfschunkserver
[root@localhost moosefs-3.0.84]# make && make install
[root@localhost moosefs-3.0.84]# ln -s /usr/local/mfs/bin/* /usr/local/bin/
[root@localhost moosefs-3.0.84]# ln -s /usr/local/mfs/sbin/* /usr/local/sbin/

设置客户端:

创建挂载目录:mkdir /mfs;指定挂载目录和master服务器地址:mfsmount /mfs -H 192.168.66.11

通过df -h查看:                                                      通过mount 查看:

      

 

查看mfs里的文件的位置:message存储到了13和14服务器各上一份


测试结果:

测试挂载过来的服务器(磁盘)能否写入数据:将message拷贝到/mfs下

测试任何一台13或14服务器关闭是否能读取数据:

                                                                                                                        

注意:master会尽可能使文件的冗余数目达到期望值;如果chunkserver少于期望值,会以当前主机的最大数进行设置;如果副本服务器死亡,master会重新挑选chunkserver进行补充


误删除文件,垃圾回收站机制:

介绍:如果文件被误删除,文件会被暂时保存在回收站,以便我们及时找回重要数据

查看如果文件被删除存到回收站有多长时间:mfsgettranshtime +文件名

放入回收站的时长修改:mfssettranshtime 9000 +文件名                        

误删除文件找回:                                                                                                                                                              挂载找回文件后文件所放的位置,/back/trash就是删除的文件                                                                             /back/trash下的003目录下就是刚刚删除的文件                                                                                                                                    只要把删除的文件放入/vack/trash/undel就会恢复到原目录                                                           


副本值(冗余)设置:将单个文件拷贝到几台chunkserver

拷贝到3台chunkserver:                                                                                            


master服务器gg数据恢复方法(社区版):

master没有数据了,利用metalogger恢复数据:

实验准备:把master服务器恢复快照,然后将master服务器安装MFS,并配置好配置文件,现在的master已经没有元数据了

将metalogger服务器的/usr/local/mfs/var/mfs下的所有数据传给到master/usr/local/mfs/var/mfs下

给master的master/usr/local/mfs/var/mfs设置权限

master启动服务:-a会对文件建立关联,还原到内存中      

注意:master服务器gg了只能保证数据不会丢,但是客户无法正常访问磁盘了,因为metalogger不会自动顶替master(社区版)


master服务器gg了,让备份服务器顶替成master(企业版):

方案一:如果不想花钱买的企业版的话,可以使用keepalived做主服务器和备份服务器之间的高可用

chunkserver,client都使用vip(192.168.66.100),在master和备设备后端搭建一个ISCSI服务器,两台服务器把ISCSI服务器挂载到本机上,这样master写入的数据就可以存在ISCSI上。可以在keepalived中编写一个脚本,检测对方是否存活,如果mastergg,根据脚本判断mastergg了,那备设备就自动可以执行/usr/local/mfs/sbin/mfsmaster -a(脚本内)进行数据恢复,将ISCSI服务器中数据同步过来

方案二:如果不想花钱买的企业版的话,可以使用keepalived做主服务器和备份服务器之间的高可用

chunkserver,client都使用vip(192.168.66.100),logger原本就能同步过来master的元数据,不需要共享存储了,可以在脚本内写判断master是否gg,如果gg了,那么脚本内执行关闭master的keepalived,将master的mfsmster.cfg和mfsexport.cfg替换掉logger的mfsmster.cfg和mfsexport.cfg,执行/usr/local/mfs/sbin/mfsmaster -a即可

NFS 共享服务器:

NFS(网络文件系统):

是Linux内核的一部分,可以透过网络,让不同的主机、不同操作系统可以共享存储;文件传送过程中依赖于PRC协议

远程过程调用PRC:

一个机器上的服务调用另一个机器上的服务,让它执行并且自身获取结果,用于自己的使用或传输

PRC的工作方法:

RPC服务启动,再启动NFS,NFS会向RPC注册(调用),NFS客户端请求NFS服务先请求RPC,然后RPC通过NFS的注册信息返回给客户端,然后客户端通过返回的信息去连接NFS

端口:

RPC通讯端口:111         NFS server通讯端口:2049

架构设计:

NFS搭建:

11,12,13主机安装NFS:yum install -y rpcbind nfs-utils

修改配置文件:vim /etc/exports

创建共享目录并写入数据:

    

启动服务:

用客户端查看NFS服务器端的共享目录:

客户端挂载NFS目录:

   

测试:

12主机:

   

13主机:

[root@localhost ~]# showmount -e 192.168.66.11
Export list for 192.168.66.11:
/nfs/2 192.168.66.0/24
/nfs/1 192.168.66.0/24
[root@localhost ~]# mkdir /nfs
[root@localhost ~]# mount -t nfs 192.168.66.11:/nfs/2 /nfs/
[root@localhost ~]# cd /nfs/
[root@localhost nfs]# ls
1.txt
[root@localhost nfs]# cat 1.txt 
qwe

 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值