文章目录

  • 案例概述
  • 一、分布式简介
    • 1、分布式文件系统的优势
    • 2、MFS原理
      • 1)MFS文件系统的组成
      • 2)MFS 处理过程
    • 3、NFS与MFS
  • 二、案例部署
    • 软件包
    • 1、环境准备
    • 2、搭建Master Server
    • 3、搭建MetaLogger server
    • 4、搭建chunkserver
    • 5、搭建client
    • 6、MFS 常用操作
  • 三、测试
    • 1、创建文件测试如下
    • 2、Master Server----启动监控程序
  • 四、MFS 集群的启动与停止
    • 1、MFS 集群启动顺序
    • 2、MFS 集群停止顺序
  • 五、MFS 灾难恢复

案例概述

​ 公司之前的图片服务器采用的是 NFS, 随着业务量增加, 多台服务器通过 NFS 方式共享一个服务器的存储空间, 使得 NFS 服务器不堪重负, 经常出现超时问题。 而且 NFS 存在着单点故障问题, 尽管可以用 rsync 同步数据到另外一台服务器上做 NFS 服务的备份, 但这对提高整个系统的性能毫无帮助。 基于这样一种需求, 我们需要对 NFS 服务器进行优化或采取别的解决方案, 然而优化并不能应对日益增多的客户端的性能要求, 因此选择的解决方案是采用分布式文件系统。 采用分布式文件系统后, 服务器之间的数据访问不再是一对多的关系,而是多对多的关系, 这样可以使性能得到大幅提升。
​ 在当前多种常用的分布式文件系统中, 我们采用MFS(MooseFS)。 MFS 正式推出是在2008 年 5 月, 是一个具有容错功能的、 高可用、 可扩展的海量级分布式文件系统。 MFS 把数据分散在多台服务器上, 但用户看到的只是一个源。 MFS 也像其他类 UNIX 文件系统一样,包含了层级结构、 文件属性, 可以创建特殊的文件(块设备、 字符设备、 管道、 套接字)、符号链接和硬链接。

一、分布式简介

分布式文件系统(Distributed File System) 是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。简单来说就是把一些分散的(分布在局域网内各个计算机上) 共享文件夹, 集合到一个文件夹内(虚拟共享文件夹)。 对于用户来说, 要访问这些共享文件夹时, 只要打开这个虚拟共享文件夹, 就可以看到所有链接
到虚拟共享文件夹内的共享文件夹, 用户感觉不到这些共享文件是分散于各个计算机上的。

1、分布式文件系统的优势

  • 集中访问
  • 简化操作
  • 数据容灾
  • 提高文件存取性能

2、MFS原理

MFS 是一个具有容错性的网络分布式文件系统, 它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一的资源。

MFS文件系统组成架构图:

1)MFS文件系统的组成

①元数据服务器(Master)

  • 在整个体系中负责管理文件系统, 维护元数据

②元数据日志服务器(MetaLogger)

  • 备份 Master 服务器的变化日志文件, 文件类型为 changelog_ml.*.mfs。 当 Master 服务器数据丢失或者损坏,可以从日志服务器中取得文件恢复

③数据存储服务器(Chunk Server)

  • 真正存储数据的服务器。 存储文件时, 会把文件分块保存, 并在数据服务器之间复制, 数据服务器越多, 能使用的“容量” 就越大, 可靠性就越高, 性能越好。

④客户端(Client)

  • 可以像挂载 NFS 一样挂载 MFS 文件系统, 其操作是相同的。

2)MFS 处理过程

  • MFS 读取数据的处理过程

    ① 客户端向元数据服务器发出读请求。
    ② 元数据服务器把所需数据存放的位置(Chunk Server 的 IP 地址和 Chunk 编号) 告知客户端。
    ③ 客户端向已知的 Chunk Server 请求发送数据。
    ④ Chunk Server 向客户端发送数据。

  • MFS 写入数据的处理过程

    ① 客户端向元数据服务器发送写入请求。
    ② 元数据服务器与 Chunk Server 进行交互(只有当所需的分块 Chunks 存在的时候才进行这个交互),但元数据服务器只在某些服务器创建新的分块 Chunks,创建成功后由Servers 告知元数据服务器操作成功
    ③ 元数据服务器告知客户端, 可以在哪个 Chunk Server 的哪些 Chunks 写入数据。
    ④ 客户端向指定的 Chunk Server 写入数据
    ⑤ 该 Chunk Server 与其他 Chunk Server 进行数据同步, 同步成功后 Chunk Server 告知客户端数据写入成功。
    ⑥ 客户端告知元数据服务器本次写入完毕。

