mfs网络分布式文件系统、高可用、iscsi存储方式的mfs、fence

版权声明:转载请著明出处 https://blog.csdn.net/weixin_40543283/article/details/89159626

目录

一、moosefs(mfs)

1.什么是mfs?

2.常规特征

3.独有特征

4.体系机构

二、部署moosefs(mfs)

1.mfs1节点

2.mfs2节点

3.使用cgi-server在web端查看mfs存储

4.添加mfs3存储节点

5.客户端应用

三、mfs回收站机制


一、moosefs(mfs)

1.什么是mfs?

MooseFS是一个具有容错性的网络分布式文件系统。它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一的资源。

2.常规特征

  1. 分层次的结构(目录树)
  2. 存储POSIX文件属性(权限、最后访问和修改时间)
  3. 支持特殊文件(块和字符设备、管道以及套接字)
  4. 符号连接和硬连接
  5. 对文件系统的访问可以通过IP地址和(或者)密码进行限制

3.独有特征

  1. 高可靠(数据的多个拷贝被存储在不同的计算机上)
  2. 通过附加新的计算机或者硬盘可以实现容量的动态扩展
  3. 删除的文件可以根据一个可配置的时间周期进行保留(一个文件系统级别的回收站)
  4. 不受访问和写入影响的文件连贯快照

4.体系机构

1、管理服务器(master server)

一台管理整个文件系统的独立主机,存储着每个文件的元数据(文件的大小、属性、位置信息,包括所有非常规文件的所有信息,例如目录、套接字、管道以及设备文件)

2、数据服务器群(chunk servers)

任意数目的商用服务器,用来存储文件数据并在彼此之间同步(如果某个文件有超过一个备份的话)

3、元数据备份服务器(metalogger server)

任意数量的服务器,用来存储元数据变化日志并周期性下载主要元数据文件,以便用于管理服务器意外停止时好接替其位置。

4、访问mfs的客户端

任意数量的主机,可以通过mfsmount进程与管理服务器(接收和更改元数据)和数据服务器(改变实际文件数据)进行交流。

二、部署moosefs(mfs)

环境:

mfs1 mfs_master 172.25.1.1
mfs2 mfs_chunkserver 172.25.1.2
mfs3 mfs_chunkserver 172.25.1.3
mfs4 metalogger server 172.25.1.4
orange

client

172.25.1.254

软件下载: mfs ===> 点击下载 提取码: 7a58

开始部署之前所有主机一定要做好解析,可以将下面这个文件scp到其他节点

[root@mfs1 ~]# vim /etc/hosts
172.25.1.1 mfs1 mfsmaster
172.25.1.2 mfs2
172.25.1.3 mfs3
172.25.1.4 mfs4

1.mfs1节点

[root@hadoop 3.0.103]# ls
moosefs-cgi-3.0.103-1.rhsystemd.x86_64.rpm                    ##监控mfs
moosefs-cgiserv-3.0.103-1.rhsystemd.x86_64.rpm                ##显示监控mfs的web端
moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm            ##数据存储节点软件包
moosefs-cli-3.0.103-1.rhsystemd.x86_64.rpm                    ##命令行
moosefs-client-3.0.103-1.rhsystemd.x86_64.rpm                 ##客户端
moosefs-master-3.0.103-1.rhsystemd.x86_64.rpm                 ##master端   
moosefs-metalogger-3.0.103-1.rhsystemd.x86_64.rpm             ##元数据端
[root@hadoop 3.0.103]# yum install moosefs-cgi-3.0.103-1.rhsystemd.x86_64.rpm moosefs-cgiserv-3.0.103-1.rhsystemd.x86_64.rpm moosefs-cli-3.0.103-1.rhsystemd.x86_64.rpm moosefs-master-3.0.103-1.rhsystemd.x86_64.rpm -y

moosefs的配置文件在/etc/mfs下,元数据存储在/var/lib/mfs下

root@mfs1 ~]# ll /var/lib/mfs/
total 12
-rw-r----- 1 mfs mfs 45 Apr  9 08:26 changelog.0.mfs
-rw-r--r-- 1 mfs mfs  8 Apr  9 08:07 metadata.mfs.back
-rw-r--r-- 1 mfs mfs  8 Nov 23 07:46 metadata.mfs.empty
[root@mfs1 ~]# systemctl stop moosefs-master
[root@mfs1 ~]# ll /var/lib/mfs/
total 3608
-rw-r----- 1 mfs mfs      45 Apr  9 08:26 changelog.1.mfs
-rw-r----- 1 mfs mfs     120 Apr  9 08:28 metadata.crc
-rw-r----- 1 mfs mfs    2901 Apr  9 08:28 metadata.mfs
-rw-r--r-- 1 mfs mfs       8 Apr  9 08:07 metadata.mfs.back.1
-rw-r--r-- 1 mfs mfs       8 Nov 23 07:46 metadata.mfs.empty
-rw-r----- 1 mfs mfs 3672832 Apr  9 08:28 stats.mfs

