MFS分布式文件系统
应用背景
公司之前的图片服务器采用的是 NFS,随着业务量增加,多台服务器通过 NFS方式共享一个服务器的存储空间,使得 NFS 服务器不堪重负,经常出现超时问题。
而且NFS存在着单点故障问题,尽管可以用 rsync 同步数据到另外一台服务器上做 NFS服务的备份,但这对提高整个系统的性能并无帮助。
基于目前的需求,我们需要对 NFS服务器进行优化或采取别的解决方案,然而优化并不能应对日益增多的客户端的性能要求,因此选择的解决方案是采用分布式文件系统。
采用分布式文件系统后,服务器之间的数据访问不再是一对多的关系,而是多对多的关系,这样可以使性能得到大幅提升。
分布式原理
分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。
简单来说,就是把一些分散的(分布在局域网内各个计算机上) 共享文件夹,集合到一个文件夹内(虚拟共享文件夹)。对于用户来说,要访问这些共享文件夹时,只要打开这个虚拟共享文件夹,就可以看到所有链接到虚拟共享文件夹内的共享文件夹,用户感觉不到这些共享文件是分散于各个计算机上的。
分布式文件系统的好处是集中访问、简化操作、数据容灾以及提高文件的存取性能。
MFS 原理
MFS 是一个具有容错性的网络分布式文件系统,它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一的资源。
MFS 文件系统的组成
- 元数据服务器Master:在整个体系中负责管理文件系统,维护元数据。
- 元数据日志服务器MetaLogger:备份 Master 服务器的变化日志文件,文件类型为 ‘changelog_m1.*.mfs’。当 Master 服务器数据丢失或者损坏时,可以从日志服务器中取得文件,进行恢复。
- 数据存储服务器Chunk Server:真正存储数据的服务器。存储文件时会把文件分块保存,并在数据服务器之间进行复制。数据服务器越多,能使用的“容量”就越大,可靠性就越高,性能也就越好。
- 客户端Client:可以像挂载 NFS 一样挂载 MFS 文件系统,其操作是相同的。
MFS :通过算法将数据切割成多个数据块存放在 chunk server ,而 master 将会这些记录存储。master不存储信息,它存储的是存储位。
MFS 读取数据的记录过程
-
客户端向元数据服务器发出读请求。
-
元数据服务器把所需数据存放的位置( Chunk Server 的 IP 地址和 Chunk 编号)告知客户端。
-
客户端向己知的Chunk Server 请求发送数据。
-
Chunk Server 向客户端发送数据。
MFS 写入数据的处理过程
-
客户端向元数据服务器发送写入请求。
-
元数据服务器与 Chunk Server 进行交互(只有当所需的分块 Chunks 存在的时候才进行这个交互),但元数据服务器只在某些服务器创建新的分块 Chunks,创建成功后由 Chunk Servers 告知元数据服务器操作成功。
-
元数据服务器告知客户端,可以在哪个 Chunk Server 的哪些 Chunks 写入数据。
-
客户端向指定的Chunk Server 写入数据。
-
该 Chunk Server 与其他 Chunk Server 进行数据同步,同步成功后 Chunk Server 告知客户端数据写入成功。
-
客户端告知元数据服务器本次写入完毕。
部署 MFS 文件系统
案例环境
无论客户端还是服务端都只使用一个软件:
mfs-1.6.27-5.tar.gz
搭建 master server
1 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
2 创建用户
useradd -M -s /sbin/nologin mfs
3 安装源码包
yum -y install gcc zlib-devel # 安装依赖
tar xf mfs-1.6.27-5.tar.gz
cd mfs-1.6.27/
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount
make && make install
4 复制文件
cd /usr/local/mfs/etc/mfs/
cp mfsmaster.cfg.dist mfsmaster.cfg
cp mfsexports.cfg.dist mfsexports.cfg
cp mfstopology.cfg.dist mfstopology.cfg
cd /usr/local/mfs/var/mfs
cp metadata.mfs.empty metadata.mfs
5 配置文件详解
mfsmaster.cfg
为主配置文件mfsexports.cfg
是被挂载目录及权限配置文件
①mfsmaster.cfg
文件常用参数
# WORKING_USER = mfs // 运行 masterserver 的用户
# WORKING_GROUP = mfs // 运行 masterserver 的组
# SYSLOG_IDENT = mfsmaster // 在 syslog 中表示是 mfsmaster 产生的日志
# //masterserver 在 syslog 的标识,说明由 masterserver 产生的
# LOCK_MEMORY = 0 // 是否执行 mlockall(),以避免 mfsmaster 进程溢出;默认为0
# NICE_LEVEL = -19 // 运行的优先级(如果可以,默认是-19;注意,进程必须用 root 启动)
# EXPORTS_FILENAME = /usr/local/mfs/etc/mfs/mfsexports.cfg
# // 被挂载目录及其权限控制文件的存放位置
# TOPOLOGY_FILENAME = /usr/local/mfs/etc/mfs/mfstopology.cfg
# DATA_PATH = /usr/local/mfs/var/mfs // 数据存放的路径
# BACK_LOGS = 50 //metadata 改变的 log 文件数目;默认为50
# BACK_META_KEEP_PREVIOUS = 1
# REPLICATIONS_DELAY_INIT = 300 // 初始延迟复制的时间;单位秒
# REPLICATIONS_DELAY_DISCONNECT = 3600 //chunkserver 断开后复制延迟;单位秒
# MATOML_LISTEN_HOST = * //metalogger 监听的 IP 地址;*代表任何 IP
# MATOML_LISTEN_PORT = 9419 //metalogger 监听的端口地址;9419为默认
# MATOML_LOG_PRESERVE_SECONDS = 600
# MATOCS_LISTEN_HOST = * // 用于 chunkserver 连接的 IP 地址
# MATOCS_LISTEN_PORT = 9420 // 用于 chunkserver 连接的端口地址;默认9420
# MATOCL_LISTEN_HOST = * // 用户客户端挂接连接的 IP 地址
# MATOCL_LISTEN_PORT = 9421 // 用于客户端挂接连接的端口地址;默认为9421
# CHUNKS_LOOP_MAX_CPS = 100000
# CHUNKS_LOOP_MIN_TIME = 300 //chunks 的回环频率
# CHUNKS_SOFT_DEL_LIMIT = 10
# CHUNKS_HARD_DEL_LIMIT = 25
# CHUNKS_WRITE_REP_LIMIT = 2 // 在一个循环里复制到一个 chunkserver 的最大 chunk 数
# CHUNKS_READ_REP_LIMIT = 10 // 在一个循环里从一个 chunkserver 复制的最大 chunk 数
# ACCEPTABLE_DIFFERENCE = 0.1
# SESSION_SUSTAIN_TIME = 86400
# REJECT_OLD_CLIENTS = 0
# deprecated:
# CHUNKS_DEL_LIMIT - use CHUNKS_SOFT_DEL_LIMIT instead
# LOCK_FILE - lock system has been changed, and this option is used only to search for old lockfile
②mfsexports.cfg
文件参数格式
# Allow everything but "meta".
* / rw,alldirs,maproot=0
# Allow "meta".
* . rw
————————————————————————————————————————————————
该文件的每一个条目分为三部分:
第一部分:客户端的 IP 地址
* 所有的IP地址
n.n.n.n 单个IP 地址
nn.n.n-IP 网络地址/位数掩码
n.n.n.n/m.m.m.m-IP 网络地址/子网掩码
fffft.t.t.t IP段
第二部分:被挂接的目录
/ 标识MFS根
. 表示 MFSMETA 文件系统
第三部分:客户端拥有的权限
ro 只读模式共享
rw 读写的方式共享
alldirs 允许挂载任何指定的子目录
admin 管理员权限
maproot 映射为root,还是指定的用户
Password 指定客户端密码
以上是对 Master Server 的 mfsmaster.cfg
和 mfsexports.cfg
配置文件的解释,对于这两个文件不需要做任何修改就可以开始工作。
6 启动 master server
/usr/local/mfs/sbin/mfsmaster start
# 停止 master server
/usr/local/mfs/sbin/mfsmaster -s
搭建 metalogger server
# 创建用户
[root@localhost ~]# useradd -M -s /sbin/nologin mfs
# 安装mfs
[root@localhost ~]# yum -y install gcc zlib-devel
[root@localhost ~]# tar xf mfs-1.6.27-5.tar.gz
[root@localhost ~]# cd mfs-1.6.27/
[root@localhost mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfschunkserver --disable-mfsmount
[root@localhost mfs-1.6.27]# make && make install
# 编辑配置文件
[root@localhost mfs-1.6.27]# cd /usr/local/mfs/etc/mfs/
[root@localhost mfs]# ll
总用量 20
-rw-r--r-- 1 root root 4060 6月 28 12:07 mfsexports.cfg.dist
-rw-r--r-- 1 root root 1020 6月 28 12:07 mfsmaster.cfg.dist
-rw-r--r-- 1 root root 417 6月 28 12:07 mfsmetalogger.cfg.dist
-rw-r--r-- 1 root root 1123 6月 28 12:07 mfstopology.cfg.dist
[root@localhost mfs]# cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
[root@localhost mfs]# vim mfsmetalogger.cfg
# WORKING_USER = mfs
# WORKING_GROUP = mfs
# SYSLOG_IDENT = mfsmetalogger
# LOCK_MEMORY = 0
# NICE_LEVEL = -19
# DATA_PATH = /usr/local/mfs/var/mfs
# BACK_LOGS = 50
# BACK_META_KEEP_PREVIOUS = 3
# META_DOWNLOAD_FREQ = 24
# MASTER_RECONNECTION_DELAY = 5
MASTER_HOST = 192.168.153.145 // 修改为 master server 的 IP 地址
# MASTER_PORT = 9419
# MASTER_TIMEOUT = 60
# deprecated, to be removed in MooseFS 1.7
# LOCK_FILE = /var/run/mfs/mfsmetalogger.lock
[root@localhost mfs]# /usr/local/mfs/sbin/mfsmetalogger start // 启动 metalogger server
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmetalogger modules ...
mfsmetalogger daemon initialized properly
[root@localhost mfs]# ps -ef | grep mfs
mfs 12616 1 0 14:14 ? 00:00:00 /usr/local/mfs/sbin/mfsmetalogger start
root 12621 7198 0 14:15 pts/0 00:00:00 grep --color=auto mfs
# metalogger server 的停止命令
/usr/local/mfs/sbin/mfsmetalogger -s
搭建 chunk server
两台 chunk server 的搭建步骤是相同的。
①建立独立的磁盘挂载到 ‘/data’ 目录,用于给 MFS 数据存储
[root@localhost ~]# mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sd[b-e]
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 20954112K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@localhost ~]# fdisk -l
磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x00041e0c
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 41943039 19921920 8e Linux LVM
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/sdd:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/sdc:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/sde:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/mapper/centos-root:18.2 GB, 18249416704 字节,35643392 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/mapper/centos-swap:2147 MB, 2147483648 字节,4194304 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/md0:42.9 GB, 42914021376 字节,83816448 个扇区 # 建立 RAID 5 磁盘阵列成功
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):524288 字节 / 1048576 字节
[root@localhost ~]# mkfs.ext4 /dev/md0 // 格式化磁盘
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
2621440 inodes, 10477056 blocks
523852 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2157969408
320 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
[root@localhost ~]# mkdir /data
[root@localhost ~]# mount /dev/md0 /data // 挂载到 /data 目录
[root@localhost ~]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 17G 2.2G 15G 13% /
devtmpfs devtmpfs 475M 0 475M 0% /dev
tmpfs tmpfs 487M 0 487M 0% /dev/shm
tmpfs tmpfs 487M 7.7M 479M 2% /run
tmpfs tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 133M 882M 14% /boot
tmpfs tmpfs 98M 0 98M 0% /run/user/0
/dev/md0 ext4 40G 49M 38G 1% /data
②安装 mfs
[root@localhost ~]# useradd -M -s /sbin/nologin mfs
[root@localhost ~]# yum -y install gcc zlib-devel
[root@localhost ~]# tar xf mfs-1.6.27-5.tar.gz
[root@localhost ~]# cd mfs-1.6.27/
[root@localhost mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfsmount // 注意这里与前面不同
[root@localhost mfs-1.6.27]# make && make install
[root@localhost mfs-1.6.27]# cd /usr/local/mfs/etc/mfs/
[root@localhost mfs]# ll
总用量 8
-rw-r--r-- 1 root root 531 6月 28 11:36 mfschunkserver.cfg.dist
-rw-r--r-- 1 root root 57 6月 28 11:36 mfshdd.cfg.dist
[root@localhost mfs]# cp mfschunkserver.cfg.dist mfschunkserver.cfg
[root@localhost mfs]# cp mfshdd.cfg.dist mfshdd.cfg
[root@localhost mfs]# vim mfschunkserver.cfg
# WORKING_USER = mfs
# WORKING_GROUP = mfs
# SYSLOG_IDENT = mfschunkserver
# LOCK_MEMORY = 0
# NICE_LEVEL = -19
# DATA_PATH = /usr/local/mfs/var/mfs
# MASTER_RECONNECTION_DELAY = 5
# BIND_HOST = *
MASTER_HOST = 192.168.153.145 // 修改为 master server 的 IP 地址
# MASTER_PORT = 9420
# MASTER_TIMEOUT = 60
# CSSERV_LISTEN_HOST = *
# CSSERV_LISTEN_PORT = 9422
# HDD_CONF_FILENAME = /usr/local/mfs/etc/mfs/mfshdd.cfg
# HDD_TEST_FREQ = 10
# deprecated, to be removed in MooseFS 1.7
# LOCK_FILE = /var/run/mfs/mfschunkserver.lock
# BACK_LOGS = 50
# CSSERV_TIMEOUT = 5
[root@localhost mfs]# vim mfshdd.cfg
# mount points of HDD drives
#
#/mnt/hd1
#/mnt/hd2
#etc.
/data # 添加一行 /data,在这里/data 是一个给 MFS 的分区
[root@localhost mfs]# chown -R mfs:mfs /data // 需要给 /data 授权
[root@localhost mfs]# /usr/local/mfs/sbin/mfschunkserver start
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfschunkserver modules ...
hdd space manager: path to scan: /data/
hdd space manager: start background hdd scanning (searching for available chunks)
main server module: listen on *:9422
no charts data file - initializing empty charts
mfschunkserver daemon initialized properly
[root@localhost sbin]# ps -ef | grep mfs
mfs 7833 1 0 15:11 ? 00:00:00 ./mfschunkserver start
root 7859 7452 0 15:11 pts/0 00:00:00 grep --color=auto mfs
# 停止 chunk server 的命令
/usr/local/mfs/sbin/mfschunkserver -s
客户端配置
1 MFS 客户端依赖于 fuse
# 源码安装
[root@localhost ~]# tar xf fuse-2.9.7.tar.gz
[root@localhost ~]# cd fuse-2.9.7/
[root@localhost fuse-2.9.7]# ./configure
[root@localhost fuse-2.9.7]# make && make install
[root@localhost fuse-2.9.7]# echo "export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH" >> /etc/profile
[root@localhost fuse-2.9.7]# source /etc/profile
2 安装 MFS 客户端
[root@localhost ~]# tar xf mfs-1.6.27-5.tar.gz
[root@localhost ~]# cd mfs-1.6.27/
[root@localhost mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver --enable-mfsmount
[root@localhost mfs-1.6.27]# make && make install
3 挂载 MFS 文件系统
[root@localhost ~]# mkdir /mnt/mfs // 创建挂载点
[root@localhost ~]# modprobe fuse // 加载fuse模块到内核
[root@localhost ~]# /usr/local/mfs/bin/mfsmount /mnt/mfs -H 192.168.153.145
mfsmaster accepted connection with parameters: read-write,restricted_ip ; root mapped to root:root // 此时,client端写入的数据,就会以数据块的形式存在于chunk server上
[root@localhost ~]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root xfs 17G 5.8G 12G 34% /
devtmpfs devtmpfs 475M 0 475M 0% /dev
tmpfs tmpfs 487M 0 487M 0% /dev/shm
tmpfs tmpfs 487M 7.7M 479M 2% /run
tmpfs tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 133M 882M 14% /boot
tmpfs tmpfs 98M 0 98M 0% /run/user/0
192.168.153.145:9421 fuse.mfs 74G 0 74G 0% /mnt/mfs
[root@localhost mfs]# pwd
/mnt/mfs
[root@localhost mfs]# touch index.html
# 如果要卸载 MFS
umount /mnt/mfs
4 MFS 常用操作
MFS 在客户端安装完毕后,会生成 /usr/local/mfs/bin/ 目录,在这个目录下有很多命令是用户需要的,为了方便使用,需要优化路径
ln -s /usr/local/mfs/bin/* /usr/local/bin/
案例:查询文件被复制的次数
[root@localhost ~]# mfsgetgoal -r /mnt/mfs // -r 对整个目录进行递归
/mnt/mfs:
directories with goal 1 : 1
# goal 是指文件被复制的份数
案例:设置文件被复制的份数
在生产环境中,chunk server 节点数量应至少大于2,文件副本数量小于等于 chunk server 服务器的数量
[root@localhost ~]# mfssetgoal -r 3 /mnt/mfs
/mnt/mfs: // 设置文件被复制的份数为3次
inodes with goal changed: 1
inodes with goal not changed: 0
inodes with permission denied: 0
[root@localhost ~]# mfsgetgoal -r /mnt/mfs/
/mnt/mfs/:
directories with goal 3 : 1
# 再次查询文件被复制的份数,goal 的值已经改变
MFS 监控
Mfscgiserv 是用 python 编写的一个 Web 服务器,其监听端口是9425,可以在 Master Server 上通过命令 /usr/local/mfs/sbin/mfscgiserv
来启动,用户利用浏览器就可以全面监控所有客户挂载、Chunk Server、Master Server,以及客户端的各种操作等。
[root@localhost ~]# /usr/local/mfs/sbin/mfscgiserv
lockfile created and locked
starting simple cgi server (host: any, port: 9425, rootpath: /usr/local/mfs/share/mfscgi)
在客户端上通过浏览器访问master server的 IP 地址: http://192.168.153.145:9425
其中各部分的含义如下:
Info 部分:显示了 MFS 的基本信息
Servers 部分:列出现有 Chunk Server
Disks 部分:列出现有 Chunk Server 的硬盘信息。
Exports 部分:列出可被挂载的目录
Mounts 部分:列出被挂载的目录
Operations 部分:显示正在执行的操作
Resources 部分:列出当前存储信息
Quotas 部分:列出当前配额信息
Master Charts 部分:显示 Master Server 的操作情况,如读、写、删除等操作
Server Chats 部分:显示 Chunk Server 的操作情况、数据传输率及系统状态
MFS故障恢复
如果元数据节点宕机或异常导致 mfs-master 节点启动失败:
-
尝试master节点进行
/usr/local/mfs/sbin/mfsmetarestore -a
恢复,成功则不丢失数据,若失败 -
尝试使用 metalogger server 节点的
/usr/local/mfs/var/mfs/metadata_ml.mfs.back
,将它改名为metadata.mfs.back
传到 master 节点相应数据目录,再进行mfsmetarestore -a
恢复。成功则不丢失数据,若失败
- 尝试使用log节点的所有 xxx_ml.xxxx 的数据文件,将它们改名为 xxx.xxx 传到master节点相应数据目录,最后进行
mfsmetarestore -a
恢复。确定会成功但数据最大丢失一个小时。。。。
强制使用 metadata.mfs.back
创建 metadata.mfs
,可以启动 master,但应该会丢失1小时的数据。
mfs开发小组针对此问题回信:明确表示会丢失故障点到上一个整点之间的数据。因为对 mfs 的操作日志都记录到changelog.0.mfs
里面。changelog.0.mfs
每小时合并一次到metadata.mfs
中,如果突然断电,则changelog.0.mfs
里面的信息就没有合并到metadata
中,强制使用metadata.mfs.back
创建metadata.mfs
,就会导致丢失changelog.0.mfs
里的数据。
mfs故障模拟以数据恢复方式:
第一种:利用rsync+intofy
实时备份 master 的 etc 和 var 文件下的所有数据到备服务器
第二种:利用 matelogger 来恢复,将 matelogger 的 var 目录下的数据上传到 master 服务器上
用命令来恢复数据
/usr/local/mfs/sbin/mfsmetarestore -m metadata_ml.mfs.back* -o metadata.mfs changelog_ml*
第三种:将 matelogger 启用代替为 master,将 matelogger 停掉,用命令来恢复数据
/usr/local/mfs/sbin/mfsmetarestore -m metadata_ml.mfs.back* -o metadata.mfs changelog_ml*
g.0.mfs里面。
changelog.0.mfs每小时合并一次到
metadata.mfs中,如果突然断电,则
changelog.0.mfs里面的信息就没有合并到
metadata中,强制使用
metadata.mfs.back创建
metadata.mfs,就会导致丢失
changelog.0.mfs`里的数据。
mfs故障模拟以数据恢复方式:
第一种:利用rsync+intofy
实时备份 master 的 etc 和 var 文件下的所有数据到备服务器
第二种:利用 matelogger 来恢复,将 matelogger 的 var 目录下的数据上传到 master 服务器上
用命令来恢复数据
/usr/local/mfs/sbin/mfsmetarestore -m metadata_ml.mfs.back* -o metadata.mfs changelog_ml*
第三种:将 matelogger 启用代替为 master,将 matelogger 停掉,用命令来恢复数据
/usr/local/mfs/sbin/mfsmetarestore -m metadata_ml.mfs.back* -o metadata.mfs changelog_ml*