3、NFS与MFS

多台Web服务器通过NFS共享一个存储

1)业务功能上满足需求
2)在性能与容量上无法胜任更高的要求
3)NFS服务器不堪重负,出现超时问题
4)NFS存在着单点故障问题

解决方案

1)采用分布式文件系统
2)服务器之间的数据访问不再是一对多的关系,而是多对多的关系
3)可以使性能得到大幅提升

二、案例部署

主机 操作系统 IP 地址 主要软件
Master Server CentOS 7.6 192.168.100.41 moosefs-3.0.100-1.tar.gz
MetaLogger Server CentOS 7.6 192.168.100.42 moosefs-3.0.100-1.tar.gz
Chunk Server1 CentOS 7.6 192.168.100.43 moosefs-3.0.100-1.tar.gz
Chunk Server2 CentOS 7.6 192.168.100.44 moosefs-3.0.100-1.tar.gz
Chunk Server3 CentOS 7.6 192.168.100.45 moosefs-3.0.100-1.tar.gz
Client CentOS 7.6 192.168.100.46 moosefs-3.0.100-1.tar.gz
fuse-2.9.2.tar.gz

软件包

百度网盘链接:https://pan.baidu.com/s/1t-gXjzzFenWH8p3wuUHerg
提取码:0p4q

1、环境准备

#在六台服务器分别配置主机名

[root@localhost ~]# hostnamectl set-hostname mfsmaster
[root@localhost ~]# hostnamectl set-hostname metalogger
[root@localhost ~]# hostnamectl set-hostname chunk1
[root@localhost ~]# hostnamectl set-hostname chunk2
[root@localhost ~]# hostnamectl set-hostname chunk3
[root@localhost ~]# hostnamectl set-hostname client

6台服务器均需要操作,以下操作以mfsmaster为例

#关闭防火墙

[root@mfsmaster ~]# systemctl stop firewalld
[root@mfsmaster ~]# systemctl disable firewalld

#关闭核心防护

[root@mfsmaster ~]# setenforce 0
[root@mfsmaster ~]# sed -i '7s/enforcing/disabled/' /etc/sysconfig/selinux

#添加hosts文件

[root@mfsmaster ~]# vim /etc/hosts
192.168.100.41  mfsmaster
192.168.100.42  metalogger
192.168.100.43  chunk1
192.168.100.44  chunk2
192.168.100.45  chunk3
192.168.100.46  client

#挂载光盘镜像

[root@mfsmaster ~]# vim /etc/fstab
/dev/cdrom  /mnt  iso9660  defaults  0 0
[root@mfsmaster ~]# mount -a
[root@mfsmaster ~]# df -hT
文件系统       类型      容量  已用  可用 已用% 挂载点
/dev/sda2      xfs        20G  3.4G   17G   17% /
devtmpfs       devtmpfs  898M     0  898M    0% /dev
tmpfs          tmpfs     912M     0  912M    0% /dev/shm
tmpfs          tmpfs     912M   18M  895M    2% /run
tmpfs          tmpfs     912M     0  912M    0% /sys/fs/cgroup
/dev/sda5      xfs        10G   37M   10G    1% /home
/dev/sda1      xfs       6.0G  174M  5.9G    3% /boot
tmpfs          tmpfs     183M  4.0K  183M    1% /run/user/42
tmpfs          tmpfs     183M   40K  183M    1% /run/user/0
/dev/sr0       iso9660   4.4G  4.4G     0  100% /mnt

#搭建yum仓库

[root@mfsmaster ~]# cd /etc/yum.repos.d
[root@mfsmaster ~]# mkdir b
[root@mfsmaster yum.repos.d]# mv C* b
[root@mfsmaster yum.repos.d]# vim local.repo
[centos]
name=CentOS
baseurl=file:///mnt
gpgcheck=0
enabled=1
[root@mfsmaster yum.repos.d]# yum clean all
[root@mfsmaster yum.repos.d]# yum makecache

