千家信息网

分布式系统介绍及MogileFS安装、基本配置

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,分布式系统介绍及MogileFS安装、基本配置分布式 MogileFS大纲前言:什么是分布式?分布式存在的意义?分布式的难点及CAP、BASE、2PC、X/Open XA介绍分布式存储和分布式文件系统
千家信息网最后更新 2026年10月31日分布式系统介绍及MogileFS安装、基本配置

分布式系统介绍及MogileFS安装、基本配置


分布式 MogileFS

  • 大纲

    • 前言:

    • 什么是分布式?

    • 分布式存在的意义?

    • 分布式的难点及CAP、BASE、2PC、X/Open XA介绍

    • 分布式存储和分布式文件系统:

    • MogileFS实现原理:

    • MogileFS编译安装和配置

    • 总结

前言:

不知不觉中我们就进入大数据时代, 什么是大数据? 什么是分布式? 什么是云计算? 我们在后面都将介绍, 本篇文章, 我们主要讨论分布式系统;

什么是分布式?

分布式这个词听起来很高大上, 实际上在我们以前(作者博客)经常构建分布式系统, 从最初的分离LAMP中的MySQL 到引入Varnish缓存页面, 再到使用LVS负载均衡Nginx|Apache, Nginx负载均衡Tomcat等等, 广义上都算是分布式系统.

简单来说分布式就是将一个系统的各个组件(MySQL、PHP、Apache …)分布在网络上的各台主机, 并且各组件之间仅通过消息传递来通信并协调工作

分布式存在的意义?

其实我们在之前负载均衡相关的博文中已经回答过了, 主要有以下问题:

  1. 垂直扩展的性价比不高

  2. 单机扩展存在性能上升的临界点

  3. 处于稳定性及可用性考虑, 单机会存在多方面的问题

分布式的难点及CAP、BASE、2PC、X/Open XA介绍

分布式系统存在以下难点

  • 缺乏全局时钟

  • 面对故障时的独立性

  • 很难处理单点故障

  • 很难实现事务

事务要具有ACID. 但是这在分布式系统中很难实现

  • A: Atomicity 原子性

  • C: Consistency 一致性

  • I: Isolation 隔离性

  • D: Durability 持久性

很多数据库都能实现单机事务, 但是一旦构建为分布式系统, 单机的ACID就不能实现了, 有两种选择, 1、放弃事务 2、引入分布式事务;

分布式事务的实现:

一次事务中的主要角色:

  • 事务的参与者

  • 支持事务的服务器

  • 资源服务器

  • 事务管理器

分布式事务的模型和规范: Distributed Transaction Processing: The XA Specification
X/Open DTP: Distribution Transaction Process

  • AP: 应用程序

  • RM: Resource Manager, 资源管理器, 一般是DBMS

  • TM: Transaction Manager, 负责协调和管理事务
    提供给AP编程接口, 并管理资源管理器

2PC:
Two Phase Commitment Protocol 两段式提交

如图: 一次事务首先要准备资源, 所有节点的资源都准备好后, 同时进行Commit, 如果中途中断则会一起ROLLBACK, 从而实现数据一致性




CAP: CAP的更多信息

2000年7月 由 Eric Brewer提出, 并经过他人证明, 分布式系统不能同时满足CAP

  • C: Consistency 一致性 所有主机的数据都是同步的

  • A: Avaiability 可用性 能够保证系统的可用性(有主机宕机不影响用户)

  • P: Partition tolerance 分区容错性: 即使网络出现故障从而分区, 不影响系统运行

一般情况下的分布式系统都是在C(Consistency)进行妥协

BASE: 可替代ACID;

  • BA: Basically Availibale 基本可用性

  • S: Soft state 接受一段时间的状态不能同步

  • E: Eventually Consistent 最终一致性

相比于ACID而言, BASE并没有那么苛刻, BASE允许部分的失败但是不会引起系统的故障
DNS就是最著名的Eventually Consistent的实现

分布式存储和分布式文件系统:

存储一般分为两种类型:

  • 集中式:
    NAS: Network Attached Storage; 文件系统级别, 例如NFS, FTP, SAMBA…
    SAN: Storage Aera Network; 块级别, 例如IP SAN, FC SAN…

  • 分布式
    中心节点存储: 每个集群中有节点专门用来存储元数据, 其他节点则存储部分数据
    无中心节点存储: 每个集群各节点都存储元数据和部分数据

