分佈式存儲系統MogileFS(二)之簡單配置

一、常見的分佈式存儲系統

  目前我們使用的分佈式存儲方面的應用均是有google的幾篇論文演化出來的,下面就是這幾篇論文所出現的架構:

  • Google File System(大規模分散文件系統) :用於分佈式存儲

  • MapReduce (大規模分散FrameWork) :用於分佈式計算

  • BigTable(大規模分散數據庫) :用於列式數據庫

  • Chubby(分散鎖服務)

1、GFS(Google File System)

   Google公司爲了滿足本公司需求而開發的基於Linux的專有分佈式文件系統。。儘管Google公佈了該系統的一些技術細節,但Google並沒有將該系統的軟件部分作爲開源軟件發佈。 下面分佈式文件系統都是類 GFS的產品。

2、HDFS

   Hadoop 實現了一個分佈式文件系統(Hadoop Distributed File System),簡稱HDFS。 Hadoop是Apache Lucene創始人Doug Cutting開發的使用廣泛的文本搜索庫。它起源於Apache Nutch,後者是一個開源的網絡搜索引擎,本身也是Luene項目的一部分。Aapche Hadoop架構是MapReduce算法的一種開源應用,是Google開創其帝國的重要基石。

3、Ceph

   是加州大學聖克魯茲分校的Sage weil攻讀博士時開發的分佈式文件系統。並使用Ceph完成了他的論文。 說 ceph 性能最高,C++編寫的代碼,支持Fuse,並且沒有單點故障依賴, 於是下載安裝, 由於 ceph 使用 btrfs 文件系統, 而btrfs 文件系統需要 Linux 2.6.34 以上的內核才支持。 可是ceph太不成熟了,它基於的btrfs本身就不成熟,它的官方網站上也明確指出不要把ceph用在生產環境中。

4、Lustre

   Lustre是一個大規模的、安全可靠的,具備高可用性的集羣文件系統,它是由甲骨文公司開發和維護的。 該項目主要的目的就是開發下一代的集羣文件系統,可以支持超過10000個節點,數以PB的數據量存儲系統。 目前Lustre已經運用在一些領域,例如HP SFS產品等。

5、MogileFS

   由memcahed的開發公司danga一款perl開發的產品,目前國內使用mogielFS的有圖片託管網站yupoo等。 MogileFS是一套高效的文件自動備份組件,由Six Apart開發,廣泛應用在包括LiveJournal等web2.0站點上。 

MogileFS由3個部分組成:

  第1個部分是server端,包括mogilefsd和mogstored兩個程序。前者即是 mogilefsd的tracker,它將一些全局信息保存在數據庫裏,例如站點domain,class,host等。後者即是存儲節點(store node),它其實是個HTTP Daemon,默認偵聽在7500端口,接受客戶端的文件備份請求。在安裝完後,要運行mogadm工具將所有的store node註冊到mogilefsd的數據庫裏,mogilefsd會對這些節點進行管理和監控。

  第2個部分是utils(工具集),主要是MogileFS的一些管理工具,例如mogadm等。

  第3個部分是客戶端API,目前只有Perl API(MogileFS.pm)、PHP,用這個模塊可以編寫客戶端程序,實現文件的備份管理功能。

6、mooseFS

   支持FUSE,相對比較輕量級,對master服務器有單點依賴,用perl編寫,性能相對較差,國內用的人比較多。

MooseFS與MogileFS的性能測試對比 

7、FastDFS

   是一款類似Google FS的開源分佈式文件系統,是純C語言開發的。 FastDFS是一個開源的輕量級分佈式文件系統,它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件爲載體的在線服務,如相冊網站、視頻網站等等。

8、TFS

   TFS(Taobao !FileSystem)是一個高可擴展、高可用、高性能、面向互聯網服務的分佈式文件系統,主要針對海量的非結構化數據,它構築在普通的Linux機器 集羣上,可爲外部提供高可靠和高併發的存儲訪問。TFS爲淘寶提供海量小文件存儲,通常文件大小不超過1M,滿足了淘寶對小文件存儲的需求,被廣泛地應用 在淘寶各項應用中。它採用了HA架構和平滑擴容,保證了整個文件系統的可用性和擴展性。同時扁平化的數據組織結構,可將文件名映射到文件的物理地址,簡化 了文件的訪問流程,一定程度上爲TFS提供了良好的讀寫性能。

9、GridFS文件系統

   MongoDB是一種知名的NoSql數據庫,GridFS是MongoDB的一個內置功能,它提供一組文件操作的API以利用MongoDB存儲文件,GridFS的基本原理是將文件保存在兩個Collection中,一個保存文件索引,一個保存文件內容,文件內容按一定大小分成若干塊,每一塊存在一個Document中,這種方法不僅提供了文件存儲,還提供了對文件相關的一些附加屬性(比如MD5值,文件名等等)的存儲。文件在GridFS中會按4MB爲單位進行分塊存儲。


二、MogileFS