#安装环境依赖包

[root@mfsmaster ~]# yum -y install gcc gcc-c++ zlib-devel

2、搭建Master Server

#创建用户

[root@mfsmaster ~]# useradd -s /sbin/nologin -M mfs

#上传源码包到/opt目录并编译安装

[root@mfsmaster ~]# cd /opt
[root@mfsmaster opt]# ll
总用量 1096
-rw-r--r--. 1 root root 1120173 3月  24 16:44 moosefs-3.0.100-1.tar.gz
drwxr-xr-x. 2 root root       6 3月  26 2015 rh
[root@mfsmaster opt]# tar xzvf moosefs-3.0.100-1.tar.gz
[root@mfsmaster opt]# cd /opt/moosefs-3.0.100/
[root@mfsmaster moosefs-3.0.100]#
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfschunkserver \
--disable-mfsmount[root@mfsmaster moosefs-3.0.100]# make && make install

#复制 master 配置文件

[root@mfsmaster moosefs-3.0.100]# cd /usr/local/mfs/etc/mfs/
[root@mfsmaster mfs]# cp mfsmaster.cfg.sample mfsmaster.cfg
[root@mfsmaster mfs]# cp mfsexports.cfg.sample mfsexports.cfg
[root@mfsmaster mfs]# cp mfstopology.cfg.sample mfstopology.cfg[root@mfsmaster mfs]# cd /usr/local/mfs/var/mfs/
[root@mfsmaster mfs]# cp metadata.mfs.empty metadata.mfs[root@mfsmaster mfs]# chown mfs:mfs /usr/local/mfs/var/mfs        //更改属主属组
[root@mfsmaster mfs]# /usr/local/mfs/sbin/mfsmaster start      //启动

停止 Master Server 的命令是/usr/local/mfs/sbin/mfsmaster stop

[root@mfsmaster mfs]# netstat -anpt | grep mfs

3、搭建MetaLogger server

#创建用户

[root@MetaLogger server ~]# useradd -s /sbin/nologin -M mfs

#上传源码包到/opt目录并编译安装

[root@MetaLogger server ~]# cd /opt
[root@MetaLogger server opt]# ll
总用量 1096
-rw-r--r--. 1 root root 1120173 3月  24 16:44 moosefs-3.0.100-1.tar.gz
drwxr-xr-x. 2 root root       6 3月  26 2015 rh
[root@MetaLogger server opt]# tar xzvf moosefs-3.0.100-1.tar.gz
[root@MetaLogger server opt]# cd /opt/moosefs-3.0.100/
[root@MetaLogger server moosefs-3.0.100]#
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfschunkserver \
--disable-mfsmount[root@MetaLogger server moosefs-3.0.100]# make && make install

#复制 MetaLogger server 配置文件

[root@MetaLogger server moosefs-3.0.100]# cd /usr/local/mfs/etc/mfs/
[root@metalogger mfs]# cp mfsmetalogger.cfg.sample mfsmetalogger.cfg

#修改 metalogger 主配置文件, 指定 master 地址

[root@metalogger mfs]# vim /usr/local/mfs/etc/mfs/mfsmetalogger.cfg
MASTER_HOST = 192.168.100.41

#启动mfsmetalogger

[root@MetaLogger server mfs]# /usr/local/mfs/sbin/mfsmetalogger start      //启动
[root@MetaLogger server mfs]# netstat -anpt | grep mfs

4、搭建chunkserver

chunkserver配置完全一致,以chunk1为例,另外两台不再赘述

#创建用户

[root@chunk1 ~]# useradd -s /sbin/nologin -M mfs

#上传源码包到/opt目录并编译安装

[root@chunk1 ~]# cd /opt
[root@chunk1 opt]# tar xzvf moosefs-3.0.100-1.tar.gz
[root@chunk1 opt]# cd /opt/moosefs-3.0.100/[root@chunk1 moosefs-3.0.100]#
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfsmaster \
--disable-mfsmount[root@chunk1 moosefs-3.0.100]# make && make install

#复制 mfschunk 配置文件

