什么是storage class
在moosefs中,storage class允许指定文件的chunks存放在哪些chunkservers上。
storage class使用label进行表达。
为了与早起的版本的goal功能兼容,moosefs 3.0以上会自动在系统中建立1~9 storage class。goal工具将默认在对应的storage class下进行工作。
重新开机后,原本客户端这里就没有内容了,上传到chunkserver
[root@git1 ~]# cd /mnt/mfs
[root@git1 mfs]# ls
data1 data2
[root@git1 mfs]# cd data2/
[root@git1 data2]# ls
重新挂载
数据出现
[root@git1 mfs]# mfsscadmin list
1
2
3
4
5
6
7
8
9
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/75b2fcd9dab7525621e9de48a9cd62e1.png)
什么是label
label是可以被分配给chunkserver的字母(a~z,26个字母可选),每个chunkserver可以被打上多个标签(即标记上多个字母,但最多可以打26个label)
完整的label表达式可以由多个子表达式构成,每个子标签之间用逗号分隔。 每个子表达式特指文件副本的一种存储模式。子表达式可以为星号*或一个label schema。
label schema可以是一个label或由加法、乘法和括号构成的复杂表达式。
==加法是逻辑“或”的含义,即文件的副本可以被存放在任意含有加法元素label的chunkserver上。==例如,一个文件的storage class是a+b+c,那么任何含有a、b或c标签的chunkserver都可以用来存储该文件的副本。
==乘法是逻辑“与”的含义,即文件的副本仅可以存放在包含所有label的chunkserver上。==例如,一个文件的storage class是abc,那么只有当一台chunkserver同时含有abc三个标签时,它才能用于存放该文件的副本。
相同的子表达式可以通过在表达式前加数字的方式来表示,而不用重复显示声明多次。
实验过程
关闭selinux 和firewalld
为了实验效果,应该再多加两台chunkserevr,但是由于硬件原因,这里没有加
之前存储文件时,只控制文件的副本数,没有控制文件存储在那个chunkserver中
存储类的作用:将数据存放在合适的数据节点上
1.在chunkserver上打标签
[root@mfs2 ~]# vim /etc/mfs/mfschunkserver.cfg
[root@mfs2 ~]# systemctl reload moosefs-chunkserver
[root@mfs3 ~]# vim /etc/mfs/mfschunkserver.cfg
[root@mfs3 ~]# systemctl reload moosefs-chunkserver
在客户端创建存储类
2A表示A标签创建两个副本,class2A是存储类的名称
[root@git1 mfs]# cd data2/
[root@git1 data2]# ls
fstab
[root@git1 data2]# mfsgetgoal fstab
fstab: 2
[root@git1 data2]# mfsgetgoal .
.: 2
[root@git1 data2]# mfsfileinfo fstab
fstab:
chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
copy 1: 192.168.122.102:9422 (status:VALID)
copy 2: 192.168.122.103:9422 (status:VALID)
现在设置数据保存在mfs2上
为当前目录添加存储类
[root@git1 data2]# mfssetsclass -r class2A .
.:
inodes with storage class changed: 2
inodes with storage class not changed: 0
inodes with permission denied: 0
-r表示第归
[root@git1 data2]# echo wetsos >> fstab ##触发
[root@git1 data2]# mfsfileinfo fstab
fstab:
chunk 0: 0000000000000002_00000002 / (id:2 ver:2)
copy 1: 192.168.122.102:9422 (status:VALID)
copy 2: 192.168.122.103:9422 (status:VALID)
如果chunkserver是4台,两台A两台B标签的话,此时应该是两台A标签的chunkserevr被选择存储数据,但是由于现在chunkserevr是2台,每个标签只有一台,因此mfs会将数据存储在两个节点,忽略存储类的标签
新建一份大文件:
[root@git1 data2]# mfsfileinfo gibfile
gibfile:
chunk 0: 0000000000000005_00000001 / (id:5 ver:1)
copy 1: 192.168.122.102:9422 (status:VALID)
copy 2: 192.168.122.103:9422 (status:VALID)
chunk 1: 0000000000000006_00000001 / (id:6 ver:1)
copy 1: 192.168.122.102:9422 (status:VALID)
copy 2: 192.168.122.103:9422 (status:VALID)
两份冗余
利用storage class对存储介质,固态盘和机械盘,进行选择和分配。s表示固态盘,h表示机械盘。
[root@mfs2 ~]# vim /etc/mfs/mfschunkserver.cfg
[root@mfs2 ~]# systemctl reload moosefs-chunkserver
[root@mfs3 ~]# vim /etc/mfs/mfschunkserver.cfg
[root@mfs3 ~]# systemctl reload moosefs-chunkserver
测试
[root@git1 mfs]# mfsscadmin create S classS
storage class make classS: ok
[root@git1 mfs]# mfsxchgsclass -r class2A classS data2/ #将存储类改为classS
data2/:
inodes with storage class changed: 3
inodes with storage class not changed: 0
inodes with permission denied: 0
[root@git1 mfs]# cd data2/
[root@git1 data2]# mfsfileinfo fstab #设置了数据的存储介质为固态盘,只能存储在mfs2
fstab:
chunk 0: 0000000000000002_00000002 / (id:2 ver:2)
copy 1: 192.168.122.102:9422 (status:VALID)
数据放两份
[root@git1 data2]# mfsscadmin create AS,BH classASBH
storage class make classASBH: ok
[root@git1 data2]# cd ..
[root@git1 mfs]# mkdir data3
[root@git1 mfs]# cd data3/
[root@git1 data3]# cp /etc/passwd .
[root@git1 data3]# mfsfileinfo passwd
passwd:
chunk 0: 0000000000000007_00000001 / (id:7 ver:1)
copy 1: 192.168.122.102:9422 (status:VALID)
copy 2: 192.168.122.103:9422 (status:VALID)
打包和移动数据