分布式体系介绍及MogileFS装置、根本装备51CTO博客 - 超凡娱乐

分布式体系介绍及MogileFS装置、根本装备51CTO博客

2019年02月28日12时45分04秒 | 作者: 绍晖 | 标签: 体系,装备,装置 | 浏览: 1645

散布式体系介绍及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


版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表超凡娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章