[root@chunk1 moosefs-3.0.100]# cd /usr/local/mfs/etc/mfs/
[root@chunk1 mfs]# cp mfschunkserver.cfg.sample mfschunkserver.cfg
[root@chunk1 mfs]# cp mfshdd.cfg.sample mfshdd.cfg

#修改 mfschunk 主配置文件, 指定 master地址

[root@chunk1 mfs]# vim mfschunkserver.cfg
MASTER_HOST = 192.168.100.41
[root@chunk1 mfs]# vim mfshdd.cfg
/data       //末行添加
[root@chunk1 mfs]# mkdir /data
[root@chunk1 mfs]# chown -R mfs:mfs /data

#启动mfschunkserver

[root@chunk1 mfs]# /usr/local/mfs/sbin/mfschunkserver start
[root@chunk1 mfs]# netstat -anpt | grep mfs

5、搭建client

#上传源码包到/opt目录并编译安装

fuse-2.9.2.tar.gz 以及 moosefs-3.0.100-1.tar.gz

#创建用户

[root@client opt]# useradd -s /sbin/nologin -M mfs

#安装 FUSE

[root@client ~]# cd /opt
[root@client opt]# tar xzvf fuse-2.9.2.tar.gz
[root@client opt]# cd fuse-2.9.2
[root@client fuse-2.9.2]# ./configure
[root@client fuse-2.9.2]# make && make install

#设置环境变量

[root@client fuse-2.9.2]# vim /etc/profile
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
[root@client fuse-2.9.2]# source /etc/profile

#安装 MFS 客户端

[root@client fuse-2.9.2]# cd /opt
[root@client opt]# tar xzvf moosefs-3.0.100-1.tar.gz
[root@client opt]# cd /opt/moosefs-3.0.100/
[root@client moosefs-3.0.100]#
./configure \
--prefix=/usr/local/mfs \
--with-default-user=mfs \
--with-default-group=mfs \
--disable-mfsmaster \
--disable-mfschunkserver \
--enable-mfsmount
[root@client moosefs-3.0.100]# make && make install

#挂载 MFS 文件系统

[root@client moosefs-3.0.100]# cd ~
[root@client ~]#  mkdir /opt/mfs
[root@client ~]#  modprobe fuse                 //加载 fuse 模块到内核
[root@client ~]#  /usr/local/mfs/bin/mfsmount /opt/mfs -H 192.168.100.41     #master地址
[root@client ~]# df -hT
文件系统            类型      容量  已用  可用 已用% 挂载点
devtmpfs            devtmpfs  1.9G     0  1.9G    0% /dev
tmpfs               tmpfs     1.9G     0  1.9G    0% /dev/shm
tmpfs               tmpfs     1.9G   13M  1.9G    1% /run
tmpfs               tmpfs     1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sda3           xfs        17G  4.1G   13G   25% /
/dev/sda1           xfs      1014M  179M  836M   18% /boot
tmpfs               tmpfs     378M  4.0K  378M    1% /run/user/42
tmpfs               tmpfs     378M   56K  378M    1% /run/user/0
/dev/sr0            iso9660   4.4G  4.4G     0  100% /mnt
192.168.100.41:9421 fuse.mfs   82G   12G   71G   14% /opt/mfs

永久挂载(采用脚本自启的方式)

[root@client ~]# cd /etc/profile.d
[root@client profile.d]# vim mount.sh
#!/bin/bash
/usr/local/mfs/bin/mfsmount /opt/mfs -H 192.168.100.41 >/dev/null 2>&1

如果要卸载 MFS, 使用命令 umount /opt/mfs 即可

6、MFS 常用操作

MFS 在客户端安装完毕后, 会生成/usr/local/mfs/bin/目录, 在这个目录下有很多命令是用户所需要的。 为了方便使用这些命令, 可将/usr/local/mfs/bin 加入到环境变量中

[root@client ~]# vim /etc/profile
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
export PATH=/usr/local/mfs/bin:$PATH                 //末尾添加
[root@client ~]# source /etc/profile

mfsgetgoal 命令用来查询文件被复制的份数, 利用-r 命令可以对整个目录进行递归,goal 是指文件被复制的份数

[root@client ~]# mfsgetgoal -r /opt/mfs
/opt/mfs:directories with goal          2 :          1


