返回顶部
首页 > 资讯 > 数据库 >分布式系统介绍及MogileFS安装、基本配置
  • 154
分享到

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

2024-04-02 19:04:59 154人浏览 安东尼
摘要

分布式系统介绍及MogileFS安装、基本配置分布式 MogileFS大纲前言:什么是分布式?分布式存在的意义?分布式的难点及CAP、BASE、2PC、X/Open XA介绍分布式存储和分布式文件

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


分布式 MogileFS

  • 大纲

    • 前言:

    • 什么是分布式?

    • 分布式存在的意义?

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

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

    • MogileFS实现原理:

    • MogileFS编译安装和配置

    • 总结

前言:

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

什么是分布式?

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

简单来说分布式就是将一个系统的各个组件(mysqlPHP、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, 从而实现数据一致性

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




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安装、基本配置

MogileFS的特性:

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

  • 无单点故障

  • 自动复制文件

  • 简单的命名空间

  • 不需要RAID

  • 不能追加, 随机写

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

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

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安装、基本配置

总结

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

 
作者: AnyISaIln QQ: 1449472454 
感谢: MageEdu


您可能感兴趣的文档:

--结束END--

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

本文链接: https://lsjlt.com/news/42324.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 分布式系统介绍及MogileFS安装、基本配置
    分布式系统介绍及MogileFS安装、基本配置分布式 MogileFS大纲前言:什么是分布式分布式存在的意义分布式的难点及CAP、BASE、2PC、X/Open XA介绍分布式存储和分布式文件系统...
    99+
    2024-04-02
  • Linux系统下OpenSSH的安装及基本配置文件介绍
    这篇文章主要介绍“Linux系统下OpenSSH的安装及基本配置文件介绍”,在日常操作中,相信很多人在Linux系统下OpenSSH的安装及基本配置文件介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Lin...
    99+
    2023-06-12
  • CentOS系统下安装及配置JDK介绍
    目录前言检查并卸载 OpenJDK使用下载好的压缩包方式安装 JDKJDK 环境配置测试配置是否成功通过 yum 命令安装 JDK通过 rpm 命令安装 JDK前言 说到 JDK 就不得不提一下一道老掉牙的面试题: JD...
    99+
    2022-06-04
    CentOS配置JDK步骤 CentOS配置JDK教程
  • JavaScriptwebpack5配置及使用基本介绍
    目录一、webpack1.1 简介1.2 五大核心概念entry (入口)output (出口)loaderplugin (插件)mode (模式)二、配置及使用项目结构使用html...
    99+
    2024-04-02
  • ACL介绍及基本命令配置
    ACL(访问控制列表) 一、ACL概念1、ACL介绍即作用2、ACL工作原理及3、ACL类型 二、命令配置1、基本ACL配置2、高级ACL配置 一、ACL概念 1、ACL介绍即作用 ACL:又称访问控制列表,它只是一个匹...
    99+
    2023-08-19
    网络 linux 服务器
  • 分布式系统及NoSQLl简介
    分布式系统及NoSQL简介==============================================================================数据存储 1....
    99+
    2024-04-02
  • python分布式执行框架Ray的介绍及安装
    这篇文章主要讲解了“python分布式执行框架Ray的介绍及安装”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python分布式执行框架Ray的介绍及安装”吧!说明Ray为构建分布式应用程序...
    99+
    2023-06-20
  • 分布式系统CAP的原理介绍
    CAP原理中,有三个要素: 一致性(Consistency) 可用性(Availability) 分区容错性(Partition tolerance) Consistency 一致性 一致性指“all ...
    99+
    2024-04-02
  • MyCat教程三:安装及配置介绍
    一、安装MyCat 1.安装准备环境 1.1 安装JDK   因为MyCat是java开发的,所以需要java虚拟机环境,在Linux节点中安装JDK是必须的。 1.2 放开相关端口   在主从节点上都放开对端口3306...
    99+
    2015-06-08
    MyCat教程三:安装及配置介绍
  • mysql安装及配置步骤详细介绍
    本文主要给大家简单讲讲mysql安装及配置步骤,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望mysql安装及配置步骤这篇文章可以给大家带来一些实际帮助。My...
    99+
    2024-04-02
  • 在CentOS下安装和配置分布式系统Ceph的方法
    这篇文章主要讲解了“在CentOS下安装和配置分布式系统Ceph的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“在CentOS下安装和配置分布式系统Ceph的方法”吧!开发一个分布式文件...
    99+
    2023-06-10
  • Ubuntu安装redis及redis基本配置
    一、安装redis 执行sudo apt-get update更新软件包 root@ubuntu:~# sudo apt-get update 执行sudo apt-get install redis-server,输入y 确认安装并使用空...
    99+
    2023-08-17
    redis ubuntu 数据库 java 前端
  • Cacti中文版的基本安装及配置方式
    本篇内容介绍了“Cacti中文版的基本安装及配置方式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Cacti中文版是用php语言实现的一个软...
    99+
    2023-06-16
  • SpringCloudConfig分布式配置中心使用教程介绍
    目录一、简介二、使用三、热刷新四、Spring Cloud Bus(消息总线)一、简介 Spring Cloud Config为分布式系统中的配置提供服务器端和客户端支持。可以集中管...
    99+
    2022-12-09
    Springcloud Config配置中心 Springcloud Config分布式配置中心
  • SpringCloudConfig分布式配置中心使用介绍详解
    目录1、分布式配置中心应用场景2、Spring Cloud Config2.1、Config简介2.2、Config分布式配置应用2.3、构建Config Server统一配置中心2...
    99+
    2024-04-02
  • 安装及配置mysql的详细步骤介绍
    下文给大家带来关于安装及配置mysql的详细步骤,感兴趣的话就一起来看看这篇文章吧,相信看完安装及配置mysql的详细步骤对大家多少有点帮助吧。一:安装mysql1.在web云服务器上安装mysql:yum...
    99+
    2024-04-02
  • redhat mysql 安装配置及基本操作
    二、安装Mysql  1、下载MySQL的安装文件  安装MySQL需要下面两个文件:  MySQL-server-4.0.16-0.i386.rpm      MySQL-client-4.0....
    99+
    2024-04-02
  • MySQL分布式集群MyCAT(一) 简介及安装
    MyCAT背景       MyCAT的前身,是阿里巴巴于2012年6月19日,正式对外开源的数据库中间件Cobar,Cobar的前身...
    99+
    2024-04-02
  • Linux系统下怎么安装Git分布式版本控制系统
    这篇文章主要讲解了“Linux系统下怎么安装Git分布式版本控制系统”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux系统下怎么安装Git分布式版本控制系统”吧!Git 是一...
    99+
    2023-06-27
  • kafka分布式消息系统基本架构及功能详解
    目录什么是Kafka一、Kafka的基本功能二、Kafka基本架构三、Kafka的实现方法1 发布/订阅模式2 分区四、Kafka的优势和劣势优势劣势Kafka的部署方法Kafka的...
    99+
    2023-03-03
    kafka分布式消息系统架构 kafka 分布式
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作