MooseFS是一种分布式文件系统,MooseFS文件系统结构包括以下四种角色:
MFS读数据的处理过程
1.客户端向元数据服务器发出读请求
2 .元数据服务器把所需数据存放的位置(Chunk Server的IP地址和Chunk编号)告知客户端
3 .客户端向已知的Chunk Server请求发送数据
4.Chunk Server向客户端发送数据
MFS写数据的处理过程
1.客户端向元数据服务器发送写入请求
2. 元数据服务器与Chunk Server进行交互,但元数据服务器只在某些服务器创建新的分块Chunks,创建成功后由Chunk Servers告知元数据服务器操作成功
3. 元数据服务器告知客户端,可以在哪个Chunk Server的哪些Chunks写入数据
4. 客户端向指定的Chunk Server写入数据
5. 该Chunk Server与其他Chunk Server进行数据同步,同步成功后Chunk Server告知客户端数据写入成功
6. 客户端告知元数据服务器本次写入完毕
主机 | ip | 节点 |
---|---|---|
server1 | 172.25.26.1 | master(主) |
server2 | 172.25.26.2 | 存储节点1 |
server3 | 172.25.26.3 | 存储节点2 |
server4 | 172.25.26.4 | master(被) |
foundation26 | 172.25.26.250 | 客户端 |
1.安装需要的软件
[root@server1 3.0.103]# yum install -y moosefs-master-3.0.103-1.rhsystemd.x86_64.rpm \
moosefs-cli-3.0.103-1.rhsystemd.x86_64.rpm \
moosefs-cgiserv-3.0.103-1.rhsystemd.x86_64.rpm \
moosefs-cgi-3.0.103-1.rhsystemd.x86_64.rpm
获取这些软件,安装,
2.启动moosefs-master服务,做本地解析
[root@server1 mfs]# systemctl start moosefs-master
[root@server1 mfs]# netstat -antlp
[root@server1 mfs]# systemctl start moosefs-cgiserv.service
[root@server1 mfs]# vim /etc/hosts
172.25.26.1 server1 mfsmaster
加入mfsmaster解析。
之后在浏览器进行测试
在浏览器输入ip:9425端口,这样,在master的配置就完成了。
1.安装moosefs-chunkserver
[root@server2 ~]# yum install -y moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm
2.添加硬盘,作为存储节点
[root@server2 ~]# 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@server2 ~]# fdisk /dev/vda
[root@server2 ~]# fdisk -l
[root@server2 ~]# mkfs.xfs /dev/vda1
格式化。
3.挂载文件系统
[root@server2 mnt]# vim /etc/mfs/mfshdd.cfg
[root@server2 ~]# mount /dev/vda1 /mnt/chunk1/
[root@server2 chunk1]# chown mfs.mfs /mnt/chunk1/
将文件系统挂在/mnt/chunk1下,并且修改目录的所属组和所有者为mfs。
进入目录后在里面存些数据,开启 moosefs-chunkserver服务。
[root@server2 chunk1]# cp /etc/* .
[root@server2 chunk1]# systemctl start moosefs-chunkserver
创建的这个文件系统现在可以在浏览器中显示了。
现在已经创建好一个存储节点,在server3上创建节点时的步骤也完全一样,这里不再类述。
3.配置客户端
1.安装moosefs-client
[root@foundation26 3.0.103]# yum install -y moosefs-client-3.0.103-1.rhsystemd.x86_64.rpm
**2.修改文件,设置文件目录**
[root@foundation26 3.0.103]# vim /etc/mfs/mfsmount.cfg
/mnt/mfs ##在最后一行加入
[root@foundation26 3.0.103]# vim /etc/hosts
172.25.26.1 server1 mfsmaster
同样的,要做master的本地解析。
3.查看目录
[root@foundation26 mfs]# mfsmount
mfsmaster:9421已经挂载到了/mnt/mfs目录。
4.在/mnt/mfs下创建目录,进行测试
[root@foundation26 mfs]# mkdir dir1
[root@foundation26 mfs]# mkdir dir2
[root@foundation26 mfs]# mfsgetgoal dir1/
dir1/: 2
[root@foundation26 mfs]# mfsgetgoal dir2/
dir2/: 2
在目录中写文件时,会在两个节点都进行保存
[root@foundation26 mfs]# ls
dir1 dir2
[root@foundation26 mfs]# mfssetgoal -r 1 dir1/
dir1/:
inodes with goal changed: 1
inodes with goal not changed: 0
inodes with permission denied: 0
[root@foundation26 mfs]# mfsgetgoal dir1/
dir1/: 1
设置dir1目录在存储时只在一个节点上保存数据。
当在dir1上存文件时,保存了一个,而dir2保存了两份。
在往目录中存大文件时,是分块存储的,文件写入dir1内在存储节点存分了4块,每一块是64M,这里存了200M的文件所以分为了4块。在dir2中因为在两个节点都有一份,所以有8份,这样的好处是,当某一个存储节点挂了,还可以保存数据的完整性。
[root@server2 ~]# systemctl stop moosefs-chunkserver.service
关闭一个存储节点。
在客户端查看,dir2目录的数据完整,dir1的数据已经不完整了。
如果不小心删除了目录中的数据,该怎么恢复呢?
模拟删除数据。
[root@foundation26 dir1]# cd /mnt/mfsmeta/
[root@foundation26 mfsmeta]# ls
[root@foundation26 mfsmeta]# mfsmount -m /mnt/mfsmeta/
mfsmaster accepted connection with parameters: read-write,restricted_ip
1.配置高级yum源
[root@server1 ~]# vim /etc/yum.repos.d/rhel7.3.repo
[rhel7.3]
name=rhel7.3
baseurl=http://172.25.26.250/rhel7.3
gpgcheck=0
[HighAvailability]
name=HighAvailability
baseurl=http://172.25.26.250/rhel7.3/addons/HighAvailability
gpgcheck=0
[ResilientStorage]
name=ResilientStorage
baseurl=http://172.25.26.250/rhel7.3/addons/ResilientStorage
gpgcheck=0
[root@server1 ~]# yum reppolist
2.安装软件
[root@server1 ~]# yum install -y pacemaker corosync pcs
3.设置ssh免密
[root@server1 ~]# ssh-keygen
[root@server1 ~]# ssh-copy-id server4
给server4发送密钥。
[root@server1 ~]# systemctl start pcsd
[root@server1 ~]# systemctl enable pcsd.service
开启服务。
[root@server1 ~]# passwd hacluster
同样,配置高级yum源,下载软件。
[root@server4 3.0.103]# yum install -y pacemaker corosync pcs
[root@server4 3.0.103]# systemctl start pcsd
[root@server4 3.0.103]# systemctl enable pcsd
安装后开启服务。
[root@server4 3.0.103]# rpm -ivh moosefs-master-3.0.103-1.rhsystemd.x86_64.rpm
[root@server4 ~]# vim /usr/lib/systemd/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
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@server4 3.0.103]# systemctl daemon-reload
[root@server4 3.0.103]# passwd hacluster
[root@server4 3.0.103]# pcs cluster auth server1 server4
[root@server4 3.0.103]# pcs cluster setup --name mycluster server1 server4
[root@server4 3.0.103]# pcs cluster start --all
[root@server4 3.0.103]# pcs status nodes
[root@server1 ~]# corosync-cfgtool -s
[root@server1 ~]# pcs status corosync
[root@server1 ~]# pcs property set stonith-enabled=false
[root@server1 ~]# crm_verify -L -V
[root@server1 ~]# pcs resource create vip ocf:heartbeat:IPaddr2 ip=172.25.26.126 cidr_netmask=32 op monitor interval=30s
[root@server1 ~]# crm_mon
查看状态。
关闭server1的pcs cluster。
在server4中查看,vip漂移成功。
给所有主机配置本地解析
[root@server1 ~]# vim /etc/hosts
172.25.26.1 server1 mfsmaster
172.25.26.2 server2
172.25.26.3 server3
172.25.26.4 server4
关闭服务
[root@server1 ~]# systemctl stop moosefs-master
[root@server2 ~]# systemctl stop moosefs-chunkserver
[root@server3 ~]# systemctl stop moosefs-chunkserver
在server2添加一块硬盘,做共享存储
[root@server2 ~]# fdisk -l
[root@server2 ~]# yum install -y targetcli
[root@server2 ~]# systemctl start target
创建共享磁盘
[root@server2 ~]# targetcli
Warning: Could not load preferences file /root/.targetcli/prefs.bin.
targetcli shell version 2.1.fb41
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
/> cd backstores/block
/backstores/block> create my_disk1 /dev/vda
Created block storage object my_disk1 using /dev/vda.
/backstores/block> cd ..
/backstores> cd ..
/> cd iscsi
/iscsi> create iqn.2019-05.com.example:server2
Created target iqn.2019-05.com.example:server2.
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-05.com.example:server2/
/iscsi/iqn.20...ample:server2> cd tpg1/luns
/iscsi/iqn.20...er2/tpg1/luns> create /backstore/block/my_disk1
storage object or path not valid
/iscsi/iqn.20...er2/tpg1/luns> create /backstores/block/my_disk1
Created LUN 0.
/iscsi/iqn.20...er2/tpg1/luns> cd ..
/iscsi/iqn.20...:server2/tpg1> cd acls
/iscsi/iqn.20...er2/tpg1/acls> create iqn.2019-05.com.example:client
Created Node ACL for iqn.2019-05.com.example:client
Created mapped LUN 0.
/iscsi/iqn.20...er2/tpg1/acls> cd
/iscsi/iqn.20...er2/tpg1/acls> cd ..
/iscsi/iqn.20...:server2/tpg1> cd ..
/iscsi/iqn.20...ample:server2> cd ..
/iscsi> cd ..
/> ls
[root@server1 3.0.103]# yum install -y iscsi-*
[root@server1 3.0.103]# vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2019-05.com.example:client
发现设备并登陆。
[root@server1 3.0.103]# iscsiadm -m discovery -t st -p 172.25.26.2
[root@server1 3.0.103]# iscsiadm -m node -l
[root@server1 3.0.103]# fdisk -l
[root@server1 ~]# fdisk /dev/sdb
[root@server1 ~]# mkfs.xfs /dev/sdb1
[root@server1 ~]# mount /dev/sdb1 /mnt
[root@server1 ~]# chown mfs.mfs /mnt
查看是否可以正常使用。
[root@server1 ~]# fdisk -l
在server4:
和server1一样,令server4可以发现共享设备。
[root@server4 ~]# fdisk -l
继续在server1配置:
创建mfs文件系统。
[root@server1 ~]# pcs resource create mfsdata ocf:heartbeat:Filesystem device=/dev/sdb1 directory=/var/lib/mfs fstype=xfs op monitor interval=30s
[root@server1 ~]# pcs resource show
[root@server1 ~]# pcs resource create mfsd systemd:moosefs-master op monitor interval=1min
[root@server4 ~]# crm_mon
[root@server1 ~]# pcs resource group add mfsgroup vip mfsdata mfsd
把vip,mfsdata,mfsd 集中在一个组中
[root@server1 ~]# pcs cluster stop server1