MogileFS

什麼是分佈式文件系統?mysql

什麼是分佈式文件系統(Distributed File System)?顧名思義,就是分佈式+文件系統。它包含了2方面,從文件系統的客戶端的角度來看,他就是一個標準的文件系統,提供了API,由此能夠進行文件的建立、刪除、讀寫等操做;從內部來看的話,分佈式文件系統則與普通的文件系統不一樣,它不在是本地的磁盤中,它的內容和目錄都不是存儲在本地磁盤中,而是經過網絡傳輸到遠程主機上,而且同一個文件存儲在不僅一臺遠程主機中,而是在一簇主機中進行分佈式存儲,協同提供服務。linux

常見的分佈式文件系統nginx

      GFS :Google File Systemsql

      HDFS:適合存儲大文件;數據庫

      TFS:在名稱節點上將元數據存儲於關係型數據中,文件數量再也不受限於名稱節點的內存空間;能夠存儲海量小文件;瀏覽器

      Lustre: 企業級應用,重量級;bash

      GlusterFS: 適用於存儲少許大文件 ,流媒體,雲服務器

      MooseFS: 通用簡便,適用於存儲小文件,大文件也不錯網絡

      Mogilefs: 使用Perl語言,FastDFS負載均衡

      FastDFS:在內存中存儲

      Ceph:內核級別,支持PB級別存儲

MogileFS

  MogileFS是一個開源的分佈式文件存儲系統,由LiveJournal旗下的DangaInteractive公司開發。Danga團隊開發了包括Memcached、MogileFS、Perlbal等多個知名的開源項目。目前使用MogileFS的公司很是多,如日本排名先前的幾個互聯公司及國內的yupoo(又拍)、digg、豆瓣、1號店、大衆點評、搜狗和安居客等,分別爲所在的組織或公司管理着海量的圖片。

MogileFS:3 個重要組成

tracker:追蹤原數據

database :存儲元單元

storage:存儲數據

     tracker:

           tracker(跟蹤器) MogileFS的核心,是一個高度器,服務進程爲mogilefsd。mogadm,mogtool的全部操做都要跟trackers打交道,Client的一些操做也須要定義好tracker,所以最好同時運行多個tracker來作負載均衡。

        database : 

             使用mogdbsetup程序來初始化數據庫。數據庫保存了Mogilefs的全部元數據,所以數據庫部分很是重要,若是這兒掛了,那麼整個Mogilefs將處於不可用狀態。因此最好是HA結構。

       storage:

             mogstored(進程名),一個準備停當的mogstored節點可經過mogadm命令添加到如今如今集羣中,存儲節點需定義「設備(dev)用作存儲空間」,每一個「設備」在當前集羣都須要經過一個唯一的設備ID(DevID)來識別

       client:客戶端用與mogilefs創建通信,完成數據存取。


特性:(1) 工做在應用層

          (2)無單點故障

          (3)自動完成文件複製,複製的最小單位不是文件,而class,也就是是把須要的冗餘的文件組成了一塊了,而這一塊就是class

          (4)傳輸無需特殊協議

          (5)名稱空間

           (6)不共享任何數據,只經過數據副本作冗餘

           (7)簡單的命名空間:用於domain定義名稱空間(至關一個目錄), 每一個文件對應一個key,同一個domain內key是惟一的。

            (8) 定位文件時,在domain,定位文件的id號。

wKioL1cRsxnC1wmMAAKuR9iKxlQ114.jpg

-------------------------------------------------------------------------------------------------------------------------------------------

一:環境介紹:1臺Trcacker,2臺StoreNode. 

                      MYSQL和Trcacker 共用一臺。Tracker IP :192.168.2.20    Mysql:192.168.2.20

                      StoreNode: 192.168.2.35    192.168.2.36

wKioL1cQ9MDAHIiNAABCSpC0Nn0305.png