分布式存储和分布式文件系统:

  • 文件系统: 有文件系统接口

  • 存储: 无文件系统接口, 通过API访问

常见的实现:
GFS: Google File System
分布式系统的开山鼻祖, 由于Google内部需要遂开发, 后来发布论文公布其技术细节, 但是没有开源
HDFS: Hadoop Distribution File System
通过Google发布的论文, 从而实现HDFS

GFS和HDFS都将元数据存储于内存中, 定期存储在持久存储中 、只适合存储百万、千万级别的 大文件

GlusterFS:
去中心化设计, 没有元数据节点
Ceph:
Linux内核级实现的文件系统, 已经收录Linux内核
MogileFS:
适用于存储海量小文件, 使用perl语言编写, 国内有人使用C语言重写并开源为FastDFS
TFS:
TaoBao FileSystem, 基于HDFS开发 适用于存储海量小文件

MogileFS实现原理:

MogileFS中的术语:

tracker: 借助数据库保存各个节点文件的元数据信息, 便于检索定位数据位置并监控各个节点, 告知客户端存储区的位置并指挥storage节点复制数据副本, 进程为mogilefsd

database: 为tracker节点存储节点文件的元数据信息

storage: 将指定域中的键转换为特有的文件名存储于在特定的设备文件中, 转换后文件名为值, storage自动维护键值之间的对应关系, storage节点使用http进行数据传输, 依赖于perbal, 进程为mogstored, perbal

Domain: 一个域中的键值是唯一的, 一个MogileFS可以有多个域来存储不同类型的文件

Class: 复制的最小单位, 管理文件属性, 定义文件存储在不同设备上的份数

device: 一个存储节点, 可以有多个device, 就是用来存放文件的目录, 每个设备都有一个设备ID, 需要在mogstored配置文件中docroot配置, 设备不能删除, 只能将设备的状态置为dead, 置为dead之后数据就无法恢复了, 并且设备ID也无法再使用

MogileFS Architecture:

MogileFS的特性:

  • 工作的应用层, 不需要特殊的组件

  • 无单点故障

  • 自动复制文件

  • 简单的命名空间

  • 不需要RAID

  • 不能追加, 随机写

  • 数据通过HTTP/WebDAV服务上传到Storage Node(mogstored)

  • MySQL存储MogileFS元数据(命名空间、位置)

MogileFS的高可用架构:

MogileFS编译安装和配置

本我来是打算进行编译安装的, 但是由于各种原因, 我这次就使用rpm包安装了, 本次rpm包是马哥提供的.

对于实验中的所有操作过程, 由于时间原因, 这里都不在叙述 详情看: 官方WIKI

实验环境

  • node6 172.16.1.7 tracker, database

  • node7 172.16.1.8 storage

  • node8 172.16.1.9 storage

安装: 需要epel源. 每一台主机都要安装

[root@node6~] yum install perl-Net-Netmask perl-IO-AIO  #每一台主机都必须安装, 否则可能导致mogstored不能正常监听端口
[root@node6~] yum localinstall MogileFS-Server-2.46-2.el6.noarch.rpm MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm MogileFS-Utils-2.19-1.el6.noarch.rpm Perlbal-1.78-1.el6.noarch.rpm Perlbal-doc-1.78-1.el6.noarch.rpm perl-MogileFS-Client-1.14-1.el6.noarch.rpm perl-Net-Netmask-1.9015-8.el6.noarch.rpm perl-Perlbal-1.78-1.el6.noarch.rpm
[root@node6~] yum install mysql-server
[root@node6~] scp *.rpm 172.16.1.8:/root/
[root@node6~] scp *.rpm 172.16.1.9:/root/

[root@node7~] yum install perl-Net-Netmask perl-IO-AIO #每一台主机都必须安装, 否则可能导致mogstored不能正常监听端口
[root@node7~] yum localinstall MogileFS-Server-2.46-2.el6.noarch.rpm MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm MogileFS-Utils-2.19-1.el6.noarch.rpm Perlbal-1.78-1.el6.noarch.rpm Perlbal-doc-1.78-1.el6.noarch.rpm perl-MogileFS-Client-1.14-1.el6.noarch.rpm perl-Net-Netmask-1.9015-8.el6.noarch.rpm perl-Perlbal-1.78-1.el6.noarch.rpm

