首頁 > 軟體

分散式檔案系統MogileFS的使用

2020-06-16 17:53:17

MogileFS簡介

MogileFS是一套開源的分散式儲存元件,由LiveJournal旗下的Danga Interactive研發,主要應用於儲存海量的小檔案。

MogileFS有3個元件:

1)Tracker Nodes:是檔案系統叢集的核心節點,借助資料庫節點儲存後設資料,主要功能包括監控後端Storage節點,及指示Storage節點完成資料的新增、刪除、查詢,及節點之間資料的複製等,該節點上執行的進程為mogilefsd。往往Tracker節點有多個,以實現負載均衡和高可用;

2)Storage Nodes:實際儲存資料的位置,基於WebDAV模式工作,能完成檔案建立、刪除、重新命名等操作,執行的進程為mogstored;

3)database Nodes:幫助Tracker節點存放後設資料及全域性資訊,包括host,domain,class等。資料庫建議使用高可用叢集,防止單點故障。

實現機制

在該檔案系統叢集中,每一個資料塊都會有多個副本,存放於多個Storage Node上,不同的檔案系統副本的數量各不相同(一般建議為3份),在Tracker Node上會分別單獨記錄每一個資料塊的儲存位置(位於哪個Storage及路徑)。若某個Storage節點不線上了,用戶端向Tracker節點請求獲取資料時,Tracker節點會返回用於冗餘的副本的儲存位置給用戶端。這樣就保證了整個檔案系統中資料的高可用性。當有資料儲存至某一storage節點後,各storage節點會根據Tracker的指示通過節點間通訊將副本傳送至其他節點上。若某一storage下線了,該節點上的副本會由其他節點重新提供,保證副本的個數不少於指定的值。

MogileFS結構圖

工作原理:用戶端需要存取資料時,首先與Tracker進行互動,Tracker通過查詢資料庫來獲取用戶端存取資料時所需要存取的後設資料,然後返回給用戶端,用戶端利用Tracker返回的結果,與Storage Nodes節點進行互動完成資料存取(一次有可能聯絡一個也可能聯絡多個)。

MogileFS 設定 Memcached http://www.linuxidc.com/Linux/2012-03/56905.htm

在 MogileFS 中使用 Nginx http://www.linuxidc.com/Linux/2012-03/56904.htm

在開源分散式檔案系統MogileFS 中使用 Nginx http://www.linuxidc.com/Linux/2012-03/56573.htm

自定義Nagios監控MogileFS儲存節點指令碼 http://www.linuxidc.com/Linux/2011-12/49394.htm

部署MogileFS

部署Tracker Nodes

1)安裝程式包

使用cpan線上安裝,首先安裝必要的perl庫。

[root@node1 ~]# cpan Sys::Syscall

[root@node1 ~]# cpan IO::WrapTie

[root@node1 ~]# cpan Danga::Socket

[root@node1 ~]# cpan IO::AIO

[root@node1 ~]# cpan MogileFS::Client

[root@node1 ~]# cpan Net::Netmask

[root@node1 ~]# cpan Perlbal

安裝MogileFS Server:

[root@node1 ~]# cpan MogileFS::Server

或者下載原始碼包編譯安裝:

[root@node1 ~]# wget http://mirrors.ustc.edu.cn/CPAN/authors/id/D/DO/DORMANDO/MogileFS-Server-2.72.tar.gz

[root@node1 ~]# tar xf MogileFS-Server-2.72.tar.gz

[root@node1 ~]# cd MogileFS-Server-2.72

[root@node1 MogileFS-Server-2.72]# perl Makefile.PL

[root@node1 MogileFS-Server-2.72]# make && make install

2)完成設定

建立組態檔目錄並新增組態檔:

[root@www ~]# mkdir /etc/mogilefs

[root@node1 ~]# vim /etc/mogilefs/mogilefsd.conf

daemonize = 1

pidfile = /var/run/mogilefsd/mogilefsd.pid

db_dsn = DBI:mysql:mogilefs:host=192.168.1.134;port=3306;mysql_connect_timeout=5  #連線資料庫的資訊

db_user = mogilefs          #資料庫上的使用者名稱

db_pass = mogilefs          #使用者名稱對應的密碼

listen = 0.0.0.0:7001      #監聽的地址和埠

conf_port = 7001

query_jobs = 10            #用於查詢的進程數

delete_jobs = 1            #用於刪除操作的進程數

replicate_jobs = 5          #用於複製的進程數

reaper_jobs = 1            #用於回收資源的進程數

在資料庫節點上建立資料庫,並授權使用者:

MariaDB [(none)]> create database mogilefs;