二:Trcacker 服務 安裝以下軟件,建議使用elpo源解決依賴

         MogileFS-Server.noarch 0:2.46-2.el6           

         MogileFS-Server-mogilefsd.noarch 0:2.46-2.el6

         MogileFS-Server-mogstored.noarch 0:2.46-2.el6 

         MogileFS-Utils.noarch 0:2.19-1.el6           

         perl-IO-AIO.x86_64 0:3.71-2.el6               

         perl-MogileFS-Client.noarch 0:1.14-1.el6     

         perl-Net-Netmask.noarch 0:1.9015-8.el6      

         perl-Perlbal.noarch 0:1.78-1.el6    


(2)安裝mysql給root 遠程受權

MariaDB [(none)]> GRANT ALL ON *.* TO 'root'@'192.168.2.%' IDENTIFIED BY '123456' WITH GRANT OPTION;

MariaDB [(none)]> FLUSH PRIVILEGES;


(2):初始化mysql

   # mogdbsetup --dbhost=192.168.2.20 --dbrootuser=root --dbrootpass=123456 --dbname=mogdb --dbuser=moguser --dbpass=mogpass

 下面爲初始化的過程

This will attempt to setup or upgrade your MogileFS database.

It won't destroy existing data.

Run with --help for more information.  Run with --yes to shut up these prompts.

Continue? [N/y]: y

Create/Upgrade database name 'mogdb'? [Y/n]: y

Grant all privileges to user 'moguser', connecting from anywhere, to the mogilefs database 'mogdb'? [Y/n]: y


(3)配置 tracker端(mogilefsd)


 配置文件 /etc/mogilefs/mogilefsd.conf,主要的配置選項以下: 
daemonize = 1
pidfile =  /var/run/mogilefsd/mogilefsd .pid
db_dsn = DBI:mysql :mogdb :host=192.168.2.20     //鏈接數據庫爲moddb. 主機爲192.168.2.20

db_user = moguser                                               //鏈接名爲moguser

db_pass = mogpass                                               //鏈接密碼爲 mogpass
listen = 192.168.2.20:7001                                    //tracker本身監聽ip爲192.168.2.20
conf_port = 7001
query_jobs = 10
delete_jobs = 1
replicate_jobs = 5
reaper_jobs = 1

# service mogilefsd start      //重啓mogilefsd


三:配置StoreNode.2個節點,分別安裝下面軟件:

    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-Net-Netmask-1.9015-8.el6.noarch.rpm 

    perl-Perlbal-1.78-1.el6.noarch.rpm 

    perl-MogileFS-Client-1.14-1.el6.noarch.rpm 

    perl-IO-AIO


(1)配置mogstared

 配置文件 /etc/mogilefs/mogstared.conf,主要的配置選項以下

maxconns = 10000
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501

docroot = /mogdata/data                //文件存取目錄 


(2)這裏假設存儲數據目錄是/mogdate/data下,在實際中會是單獨的存儲設備。


#  mkdir   -p  /mogdata/data

#  chown mogilefs.mogilefs /mogdata/data/ -R

#  service mogstored start

 

上面步驟在192.168.2.35 192.168.2.36 分別進行相同的操做。




(3)配置 tracker端,首先查看數據源

# mogstats --db_dsn="DBI:mysql:mogdb:host=192.168.2.20" --db_user="moguser" --db_pass="mogpass" --stats="all"


  (4)tracker端上用mogadm 添加主機

  # mogadm --trackers=192.168.2.20:7001 host add 192.168.2.35 --ip=192.168.2.35 --status=alive

  # mogadm --trackers=192.168.2.20:7001 host add 192.168.2.36 --ip=192.168.2.36 --status=alive

    查看添加後的主機

  # mogadm  --trackers=192.168.2.20:7001 host list