如上面代码框,当我们开启moosefs-master服务后,服务会读取metadata.mfs并将其变为metadata.mfs.back,停掉moosefs-master服务,又会变成metadata.mfs,metadata.mfs是存放元数据的文件

接下来开启mfsmaster

[root@mfs1 ~]# systemctl start moosefs-master

2.mfs2节点

[root@mfs2 3.0.103]# yum install moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm -y

建立数据存储用的文件夹

[root@mfs2 3.0.103]# mkdir /mnt/chunk1
[root@mfs2 3.0.103]# ll -d /mnt/chunk1/
drwxr-xr-x 2 root root 6 Apr  9 08:43 /mnt/chunk1/
[root@mfs2 3.0.103]# chown mfs.mfs /mnt/chunk1/
[root@mfs2 3.0.103]# cd /etc/mfs/
[root@mfs2 mfs]# vim mfshdd.cfg                    ##在这里面写了,数据就会存到这里
/mnt/chunk1                        

接下来开启moosefs-chunkserver

[root@mfs2 mfs]# systemctl start moosefs-chunkserver

文件存储是以块的形式存在的,共256个块,一个块是128m

3.使用cgi-server在web端查看mfs存储

[root@mfs1 ~]# systemctl start moosefs-cgiserv

浏览器访问http://172.25.1.1:9425/mfs.cgi

4.添加mfs3存储节点

[root@mfs3 3.0.103]# yum install moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm -y
[root@mfs3 3.0.103]# mkdir /mnt/chunk2
[root@mfs3 3.0.103]# vim /etc/mfs/mfshdd.cfg
/mnt/chunk2
[root@mfs3 3.0.103]# chown mfs.mfs /mnt/chunk2
[root@mfs3 3.0.103]# systemctl start moosefs-chunkserver

5.客户端应用

[root@nelws 3.0.103]# yum install moosefs-client-3.0.103-1.rhsystemd.x86_64.rpm -y

新建挂载mfs存储

[root@nelws ~]# mkdir /mnt/mfs
[root@nelws ~]# vim /etc/hosts
172.25.1.1  mfs1 mfsmaster
172.25.1.2  mfs2
172.25.1.3  mfs3
172.25.1.4  mfs4
[root@nelws ~]# cd /etc/mfs/
[root@nelws mfs]# vim mfsmount.cfg                ##挂载mfs到/mnt/mfs下
/mnt/mfs
[root@nelws mfs]# mfsmount

客户端基本操作

[root@nelws mfs]# mkdir dir1
[root@nelws mfs]# mfsgetgoal dir1                    ##显示为2意味着数据是在两个节点存储的
dir1: 2
[root@nelws mfs]# mkdir dir2
[root@nelws mfs]# mfsgetgoal dir2
dir2: 2

我们也可以设置某个文件夹只在一个节点存储数据

[root@nelws mfs]# mfssetgoal -r 1 dir1/
dir1/:
 inodes with goal changed:                       1
 inodes with goal not changed:                   0
 inodes with permission denied:                  0
[root@nelws mfs]# mfsgetgoal dir1
dir1: 1

我们尝试这拷贝数据进来,然后查看是存储在哪个节点

[root@nelws mfs]# cp /etc/passwd dir1/
[root@nelws mfs]# cp /etc/fstab dir2/
[root@nelws mfs]# mfsfileinfo dir1/passwd 
dir1/passwd:
	chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
		copy 1: 172.25.1.3:9422 (status:VALID)
[root@nelws mfs]# mfsfileinfo dir2/fstab 
dir2/fstab:
	chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
		copy 1: 172.25.1.2:9422 (status:VALID)
		copy 2: 172.25.1.3:9422 (status:VALID)

如上,dir1下的文件只存储在mfs3节点,dir2下的文件储存在mfs2和mfs3节点,此时我们停掉mfs3会怎么样呢?

[root@mfs3 3.0.103]# systemctl stop moosefs-chunkserver

此时passwd文件就无法查看了,而fstab还可以查看,这就是分布式的好处,到这里,一个简单的mfs就部署好了

