MFS(分布式文件系统)
MooseFS是一种分布式文件系统,它把数据分散存放在多个物理服务器上,前面只放置一台负责“调度”元数据服务器,最终呈现给用户的则是一个统一的资源。相对于集中式文件系统来说,分布式系统拥有更好的扩展性、稳定性、数据的安全性。
实验环境
3台全新的虚拟机
(单体磁盘容量不够(mysql),所以后端会挂一个分布式文件系统)
MFS:一般的分布式文件系统
HADOOP:海量的文件系统(大数据平台)
官网:moosefs.com
master上安装:cgi(接口,管理mfs),cli-命令行操作mgs
(下载的是systemd)
master只负责存储元数据(文件多大,名字叫什么,大的文件被分成多少个块进行存储,多少个副本)
块服务器:文件多大,存储为多少个块(cuhnkserver)
[root@foundation21 3.0.115]# yum install -y moosefs-client-3.0.115-1.rhsystemd.x86_64.rpm
[root@server11 3.0.115]# yum install -y moosefs-cgi-3.0.115-1.rhsystemd.x86_64.rpm
[root@server11 3.0.115]# yum install -y moosefs-cgiserv-3.0.115-1.rhsystemd.x86_64.rpm
[root@server11 3.0.115]# yum install -y moosefs-master-3.0.115-1.rhsystemd.x86_64.rpm
[root@server11 3.0.115]# yum install -y moosefs-cli-3.0.115-1.rhsystemd.x86_64.rpm
[root@server12 ~]# yum install -y moosefs-chunkserver-3.0.115-1.rhsystemd.x86_64.rpm
[root@server13 ~]# yum install -y moosefs-chunkserver-3.0.115-1.rhsystemd.x86_64.rpm
[root@server14 ~]# yum install -y moosefs-chunkserver-3.0.115-1.rhsystemd.x86_64.rpm
MFS的部署和配置
mfs master
- 在master端只会用到
mfsmaster.cfg
文件
[root@server11 ~]# cd /etc/mfs/
[root@server11 mfs]# ls
mfsexports.cfg mfsmaster.cfg mfstopology.cfg
mfsexports.cfg.sample mfsmaster.cfg.sample mfstopology.cfg.sample
[root@server11 mfs]# vim mfsmaster.cfg
- 写入解析
[root@server11 mfs]# vim /etc/hosts
172.25.21.11 server11 mfsmaster
- 开启服务,可以查看到开了4个端口
[root@server11 mfs]# systemctl start moosefs-master
[root@server11 mfs]# systemctl start moosefs-cgiserv.service
[root@server11 mfs]# netstat -antpl
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:9419 0.0.0.0:* LISTEN 4491/mfsmaster
tcp 0 0 0.0.0.0:9420 0.0.0.0:* LISTEN 4491/mfsmaster
tcp 0 0 0.0.0.0:9421 0.0.0.0:* LISTEN 4491/mfsmaster
tcp 0 0 0.0.0.0:9425 0.0.0.0:* LISTEN 14512/python2
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 3485/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 3734/master
tcp 0 0 172.25.21.11:9425 172.25.21.250:56438 TIME_WAIT -
tcp 0 0 172.25.21.11:32984 172.25.21.11:9421 TIME_WAIT -
tcp 0 0 172.25.21.11:9425 172.25.21.250:56444 ESTABLISHED 14512/python2
tcp 0 0 172.25.21.11:9425 172.25.21.250:56442 ESTABLISHED 14512/python2
tcp 0 0 172.25.21.11:9425 172.25.21.250:56436 TIME_WAIT -
tcp 0 0 172.25.21.11:22 172.25.21.250:38842 ESTABLISHED 4232/sshd: root@pts
tcp6 0 0 :::22 :::* LISTEN 3485/sshd
tcp6 0 0 ::1:25 :::* LISTEN 3734/master
disk:后端chunkserver的磁盘
exports:输出
mount:后端的挂载
chunk server1
[root@server12 ~]# yum install -y moosefs-chunkserver-3.0.115-1.rhsystemd.x86_64.rpm
- 将
mfsmaster
写入解析
[root@server12 ~]# vim /etc/hosts
172.25.21.11 server11 mfsmaster
-
生产环境下,一般会数据会放在独立的硬盘上
添加虚拟磁盘10G
(服务器支持热插拔,服务器用的是sas硬盘,和普通的sata硬盘不太一样,服务器可以不用重启)
-
新建一个新的主分区
[root@server12 ~]# fdisk -l
[root@server12 ~]# fdisk /dev/vdb
- 格式化
[root@server12 ~]# mkfs.xfs /dev/vdb1
meta-data=/dev/vdb1 isize=512 agcount=4, agsize=655296 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=2621184, 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
- 块存储是会被向里面放数据的,所以,不能将新划分的磁盘分区挂载到var下的数据目录
需要自己创建一个挂载点
[root@server12 ~]# mkdir /mnt/chunk1
- 设定开机自动挂载
mount -a
测试
注意:
Q:这里为什么使用的是UUID,而不是设备名称
A:有时,我们会插很多块硬盘,操作系统会根据谁最先加载,给谁分配名称,因此设备名称是会发生改变的
[root@server12 ~]# blkid
/dev/vda1: UUID="4d8980e8-3bfd-4f1c-8c4a-f564469c0c0f" TYPE="xfs"
/dev/vda2: UUID="lMYPbH-lRJR-fqKA-Wqdn-0va1-Pype-MYm09f" TYPE="LVM2_member"
/dev/mapper/rhel-root: UUID="162c3806-a9cf-42e0-9781-37598a84ad31" TYPE="xfs"
/dev/mapper/rhel-swap: UUID="d6202848-a5fa-4955-bebe-62f123472ef0" TYPE="swap"
/dev/vdb1: UUID="81542575-a116-44bf-92e5-739065300917" TYPE="xfs"
[root@server12 ~]# vim /etc/fstab
UUID="81542575-a116-44bf-92e5-739065300917" /mnt/chunk1 xfs defaults 0 0
[root@server12 ~]# mount -a
[root@server12 ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/rhel-root 17811456 1161744 16649712 7% /
devtmpfs 1011448 0 1011448 0% /dev
tmpfs 1023468 0 1023468 0% /dev/shm
tmpfs 1023468 17036 1006432 2% /run
tmpfs 1023468 0 1023468 0% /sys/fs/cgroup
/dev/vda1 1038336 135076 903260 14% /boot
tmpfs 204696 0 204696 0% /run/user/0
/dev/vdb1 10474496 32992 10441504 1% /mnt/chunk1
- 在配置文件中写入设备存储点,并且该挂载点一定要有mfs的写入权限
[root@server12 ~]# vim /etc/mfs/mfshdd.cfg
/mnt/chunk1
- chown 改权限属性
[root@server12 ~]# chown mfs.mfs /mnt/chunk1/
systemd
启动服务
先挂载设备,再去改权限,否则,systemd启动会报错
[root@server12 ~]# systemctl start moosefs-chunkserver
- 查看端口的连接情况
start chunkserver:9422端口
[root@server12 ~]# netstat -antpl | grep mfs
tcp 0 0 0.0.0.0:9422 0.0.0.0:* LISTEN 14350/mfschunkserve
tcp 0 0 172.25.21.12:49680 172.25.21.11:9420 ESTABLISHED 14350/mfschunkserve
chunk server2
和chunk server1的操作一致
mfs client
我选取宿主主机作为客户端
[root@foundation21 3.0.115]# yum install -y moosefs-client-3.0.115-1.rhsystemd.x86_64.rpm
- 写入
mfsmaster
到本地解析文件
[root@foundation21 3.0.115]# vim /etc/hosts
172.25.21.11 server11 mfsmaster
- 在配置文件中写入设备存储点
[root@foundation21 3.0.115]# vim /etc/mfs/mfsmount.cfg
/mnt/mfs
- 创建一个空的目录
/mnt/mfs
,作为数据目录
[root@foundation21 mnt]# mkdir /mnt/mfs
- 挂载成功
[root@foundation21 mnt]# mfsmount
mfsmaster accepted connection with parameters: read-write,restricted_ip,admin ; root mapped to root:root
[root@foundation21 mfs]# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 4006336 0 4006336 0% /dev
tmpfs 4022240 28644 3993596 1% /dev/shm
tmpfs 4022240 10032 4012208 1% /run
tmpfs 4022240 0 4022240 0% /sys/fs/cgroup
/dev/mapper/rhel_foundation21-root 225092216 59598588 165493628 27% /
/dev/sda1 1038336 683540 354796 66% /boot
tmpfs 804448 28 804420 1% /run/user/1000
/dev/sdb1 30703584 15119616 15583968 50% /run/media/kiosk/OUTLOOK
/dev/loop0 4391278 4391278 0 100% /var/www/html/westos
mfsmaster:9421 20948992 590592 20358400 3% /mnt/mfs
[root@foundation21 mfs]# mount | grep mfs
mfsmaster:9421 on /mnt/mfs type fuse.mfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)
- 查看端口连接情况
[root@foundation21 mnt]# netstat -antpl | grep mfs
tcp 0 0 127.0.0.1:42581 0.0.0.0:* LISTEN 5550/mfsmount (moun
tcp 0 0 172.25.21.250:58114 172.25.21.11:9421 ESTABLISHED 5550/mfsmount (moun
metaloggers:元记录器
安装之后,直接启动,作为冷备,周期化的从master端,同步元数据的变化
当master挂了之后,可以从metaloggers,成为master(疑惑)
MFS的高级特性
冗余goal设置
- 在
client
客户端的数据目录/mnt/mfs
下创建2个临时的目录
[root@foundation21 mfs]# mkdir dir1
[root@foundation21 mfs]# mkdir dir2
- 使用
mfsgetgoal
命令查看该目录副本数量
目标(goal)是指文件被复制的份数
默认创建的目录可以存放的副本都为2
因为当前只有2个chunkserver
(后端存储)
dir1:2
的2
表示在这个目录存放的文件,会自动保存2份
[root@foundation21 mfs]# mfsgetgoal dir1
dir1: 2
[root@foundation21 mfs]# mfsgetgoal dir2
dir2: 2
mfssetgoal
设定/mnt/mfs/dir1
的副本数量为1
[root@foundation21 mfs]# mfssetgoal -r 1 dir1
dir1:
inodes with goal changed: 1
inodes with goal not changed: 0
inodes with permission denied: 0
[root@foundation21 mfs]# mfsgetgoal dir1
dir1: 1
[root@foundation21 mfs]# mfsgetgoal dir2
dir2: 2
- 复制文件到这2个目录中
[root@foundation21 mfs]# cp /etc/passwd dir1
[root@foundation21 mfs]# cp /etc/fstab dir2
- 进入dir1和dir2
使用mfsfileinfo
查看文件信息,发现该文件的副本被存储在server2
或者server3上
dir1中的文件passwd只备份了一份,在chunk server2上(server13上)
[root@foundation21 mfs]# cd dir1
[root@foundation21 dir1]# mfsfileinfo passwd
passwd:
chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
copy 1: 172.25.21.13:9422 (status:VALID)
客户端从master查询chunksever(文件)存储在哪个数据块服务器上
mfsfileinfo的信息是master返回给客户端的
之后,客户端可以直接从相应的chunkserver上取数据
dir2中的文件fstab备份了2份,分别在chunk server1和chunk server2上
[root@foundation21 mfs]# cd dir2
[root@foundation21 dir2]# mfsfileinfo fstab
fstab:
chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
copy 1: 172.25.21.12:9422 (status:VALID)
copy 2: 172.25.21.13:9422 (status:VALID)
现在模拟故障,
将chunk server2(server3)
宕掉,
此时,dir1中的文件却无法访问
dir2中的文件还有一个副本
[root@server13 ~]# systemctl stop moosefs-chunkserver.service
[root@foundation21 dir1]# mfsfileinfo passwd
passwd:
chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
no valid copies !!!
[root@foundation21 dir2]# mfsfileinfo fstab
fstab:
chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
copy 1: 172.25.21.12:9422 (status:VALID)
大文件被切片
写的情况:见截图
master会在后端创建新的chunkserver,之后,master告诉客户端哪个cunkserver
然后,客户端写入数据,cuhnkserver根据chunk的块,生成相应数量的副本
一般大文件会被分割,切片
- 生成大文件(100M)
[root@foundation21 dir2]# dd if=/dev/zero of=bigfile bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.413933 s, 253 MB/s
- mfs的最大文件系统是64字节
因此,大文件bigfile会被切片(会被2个chunk server 存储,一个chunk最大是64字节,每个块被分配到2个节点上)
还要注意的是,bigfile是在dir2下的,
对于dir2,我设置它的副本数为2,因此,拷贝bigfile时,每个chunk中都有2份副本;
[root@foundation21 dir2]# mfsfileinfo bigfile
bigfile:
chunk 0: 0000000000000003_00000001 / (id:3 ver:1)
copy 1: 172.25.21.12:9422 (status:VALID)
copy 2: 172.25.21.13:9422 (status:VALID)
chunk 1: 0000000000000004_00000001 / (id:4 ver:1)
copy 1: 172.25.21.12:9422 (status:VALID)
copy 2: 172.25.21.13:9422 (status:VALID)
模拟故障,当 chunk server2 挂掉之后,bigfile依旧完整
[root@server13 ~]# systemctl stop moosefs-chunkserver.service
[root@foundation21 dir2]# mfsfileinfo bigfile
bigfile:
chunk 0: 0000000000000005_00000001 / (id:5 ver:1)
copy 1: 172.25.21.12:9422 (status:VALID)
chunk 1: 0000000000000006_00000001 / (id:6 ver:1)
copy 1: 172.25.21.12:9422 (status:VALID)
垃圾回收站
- 删除dir1目录下的passwd文件
[root@foundation21 mfs]# cd dir1
[root@foundation21 dir1]# ls
passwd
[root@foundation21 dir1]# rm -fr passwd
[root@foundation21 dir1]# ls
- 创建一个新的目录作为存储点
/mnt/mfsmeta
[root@foundation21 mnt]# mkdir mfsmeta
[root@foundation21 mnt]# mfsmount -m /mnt/mfsmeta/
mfsmaster accepted connection with parameters: read-write,restricted_ip
[root@foundation21 mnt]# mount | grep mfs
mfsmaster:9421 on /mnt/mfs type fuse.mfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)
mfsmaster:9421 on /mnt/mfsmeta type fuse.mfsmeta (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)
- 挂载成功之后,进入该目录,可以看到2个目录
sustained
和trash
,进入trash
看到里面有很多的回收站
删除文件可以通过MFSMETA 文件系统,特别是它包含目录的
trash
(包含任何可以被还原的被删除文件的信息)和trash/undel
(用于获取文件)。只有管理员有权限访问MFSMETA(用户的uid 0,通常是root)
[root@foundation21 mnt]# cd mfsmeta/
[root@foundation21 mfsmeta]# ls
sustained trash
[root@foundation21 mfsmeta]# cd trash/
[root@foundation21 trash]# ls
- 在
trash
目录中使用find命令查找我们要找的文件
将该文件移动到trash/undel
[root@foundation21 trash]# find -name *passwd*
./004/00000004|dir1|passwd
[root@foundation21 trash]# cd 004
[root@foundation21 004]# ls
'00000004|dir1|passwd' undel
[root@foundation21 004]# mv 00000004\|dir1\|passwd undel/
- 回到dir1目录,验证实验效果
[root@foundation21 004]# cd /mnt/mfs/dir1
[root@foundation21 dir1]# ls
passwd
[root@foundation21 dir1]# mfsfileinfo passwd
passwd:
chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
copy 1: 172.25.21.12:9422 (status:VALID)
存储类
补充知识:
朋友圈信息设置为3天可见(热点数据是在3天前)
因此,最热的数据,我们需要将它们放在IO最高的地方(总结来说,就是高IO,固态硬盘,存2份)
而3天之后,热数据转化为冷数据,可以放在机械盘上(sata硬盘,存1份)
等到一个星期之后,这些数据就可以放在大容量对象存储空间里
截图:
2个master==高可用
存储类的编写类型
格式 | 说明 |
---|---|
A,B | 一份在B机房,一份在A机房 |
A,* | 一份在A机房,另一份随意 |
* ,* | 随机 |
AB,C+D | 一份必须在具有A和B的节点上,一份必须在有C或者D的节点上 |
A,B[X+Y],C[X+Y] | 一份在A机房,一份在BX或者BY机房 |
A,A | 2A机房 |
AS,2B[H+S] | 一份在AS上,另外2份在B机房的固态盘或者机械盘上(3份) |
数据的分布
怎么样去定位(修改标签)
在chunk server1的配置文件中写入标签
[root@server12 ~]# cd /etc/mfs/
[root@server12 mfs]# ls
mfschunkserver.cfg mfschunkserver.cfg.sample mfshdd.cfg mfshdd.cfg.sample
[root@server12 mfs]# vim mfschunkserver.cfg
LABELS = A
[root@server12 mfs]# systemctl reload moosefs-chunkserver.service
在chunk server2的配置文件写入标签
[root@server13 ~]# vim /etc/mfs/mfschunkserver.cfg
LABELS = B
[root@server13 ~]# systemctl reload moosefs-chunkserver.service
插入: 再添加一个chunk server3(server4)
- 安装chunk server
[root@server14 ~]# yum install -y moosefs-chunkserver-3.0.115-1.rhsystemd.x86_64.rpm
- 修改解析
[root@server14 ~]# vim /etc/hosts
172.25.21.11 server11 mfsmaster
- 创建一个空目录,作为设备存储点;
[root@server14 ~]# mkdir /mnt/chunk3
[root@server14 ~]# vim /etc/mfs/mfshdd.cfg
/mnt/chunk3
- 设定设备的用户和用户组
[root@server14 ~]# chown mfs.mfs /mnt/chunk3/
- 写标签
[root@server14 ~]# vim /etc/mfs/mfschunkserver.cfg
LABELS = A
- 启动
[root@server14 ~]# systemctl start moosefs-chunkserver
存储类
Q: 为什么使用存储类?
A: 之前拷贝副本都是全局的。现在有3个chunkserver,怎么控制文件落到指定的节点上,这就需要存储类
存储类:
拥有A标签的都在同一个机房(class_2A);
一个文件在A机房,也要在B机房(双机房,双冗余,class_AB)
- 创建2个副本都有A的标签,2个副本存储在A机房
mfsscadmin create 2A class_2A
- 创建2个副本,一个副本存储在A机房,一个副本存储在B机房
mfsscadmin create AB class_AB
- 创建存储类
[root@foundation21 dir1]# mfsscadmin create 2A class_2A
storage class make class_2A: ok
[root@foundation21 mfs]# mfsscadmin create A,B class_AB
storage class make class_AB: ok
- 设定文件落在哪些节点上
[root@foundation21 dir2]# mfsfileinfo bigfile
bigfile:
chunk 0: 0000000000000007_00000001 / (id:7 ver:1)
copy 1: 172.25.21.12:9422 (status:VALID)
copy 2: 172.25.21.13:9422 (status:VALID)
chunk 1: 0000000000000008_00000001 / (id:8 ver:1)
copy 1: 172.25.21.12:9422 (status:VALID)
copy 2: 172.25.21.13:9422 (status:VALID)
[root@foundation21 dir2]# mfssetsclass class_2A bigfile
bigfile: storage class: 'class_2A'
- 查看结果
之前bigfile一直在12和13号主机保存,现在在12和14主机保存
因为,class_2A中的主机12的标签是A,14主机的标签是A
[root@foundation21 dir2]# mfsfileinfo bigfile
bigfile:
chunk 0: 0000000000000007_00000001 / (id:7 ver:1)
copy 1: 172.25.21.12:9422 (status:VALID)
copy 2: 172.25.21.14:9422 (status:VALID)
chunk 1: 0000000000000008_00000001 / (id:8 ver:1)
copy 1: 172.25.21.12:9422 (status:VALID)
copy 2: 172.25.21.14:9422 (status:VALID)
- class_AB的测试结果如下
[root@foundation21 dir1]# ls
passwd
[root@foundation21 dir1]# mfsfileinfo passwd
passwd:
chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
copy 1: 172.25.21.12:9422 (status:VALID)
[root@foundation21 dir1]# mfssetsclass class_AB passwd
passwd: storage class: 'class_AB'
[root@foundation21 dir1]# mfsfileinfo passwd
passwd:
chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
copy 1: 172.25.21.12:9422 (status:VALID)
copy 2: 172.25.21.13:9422 (status:VALID)
- 删除存储类
注意:删除之前,要将该类中的数据进行迁移,否则会出现报错(该存储类正在被使用)
[root@foundation21 dir1]# mfsscadmin create 3B class_B
storage class make class_B: ok
[root@foundation21 dir1]# mfsscadmin delete class_B
storage class remove class_B: error: Class in use
迁移数据之后,就可以删除了
[root@foundation21 dir1]# mfssetsclass class_2A passwd
passwd: storage class: 'class_2A'
[root@foundation21 dir1]# mfsscadmin delete class_B
storage class remove class_B: ok
固态盘S和机械盘H
- chunk server1设置为固态盘
[root@server12 ~]# vim /etc/mfs/mfschunkserver.cfg
LABELS = A S
[root@server12 ~]# systemctl reload moosefs-chunkserver.service
- chunk server2设置为固态盘
[root@server13 ~]# vim /etc/mfs/mfschunkserver.cfg
LABELS = B S
[root@server13 ~]# systemctl reload moosefs-chunkserver.service
- chunk server3设置为机械盘
[root@server14 ~]# vim /etc/mfs/mfschunkserver.cfg
LABELS = A H
[root@server14 ~]# systemctl reload moosefs-chunkserver
- 客户端创建存储类
[root@foundation21 mfs]# mfsscadmin create AS,BS class_ASBS
storage class make class_ASBS: ok
[root@foundation21 mfs]# mfssetsclass class_ASBS dir1/passwd
dir1/passwd: storage class: 'class_ASBS'
[root@foundation21 mfs]# mfsfileinfo dir1/passwd
dir1/passwd:
chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
copy 1: 172.25.21.12:9422 (status:VALID)
copy 2: 172.25.21.13:9422 (status:VALID)
补充:
AS,2B[H+S]
:1份在AS上,另外2份在B机房的固态盘或者机械盘上(3份)
[root@foundation21 mfs]# mfsscadmin create BS,2A[S+H] class_SH
storage class make class_SH: ok
[root@foundation21 mfs]# mfssetsclass class_SH dir1/passwd
dir1/passwd: storage class: 'class_SH'
[root@foundation21 mfs]# mfsfileinfo dir1/passwd
dir1/passwd:
chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
copy 1: 172.25.21.12:9422 (status:VALID)
copy 2: 172.25.21.13:9422 (status:VALID)
copy 3: 172.25.21.14:9422 (status:VALID)
30天数据迁移
- 设定chunk server2的磁盘类别
[root@server13 ~]# vim /etc/mfs/mfschunkserver.cfg
LABELS = A B S H
[root@server13 ~]# systemctl reload moosefs-chunkserver.service
- 迁移数据
-K:保留在AS和BS上
-A:打包数据到AH和BH上
-d:天数
[root@foundation21 mfs]# mfsscadmin create -C 2AS -K AS,BS -A AH,BH -d 30 class_CKd
storage class make class_CKd: ok
[root@foundation21 mfs]# mfsfileinfo dir1/passwd
dir1/passwd:
chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
copy 1: 172.25.21.12:9422 (status:VALID)
copy 2: 172.25.21.13:9422 (status:VALID)
copy 3: 172.25.21.14:9422 (status:VALID)
[root@foundation21 mfs]# mfssetsclass class_CKd dir1/passwd
dir1/passwd: storage class: 'class_CKd'
[root@foundation21 mfs]# mfsfileinfo dir1/passwd
dir1/passwd:
chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
copy 1: 172.25.21.12:9422 (status:VALID)
copy 2: 172.25.21.13:9422 (status:VALID)