命令 mfsgetgoal 用来设置文件被复制的份数, 生产环境 Chunk Server 节点数量应至少大于 2, 文件副本数小于等于 Chunk Server 服务器的数量

[root@client ~]# mfssetgoal -r 3 /opt/mfs/
/opt/mfs/:inodes with goal changed:                       1inodes with goal not changed:                   0inodes with permission denied:                  0

三、测试

1、创建文件测试如下

[root@client ~]# cd /opt/mfs/
[root@client mfs]# touch 51xit
[root@client mfs]# mfsgetgoal 51xit
51xit: 3

2、Master Server----启动监控程序

[root@mfsmaster ~]#  /usr/local/mfs/sbin/mfscgiserv

#在宿主机中打开浏览器访问

http://192.168.100.40:9425
http://192.168.100.40:9425/mfs.cgi?masterhost=mfsmaster //注意主机名

其中各部分的含义如下

Info 部分: 显示了 MFS 的基本信息。
Servers 部分: 列出现有 Chunk Server。
Disks 部分: 列出现有 Chunk Server 硬盘信息。
Exports 部分: 列出可被挂载的目录。
Mounts 部分: 列出被挂载的目录。
Operations 部分: 显示正在执行的操作。
Resources 部分: 列出当前存储信息。
Quitas 部分: 列出当前配额信息。
Master charts 部分: 显示 Master Server 的操作情况, 读、 写、 删除等操作。
Server charts 部分: 显示 Chunk Server 的操作情况、 数据传输率及系统状态。

四、MFS 集群的启动与停止

1、MFS 集群启动顺序

(1) 启动 mfsmaster 进程。
(2) 启动所有的 mfschunkserver 进程。
(3) 启动 mfsmetalogger 进程(如果配置了 mfsmetalogger)。
(4) 在所有的客户端挂载 MFS 文件系统。

2、MFS 集群停止顺序

(1) 在所有的客户端卸载 MFS 文件系统。
(2) 用 mfschunkserver stop 命令停止 chunkserver 进程。
(3) 用 mfsmetalogger stop 命令停止 metalogger 进程。
(4) 用 mfsmaster stop 命令停止 master 进程

五、MFS 灾难恢复

整个 MFS 体系中, 直接断电只有 Master 有可能无法启动

可以在 master 上使用命令 /usr/local/mfs/sbin/mfsmaster -a 修复

1、MFS 元数据通常有两部分的数据, 分别如下
① 主要元数据文件 metadata.mfs, 当 mfsmaster 运行时会被命名为 metadata.mfs.back。

② 元数据改变日志 changelog.*.mfs, 存储了过去的 N 小时的文件改变(N 的数值是由BACK_LOGS 参数设置的, 参数的设置在 mfschunkserver.cfg 配置文件中)。

2、在 Master 发生故障时, 可以从 MetaLogger 中恢复 Master, 步骤如下

① 安装一台 mfsmaster, 利用同样的配置来配置这台 mfsmaster。

②将 metalogger 上 /usr/local/mfs/var/mfs/目录下的文件复制到 mfsmaster 相应的目录中

[root@mfsmaster ~]#scp root@192.168.100.41:/usr/local/mfs/var/mfs/* /usr/local/mfs/var/mfs/

利用 mfsmetarestore 命令合并元数据 changelogs

[root@mfsmaster ~]#/usr/local/mfs/sbin/mfsmaster -a

如果是全新安装的 Master, 恢复数据后, 要更改 metalogger 和 chunkserver 配置MASTER_HOST 的 IP, 客户端也需要重新挂载