三、mfs回收站机制

当我们删除了一个文件,又想恢复怎么办呢?

[root@nelws mfs]# mfsgettrashtime .                ##一个文件默认的缓存是24天
.: 86400

这里模拟删除了passwd

[root@nelws mfs]# mkdir /mnt/mfsmeta
[root@nelws mfs]# mfsmount -m /mnt/mfsmeta/ -H mfsmaster
mfsmaster accepted connection with parameters: read-write,restricted_ip
[root@nelws mfs]# cd /mnt/mfsmeta/trash/
[root@nelws trash]# find -name *passwd*
./004/00000004|dir1|passwd
[root@nelws trash]# mv 00000004\|dir1\|passwd undel/
[root@nelws trash]# ll /mnt/mfs/dir1/
total 3
-rw-r--r-- 1 root root 2309 Apr  9 09:41 passwd

如上图,这样就可以找回

只要master节点不关掉,数据不会丢失,master节点宕掉后会发生数据丢失,所以我们需要做双机热备

四、双机热备高可用

这里为了实验更好的开展,修改了master的启动脚本

[root@mfs1 ~]# vim /usr/lib/systemd/system/moosefs-master.service
[Unit]
Description=MooseFS Master server
Wants=network-online.target
After=network.target network-online.target

[Service]
Type=forking
ExecStart=/usr/sbin/mfsmaster -a            ##这里改为-a,master非正常关闭时就可以直接开启了
ExecStop=/usr/sbin/mfsmaster stop
ExecReload=/usr/sbin/mfsmaster reload
PIDFile=/var/lib/mfs/.mfsmaster.lock
TimeoutStopSec=1800
TimeoutStartSec=1800
Restart=no

[Install]
WantedBy=multi-user.target

[root@mfs1 ~]# systemctl daemon-reload            ##重新加载脚本

 还有就是mfs4的解析一定要做好,也要安装好moosefs-master软件

1.配置yum源(对mfs1和mfs4都要进行配置)

[root@mfs1 ~]# vim /etc/yum.repos.d/yum.repo         ##添加以下内容
[HighAvailability]
name=HighAvailability
baseurl=http://172.25.1.254/rhel7.3/addons/HighAvailability
gpgcheck=0

[ResilientStorage]
name=ResilientStorage
baseurl=http://172.25.1.254/rhel7.3/addons/ResilientStorage
gpgcheck=0

2.安装热备软件(对mfs1和mfs4都要进行配置)

[root@server1 yum.repos.d]# yum install -y pacemaker corosync
[root@server1 yum.repos.d]# yum install pcs -y

3.server1和server4做免密

先做ssh免密

[root@mfs1 ~]# ssh-keygen                         ##如果已经有密钥,可以跳过这一步
[root@mfs1 ~]# ssh-copy-id mfs4
[root@mfs1 ~]# ssh-copy-id mfs1

开启pcsd服务(mfs4也要做),修改用户名密码(mfs4也要做)

[root@mfs1 ~]# systemctl start pcsd
[root@mfs1 ~]# systemctl enable pcsd
[root@mfs1 ~]# passwd hacluster

创建集群并启动

认证

[root@mfs1 ~]# pcs cluster auth mfs1 mfs4
Username: hacluster
Password: 
mfs4: Authorized
mfs1: Authorized

pcs启动命令

[root@mfs1 ~]# pcs cluster setup --name mycluster mfs1 mfs4        ##设置集群
Destroying cluster on nodes: mfs1, mfs4...
mfs1: Stopping Cluster (pacemaker)...
mfs4: Stopping Cluster (pacemaker)...
mfs4: Successfully destroyed cluster
mfs1: Successfully destroyed cluster

Sending cluster config files to the nodes...
mfs1: Succeeded
mfs4: Succeeded

Synchronizing pcsd certificates on nodes mfs1, mfs4...
mfs4: Success
mfs1: Success

Restarting pcsd on the nodes in order to reload the certificates...
mfs4: Success
mfs1: Success
[root@mfs1 ~]# pcs cluster start --all                            ##开启集群内所有结点
mfs1: Starting Cluster...
mfs4: Starting Cluster...
[root@mfs1 ~]# pcs status nodes                                   ##显示所有集群集节点
Pacemaker Nodes:
 Online: mfs1 mfs4
 Standby:
 Maintenance:
 Offline:
Pacemaker Remote Nodes:
 Online:
 Standby:
 Maintenance:
 Offline:

[root@mfs1 ~]# pcs status corosync                                ##查看corosync状态
Membership information
----------------------
    Nodeid      Votes Name
         1          1 mfs1
         2          1 mfs4 (local)