wKiom1cQ4PzzTyZZAAAc_L9-J80318.png

  (5)添加設備,並設定設備號,設備號不能重複

  # mogadm --trackers=192.168.2.20:7001 device add 192.168.2.35 1

  # mogadm --trackers=192.168.2.20:7001 device add 192.168.2.36 3

     查看添加後的設備

  # mogadm  --trackers=192.168.2.20:7001 device listwKioL1cQ4wqiOUlmAAA6BW0sK1k105.png

分別在/mogdata/data/目錄下創建dev1  和dev3,並把屬主屬主改爲mogilefs


在192.168.2.35:

# mkdir   /mogdata/data/dev1

# chown -R mogilefs.mogilefs /mogdata/data


在192.168.2.36:
# mkdir   /mogdata/data/dev3

# chown -R mogilefs.mogilefs /mogdata/data


(6)添加域p_w_picpaths, files

# mogadm  --trackers=192.168.2.20:7001 domain add p_w_picpaths

   # mogadm  --trackers=192.168.2.20:7001 domain add files

   查看域

# mogadm  --trackers=192.168.2.20:7001 domain list

wKioL1cQ5ZjTgbWaAAAqhl-QG0Q724.png

   (7)添加一個class (這個根據實際須要添加,在這裏是非必要步驟)

   # mogadm  --trackers=192.168.2.20:7001 class add p_w_picpaths class1 --mindevcount=2    (2爲保留2個副本)

添加後查看

   # mogadm  --trackers=192.168.2.20:7001 class list

 wKioL1cQ5rXS3WOoAAAnPYYEJmo965.png

四:測試:

上傳文件:mogupload

    # mogupload  --trackers=192.168.2.20:7001 --domain=files --key='/33.jpg' --file=/root/linux.jpg 

    # mogupload  --trackers=192.168.2.20:7001 --domain=p_w_picpaths --key='/22.jpg' --file=/root/2222.jpg 

    # mogupload  --trackers=192.168.2.20:7001 --domain=p_w_picpaths --key='/11.jpg' --file=/root/1111.jpg

查看文件信息:mogfileinfo

    # mogfileinfo --trackers=192.168.2.20:7001 --domain=files --key='/33.jpg'

    # mogfileinfo --trackers=192.168.2.20:7001 --domain=p_w_picpaths --key='/11.jpg'

    # mogfileinfo --trackers=192.168.2.20:7001 --domain=p_w_picpaths --key='/22.jpg'

wKioL1cRLOiTOcnvAABqzqrvikU783.png

紅把部分能夠用瀏覽器訪問


下載圖片:

   # mogfetch --trackers=192.168.2.20:7001 --domain=p_w_picpaths --key='/11.jpg' --file='/tmp/3.jpg'

列出domain中已存文件

# moglistkeys --trackers=192.168.2.20:7001 --domain=files;

# moglistkeys --trackers=192.168.2.20:7001 --domain=p_w_picpaths;

試驗2:NGINX反向代理

wKioL1cRt97Di_XKAAB5kfvCR-U825.png

添加一臺服務器,ip爲192.168.2.30,服務器同時作爲 Tracker和Storaged:

(1)安裝

   # yum install 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-Net-Netmask-1.9015-8.el6.noarch.rpm perl-Perlbal-1.78-1.el6.noarch.rpm perl-MogileFS-Client-1.14-1.el6.noarch.rpm perl-IO-AIO.x86_64 0:3.71-2.el6


(2)在192.168.2.30上初始化數據庫

  # mogdbsetup --dbhost=192.168.2.20 --dbrootuser=root --dbrootpass=123456 --dbname=mogdb --dbuser=moguser --dbpass=mogpass




(3) 配置 tracker端(mogilefsd)

 配置文件 /etc/mogilefs/mogilefsd.conf,主要的配置選項以下: 
