溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

分布式系統(tǒng)介紹及MogileFS安裝、基本配置

發(fā)布時(shí)間:2020-07-18 16:34:01 來(lái)源:網(wǎng)絡(luò) 閱讀:1408 作者:AnyISalIn 欄目:數(shù)據(jù)庫(kù)

分布式系統(tǒng)介紹及MogileFS安裝、基本配置


分布式 MogileFS

  • 大綱

    • 前言:

    • 什么是分布式?

    • 分布式存在的意義?

    • 分布式的難點(diǎn)及CAP、BASE、2PC、X/Open XA介紹

    • 分布式存儲(chǔ)和分布式文件系統(tǒng):

    • MogileFS實(shí)現(xiàn)原理:

    • MogileFS編譯安裝和配置

    • 總結(jié)

前言:

不知不覺(jué)中我們就進(jìn)入大數(shù)據(jù)時(shí)代, 什么是大數(shù)據(jù)? 什么是分布式? 什么是云計(jì)算? 我們?cè)诤竺娑紝⒔榻B, 本篇文章, 我們主要討論分布式系統(tǒng);

什么是分布式?

分布式這個(gè)詞聽(tīng)起來(lái)很高大上, 實(shí)際上在我們以前(作者博客)經(jīng)常構(gòu)建分布式系統(tǒng), 從最初的分離LAMP中的MySQL 到引入Varnish緩存頁(yè)面, 再到使用LVS負(fù)載均衡Nginx|Apache, Nginx負(fù)載均衡Tomcat等等, 廣義上都算是分布式系統(tǒng).

簡(jiǎn)單來(lái)說(shuō)分布式就是將一個(gè)系統(tǒng)的各個(gè)組件(MySQL、PHP、Apache …)分布在網(wǎng)絡(luò)上的各臺(tái)主機(jī), 并且各組件之間僅通過(guò)消息傳遞來(lái)通信并協(xié)調(diào)工作

分布式存在的意義?

其實(shí)我們?cè)谥柏?fù)載均衡相關(guān)的博文中已經(jīng)回答過(guò)了, 主要有以下問(wèn)題:

  1. 垂直擴(kuò)展的性價(jià)比不高

  2. 單機(jī)擴(kuò)展存在性能上升的臨界點(diǎn)

  3. 處于穩(wěn)定性及可用性考慮, 單機(jī)會(huì)存在多方面的問(wèn)題

分布式的難點(diǎn)及CAP、BASE、2PC、X/Open XA介紹

分布式系統(tǒng)存在以下難點(diǎn)

  • 缺乏全局時(shí)鐘

  • 面對(duì)故障時(shí)的獨(dú)立性

  • 很難處理單點(diǎn)故障

  • 很難實(shí)現(xiàn)事務(wù)

事務(wù)要具有ACID. 但是這在分布式系統(tǒng)中很難實(shí)現(xiàn)

  • A: Atomicity 原子性

  • C: Consistency 一致性

  • I: Isolation 隔離性

  • D: Durability 持久性

很多數(shù)據(jù)庫(kù)都能實(shí)現(xiàn)單機(jī)事務(wù), 但是一旦構(gòu)建為分布式系統(tǒng), 單機(jī)的ACID就不能實(shí)現(xiàn)了, 有兩種選擇, 1、放棄事務(wù) 2、引入分布式事務(wù);

分布式事務(wù)的實(shí)現(xiàn):

一次事務(wù)中的主要角色:

  • 事務(wù)的參與者

  • 支持事務(wù)的服務(wù)器

  • 資源服務(wù)器

  • 事務(wù)管理器

分布式事務(wù)的模型和規(guī)范: Distributed Transaction Processing: The XA Specification 
X/Open DTP: Distribution Transaction Process

  • AP: 應(yīng)用程序

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

  • TM: Transaction Manager, 負(fù)責(zé)協(xié)調(diào)和管理事務(wù) 
    提供給AP編程接口, 并管理資源管理器

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

如圖: 一次事務(wù)首先要準(zhǔn)備資源, 所有節(jié)點(diǎn)的資源都準(zhǔn)備好后, 同時(shí)進(jìn)行Commit, 如果中途中斷則會(huì)一起ROLLBACK, 從而實(shí)現(xiàn)數(shù)據(jù)一致性

分布式系統(tǒng)介紹及MogileFS安裝、基本配置




CAP: CAP的更多信息