查看是否有错误,注意这里mfs1和mfs4都需要检查一下是不是有下面的错误

[root@mfs1 ~]# journalctl | grep -i error            ##过滤日志中的错误
[root@mfs1 ~]# crm_verify -L -V                      ##根据错误提示,运行这个

   error: unpack_resources:	Resource start-up disabled since no STONITH resources have been defined
   error: unpack_resources:	Either configure some or disable STONITH with the stonith-enabled option
   error: unpack_resources:	NOTE: Clusters with shared data need STONITH to ensure data integrity
Errors found during check: config not valid
[root@mfs1 ~]# pcs property set stonith-enabled=false           ##修正错误
[root@mfs1 ~]# crm_verify -L -V                                 ##再次查看
[root@mfs1 ~]#                                                  ##没有错误了

4.添加资源

查看资源:

pcs resource standards
pcs resource providers
pcs resource agents ocf:heartbeat

我们可以使用crm_mon命令进行监控,下图为监控界面,没有添加资源的监控图

接下来添加资源

[root@mfs1 3.0.103]# pcs resource create vip ocf:heartbeat:IPaddr2 ip=172.25.1.100 cidr_netmask=32 op monitor interval=30s

查看资源

现在在看crm_mon监控

vip有了

5.进行测试

此时我的vip是在mfs1上面的

接下来我故意停掉mfs1

[root@mfs1 3.0.103]# pcs cluster stop mfs1
mfs1: Stopping Cluster (pacemaker)...
mfs1: Stopping Cluster (corosync)...

会发现监控

vip成功的漂移到了mfs4,实现了高可用,mfs存储依旧是在线的

当我们把mfs1节点重新开启的时候,vip也不会漂移回mfs1

五、iscsi存储方式的mfs

1.清理之前的环境

客户端

[root@nelws ~]# umount /mnt/mfsmeta

master端

[root@mfs4 pcsd]# systemctl stop moosefs-master

chunkserver端

[root@mfs2 ~]# systemctl stop moosefs-chunkserver
[root@mfs3 ~]# systemctl stop moosefs-chunkserver

2.在所有主机添加解析

[root@mfs1 3.0.103]# vim /etc/hosts                ##将mfs的解析单独列出
172.25.1.1 mfs1 
172.25.1.100 mfsmaster
172.25.1.2 mfs2
172.25.1.3 mfs3
172.25.1.4 mfs4

然后通过scp的方式传到剩余的主机

3.建立iscsi存储

首先在mfs2上添加虚拟硬盘

查看硬盘

[root@mfs2 ~]# fdisk -l
Disk /dev/vda: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

安装软件配置存储

[root@mfs2 ~]# yum install -y targetcli
[root@mfs2 ~]# targetcli
/> ls
o- / .................................................................... [...]
  o- backstores ......................................................... [...]
  | o- block ............................................. [Storage Objects: 0]
  | o- fileio ............................................ [Storage Objects: 0]
  | o- pscsi ............................................. [Storage Objects: 0]
  | o- ramdisk ........................................... [Storage Objects: 0]
  o- iscsi ....................................................... [Targets: 0]
  o- loopback .................................................... [Targets: 0]
/> cd backstores/block 
/backstores/block> create my_disk1 /dev/vda
Created block storage object my_disk1 using /dev/vda.
/backstores/block> cd /iscsi 
/iscsi> create iqn.2019-04.com.example:mfs2
Created target iqn.2019-04.com.example:mfs2.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
/iscsi> cd iqn.2019-04.com.example:mfs2/tpg1/luns 
/iscsi/iqn.20...fs2/tpg1/luns> create /backstores/block/my_disk1
/iscsi/iqn.20...fs2/tpg1/luns> cd ../acls 
/iscsi/iqn.20...fs2/tpg1/acls> create iqn.2019-04.com.example:client
Created Node ACL for iqn.2019-04.com.example:client
Created mapped LUN 0.

在mfs1端

[root@mfs1 3.0.103]# yum install -y iscsi-*
[root@mfs1 3.0.103]# vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2019-04.com.example:client
[root@mfs1 ~]# iscsiadm -m discovery -t st -p 172.25.1.2
172.25.1.2:3260,1 iqn.2019-04.com.example:mfs2
[root@mfs1 ~]# iscsiadm -m node -l
Logging in to [iface: default, target: iqn.2019-04.com.example:mfs2, portal: 172.25.1.2,3260] (multiple)
Login to [iface: default, target: iqn.2019-04.com.example:mfs2, portal: 172.25.1.2,3260] successful.