daemonize = 1
pidfile =  /var/run/mogilefsd/mogilefsd .pid
db_dsn = DBI:mysql:mogdb:host=192.168.2.20       //鏈接數據庫爲mogdb, ip爲192.168.2.20
db_user = moguser                                                 // 鏈接用戶名爲moguser
db_pass = mogpass                                                  // 鏈接密碼爲mogpass
listen = 192.168.2.30:7001                                      //本身監聽的ip:192.168.2.30
conf_port = 7001
query_jobs = 10
delete_jobs = 1
replicate_jobs = 5
reaper_jobs = 1

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


# service mogilefsd start             //配置文件修改後重啓mogilefsd


(4)下面爲重啓mogilefsd 後就能從192.168.2.30上查看到原已添加的主機。

wKioL1cREA_Bnk9cAABb1mU5iT0595.png


(5)配置mogstared

  # cat /etc/mogilefs/mogstored.conf 

maxconns = 10000

httplisten = 0.0.0.0:7500

mgmtlisten = 0.0.0.0:7501

docroot = /mogdata/data/


(6)  創建目錄

  # mkdir -p /mogdata/data

  # chown mogilefs.mogilefs /mogdata/data/ -R

  # service mogstored start


(7)添加主機,由於192.168.2.30服務器同時作爲 Tracker和Storaged,因此Tracker的ip爲192.168.2.30,Storaged的ip 也爲192.168.2.30,添加的主機名,這裏用的是ip,因此也爲192.168.2.30


  # mogadm  --trackers=192.168.2.30:7001 host add 192.168.2.30 --ip=192.168.2.30 --status=alive


添加設備爲192.168.2.30,設備號爲4,

  # mogadm  --trackers=192.168.2.30:7001 device add 192.168.2.30 4

創建dev4目錄,爲改變權限

   # mkdir /mogdata/data/dev4 

   # chown -R mogilefs.mogilefs /mogdata/data

查看trackers:以下圖

wKiom1cRGF-yDfLrAABrtq9Q91M902.png


NGINX在編譯時添加第三方模塊:

useradd   -r nginx
tar   xf nginx_mogilefs_module-1.0.4. tar .gz
tar   xf nginx-1.6.2. tar .gz
cd   nginx-1.6.2
  . /configure   --prefix= /usr   --sbin-path= /usr/sbin/nginx   --conf-path= /etc/nginx/nginx .conf\
   --error-log-path= /var/log/nginx/error .log --http-log-path= /var/log/nginx/access .log \
   --pid-path= /var/run/nginx/nginx .pid --lock-path= /var/lock/nginx .lock --user=nginx \
   --group=nginx --with-http_ssl_module --with-http_flv_module   \
   --with-http_stub_status_module --with-http_gzip_static_module \
   --http-client-body-temp-path= /var/tmp/nginx/client/   \
   --http-proxy-temp-path= /var/tmp/nginx/proxy/   \
   --http-fastcgi-temp-path= /var/tmp/nginx/fcgi/   \
   --http-uwsgi-temp-path= /var/tmp/nginx/uwsgi   \
   --http-scgi-temp-path= /var/tmp/nginx/scgi   --with-pcre --with-debug \
   --add-module=.. /nginx_mogilefs_module-1 .0.4

make && make install


NGINX.conf 文件配置以下:

upstream trackers{

    server 192.168.2.20:7001;

    server 192.168.2.30:7001;

}

location  /upload {

         mogilefs_tracker trackers;

         mogilefs_domain p_w_picpaths;    //指定使用的domain,這個很關鍵,

         mogilefs_methods GET;     // GET PUT DELETE; 容許上傳,刪除時方法

         mogilefs_noverify on;

         mogilefs_pass {

                    proxy_pass $mogilefs_path;

                    proxy_hide_header Content-Type;

                    proxy_buffering off;

            }

}

訪問以下:

wKiom1cRLmrQh2OnAAULsZ9hDho494.png


# curl -X DELETE http://192.168.2.10/upload/66.jpg  請求方法容許刪除時,能夠直接刪除

相關文章
相關標籤/搜索