[root@node8~] yum install perl-Net-Netmask perl-IO-AIO #每一台主机都必须安装, 否则可能导致mogstored不能正常监听端口
[root@node8~] yum localinstall MogileFS-Server-2.46-2.el6.noarch.rpm MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm MogileFS-Utils-2.19-1.el6.noarch.rpm Perlbal-1.78-1.el6.noarch.rpm Perlbal-doc-1.78-1.el6.noarch.rpm perl-MogileFS-Client-1.14-1.el6.noarch.rpm perl-Net-Netmask-1.9015-8.el6.noarch.rpm perl-Perlbal-1.78-1.el6.noarch.rpm

配置数据库:

[root@node6~] service mysqld start

mysql> GRANT ALL ON *.* TO root@'%' IDENTIFIED BY 'passwd' ; #配置一个可以远程连接的root用户
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL ON mogilefs.* TO mogileuser@'%' IDENTIFIED BY 'passwd'; #配置一个可管理mogilefs数据库的用户
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE DATABASE mogilefs; #创建mogilefs数据库
Query OK, 1 row affected (0.00 sec)

[root@node6~] mogdbsetup --dbhost=172.16.1.7 --dbuser=mogileuser --dbpass=passwd --dbname=mogilefs --dbrootpass=passwd #生成数据表

mysql> USE mogilefs;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> SHOW TABLES; #查看表有没有生成
+----------------------+
| Tables_in_mogilefs |
+----------------------+
| checksum |
| class |
| device |
| domain |
| file |
| file_on |
| file_on_corrupt |
| file_to_delete |
| file_to_delete2 |
| file_to_delete_later |
| file_to_queue |
| file_to_replicate |
| fsck_log |
| host |
| server_settings |
| tempfile |
| unreachable_fids |
+----------------------+
17 rows in set (0.00 sec)

配置mogilefsd

[root@node6~] vim /etc/mogilefs/mogilefsd.conf
db_dsn = DBI:mysql:mogilefs:host=172.16.1.7
db_user = mogileuser
db_pass = passwd
listen = 0.0.0.0:7001
conf_port = 7001

[root@node6~] service mogilefsd start
Starting mogilefsd [ OK ]



[root@node6~] mogadm host add node1 --ip=172.16.1.7 alive
[root@node6~] mogadm host add node2 --ip=172.16.1.8 alive
[root@node6~] mogadm host add node3 --ip=172.16.1.9 alive
[root@node6~] mogadm host list
node1 [1]: down
IP: 172.16.1.7:7500

node2 [2]: down
IP: 172.16.1.8:7500

node3 [3]: down
IP: 172.16.1.9:7500

配置mogstored

[root@node6~] mkdir /data/mogilefs/dev1 -pv
mkdir: created directory `/data'
mkdir: created directory `/data/mogilefs'
mkdir: created directory `/data/mogilefs/dev1'
[root@node6~] vim /etc/mogilefs/mogstored.conf
maxconns = 10000
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501
docroot = /data/mogilefs/

[root@node6 ~]# chown mogilefs.mogilefs /data/mogilefs/ -R
[root@node6~] service mogstored start
Starting mogstored [ OK ]

[root@node7~] mkdir /data/mogilefs/dev2 -pv
mkdir: created directory `/data'
mkdir: created directory `/data/mogilefs'
mkdir: created directory `/data/mogilefs/dev2'
[root@node7~] vim /etc/mogilefs/mogstored.conf
maxconns = 10000
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501
docroot = /data/mogilefs/

[root@node7 ~]# chown mogilefs.mogilefs /data/mogilefs/ -R
[root@node7~] service mogstored start
Starting mogstored [ OK ]