建立分区并格式化

[root@mfs1 ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x25e0b294.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): 
Using default response p
Partition number (1-4, default 1): 
First sector (2048-41943039, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): 
Using default value 41943039
Partition 1 of type Linux and of size 20 GiB is set

Command (m for help): p

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x25e0b294

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    41943039    20970496   83  Linux

Command (m for help): wq
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.[root@mfs1 ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=1310656 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5242624, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0


挂载

[root@mfs1 ~]# mount /dev/sdb1 /mnt/
[root@mfs1 ~]# cd /var/lib/mfs/
[root@mfs1 mfs]# cp -p * /mnt
[root@mfs1 mfs]# cd /mnt
[root@mfs1 mnt]# chown mfs.mfs /mnt/
[root@mfs1 mnt]# cd
[root@mfs1 ~]# umount /mnt
[root@mfs1 ~]# mount /dev/sdb1 /var/lib/mfs
[root@mfs1 ~]# systemctl start moosefs-master
[root@mfs1 ~]# systemctl stop moosefs-master

在mfs4端也挂载

[root@mfs4 pcsd]# yum install -y iscsi-*
[root@mfs4 pcsd]# vim /etc/iscsi/initiatorname.iscsi 
InitiatorName=iqn.2019-04.com.example:client
[root@mfs4 pcsd]# vim /etc/iscsi/initiatorname.iscsi 
[root@mfs4 pcsd]# iscsiadm -m discovery -t st -p 172.25.1.2
172.25.1.2:3260,1 iqn.2019-04.com.example:mfs2
[root@mfs4 pcsd]# iscsiadm -m node -l
Logging in to [iface: default, target: iqn.2019-04.com.example:mfs2, portal: 172.25.1.2,3260] (multiple)
Login to [iface: default, target: iqn.2019-04.com.example:mfs2, portal: 172.25.1.2,3260] successful.
[root@mfs4 pcsd]# mount /dev/sdb1 /var/lib/mfs
[root@mfs4 pcsd]# systemctl start moosefs-master
[root@mfs4 pcsd]# systemctl stop moosefs-master

再次创建资源,注意要在mfsmaster上

[root@mfs4 pcsd]# pcs  resource create mfsdata  ocf:heartbeat:Filesystem device=/dev/sdb1 directory=/var/lib/mfs fstype=xfs op monitor interval=30s

[root@mfs4 pcsd]# pcs resource create mfsd systemd:moosefs-master op monitor interval=1min

[root@mfs4 pcsd]# pcs resource group add mfsgroup vip mfsdata mfsd

4.测试

我们停掉mfs4,来测试

[root@mfs4 pcsd]# pcs cluster stop mfs4
mfs4: Stopping Cluster (pacemaker)...
mfs4: Stopping Cluster (corosync)...

查看监控

六、fence

配置fence是为了防止脑裂情况的出现

1.server1,server4安装fence-virt

[root@mfs1 3.0.103]# yum install -y  fence-virt
[root@mfs1 3.0.103]# pcs stonith list
fence_virt - Fence agent for virtual machines
fence_xvm - Fence agent for virtual machines

2.客户端安装 fence-virtd,并做配置

[root@nelws ~]# yum install -y  fence-virtd
[root@nelws ~]# mkdir /etc/cluster
[root@nelws ~]# cd /etc/cluster
[root@nelws cluster]# fence_virtd -c
Interface [virbr0]: br0       ##注意br0需要修改,其余回车即可
[root@nelws cluster]# dd if=/dev/urandom of=fence_xvm.key bs=128 count=1
1+0 records in
1+0 records out
128 bytes (128 B) copied, 0.000109645 s, 1.2 MB/s
[root@nelws cluster]# ls
fence_xvm.key
[root@nelws cluster]# scp fence_xvm.key mfs1:
[root@nelws cluster]# scp fence_xvm.key mfs4:
[root@nelws cluster]# systemctl start fence_virtd        ##死活起不来

这里我遇到了一个问题就是我无论如何都启动不起来fence_virtd,后来发现是因为fence组件缺失

[root@nelws cluster]# yum install fence-virtd-libvirt
[root@nelws cluster]# yum install fence-virtd-multicast -y
[root@nelws cluster]# fence_virtd -c
[root@nelws cluster]# systemctl start fence_virtd

 

ok了

在mfs1上继续进行配置策略

未完待续

猜你喜欢

转载自blog.csdn.net/weixin_40543283/article/details/89159626