1、MogileFS的特性 

  • 應用層提供服務,不需要使用核心組件 

  • 無單點(tracker(跟蹤點)mogstore(存儲節點)database(MySQL)) 

  • 自動文件複製:複製的最小單位不是文件,而是class 

  • 傳輸中立:無特殊協議,可以通過NFS或HTTP實現通信 

  • 簡單的命名空間:沒有目錄,直接存在存儲空間上,通過域來實現 

  • 不共享任何數據:

2、Mogilefs基本原理

   MogileFS是一個開源的分佈式文件系統,用於組建分佈式文件集羣,由LiveJournal旗下DangaInteractive公司開發,Danga團隊開發了包括 Memcached、MogileFS、Perlbal等不錯的開源項目:(注:Perlbal是一個強大的Perl寫的反向代理服務器)。MogileFS是一個開源的分佈式文件系統。主要特性包括:應用層的組件、無單點故障、自動文件複製、具有比RAID更好的可靠性、無需RAID支持等……核心角色如下:

  • tracker節點:藉助數據庫保存各節點文件的元數據信息保存每個域中所有鍵的存儲位置分佈,方便檢索定位數據位置的同時監控各節點,告訴客戶端存儲區位置並指揮storage節點複製數據副本,進程名爲mogilefsd(7001)。 

  • database節點:爲tracker節點提供數據存取服務。 

  • storage節點:將指定域中的鍵轉換爲其特有的文件名存儲在指定的設備文件中,轉換後的文件名爲值,storage節點自動維護鍵值的對應關係,storage節點由於使用http進行數據傳輸,因此依賴於perlbal,storage節點前端可以使用nginx進行反向代理,但需要安裝nginx-mogilefs-module-master模塊進行名稱轉換,進程名mogstored(7501),perbal(7500)。 

  • Domain:一個域中的鍵值是惟一的,一個MogileFS可以有多個域,域可以用來存儲不同應用類型的數據的容器。

  • Host:每一個存儲節點稱爲一個主機,一個主機上可以有多個存儲設備(單獨的硬盤),每個設備都有ID號,Domain+Fid用來定位文件。

  • Class:複製最小單位,文件屬性管理,定義文件存儲在不同設備上份數。

3、mogilefs簡單部署

注意mysql的安裝這裏就不介紹了,以下爲tracker節點的操作。

數據庫授權:

MariaDB [(none)]> grant all on *.* to 'root'@'192.168.%.%' identified by 'redhat';
Query OK, 0 rows affected (0.22 sec)

MariaDB [mogilefs]> grant all on mogilefs.* to 'moguser'@'192.168.%.%' identified by 'mogpass';
Query OK, 0 rows affected (0.00 sec)

安裝mogilefs:

[[email protected] ~]# ls
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
perl-MogileFS-Client-1.14-1.el6.noarch.rpm
perl-Perlbal-1.78-1.el6.noarch.rpm
[[email protected] ~]# yum install -y *.rpm perl-IO-AIO

初始化數據庫:

[[email protected] ~]# mogdbsetup --dbhost=192.168.1.8 --dbport=3306 --dbname=mogilefs --dbrootuser=root --dbrootpass=redhat --dbuser=moguser --dbpass=mogpass
驗證是否初始化成功:
MariaDB [(none)]> use mogilefs
Database changed

MariaDB [mogilefs]> 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)

mogilefs服務配置,修改mogilefs.conf文件:

[[email protected] ~]# vim /etc/mogilefs/mogilefsd.conf
# Enable daemon mode to work in background and use syslog
daemonize = 1
# Where to store the pid of the daemon (must be the same in the init script)
pidfile = /var/run/mogilefsd/mogilefsd.pid
# Database connection information
db_dsn = DBI:mysql:mogilefs:host=192.168.1.8
db_user = moguser
db_pass = mogpass
# IP:PORT to listen on for mogilefs client requests
listen = 192.168.1.8:7001
# Optional, if you don't define the port above.
conf_port = 7001
# Number of query workers to start by default.
query_jobs = 10
# Number of delete workers to start by default.
delete_jobs = 1
# Number of replicate workers to start by default.
replicate_jobs = 5

更改目錄權限:

[[email protected] ~]# chown -R mogilefs.mogilefs /var/run/mogilefsd

啓動服務:

[[email protected] ~]# service mogilefsd start
[[email protected] ~]# ss -tnlp |grep mogilefs
LISTEN     0      128             192.168.1.8:7001                     *:*      users:(("mogilefsd",9145,6))

以下爲各storage節點的操作。

安裝mogilefs:

[root@node2 ~]# ls
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
perl-MogileFS-Client-1.14-1.el6.noarch.rpm
perl-Perlbal-1.78-1.el6.noarch.rpm
[root@node1 ~]# yum install -y *.rpm  perl-IO-AIO
[root@node2 ~]# yum install -y *.rpm  perl-IO-AIO

node1節點配置:

[root@node1 ~]# cat /etc/mogilefs/mogstored.conf
maxconns = 10000
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501
docroot = /data/mogdata
[root@node1 ~]# mkdir -p /data/mogdata/dev1
[root@node1 ~]# chown -R mogilefs.mogilefs /data/mogdata/dev1