[root@node8~] mkdir /data/mogilefs/dev3 -pv
mkdir: created directory `/data'
mkdir: created directory `/data/mogilefs'
mkdir: created directory `/data/mogilefs/dev3'
[root@node8~] vim /etc/mogilefs/mogstored.conf

maxconns = 10000
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501
docroot = /data/mogilefs/

[root@node8 ~]# chown mogilefs.mogilefs /data/mogilefs/ -R
[root@node8~] service mogstored start
Starting mogstored [ OK ]



[root@node6~] mogadm device add node1 1 alive
[root@node6~] mogadm device add node2 2 alive
[root@node6~] mogadm device add node3 3 alive

[root@node6~] mogadm check
Checking trackers...
127.0.0.1:7001 ... OK

Checking hosts...
[ 1] node1 ... OK
[ 2] node2 ... OK
[ 3] node3 ... OK

Checking devices...
host device size(G) used(G) free(G) use% ob state I/O%
---- ------------ ---------- ---------- ---------- ------ ---------- -----
[ 1] dev1 74.435 2.069 72.366 2.78% writeable 28.9
[ 2] dev2 74.435 1.958 72.477 2.63% writeable 0.0
[ 3] dev3 74.435 1.954 72.481 2.63% writeable 0.5
---- ------------ ---------- ---------- ---------- ------
total: 223.306 5.982 217.324 2.68%

创建域

[root@node6~] mogupload --trackers=172.16.1.7 --doma^C
[root@node6~] mogadm domain list
domain class mindevcount replpolicy hashtype
-------------------- -------------------- ------------- ------------ -------
[root@node6~] mogadm domain add files
[root@node6~] mogadm domain add p_w_picpaths
[root@node6~] mogadm domain list
domain class mindevcount replpolicy hashtype
-------------------- -------------------- ------------- ------------ -------
files default 2 MultipleHosts() NONE
p_w_picpaths default 2 MultipleHosts() NONE


创建类

[root@node6~] mogadm class list   
domain class mindevcount replpolicy hashtype
-------------------- -------------------- ------------- ------------ -------
files default 2 MultipleHosts() NONE

p_w_picpaths default 2 MultipleHosts() NONE

[root@node6~] mogadm class add files fulltext --mindevcount=1

[root@node6~] mogadm class list
domain class mindevcount replpolicy hashtype
-------------------- -------------------- ------------- ------------ -------
files default 2 MultipleHosts() NONE
files fulltext 1 MultipleHosts() NONE
p_w_picpaths default 2 MultipleHosts() NONE

上传并查看文件

[root@node6~] mogupload --trackers=172.16.1.7 --domain=files --key='/fstab.txt' --file=/etc/fstab 
[root@node6~] mogfileinfo --trackers=172.16.1.7 --domain=files --key='/fstab.txt'
- file: /fstab.txt
class: default
devcount: 2
domain: files
fid: 2
key: /fstab.txt
length: 711
- http://172.16.1.8:7500/dev2/0/000/000/0000000002.fid
- http://172.16.1.9:7500/dev3/0/000/000/0000000002.fid

验证

总结

MogileFS配置还是很Easy的, 但是分布式理论比配置更为重要, 大家一定要牢记在心!
作者水平很低, 如果有错误及时指出, 如果你觉得本文写的好请点一波赞~(≧▽≦)/~


作者: AnyISaIln QQ: 1449472454
感谢: MageEdu


分布式 数据 文件 存储 系统 事务 节点 配置 主机 设备 管理 故障 数据库 资源 一致 一致性 单机 可用性 均衡 位置 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州为想互联网科技有限公司 互联网和科技技术 A股互联网金融科技公司 唐信互联网科技 米客互联网科技 顺网科技2021年互联网排名 现代互联网科技股 湖南诚度互联网科技有限公司 来此购互联网科技有限公司 科技互联网大厂 米聚互联网科技南京有限公司排面 无锡工业互联网科技有限公司 深圳互联网科技的发展 互联网硬科技公司 世界互联网科技成果奖 玉溪新华互联网科技怎么选 杭州融税互联网科技有限公司 盐城市攀科互联网科技有限公司 互联网对科技影响 恒生互联网科技趋势 互联网科技保险 互联网科技公司税收优惠 互联网科技的 互联网科技素材视频竖屏 贵州叶脉互联网科技有限公司所属行业 玉溪新华互联网科技好不好 互联网科技大赛获奖感言 2021世界互联网领先科技成果发布 北京互联网科技类企业分布 互联网科技快速发展优美句子
0