2000年7月 由 Eric Brewer提出, 并經(jīng)過(guò)他人證明, 分布式系統(tǒng)不能同時(shí)滿足CAP

  • C: Consistency 一致性 所有主機(jī)的數(shù)據(jù)都是同步的

  • A: Avaiability 可用性 能夠保證系統(tǒng)的可用性(有主機(jī)宕機(jī)不影響用戶)

  • P: Partition tolerance 分區(qū)容錯(cuò)性: 即使網(wǎng)絡(luò)出現(xiàn)故障從而分區(qū), 不影響系統(tǒng)運(yùn)行

一般情況下的分布式系統(tǒng)都是在C(Consistency)進(jìn)行妥協(xié)

BASE: 可替代ACID;

  • BA: Basically Availibale 基本可用性

  • S: Soft state 接受一段時(shí)間的狀態(tài)不能同步

  • E: Eventually Consistent 最終一致性

相比于ACID而言, BASE并沒(méi)有那么苛刻, BASE允許部分的失敗但是不會(huì)引起系統(tǒng)的故障 
DNS就是最著名的Eventually Consistent的實(shí)現(xiàn)

分布式存儲(chǔ)和分布式文件系統(tǒng):

存儲(chǔ)一般分為兩種類型:

  • 集中式: 
    NAS: Network Attached Storage; 文件系統(tǒng)級(jí)別, 例如NFS, FTP, SAMBA… 
    SAN: Storage Aera Network; 塊級(jí)別, 例如IP SAN, FC SAN…

  • 分布式 
    中心節(jié)點(diǎn)存儲(chǔ): 每個(gè)集群中有節(jié)點(diǎn)專門(mén)用來(lái)存儲(chǔ)元數(shù)據(jù), 其他節(jié)點(diǎn)則存儲(chǔ)部分?jǐn)?shù)據(jù) 
    無(wú)中心節(jié)點(diǎn)存儲(chǔ): 每個(gè)集群各節(jié)點(diǎn)都存儲(chǔ)元數(shù)據(jù)和部分?jǐn)?shù)據(jù)

分布式存儲(chǔ)和分布式文件系統(tǒng):

  • 文件系統(tǒng): 有文件系統(tǒng)接口

  • 存儲(chǔ): 無(wú)文件系統(tǒng)接口, 通過(guò)API訪問(wèn)

常見(jiàn)的實(shí)現(xiàn): 
GFS: Google File System 
分布式系統(tǒng)的開(kāi)山鼻祖, 由于Google內(nèi)部需要遂開(kāi)發(fā), 后來(lái)發(fā)布論文公布其技術(shù)細(xì)節(jié), 但是沒(méi)有開(kāi)源 
HDFS: Hadoop Distribution File System 
通過(guò)Google發(fā)布的論文, 從而實(shí)現(xiàn)HDFS

GFS和HDFS都將元數(shù)據(jù)存儲(chǔ)于內(nèi)存中, 定期存儲(chǔ)在持久存儲(chǔ)中 、只適合存儲(chǔ)百萬(wàn)、千萬(wàn)級(jí)別的 大文件

GlusterFS: 
去中心化設(shè)計(jì), 沒(méi)有元數(shù)據(jù)節(jié)點(diǎn) 
Ceph: 
Linux內(nèi)核級(jí)實(shí)現(xiàn)的文件系統(tǒng), 已經(jīng)收錄Linux內(nèi)核 
MogileFS: 
適用于存儲(chǔ)海量小文件, 使用perl語(yǔ)言編寫(xiě), 國(guó)內(nèi)有人使用C語(yǔ)言重寫(xiě)并開(kāi)源為FastDFS 
TFS: 
TaoBao FileSystem, 基于HDFS開(kāi)發(fā) 適用于存儲(chǔ)海量小文件

MogileFS實(shí)現(xiàn)原理:

MogileFS中的術(shù)語(yǔ):

tracker: 借助數(shù)據(jù)庫(kù)保存各個(gè)節(jié)點(diǎn)文件的元數(shù)據(jù)信息, 便于檢索定位數(shù)據(jù)位置并監(jiān)控各個(gè)節(jié)點(diǎn), 告知客戶端存儲(chǔ)區(qū)的位置并指揮storage節(jié)點(diǎn)復(fù)制數(shù)據(jù)副本, 進(jìn)程為mogilefsd

database: 為tracker節(jié)點(diǎn)存儲(chǔ)節(jié)點(diǎn)文件的元數(shù)據(jù)信息

storage: 將指定域中的鍵轉(zhuǎn)換為特有的文件名存儲(chǔ)于在特定的設(shè)備文件中, 轉(zhuǎn)換后文件名為值, storage自動(dòng)維護(hù)鍵值之間的對(duì)應(yīng)關(guān)系, storage節(jié)點(diǎn)使用http進(jìn)行數(shù)據(jù)傳輸, 依賴于perbal, 進(jìn)程為mogstored, perbal