啓動服務並查看是否正常啓動:

[root@node1 ~]# service mogstored start
[root@node1 ~]# ss -tnlp |grep mog
LISTEN     0      128                       *:7500                     *:*      users:(("mogstored",2012,4))
LISTEN     0      128                       *:7501                     *:*      users:(("mogstored",2012,9))

node2節點配置:

[root@node2 ~]# cat /etc/mogilefs/mogstored.conf
maxconns = 10000
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501
docroot = /data/mogdata
[root@node2 ~]# mkdir -p /data/mogdata/dev2
[root@node2 ~]# chown -R mogilefs.mogilefs /data/mogdata/dev2
[root@node2 ~]# ss -tnlp |grep mog
LISTEN     0      128                       *:7500                     *:*      users:(("mogstored",4199,4))
LISTEN     0      128                       *:7501                     *:*      users:(("mogstored",4199,9))

以下爲tracker節點的操作。

添加node1節點:

[[email protected] ~]# mogadm --tracker=192.168.1.8:7001 host add node1 --ip=192.168.1.9 --status=alive
[[email protected] ~]# mogadm --tracker=192.168.1.8:7001 host list
node1 [1]: alive
  IP:       192.168.1.9:7500
[[email protected] ~]# mogadm --tracker=192.168.1.8:7001 device add node1  1
[[email protected] ~]# mogadm --tracker=192.168.1.8:7001 device list
node1 [1]: alive
                    used(G)    free(G)   total(G)  weight(%)
   dev1:   alive      3.319      8.670     11.989        100

添加node2節點:

[[email protected] ~]# mogadm --tracker=192.168.1.8:7001 host add node2 --ip=192.168.1.10 --status=alive
[[email protected] ~]# mogadm --tracker=192.168.1.8:7001 device add node2 002
[[email protected] ~]# mogadm --tracker=192.168.1.8:7001 host list
node1 [1]: alive
  IP:       192.168.1.9:7500

node2 [2]: alive
  IP:       192.168.1.10:7500

[[email protected] ~]# mogadm --tracker=192.168.1.8:7001 device list
node1 [1]: alive
                    used(G)    free(G)   total(G)  weight(%)
   dev1:   alive      3.319      8.670     11.989        100
node2 [2]: alive
                    used(G)    free(G)   total(G)  weight(%)
   dev2:   alive      2.860      9.129     11.989        100

添加domain:

[[email protected] ~]# mogadm --tracker=192.168.1.8:7001 domain add files
[[email protected] ~]# mogadm --tracker=192.168.1.8:7001 domain list
 domain               class                mindevcount   replpolicy   hashtype
-------------------- -------------------- ------------- ------------ -------
 files                default                   2        MultipleHosts() NONE

上傳文件:

[[email protected] ~]# mogupload --trackers=192.168.1.8:7001 --domain=files --key='/issue.html' --file='/etc/issue'
[[email protected] ~]# moglistkeys --trackers=192.168.1.8:7001 --domain=files
/issue.html
[[email protected] ~]# mogfileinfo --trackers=192.168.1.8:7001 --domain=files --key='/issue.html'
- file: /issue.html
     class:              default
  devcount:                    2
    domain:                files
       fid:                    3
       key:          /issue.html
    length:                   47
 - http://192.168.1.10:7500/dev2/0/000/000/0000000003.fid
 - http://192.168.1.9:7500/dev1/0/000/000/0000000003.fid

測試:

[[email protected] ~]# curl 
 CentOS release 6.6 (Final)
Kernel \r on an \m
[[email protected] ~]# curl http://192.168.1.10:7500/dev2/0/000/000/0000000003.fid
CentOS release 6.6 (Final)
Kernel \r on an \m

添加domain並上傳文件:

[[email protected] ~]# mogadm --trackers=192.168.1.8:7001 domain add p_w_picpaths
[[email protected] ~]# mogupload --trackers=192.168.1.8:7001 --domain=p_w_picpaths --key='/logo.png' --file='/usr/share/backgrounds/default_1920x1200.png'
[[email protected] ~]# mogfileinfo --trackers=192.168.1.8:7001 --domain=p_w_picpaths --key='/logo.png'
- file: /logo.png
     class:              default
  devcount:                    2
    domain:               p_w_picpaths
       fid:                    4
       key:            /logo.png
    length:              1470177
 - http://192.168.1.10:7500/dev2/0/000/000/0000000004.fid
 - http://192.168.1.9:7500/dev1/0/000/000/0000000004.fid

測試:

wKioL1YKpfaDrJ_WAAEu1uMs_iQ407.jpg

下載文件:

[[email protected] ~]# mogfetch --trackers=192.168.1.8:7001 --domain=p_w_picpaths --key='/logo.png' --file='./log.png'
[[email protected] ~]# ls -l log.png 
-rw-r--r-- 1 root root 1470177 9月  17 21:22 log.png

刪除文件:

[[email protected] ~]# mogdelete --trackers=192.168.1.8:7001 --domain=p_w_picpaths --key='/logo.png'


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章