MFS分布式文件系统相关推荐

  1. MFS分布式文件系统的搭建

    MFS分布式文件系统的搭建 一:介绍MFS ​ MFS(MooseFS)是一个具有容错性的网络分布式文件系统.它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一的资源. MFS也像其他类的 ...

  2. MFS分布式文件系统的部署

    目录 一.MFS分布式文件系统详述 分布式简介 MFS分布式文件系统的原理 MFS文件系统的组成 MFS文件系统的工作过程 二.MFS分布式文件系统的部署 实验环境 配置Master Server 配 ...

  3. MFS分布式文件系统存储之文件的删除恢复

    MFS分布式文件系统存储之文件的删除恢复 在MFS分布式集群中,Client 客户端的~/mfs/bin下具有很多的脚本命令,实现对master server虚拟共享目录的管理. 今天主要介绍的是其下 ...

  4. MFS分布式文件系统及监控

    MFS分布式文件系统 文件系统:ext4.xfs.ext3 mooseFS(moose 驼鹿)是一款网络分布式文件系统.它把数据分散在多台服务器上,但对于用户来讲,看到的只是一个源.MFS也像其他类U ...

  5. MFS分布式文件系统2-master双机热备实现高可用

    文章目录 前言 1.mfs1和mfs5做文件系统同步 1.1 将mfs5主机改为master主机 1.2 配置iscsi文件系统并同步元数据 1.2.1 删除moosefs2上的硬盘 1.2.2 配置 ...

  6. SHELL脚本自动化部署MFS分布式文件系统

    前言:在我们运维中,最常见的文件存储系统大概就是NFS了,但是随着网站压力不断增加,NFS渐渐不能满足企业数据增长需求,有木有自动扩展.高效.部署.实施方便快捷的分布式存储供我们使用呢?那我们来看一下 ...

  7. 详细讲解MFS分布式文件系统搭建(内含源码包)

    初步了解分布式原理: 分布式文件系统(Distributed File Systemm)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连.简单来说,就是把一些分散 ...

  8. CentOS下MFS分布式文件系统搭建

    MFS : 网络分布式文件系统中的一种 Project web site: http://www.moosefs.com/ Installation and using MooseFS: http:/ ...

  9. MFS分布式文件系统搭建

    MFS分布式文件系统介绍 m ooseFS(moose 驼鹿)是一款网络分布式文件系统.它把数据分散在多台服务器上,但对于用户来讲,看到的只是一个源.MFS也像其他类unix文件系统一样,包含了层级结 ...

  10. mfs文件服务器,MFS分布式文件系统搭建

    MFS概述 MooseFS是一个具有容错性的网络分布式文件系统.它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一的资源. 优势 1.高可靠(数据的多个拷贝被存储在不同的计算机上) 2.通 ...

最新文章

  1. ValueError: The data property of a figure may only be assigned a list or tuple that contains a .....
  2. 记一次数据库事务的并发同步控制
  3. c#打包工具支持bat_程序打包工具
  4. FFmpeg 中AVPacket的使用
  5. Android之基于xmpp openfire smack开发之Android消息推送技术原理分析和实践[4]
  6. 成都软件工程师python_为什么每个软件工程师都应该学习Python?
  7. java ut_【JAVA UT】2、写UT的科学步骤
  8. 腾讯微博qq说说备份导出工具_电竞和游戏火了,和它走得很近的腾讯微博却早已透心凉...
  9. 解决新版本谷歌浏览器CROS跨域问题
  10. 思科ccna认证怎么样关于思科ccnaDLSW技术简述
  11. 洛谷P2404 自然数的拆分问题
  12. 假如你是QQ的产品经理
  13. php空间自动发邮件,PHP 发送QQ邮件【实例】
  14. 【Markdown笔记】设置字体颜色
  15. 曾经东汉最大的天文台,现在却踪迹全无,究竟是什么原因呢?
  16. java从数据库导出语音文件_从数据库导出数据
  17. JAVA计算机毕业设计学生会管理系统2021Mybatis+源码+数据库+lw文档+系统+调试部署
  18. C# WinForm解决Panel控件中的图片刷新时会闪烁的问题
  19. 一个简单的PLC运动控制项目
  20. 文件头、文件尾、特征码、常见文件的特征码

热门文章

  1. mongodb 恢复_MongoDB时间点恢复
  2. html 抽签分小组代码,javascript随机抽签程序
  3. 锐捷——DCHP动态分配IP地址
  4. AJAX 聊天室实现原理终极解析
  5. IMU惯导相关开源项目整理
  6. Python 计算思维训练——数组和曲线绘制练习(一)
  7. 数据科学猫:数据分析的主要类型、描述性分析、预测性分析与规范性分析
  8. CSAPP lab2 二进制拆弹 binary bombs phase_5
  9. HTML5教程之FileList文件列表对象的应用
  10. MySQL 之 The definition of table 'p' prevents operation UPDATE on table 'post'.