-- 存储多路径(和双网卡绑定类似,相当于存储线路的双线路绑定,和后面要讲的HA集群也是类似) device-multipath 文档路径 http://docs.redhat.com https://access.redhat.com/documentation/zh_cn/red-hat-enterprise-linux/ 笔记目录下/arch/pdf/Red_Hat_Enterprise_Linux-6-DM_Multipath-zh-CN.pdf server NIC1 NIC2 | | | | NIC1 NIC2 storage 存储客户端 (存储导入端,使用端) eth0 eth1 10.1.1.6 192.168.122.128 kvm虚拟机来模拟 交换机1 交换机2 br0 virbr0 10.1.1.35 192.168.122.1 宿主机来模拟 存储服务器 (存储导出端,提供端) 配置前准备: 1,主机名绑定 2,静态IP 3,时间同步 4,iptables,selinux的检查 5,配置yum 这里还有一点要注意:在准备时192.168.122.0/24网段是NAT网段的话,自动获取的IP会有网关指向宿主机,把kvm虚拟机上的网关给去掉,以免后面测试时,关闭一个网络,还能通过网关访问(所以还是严谨的做成静态IP最好,不需要网关) 1,在存储服务器端把iscsi配置好,把存储盘(你可以分一个新的分区做实验存储,如果磁盘没空间,就dd创建一个文件来模拟存储)给共享出去,tgtd服务启动就OK了 # dd if=/dev/zero of=/data/DMmultipath bs=1M count=1000 # yum install scsi-target-utils -y # vim /etc/tgt/targets.conf backing-store /data/DMmultipath # /etc/init.d/tgtd start # netstat -ntlup |grep tgt tcp 0 0 0.0.0.0:3260 0.0.0.0:* LISTEN 3093/tgtd tcp 0 0 :::3260 :::* LISTEN 3093/tgtd # tgt-admin --show --用此命令确认一下共享的存储信息是否正确 # chkconfig tgtd on 2,在存储客户端安装iscsi客户端软件包和device-mapper-multipath的包 # yum install iscsi-initiator-utils -y # yum install device-mapper* -y # rpm -qa |grep device-mapper --rhel6.5上查的结果 device-mapper-persistent-data-0.2.8-2.el6.x86_64 device-mapper-libs-1.02.79-8.el6.x86_64 device-mapper-event-1.02.79-8.el6.x86_64 device-mapper-multipath-libs-0.4.9-72.el6.x86_64 device-mapper-multipath-0.4.9-72.el6.x86_64 device-mapper-event-libs-1.02.79-8.el6.x86_64 device-mapper-1.02.79-8.el6.x86_64 3,在iscsi客户端上,去发现iscsi服务器上的存储。分别使用服务器的两个IP去发现 [root@slave ~]# iscsiadm -m discovery -t sendtargets -p 10.1.1.35 10.1.1.35:3260,1 cluster:iscsi [root@slave ~]# iscsiadm -m discovery -t sendtargets -p 192.168.122.1 192.168.122.1:3260,1 cluster:iscsi # /etc/init.d/iscsi restart --重启后,就会自动挂载,会看到/dev/sda和/dev/sdb,那么这两个这两个iscsi存储,但他们其实是同一个存储 --你kvm虚拟机原来的磁盘为vda,那么这两个盘叫/dev/sda和/dev/sdb;如果原来磁盘为sda,那么这两个盘会叫/dev/sdb和/dev/sdc 4,修改多路径的配置,把上面sda,sdb绑定一个统一的接口 # mpathconf --enable --rhel6.5里需要先运行此命令,才会产生/etc/multipath.conf的配置文件 # cat /etc/multipath.conf |grep -v ^# |grep -v ^$ defaults { --看作为全局配置参数 user_friendly_names yes --使用友好名字(默认名为wwid,名字长且难认,友好名可以自定义) } blacklist { --黑名单(表示所有在黑名单里的设备不会被绑定成多路径设备) } # vim /etc/multipath.conf blacklist { devnode "^sda" --除了sda开头的设备,我都做多路径(但不是说所有的如tty1,pts1这些设备也有多路径,他会自己发现) } --如果你是使用kvm虚拟机(使用的是virio的磁盘)来做,把sda改成vda # /etc/init.d/multipathd start # fdisk -l --可以查看到下面这个设备 Disk /dev/mapper/mpatha: 1047 MB, 1047079936 bytes # ls /dev/mapper/mpatha --这个设备就是sda,sdb这两个路径合起来的一个接口,也就是说访问这个设备就是访问共享资源的两条路径 # multipath -ll --用些命令查看多路径的状态 mpatha (1IET 00010001) dm-0 IET,VIRTUAL-DISK size=999M features='0' hwhandler='0' wp=rw |-+- policy='round-robin 0' prio=1 status=active | `- 4:0:0:1 sda 8:32 active ready running `-+- policy='round-robin 0' prio=1 status=enabled `- 3:0:0:1 sdb 8:16 active ready running 5,查看存储的wwid(world-wide-identification) # scsi_id -u -g -s /block/sda 1IET_00010001 # scsi_id -u -g -s /block/sdb --rhel5里的做法 1IET_00010001 # scsi_id -u -g /dev/sda --rhel6里的做法 1IET_00010001 你会查看到这两个资源的wwid(world-wide-identification)是一样的,其实他们就是存储服务器的同一个iscsi共享存储 这个wwid,可以在device-mapper-*软件里对同一个wwid的设备进行绑定,绑成一个设备 6,不按照默认的多路径配置 可以把上面的sda,sdb通过wwid在/etc/multipath.conf里配置再加上下面一段 --下面的这段就是对对wwid为1IET_00010001的iscsi设备,把它绑定成/dev/mapper/yellow;如果有其它的多路径存储设备,就可以再用一个multipaths { }的配置段来配置它 # vim /etc/multipath.conf blacklist { } defaults { user_friendly_names yes getuid_callout "/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/%n" } --这里要注意一下:如果存储客户端是rhel5的话,则只要user_friendly_names yes这一句就可以了; --但如果是rhel6的话,则要加上getuid_callout这一句,否则下面alias定义的别名产生不出来 multipaths { multipath { wwid 1IET_00010001 --查找的设备的wwid alias yellow --这是自己定义的一个friendly_name,也就是说只要是上面的wwid的设备就绑成叫/dev/mapper/yellow path_grouping_policy failover --主备切换模式 path_checker readsector0 --检测IO路径是否OK的方式,这句可以注释掉,让他使用默认值 path_selector "round-robin 0" --决定下一个IO的选择算法;现在这个是轮循调度 failback immediate --主线路挂了再启起来后,会马上切换回来 rr_weight priorities --选择路径时的加权的算法,不好解释,有兴趣查看官方PDF的说明 no_path_retry 5 --禁用路径前尝试的失败次数 } --(上面的配置可能在rhel6.5下有个小问题,path_checker这个参数加的话,在后面multipath -ll时会报multipath.conf line 68, invalid keyword: path_checker这样的错误;你可以在配置文件里注释掉这一句;不过并不影响结果) --修改过多路径的配置文件,最好按下面的顺序重启一下 # /etc/init.d/multipathd stop # /etc/init.d/iscsi stop # /etc/init.d/iscsi start # /etc/init.d/multipathd start # ls /dev/mapper/yellow --这个多路径设备就由原来默认的mpatha变成了yellow /dev/mapper/yellow # multipath -ll yellow (1IET_00010001) dm-0 IET,VIRTUAL-DISK size=999M features='1 queue_if_no_path' hwhandler='0' wp=rw |-+- policy='round-robin 0' prio=1 status=active --active表示正在使用的io路径 | `- 19:0:0:1 sda 8:16 active ready running `-+- policy='round-robin 0' prio=1 status=enabled --enabled表示备用的io路径 `- 20:0:0:1 sdb 8:32 active ready running 7,测试(没有对它进行分区的情况) #mkfs.ext4 /dev/mapper/yellow #mount /dev/mapper/yellow /mnt 往/mnt里写些东西 # dd if=/dev/zero of=/mnt/test.img 在写的同时,使用iostat /dev/sd* 2去查看,现在发现是只有/dev/sda在写的IO,/dev/sdb没有(因为他是备用状态) 再测试断掉一个IO线路,能否切换到另一个备用线路 # multipath -ll yellow (1IET_00010001) dm-0 IET,VIRTUAL-DISK size=999M features='1 queue_if_no_path' hwhandler='0' wp=rw |-+- policy='round-robin 0' prio=1 status=active | `- 19:0:0:1 sda 8:16 active ready running `-+- policy='round-robin 0' prio=1 status=enabled `- 20:0:0:1 sdb 8:32 active ready running --现在看到的是主线路是sda,断哪张网卡呢?你可以先用iptraf查一下哪个网卡有流量,就表示哪个是sda;或者查看vmware虚拟机下面的小图标(kvm没有这种图标),有蓝色底的表示有流量;我这里就是eth0;所以我在虚拟机(存储使用端)ifconfig eth0 down来模拟 # multipath -ll --客户端这样去查看一下(需要等一小段时间,与你的配置参数有关) yellow (1IET_00010001) dm-0 IET,VIRTUAL-DISK size=999M features='1 queue_if_no_path' hwhandler='0' wp=rw |-+- policy='round-robin 0' prio=1 status=enabled | `- 19:0:0:1 sda 8:16 falied faulty running `-+- policy='round-robin 0' prio=1 status=active --这就表示切换到了sdc这条路径了 `- 20:0:0:1 sdb 8:32 active ready running 测试,写数据.iostat查到写操作只有在sdc上有增加 # ifconfig eth0 up 再把刚才断掉的网卡eth0启用;(注意看一下启用后,是否有原来的IP;如果你先前是手动建立的,这样启来是没有IP的,要手动再加回来;还有一点,在KVM上断桥接网络,NAT网络会出现自动加网关的情况,你最好检查一下,并手动去掉网关) # multipath -ll --切换回来速度很快 yellow (1IET_00010001) dm-0 IET,VIRTUAL-DISK size=999M features='1 queue_if_no_path' hwhandler='0' wp=rw |-+- policy='round-robin 0' prio=1 status=active --又切回sdb了 | `- 19:0:0:1 sda 8:16 active ready running `-+- policy='round-robin 0' prio=1 status=enabled `- 20:0:0:1 sdb 8:32 active ready running ----------------------------- 测试负载情况的多路径 multipaths { multipath { wwid 1IET_00010001 alias yellow path_grouping_policy multibus --把failover改成multibus path_checker readsector0 path_selector "round-robin 0" failback immediate rr_weight priorities no_path_retry 5 } # umount /mnt --把上来做测试挂载的设备先umount # /etc/init.d/multipathd stop # /etc/init.d/iscsi stop # /etc/init.d/iscsi start # /etc/init.d/multipathd start # multipath -ll yellow (1IET_00010001) dm-0 IET,VIRTUAL-DISK size=999M features='1 queue_if_no_path' hwhandler='0' wp=rw `-+- policy='round-robin 0' prio=1 status=active |- 21:0:0:1 sdc 8:48 active ready running --这次看的话就是负载的多路径;这里是sdc和sdd;名字变了没关系 `- 22:0:0:1 sdd 8:64 active ready running 测试:挂载去写(这一次直接挂载就可以,不需要再格式化),使用iostat去查看,两个都有io的写入,表示负载成功 如果ifconfig eth0 down, 然后 # multipath -ll yellow (1IET_00010001) dm-0 IET,VIRTUAL-DISK size=999M features='1 queue_if_no_path' hwhandler='0' wp=rw `-+- policy='round-robin 0' prio=1 status=active |- 21:0:0:1 sdc 8:48 failed faulty running --可以看到这个路径down掉了 `- 22:0:0:1 sdd 8:64 active ready running 写测试,iostat看io,就只有sdd这个线路有IO了 再ifconfig eth0 up起来(注意把检查IP是回OK) # multipath -ll yellow (1IET_00010001) dm-0 IET,VIRTUAL-DISK size=999M features='1 queue_if_no_path' hwhandler='0' wp=rw `-+- policy='round-robin 0' prio=1 status=active |- 21:0:0:1 sdc 8:48 active ready running --又回到两个路径都OK了 `- 22:0:0:1 sdd 8:64 active ready running 测试完成 -------------------------------------------------------- 最后可以把IP都设为静态IP,然后把multipathd,network,iscsi(默认这三个的启动顺序为先multipathd,再network,最后iscsi,这个顺序是OK的)确认为chkconfig on的状态,把NetworkManager确认为chkconfig off状态;重启后,能自动做好多路径,就表示OK了; 补充:device-mapper-multipath 除了实现多路径以外,也可以把多个iscsi的设备名混乱的问题给绑定解决 =================================================================== 分布式存储 分布式文件系统 moosefs(1.6版本) http://www.moosefs.org/ 文档: 笔记目录下/arch/pdf/moosefs-step-by-step-tutorial-cn-v.1.1.pdf MFS结构组成: 1,元数据服务器master 管理者,管理文件系统的状态信息。目前只能支持单个元数据服务器,有单点故障的风险 2,元数据日志服务metalogger 备份元数据服务器上的数据文件和日志文件 用于:master挂了,可以用于恢复。一般来说最好和master分开再用一台服务器,但下面的例子我还是把master和metalogger做在同一台上 3,数据存储服务器chunk server 实际存放数据的服务器,支持任意多台。 存放大文件时,会对文件进行分版,数据可以在多个chunk server之间传输,进行副本保存或镜像备份 MFS优势: 1、轻松的扩容,扩展存储网络 2、数据高可用,可以对数据做镜像保存。 3、通过回收站避免文件误删除。 4、提升读写性能。 致命的缺点: 只有一个元数据服务器,所以存在单点故障,可以使用metalogger进行恢复。 但如果使用2.0之后的版本,此问题已经解决,可以支持多个master(一个master为leader,其它master为follower) 准备硬件: 真实机和四台单网卡虚拟机 真实机做master和metalogger 一台虚拟机做客户端 三台虚拟机做数据存储服务器 这三台都加一块硬盘(大小必须大于2G,我这里使用5G,否则成功也是可以成功挂载,但无法写入) client 挂载客户端 | | | | master + metalogger 真实机(宿主机) | | | | chunk server 1 chunk server 2 chunk server 3 5G 5G 5G 实验前准备: 1,主机名最好设置一下,都静态绑定一下 10.1.1.3 client.cluster.com 10.1.1.35 li.cluster.com 10.1.1.4 storage1.cluster.com 10.1.1.5 storage2.cluster.com 10.1.1.6 storage3.cluster.com 2,时间同步最好做一下 3,关闭iptables,selinux 软件包路径在 笔记目录下/arch/mfs_soft/ 第一步: 安装元数据服务器master # useradd -r -s /sbin/nologin -d /dev/null mfs # tar xf mfs-1.6.20-2.tar.gz -C /usr/src/ # cd /usr/src/mfs-1.6.20-2/ #./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount # make ;make install (参数里加了--disable-mfschunkserver和--disable-mfsmount表示不编译做为chunkserver和客户端的部分) 第二步: 安装元数据日志服务器metalogger 我这里和master是同一台,这一步可以省略 第三步: 安装各个数据存储服务器chunk server(有几个chunk server节点,就要每个节点做一次) --所有的chunk server都下面一样的操作(就是编译参数这里我加了--diable-mfsmaster,表示不用安装做为master的部分;) # useradd -r -s /sbin/nologin -d /dev/null mfs # tar xf mfs-1.6.20-2.tar.gz -C /usr/src/ # cd /usr/src/mfs-1.6.20-2/ # ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster # make ;make install 第四步: 安装挂载客户端 需要先安装fuse模块 # tar xf fuse-2.8.5.tar.gz -C /usr/src/ # cd /usr/src/fuse-2.8.5/ # ./configure ;make ;make install 再安装mfs --参数和以前的有点不同,要多加一个--enable-mfsmount # useradd -r -s /sbin/nologin -d /dev/null mfs # tar xf mfs-1.6.20-2.tar.gz -C /usr/src/ # cd /usr/src/mfs-1.6.20-2/ # ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --enable-mfsmount --会报下面的错误 configure: error: mfsmount build was forced, but fuse library is too old or not installed 解决方法: 先做 # export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH 再编译 --如果要此变量永久生效,把它加到/etc/profile里,再source /etc/profile # ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --enable-mfsmount # make ;make install # ls /usr/local/mfs/bin/ --安装完后,客户端就有下面这些命令了 mfsappendchunks mfsgetgoal mfsrsettrashtime mfscheckfile mfsgettrashtime mfsseteattr mfsdeleattr mfsmakesnapshot mfssetgoal mfsdirinfo mfsmount mfssettrashtime mfsfileinfo mfsrgetgoal mfssnapshot mfsfilerepair mfsrgettrashtime mfstools mfsgeteattr mfsrsetgoal 第五步: 配置元数据服务器master 拷贝master的配置文件模版 # cp /usr/local/mfs/etc/mfsmaster.cfg.dist /usr/local/mfs/etc/mfsmaster.cfg --主配置文件 # cp /usr/local/mfs/etc/mfsexports.cfg.dist /usr/local/mfs/etc/mfsexports.cfg --权限导出控制文件 --注意,mfs的配置规则,注释就是默认值,如果要修改,则要打开注释,然后修改参数 mfsmaster.cfg --保持不变就可以了 # cd /usr/local/mfs/ # vim etc/mfsexports.cfg --可以把第一行的访问控制改一下 10.1.1.0/24 / rw,alldirs,maproot=mfs --表示10.1.1.0/24网段,以mfs身份,读写所有目录 拷贝元数据文件,该文件在服务停止之后会保存运行的一些重要数据。 # cp /usr/local/mfs/var/mfs/metadata.mfs.empty /usr/local/mfs/var/mfs/metadata.mfs 启动元数据服务器 # /usr/local/mfs/sbin/mfsmaster start --启动,停止把start换成stop;建议停止不要杀进程,可能会造成下次启动需要恢复 # netstat -ntlup |grep :94 tcp 0 0 0.0.0.0:9419 0.0.0.0:* LISTEN 8537/mfsmaster tcp 0 0 0.0.0.0:9420 0.0.0.0:* LISTEN 8537/mfsmaster tcp 0 0 0.0.0.0:9421 0.0.0.0:* LISTEN 8537/mfsmaster 第六步: 配置元数据日志服务器metalogger(--我这里是为了测试方便与master同一台) # cd /usr/local/mfs/etc/ # cp mfsmetalogger.cfg.dist mfsmetalogger.cfg --拷贝模版 # vim mfsmetalogger.cfg --man mfsmetalogger.cfg来查看帮助 MASTER_HOST = 10.1.1.35 --打开这一句的注释,指定master的IP,我这里是同一台,也这样指定 # /usr/local/mfs/sbin/mfsmetalogger start --启动日志服务 # lsof -i:9419 --验证是否已经与master建立了链接 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME mfsmaster 9997 mfs 6u IPv4 516361 TCP *:9419 (LISTEN) mfsmaster 9997 mfs 9u IPv4 561507 TCP li.cluster.com:9419->li.cluster.com:40656 (ESTABLISHED) mfsmetalo 10217 mfs 6u IPv4 561506 TCP li.cluster.com:40656->li.cluster.com:9419 (ESTABLISHED) --这里看到两个(因为我这里master和日志都做在同一台机,所以有两个)established,表示已经建立链接。 第七步: 配置各个数据存储服务器chunk server # cd /usr/local/mfs/etc/ # cp mfschunkserver.cfg.dist mfschunkserver.cfg --拷贝chunkserver服务器的配置模版 # vim mfschunkserver.cfg MASTER_HOST = 10.1.1.35 --只打开这一句注释,改成master的IP # HDD_CONF_FILENAME = /usr/local/mfs/etc/mfshdd.cfg --这里默认有这一句,不用改,它指定的配置文件里定义的把本机哪一个设备做为存储加入分布式存储环境 # cp mfshdd.cfg.dist mfshdd.cfg --拷贝指定分布式存储文件模版 # vim mfshdd.cfg /data --表示把挂载到/data目录的存储加入分布式 # mkdir /data --把新加的5G的/dev/sdb分成一个区/dev/sdb1,然后格式化 # mkfs.ext4 /dev/sdb1 # mount /dev/sdb1 /data/ # chown mfs.mfs /data/ --改权限,让mfs用户可读可写 # echo "/dev/sdb1 /data ext4 defaults 0 0" >> /etc/fstab # /usr/local/mfs/sbin/mfschunkserver start --启动chunkserver服务,如果要停止服务还是使用stop来停止 ===================================== 测试一:客户端挂载,读写测试 # /usr/local/mfs/bin/mfsmount -H 10.1.1.35 /mnt/ --IP为master的IP mfsmaster accepted connection with parameters: read-write,restricted_ip ; root mapped to root:root # mount |grep mfs mfs#10.1.1.35:9421 on /mnt type fuse (rw,nosuid,nodev,allow_other,default_permissions) # df -h mfs#10.1.1.35:9421 13G 0 13G 0% /mnt --大小为所有的存储大小的总和 # echo 123 > /mnt/123 --写文件OK # rm /mnt/123 -rf --删除文件OK ----------------------------- 测试二:通过图形管理界面,可以测试mfs各个chunkserver节点可以自由的加入和退出mfs分布式文件系统 --在master服务器上启动图形管理(查看mfs的各种状态) # /usr/local/mfs/sbin/mfscgiserv starting simple cgi server (host: any , port: 9425 , rootpath: /usr/local/mfs/share/mfscgi) # filefox http://10.1.1.35:9425 测试它的容量的自动增加减少 把一个chunkserver 上的/usr/local/mfs/sbin/mfschunkserver stop停掉服务,图形界面马上可以看到少了一个节点,容量也少了近5G 已经挂载的客户端不需要重新挂载,马上也可以看到大小也少了近5G --------------------------------- 测试三:测试文件在多个chunkserver上的分布情况 # cd /usr/local/mfs/bin/ # ./mfsfileinfo /mnt/123 --用此命令看到123在10.1.1.4上 /mnt/123: chunk 0: 0000000000000002_00000001 / (id:2 ver:1) copy 1: 10.1.1.4:9422 去10.1.1.4这个chunkserver上关闭 #/usr/local/mfs/sbin/mfschunkserver stop # ./mfsfileinfo /mnt/123 --再去看,发现报no valid copies !!! /mnt/123: chunk 0: 0000000000000002_00000001 / (id:2 ver:1) no valid copies !!! 但这个123文件还是可以进行读写操作的 读写操作完后,再查看 # ./mfsfileinfo /mnt/123 --读写完后,再次查看,发现文件在10.1.1.5上了 /mnt/123: chunk 0: 0000000000000002_00000001 / (id:2 ver:1) copy 1: 10.1.1.5:9422 ---------------------------------- 测试四: 测试文件副本 设定文件保存的副本数 在挂载客户端做下面测试 # cd /usr/local/mfs/bin/ # ./mfsgetgoal /mnt/123 /mnt/123: 1 --一个副本 # ./mfssetgoal 3 /mnt/123 --设置副本数为3,这里可以使用-r参数对目录递归设置 --注意:如果chunksever只有3个,副本数可以设置大于3,但是最终只会产生3个副本 # ./mfscheckfile /mnt/123 --查看还是为1,需要等待一段时间 /mnt/123: 1 copies: 1 chunks # ./mfsfileinfo /mnt/123 --过一会(在虚拟机环境大概三分钟,需要等待他的数据同步),查看可以看多加了一个副本 /mnt/123: chunk 0: 0000000000000002_00000001 / (id:2 ver:1) copy 1: 10.1.1.4:9422 copy 2: 10.1.1.5:9422 # ./mfsfileinfo /mnt/123 --再过一会(大概又要三分钟),就三个副本了 /mnt/123: chunk 0: 0000000000000002_00000001 / (id:2 ver:1) copy 1: 10.1.1.4:9422 copy 2: 10.1.1.5:9422 copy 3: 10.1.1.6:9422 ================================= 测试五: 验证副本的镜像高可靠性 # ./mfsfileinfo /mnt/123 --现在三个镜像 /mnt/123: chunk 0: 0000000000000002_00000001 / (id:2 ver:1) copy 1: 10.1.1.4:9422 copy 2: 10.1.1.5:9422 copy 3: 10.1.1.6:9422 10.1.1.5的chunkserver上: # /usr/local/mfs/sbin/mfschunkserver stop 10.1.1.6的chunkserver上: # /usr/local/mfs/sbin/mfschunkserver stop # ./mfsfileinfo /mnt/123 --看到只一份镜像了 /mnt/123: chunk 0: 0000000000000002_00000001 / (id:2 ver:1) copy 1: 10.1.1.4:9422 # cat /mnt/123 --文件仍然可以被看到,高可靠性 123 ---------------------------------- 测试六: 关于删除时间的设置 # touch /mnt/456 --创建一个新的文件456,用vi打开随意写点内容进去 # ./mfsgettrashtime /mnt/456 /mnt/123: 86400 --查看为86400秒,表示回收站里存放文件的时间为86400秒,你可以通过类似./mfssettrashtime 1000 /mnt/456的命令把它设置为1000秒或其它时间 # rm /mnt/456 -rf --删除掉这个文件 --现在进入回收站,进行数据恢复 但默认挂载客户端是不可以挂载master元数据的,会报permitssion deny 所以回到master去修改mfsexports.cfg文件 # vim mfsexports.cfg * . rw --确认这一行是打开注释 # /usr/local/mfs/sbin/mfsmaster stop # /usr/local/mfs/sbin/mfsmaster start --重启master # ./mfsmount -m /media/ -o nonempty -H 10.1.1.35 --在挂载客户端把master上的元数据挂载本地/media目录;如果目录非空,则加 -o nonempty # ls /media/ reserved trash reserved目录:被删除的文件被其它客户端使用,会放在此 trash目录:回收站 # ls /media/trash/ --这里可以看到一个删除的文件,00000002是inode号,456是文件名 00000002|456 undel 恢复方法: mv回到undel # mv /media/trash/00000002\|456 /media/trash/undel/ # cat /mnt/456 --查看,回来了 haha --------------------------------- 测试七: 不正常关闭master的恢复 在master服务器上kill 进程 # pkill -9 mfsmaster # /usr/local/mfs/sbin/mfsmaster start --启动失败 # /usr/local/mfs/sbin/mfsmetarestore -a --恢复 # /usr/local/mfs/sbin/mfsmaster start --再次启动成功 (如果有特别的情况使用mfsmetarestore -a都无法恢复,则可以cp /usr/local/mfs/var/mfs/metadata.mfs.back /usr/local/mfs/var/mfs/metadata.mfs后,再mfsmaster start,这样就可以启动,但是会丢失一部分数据) 如果主服务器上/usr/local/mfs/var下元数据目录没了 恢复方法: 就是应该在元数据日志服务器上拷过来,改对应的名字 日志服务器,名字都有ml的 元数据服务器 metadata_ml.mfs.back metadata.mfs.back changelog_ml.0.mfs changelog_ml.0.mfs changelog_ml.1.mfs changelog.1.mfs changelog.1.mfs changelog.1.mfs sessions_ml.mfs sessions.mfs