Query OK, 1 row affected (0.04 sec)

MariaDB [(none)]> grant all on mogilefs.* to 'mogilefs'@'192.168.%.%' identified by 'mogilefs';

Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;

Query OK, 0 rows affected (0.00 sec)

初始化資料庫:

[root@node1 ~]# mogdbsetup --dbhost=192.168.1.134 --dbname=mogilefs --dbuser=mogilefs --dbpass=mogilefs --dbrootpass=mogilefs

若出現如下錯誤,是沒有安裝perl連線mysql的驅動引起的,安裝perl-DBD-MySQL即可。

Failed to load MogileFS::Store::MySQL: Can't locate DBD/mysql.pm in @INC (@INC contains: lib /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/local/share/perl5/MogileFS/Store/MySQL.pm line 5.........

........

###########################################

[root@node1 ~]# yum install perl-DBD-MySQL

3)啟動服務

mogilefsd不能以root身份執行,必須用其他使用者執行,為此新增mogilefs使用者,然後啟動服務:

[root@node1 ~]# useradd -r mogilefs

[root@node1 ~]# su - mogilefs -c "mogilefsd -c /etc/mogilefs/mogilefsd.conf --daemon"

更好的方式是新增服務指令碼,然後通過指令碼啟動服務。

這裡有一項需要注意,Sys::Syscall的0.25版本存在bug,在檔案系統執行過程中,向檔案系統上新增資料,其不會按照預設策略保留2個副本,預設策略如下:

上傳的檔案資訊:

可以看到,資料僅有一份,儲存在192.168.1.127節點上。Sys::Syscall的0.25版本為最新版本,使用cpan預設安裝的就是這個版本,降級到0.23版本即可,或者直接下載安裝0.23版本。

wget http://mirrors.ustc.edu.cn/CPAN/authors/id/B/BR/BRADFITZ/Sys-Syscall-0.23.tar.gz

###############################

perl Makefile.PL

make && make install

部署Storage Nodes

1)安裝程式包(與上述一致)

[root@node2 ~]# cpan Sys::Syscall

[root@node2 ~]# cpan IO::WrapTie

[root@node2 ~]# cpan Danga::Socket

[root@node2 ~]# cpan IO::AIO

[root@node2 ~]# cpan MogileFS::Client

[root@node2 ~]# cpan Net::Netmask

[root@node2 ~]# cpan Perlbal

[root@node2 ~]# cpan MogileFS::Server

2)完成設定

建立目錄並新增組態檔:

[root@node2 ~]# mkdir /etc/mogilefs

[root@node2 ~]# vim /etc/mogilefs/mogstored.conf

maxconns = 10000              #最大併行連線數

httplisten = 0.0.0.0:7500    #http監聽的地址

mgmtlisten = 0.0.0.0:7501    #管理介面監聽地址

docroot = /mogdata/data      #用於儲存的目錄

新增,掛載分割區,根據/etc/mogilefs/mogstored.conf中的docroot設定資訊新增目錄,並修改屬主屬組:

[root@node2 ~]# fdisk /dev/sdb

[root@node2 ~]# mkfs -t ext4 -b 4096 /dev/sdb1

[root@node2 ~]# mkdir -pv /mogdata/data

mkdir: created directory `/mogdata'

mkdir: created directory `/mogdata/data'

[root@node2 ~]# mount /dev/sdb1 /mogdata/data/

[root@node2 ~]# chown -R mogilefs.mogilefs /mogdata/

3)啟動服務

新增使用者,啟動服務(同上述一樣,最好使用指令碼):

[root@node2 ~]# useradd -r mogilefs

[root@node2 ~]# su - mogilefs -c "mogstored -c /etc/mogilefs/mogstored.conf --daemon"

安裝MogileFS-Utils管理MogileFS

在控制節點上安裝MogileFS-Utils,可用於新增host,device,domain,class等管理操作。

[root@node1 ~]# cpan MogileFS::Utils

或者

[root@node1 ~]# wget http://mirrors.ustc.edu.cn/CPAN/authors/id/D/DO/DORMANDO/MogileFS-Utils-2.29.tar.gz

[root@node1 ~]# tar xf MogileFS-Utils-2.29.tar.gz

[root@node1 ~]# cd MogileFS-Utils-2.29

[root@node1 MogileFS-Utils-2.29]# perl Makefile.PL

[root@node1 MogileFS-Utils-2.29]# make && make install

建議直接使用cpan安裝,可自動安裝依賴的包。

更多詳情見請繼續閱讀下一頁的精彩內容http://www.linuxidc.com/Linux/2015-09/122947p2.htm


IT145.com E-mail:sddin#qq.com