Domain: 一個(gè)域中的鍵值是唯一的, 一個(gè)MogileFS可以有多個(gè)域來(lái)存儲(chǔ)不同類型的文件

Class: 復(fù)制的最小單位, 管理文件屬性, 定義文件存儲(chǔ)在不同設(shè)備上的份數(shù)

device: 一個(gè)存儲(chǔ)節(jié)點(diǎn), 可以有多個(gè)device, 就是用來(lái)存放文件的目錄, 每個(gè)設(shè)備都有一個(gè)設(shè)備ID, 需要在mogstored配置文件中docroot配置, 設(shè)備不能刪除, 只能將設(shè)備的狀態(tài)置為dead, 置為dead之后數(shù)據(jù)就無(wú)法恢復(fù)了, 并且設(shè)備ID也無(wú)法再使用

MogileFS Architecture:

分布式系統(tǒng)介紹及MogileFS安裝、基本配置

MogileFS的特性:

  • 工作的應(yīng)用層, 不需要特殊的組件

  • 無(wú)單點(diǎn)故障

  • 自動(dòng)復(fù)制文件

  • 簡(jiǎn)單的命名空間

  • 不需要RAID

  • 不能追加, 隨機(jī)寫(xiě)

  • 數(shù)據(jù)通過(guò)HTTP/WebDAV服務(wù)上傳到Storage Node(mogstored)

  • MySQL存儲(chǔ)MogileFS元數(shù)據(jù)(命名空間、位置)

MogileFS的高可用架構(gòu):

分布式系統(tǒng)介紹及MogileFS安裝、基本配置

MogileFS編譯安裝和配置

本我來(lái)是打算進(jìn)行編譯安裝的, 但是由于各種原因, 我這次就使用rpm包安裝了, 本次rpm包是馬哥提供的.

對(duì)于實(shí)驗(yàn)中的所有操作過(guò)程, 由于時(shí)間原因, 這里都不在敘述 詳情看: 官方WIKI

實(shí)驗(yàn)環(huán)境

  • node6 172.16.1.7 tracker, database

  • node7 172.16.1.8 storage

  • node8 172.16.1.9 storage

安裝: 需要epel源. 每一臺(tái)主機(jī)都要安裝

[root@node6~] yum install perl-Net-Netmask perl-IO-AIO  #每一臺(tái)主機(jī)都必須安裝, 否則可能導(dǎo)致mogstored不能正常監(jiān)聽(tīng)端口
[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  #每一臺(tái)主機(jī)都必須安裝, 否則可能導(dǎo)致mogstored不能正常監(jiān)聽(tīng)端口
[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  #每一臺(tái)主機(jī)都必須安裝, 否則可能導(dǎo)致mogstored不能正常監(jiān)聽(tīng)端口
[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

配置數(shù)據(jù)庫(kù):

[root@node6~] service mysqld start

mysql> GRANT ALL ON *.* TO root@'%' IDENTIFIED BY 'passwd' ;  #配置一個(gè)可以遠(yuǎn)程連接的root用戶
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL ON mogilefs.* TO  mogileuser@'%' IDENTIFIED BY 'passwd';  #配置一個(gè)可管理mogilefs數(shù)據(jù)庫(kù)的用戶
Query OK, 0 rows affected (0.00 sec)

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

mysql> CREATE DATABASE mogilefs;   #創(chuàng)建mogilefs數(shù)據(jù)庫(kù)
Query OK, 1 row affected (0.00 sec)

[root@node6~] mogdbsetup --dbhost=172.16.1.7 --dbuser=mogileuser --dbpass=passwd  --dbname=mogilefs --dbrootpass=passwd  #生成數(shù)據(jù)表

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;   #查看表有沒(méi)有生成
       +----------------------+
       | 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%

創(chuàng)建域

[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


創(chuàng)建類

[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

驗(yàn)證

分布式系統(tǒng)介紹及MogileFS安裝、基本配置

總結(jié)

MogileFS配置還是很Easy的, 但是分布式理論比配置更為重要, 大家一定要牢記在心! 
作者水平很低, 如果有錯(cuò)誤及時(shí)指出, 如果你覺(jué)得本文寫(xiě)的好請(qǐng)點(diǎn)一波贊~(≧▽≦)/~

 
作者: AnyISaIln QQ: 1449472454 
感謝: MageEdu


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI