MFS分布式文件系统

news2024/9/22 19:32:29

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.cfgmfsexports.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 628 12:07 mfsexports.cfg.dist
-rw-r--r-- 1 root root 1020 628 12:07 mfsmaster.cfg.dist
-rw-r--r-- 1 root root  417 628 12:07 mfsmetalogger.cfg.dist
-rw-r--r-- 1 root root 1123 628 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 628 11:36 mfschunkserver.cfg.dist
-rw-r--r-- 1 root root  57 628 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*

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/735796.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++STL:顺序容器之vector

文章目录 1. 概述2. 成员函数3. 创建 vector 容器的几种方式4. 迭代器vector容器迭代器的基本用法vector容器迭代器的独特之处 5. 访问元素5.1 访问vector容器中单个元素5.2 访问vector容器中多个元素 6. 添加元素6.1 push_back()6.2 emplace_back()6.3 emplace_back()和push_b…

[元带你学: eMMC协议 24] eMMC Packed Command CMD23读(Read) 写(write) 操作详解

依JEDEC eMMC及经验辛苦整理,原创保护,禁止转载。 专栏 《元带你学:eMMC协议》 内容摘要 全文 3200 字, 主要内容 目录 前言 1 Packed Commands 有什么用处? 2 Packed Commands 怎么实现? Packed Wri…

【爬虫】5.4 Selenium 实现用户登录

目录 任务目标 创建模拟网站 创建服务器程序 键盘输入动作 鼠标点击动作 编写爬虫程序 任务目标 Selenium 查找的 HTML 元素是一个 WebElemen t对象, 这个对象不但可以获取元素的属性值,而且还能执行一 些键盘输入send_keys()与鼠标点击click()的动…

leetcode 617. 合并二叉树

2023.7.9 这题要求合并两二叉树,若节点重叠则将节点值相加。 和之前不同的是需要同时对两棵树进行操作,我选用队列来做这题。 大致思路:通过遍历两棵树的对应节点,将节点值相加并合并到第一棵树上。如果某个节点为空,…

Squid 缓存服务器

Squid 缓存服务器 作为应用层的代理服务软件,Squid 主要提供缓存加速和应用层过滤控制的功能 ☆什么是缓存代理 当客户机通过代理来请求 Web 页面时 指定的代理服务器会先检查自己的缓存,如果缓存中已经有客户机需要访问的页面,则直接将缓…

Qt实现思维导图功能(五)

前文链接:Qt实现思维导图功能(四) 思维导图纵向分布模式:模式一 百度网盘体验地址: 链接:https://pan.baidu.com/s/1YNSBiFOUwnSSKvHsBvOT3g 提取码:ifyc动态演示效果 静态展示图片 前文BUG维…

Linux 网络IO管理(epoll实现)

文章目录 1、网络IO模型1.1、阻塞IO(blocking IO)1.2、非阻塞IO(non-blocking IO)1.3、多路复用 IO(IO multiplexing)1.4、异步 IO(Asynchronous I/O)1.5、信号驱动 IO(s…

可恶的剪绳子问题

1. 剑指 Offer 14- I. 剪绳子 题目描述:给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最…

3.6.共享内存的学习

目录 前言1. 共享内存2. shared memory案例3. 补充知识总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程,之前有看过一遍,但是没有做笔记,很多东西也忘了。这次重新撸一遍,顺便记记笔记。 本次课程学习精简 CUDA 教程-共享…

基于Qt5 实现的简易慕课爬取程序

基于Qt5 实现的简易慕课爬取程序 一、项目概述二、源代码 一、项目概述 名称:MookScrapy 这个项目主要是使用了 Qt 里面的 QNetworkAccessManager 去下载慕课网站的数据 https://coding.imooc.com,也就是这个网站里面的卡片信息。然后做一定的分析和展示…

【架构设计】酒店预订应用的系统设计架构(如 Airbnb、OYO)

Airbnb、Booking.com 和 OYO 等酒店预订应用程序如何提供从酒店列表到预订再到付款的流畅流程?而且都没有一个小故障!在此博客中,您将获得对此的详细解释。由于它们非常庞大,以至于它们需要处理大量的用户流量。所以要管理这些&am…

计算机视觉:卷积核的参数可以通过反向传播学习到吗?

本文重点 在深度学习中,卷积神经网络(Convolutional Neural Networks, CNN)是一种常用的神经网络结构,其中卷积核是CNN的核心组件之一。卷积核是一个小矩阵,用于对输入数据进行卷积操作。卷积操作可以提取输入数据的特征,通过不同的卷积核可以提取不同的特征。 在前面课…

Wireshark TS | 二谈访问网页失败

前言 又一个访问网页失败的案例,该案例来自于 Wireshark sharkfest 2018 - Point And ShootPacket,其中的 Case 2 Cannot see homepage,描述的是来自 OSAKA 的用户抱怨访问一些网站页面不能显示,但是另外一些网站页面可以&#x…

软件测试岗位新标准:ISTQB认证与软件测试工程师职业发展

随着信息技术的飞速发展,软件测试行业也变得越来越重要。软件测试是保证软件质量的关键环节,因此,软件测试工程师的岗位也越来越受到重视。 ISTQB认证成为了衡量软件测试工程师职业能力的标准。 下面领测国际ISTQB考试认证中心就带您了解一下…

depot_tools问题记录 - 执行fetch/gclient命令无响应

文章目录 前言开发环境问题描述问题分析解决方案最后 前言 在研究将Dart dill文件序列化为可读文本时遇到的问题。 开发环境 macOS: 13.4 问题描述 之前使用depot_tools中的fetch/gclient命令还是正常的,今天想实测--no-history参数时突然遇到命令无响应的情况…

Redis 删除 key用 del 和 unlink 有啥区别?

问题 del 和 unlink 有啥区别啊?为什么String类型删除不会做异步删除? 彬彬回答 DEL 和 UNLINK 都是同步的释放 key 对象,区别是怎么释放后面的 value 对象 DEL 每次都是同步释放 value 部分,如果 value 很大,例如一…

Openssh升级方法详解

项目组linux服务器被绿盟扫描出openssh 1.0.2版本有漏洞,需要升级到7.5版本,以下是升级过程: 第一步 安装Telnet服务 先下Openssh软件包 看你需要什么版本http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/ 1.查看当前的ssh服务版本 …

【前端】网页开发精讲与实战 HTML Day 2

🚀Write In Front🚀 📝个人主页:令夏二十三 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 📣系列专栏:前端 💬总结:希望你看完之后,能对你有…

看完这篇 教你玩转渗透测试靶机Vulnhub——The Planets:Mercury

Vulnhub靶机The Planets:Mercury渗透测试详解 Vulnhub靶机介绍:Vulnhub靶机下载:Vulnhub靶机安装:Vulnhub靶机漏洞详解:①:信息收集:②:漏洞发现:③:SSH登入:…

架构师进阶之路 - 微服务怎么划分

目录 微服务划分目标 业务、技术、团队导向规划服务 领域检查 依赖DAG检查 分布式事务检查 性能分布检查 稳定(易变)性检查 调用链检查 微服务划分目标 我们常说服务的合理划分是微服务成功的重中之重,一个合理的服务划分应该符合一下…