MogileFS分佈式文件系統

內容概述

一、分佈式文件系統介紹html

二、CAP理論node

三、常見分佈式文件系統介紹mysql

四、MogileFS詳細介紹nginx

    四、1MogileFS組成算法

    四、2MogileFS特性
sql

五、MogileFS實現數據庫

     五、1 node1配置Mariadb(過程略)vim

     五、2 node1配置tracker
後端

     五、3 node2配置storage
centos

     五、4  node3配置storage

     五、5 配置分佈式集羣

          五、五、1 添加主機

          五、五、2 添加設備

          五、五、3 定義domain和class

     五、6  驗證分佈式集羣

六、MogileFS高可用

     六、1 node1配置storage

     六、2 node2配置tracker

     六、3 node3配置tracker

     六、4 驗證MogileFS高可用

七、nginx反向代理MogileFS

    七、1 安裝nginx

    七、2 設置反向代理

    七、3 設置負載均衡

一、分佈式文件系統介紹

定義分佈式存儲系統是大量普通PC服務器經過Internet互聯,對外做爲一個總體提供存儲服務

特性

·        可擴展:分佈式存儲系統能夠擴展到幾百臺至幾千臺的集羣規模,且隨着集羣規模的增加,系統總體性能表現爲線性增加;

·        低成本:分佈式存儲系統的自動容錯、自動負載均衡機制使其能夠構建在普通PC機之上;另外,線性擴展能力也使得增長、減小機器很是方便,能夠實現自動運維;

·        高性能:不管是針對整個集羣仍是單臺服務器,都要求分佈式系統具有高性能;

·        易用:分佈式存儲系統須要可以提供易用的對外接口;另外,也要求具有完善的監控、運維工具,並能方便的與其餘系統集成,如從Hadoop雲計算系統導入數據;

挑戰:在於數據、狀態信息的持久化,要求在自動遷移、自動容錯、併發讀寫的過程當中保證數據的一致性;


 二、CAP理論

來自Berkerly的Eric Brewer教授提出了一個著名的CAP理論:一致性(Consistency),可用性(Availability)和分區容忍性(Tolerance of networkPartition)三者不能同時知足:

·        C:讀操做老是能讀取到以前完成的寫操做結果,知足這個條件的系統成爲強一致系統,這裏的「以前」通常對同一個客戶端而言;

·        A:讀寫操做在單臺機器發生故障的狀況下依然可以正常執行,而不須要等待發生故障的機器重啓或者其上的服務遷移到其餘機器;

·        P:機器故障、網絡故障、機房停電等異常狀況下仍然可以知足一致性和可用性;

分佈式存儲系統要求可以自動容錯,即分區可容忍性老是須要知足的,所以,一致性和寫操做的可用性就不能同時知足了,須要在這兩者間權衡,是選擇不容許丟失數據,保持強一致,仍是容許少許數據丟失以得到更好的可用性;


三、常見的分佈式文件系統介紹

GFS(Google File System):Google公司爲了知足本公司需求而開發的基於Linux的專有分佈式文件系統。因爲其元數據是存儲在內存中,因此在存儲文件數量上註定不可能達到海量存儲,主要是存儲大文件使用。

HDFS (Hadoop Distributed File System):Hadoop的重要組成之一,幾乎徹底山寨GFS

TFS:淘寶自主研發,將元數據存儲於關係型數據庫或其它高性能存儲中,從而能維護海量文件元數據;主要用於存儲海量小文件,維護難度大

GlusterFS:去中心化的設計模式;擅長處理單個大文件

Ceph:Linux內核級實現的文件系統,而已經被直接收錄進Linux內核;bug較多,穩定性不佳

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

MogileFS:元數據放在數據庫中,擅長處理海量小文件,性能較好

FastDFS:輕量級分佈式系統,擅長處理海量小文件

備註:此處介紹不是很詳細,若是須要詳細瞭解,能夠參考百度百科


四、MogileFS詳細介紹

四、1 MogileFS組成

MogileFS組成的三個組件:

    tracker:追蹤元數據   元數據訪問路由器

    database:存儲元數據 

    storage:存儲數據

traker:

    mogilefsd(守護進程),它的主要職責包括:

        replication:節點間文件的複製;

        deletion:刪除文件

        queryworker:響應客戶請求的文件元數據訪問請求

        reaper:在存儲失敗後將文件複製請求從新放置於隊列中

        monitor:監測主機和設備的健康狀態

database:

    存儲mogilefs的元數據,通常使用MySQL; 建議使用冗餘方案以保證其可用性;(MMM, MHA)

    mogilefs專門提供了數據結構管理工具mogdbsetup;

storage:

    mogstored(進程名),一個準備停當的mogstored節點可經過mogadm命令添加至如今的集羣中;

    存儲節點需定義「設備(dev)」用做存儲空間;每一個「設備」在當前集羣都須要經過一個唯一的DevID來標識;

client:

    客戶端用於與mogilefs創建通訊,完成數據存取;


架構拓撲以下所示:

四、2 MogileFS特性:

    (1)工做於應用層:http, nfs;

    (2)無單點:三大組件(tracker,mogstore,database)皆可實現高可用;

    (3)自動完成文件複製:複製的最小單位不是文件,而是class;基於不一樣的class,文件能夠被自動的複製到多個有足夠存儲空間的存儲節點上

    (4)傳輸無需特殊協議:能夠經過NFS或HTTP協議進行通訊;

    (5)名稱空間:文件經過一個給定的key來肯定,是一個全局的命名空間;沒有目錄,基於域實現文件隔離

    (6)不共享任何數據:無需經過昂貴的SAN來共享磁盤,每一個存儲節點只需維護本身所屬的存儲設備(device)便可

 

兩個關鍵術語:

    domain:name space,命名空間

         一個MogileFS能夠有多個Domain

         用來存放不一樣文件(大小、類型)

         同一個Domain內,key必須惟一

         不一樣Domain內,key能夠相同

    class:最小複製單元

        文件屬性管理器

         定義文件存儲在不一樣設備上的份數

五、MogileFS實現

環境拓撲

IP地址配置狀況:

Node1:IP172.16.4.100  

Node2:IP172.16.4.101  

Node3:IP172.16.4.102   

系統環境:

[root@node1 ~]# cat/etc/redhat-release
CentOS release 6.6 (Final)
[root@node2 ~]# uname -r
2.6.32-504.el6.x86_64
[root@node2 ~]# uname -m
x86_64


五、1 Node1配置Mariadb(過程略)

Mariadb配置root用戶容許遠程鏈接

MariaDB [(none)]> GRANT ALL ON *.* TO'root'@'172.16.%.%' IDENTIFIED BY 'mogilefs' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;

五、2 Node1配置tracker

安裝以下軟件包,雖然只是配置tracker,但仍是安裝了storage的包,是由於後面作高可用時用到

MogileFS-Server-2.46-2.el6.noarch.rpm            #通行組件
MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm  #traker
MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm  #storage
MogileFS-Utils-2.19-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@node1 ~]# yum --nogpgcheck localinstall *.rpm

因爲node1是作tracker的,用到的主要程序包是MogileFS-Server-mogilefsd,其餘和配置tracker沒有太大關係,MogileFS-Server-mogilefsd生成的主要文件

[root@node1 ~]# rpm -ql MogileFS-Server-mogilefsd
/etc/mogilefs/mogilefsd.conf    #主配置文件
/etc/rc.d/init.d/mogilefsd      #啓動腳本
/usr/bin/mogdbsetup              #數據庫初始化工具
/usr/bin/mogilefsd               #mogilefsd主進程

初始化MogileFS數據庫:使用能夠鏈接到Mariadb的用戶和密碼,建立一個MogileFS使用的數據庫和數據庫的管理用戶以及設置密碼

 [root@node1~]# mogdbsetup --dbhost=172.16.4.100 --dbrootuser=root --dbrootpass=mogilefs  --dbname=mogdb --dbuser=moguser--dbpass=mogpass
 
This will attempt to setup or upgrade your MogileFSdatabase.
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', connectingfrom anywhere, to the mogilefs database 'mogdb'? [Y/n]: y

補充:可使用 --yes選項回答各類詢問爲yes。

 

驗證初始化Mariadb:登陸數據庫查看mogdb數據庫自動建立,並且庫中自動建立了一些表

MariaDB [(none)]> show databases;
+--------------------+
| Database          |
+--------------------+
| information_schema |
| mogdb             |
| mysql             |
| performance_schema |
| test              |
+--------------------+
5 rows in set (0.01 sec)
 
MariaDB [(none)]> use mogdb;
Database changed
MariaDB [mogdb]> show tables;
+----------------------+
| Tables_in_mogdb      |
+----------------------+
| 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     |
+----------------------+

修改mogilefsd.conf文件設置鏈接Mariadb的用戶名和密碼,mogilefsd監聽的地址和端口,啓用的一些線程

[root@node1 ~]# vim /etc/mogilefs/mogilefsd.conf
db_dsn = DBI:mysql:mogdb:host=172.16.4.100         #DBI:perl鏈接mysql的驅動,mysql數據庫類型,mogdb鏈接的數據庫,host不解釋
db_user = moguser                                      #鏈接數據庫的用戶
db_pass = mogpass                                      #鏈接數據庫的密碼
listen = 172.16.4.100:7001                            #mogilefsd監聽的地址
conf_port = 7001                                       #監聽的端口
query_jobs = 10                                        #啓用的請求線程,爲10表示只能併發10個客戶端;注意客戶端不是用戶訪問量,而是鏈接使用mogilefsd的服務器
delete_jobs = 1                                        #用於刪除的線程
replicate_jobs = 5                                     #用於做複製的線程數量
reaper_jobs = 1                                        #在存儲失敗後將文件複製請求從新放置於隊列中的線程

設置完成啓動服務並驗證7001端口已經啓動

[root@node1 ~]# service mogilefsd start
[root@node1 ~]# netstat -lntp | grep 7001
tcp       0      0 172.16.4.100:7001           0.0.0.0:*                   LISTEN      39558/mogilefsd

 

五、3 node2配置storage

安裝以下軟件包,配置storage主要用到的軟件包是MogileFS-Server-mogstored

MogileFS-Server-2.46-2.el6.noarch.rpm             #通用組件
MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm  #tracker
MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm  #storage
MogileFS-Utils-2.19-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@node2 ~]# yum --nogpgcheck localinstall *.rpm

Mogstored依賴與perl-IO-AIO這個包,須要額外安裝,不然mogstored沒法正常啓動

[root@node2 ~]# yum -y install perl-IO-AIO

MogileFS-Server-mogstored生成的文件

[root@node2 ~]# rpm -ql MogileFS-Server-mogstored
/etc/mogilefs/mogstored.conf    #主配置文件
/etc/rc.d/init.d/mogstored      #腳本文件
/usr/bin/mogautomount            #自動掛載的工具
/usr/bin/mogstored                #主程序

建立一個目錄準備存儲文件,而且設置屬主和屬組爲mogilefs,不然tracker節點會沒法讀取數據

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

將存儲目錄掛載到單獨的分區

[root@node2 ~]# vim /etc/fstab
/dev/sda4               /mogstore               ext4    defaults        0 0
[root@node2 ~]# mount -a
[root@node2 ~]# mount
/dev/sda4 on /mogstore type ext4 (rw)

在存儲目錄建立設備編號目錄,注意此目錄各個節點不能重名

[root@node2 ~]# mkdir /mogstore/dev2

修改配置文件

[root@node2 ~]# vim /etc/mogilefs/mogstored.conf
maxconns = 10000              #最大併發鏈接數
httplisten = 0.0.0.0:7500    #http協議監聽的端口
mgmtlisten = 0.0.0.0:7501    #管理監聽的端口
docroot = /mogstore           #文件存儲的目錄

設置完成啓動服務,並驗證端口是否正常啓動

[root@node2 ~]# service mogstored start
[root@node2 ~]# netstat -lntp | egrep"7500|7501"
tcp       0      0 0.0.0.0:7500                0.0.0.0:*                   LISTEN      37119/mogstored    
tcp       0      0 0.0.0.0:7501                0.0.0.0:*                   LISTEN      37119/mogstored

五、4 node3配置storage

安裝以下軟件包

MogileFS-Server-2.46-2.el6.noarch.rpm            #通用組件
MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm  #tracker
MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm  #storage
MogileFS-Utils-2.19-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@node3 ~]# yum --nogpgcheck localinstall *.rpm

Mogstored依賴與perl-IO-AIO這個包,因此須要額外安裝

[root@node3 ~]# yum -y install perl-IO-AIO

建立一個目錄準備存儲文件,並設置屬主和屬組爲mogilefs

[root@node3 ~]# mkdir /mogstore
[root@node3 ~]# chown -R mogilefs.mogilefs/mogstore/

將存儲目錄掛載到單獨的分區

[root@node3 ~]# vim /etc/fstab
/dev/sda4               /mogstore               ext4    defaults        0 0
[root@node3 ~]# mount -a
[root@node3 ~]# mount
/dev/sda4 on /mogstore type ext4 (rw)

在存儲目錄建立設備編號目錄,注意此目錄各個節點不能重名

[root@node3 ~]# mkdir /mogstore/dev3

修改配置文件

[root@node3 ~]# vim /etc/mogilefs/mogstored.conf
maxconns = 10000
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501
docroot = /mogstore

設置完成啓動服務,並驗證端口是否正常啓動

[root@node3 ~]# service mogstored start
[root@node3 ~]# netstat -lntp | egrep"7500|7501"
tcp       0      0 0.0.0.0:7500                0.0.0.0:*                   LISTEN      37119/mogstored    
tcp       0      0 0.0.0.0:7501                0.0.0.0:*                   LISTEN      37119/mogstored

五、5 配置分佈式集羣

查看MogileFS-Utils生成的命令,只列出經常使用的命令

[root@node1 ~]# rpm -ql MogileFS-Utils
/usr/bin/mogadm            #MogileFS管理工具,能夠實現將mogstored加入到mogilefsd
/usr/bin/mogdelete        #刪除文件
/usr/bin/mogfetch         #獲取文件
/usr/bin/mogfileinfo      #查看文件
/usr/bin/mogupload         #上傳文件

Mogadm命令的經常使用功能:

mogadm check             #狀態檢測

mogadm stats             #顯示MogileFS的狀態統計信息

mogadm host ...         #管理主機

mogadm device ...       #管理設備

mogadm domain ...       #管理域

mogadm class ...        #管理類

mogadm slave ...        #管理複製

mogadm fsck ...         #文件系統檢查和修復

mogadm rebalance ...   #從新均衡(MogileFS運行時間久了mogstored存儲的數據量可能不同,從新均衡一下各個節點的數據就差很少了)

mogadm settings ...    #設置文件複製數

 

說明:使用mogadm help或者man mogadm能夠查看mogadm命令的詳細使用說明

五、五、1 添加主機

向集羣中添加主機,將node2和node3添加到集羣中

[root@node1 ~]# mogadm --trackers=172.16.4.100:7001host add node2 --ip=172.16.4.101 --status=alive
[root@node1 ~]# mogadm --trackers=172.16.4.100:7001host add node3 --ip=172.16.4.102 --status=alive

add:表示添加主機

node2:表示主機名,這個能夠隨便寫

--ip:表示添加的主機地址

--status=alive:表示添加以後的狀態爲上線

 

添加完成查看主機列表已經有了主機

[root@node1 ~]# mogadm --trackers=172.16.4.100:7001host list
node2 [1]: alive
  IP:       172.16.4.101:7500
 
node3 [2]: alive
  IP:       172.16.4.102:7500

五、五、2 添加設備

節點雖然添加完成了,可是還不能存儲數據,若是想存儲數據須要追蹤存儲節點上面的設備

[root@node1 ~]# mogadm --trackers=172.16.4.100:7001device add node2 2
[root@node1 ~]# mogadm --trackers=172.16.4.100:7001device add node3 3

add:表示添加設備

Node2:節點名稱,必須和添加主機時保持一致

2:添加的dev設備編號

 

添加完成查看device列表就已經出現了設備

[root@node1 ~]# mogadm --trackers=172.16.4.100:7001device list
node2 [1]: alive
                   used(G)    free(G)   total(G) weight(%)
   dev2:   alive     0.042     27.866     27.908        100
 
node3 [2]: alive
                   used(G)    free(G)   total(G) weight(%)
   dev3:   alive     0.042     27.866     27.908        100

 

補充:一開始不當心將node3節點的設備,添加爲了dev4,而後由添加了dev3,結果node3就出現了dev3和dev4兩個設備

[root@node1 ~]# mogadm --trackers=172.16.4.100:7001device add node3 4
[root@node1 ~]# mogadm --trackers=172.16.4.100:7001device list
node2 [1]: alive
                   used(G)    free(G)   total(G) weight(%)
   dev2:   alive     0.000      0.000      0.000        100
 
node3 [2]: alive
                   used(G)    free(G)   total(G) weight(%)
   dev3:   alive     0.042      27.866      27.908        100
   dev4:   alive     0.042      27.866     27.908        100

刪除方法:這裏沒有deleted命令,須要使用mark將dev4標記爲dead狀態就刪除了

[root@node1 ~]# mogadm --trackers=172.16.4.100:7001device mark node3 4 dead

五、五、3 定義domain和class

定義名稱空間(domain):

[root@node1 ~]# mogadm --trackers=172.16.4.100:7001domain add p_w_picpaths
[root@node1 ~]# mogadm --trackers=172.16.4.100:7001domain add conffiles
[root@node1 ~]# mogadm --trackers=172.16.4.100:7001domain list
 domain               class                mindevcount   replpolicy  hashtype
-------------------- --------------------------------- ------------ -------
 conffiles            default                   2        MultipleHosts() NONE  
 
 p_w_picpaths               default                   2        MultipleHosts() NONE

domain:domain的名字

class:domain建立完成以後會自動建立一個class,全部的文件都存放在class中

mindevcount:最小複製單元;爲2表示上傳的文件最少存儲兩個副本

replpolicy:複製策略,MultipleHosts()表示多主機實現複製,這裏不用管爲默認便可

hashtype:class在命名時是使用哈希進行計算的,這裏表示哈希算法,NONE表示沒有使用哈希算法

 

定義class:

因爲建立domain會自動建立class,因此會出現class

[root@node1 ~]# mogadm --trackers=172.16.4.100:7001class list
 domain               class                mindevcount   replpolicy  hashtype
-------------------- --------------------------------- ------------ -------
 conffiles            default                   2        MultipleHosts() NONE  
 
 p_w_picpaths               default                   2        MultipleHosts() NONE

新添加一個class

[root@node1 ~]# mogadm --trackers=172.16.4.100:7001class add p_w_picpaths nc1 --mindevcount=2
[root@node1 ~]# mogadm --trackers=172.16.4.100:7001class list
 domain               class                mindevcount   replpolicy  hashtype
-------------------- --------------------------------- ------------ -------
 conffiles            default                   2        MultipleHosts() NONE  
 
 p_w_picpaths               default                   2        MultipleHosts() NONE  
 p_w_picpaths               nc1                       2        MultipleHosts() NONE

五、6 驗證分佈式系統

這個時候分佈式文件系統就搭建好了,可使用mogupload命令上傳文件測試

[root@node1 ~]# mogupload--trackers=172.16.4.100:7001 --domain=p_w_picpaths --key='/1.jpg'--file='/usr/share/backgrounds/centos_1920x1200_logoonly.jpg'

--domain=p_w_picpaths:表示存儲到p_w_picpaths這個domain中

--key='/1.jpg':訪問文件的URL地址

--file:本地上傳的文件

 

查看上傳文件的信息,在node1和node2這兩個節點都有了文件

[root@node1 ~]# mogfileinfo--trackers=172.16.4.100:7001 --domain=p_w_picpaths --key='/1.jpg'
- file: /1.jpg
    class:              default
 devcount:                    2
   domain:               p_w_picpaths
       fid:                    2
      key:               /1.jpg
   length:                57592
 -http://172.16.4.102:7500/dev3/0/000/000/0000000002.fid
 -http://172.16.4.101:7500/dev2/0/000/000/0000000002.fid

 

這個時候分別訪問下面的兩個URL就能夠出現剛剛上傳的圖片了

- http://172.16.4.102:7500/dev3/0/000/000/0000000002.fid

-http://172.16.4.101:7500/dev2/0/000/000/0000000002.fid

剛剛上傳了一個圖片,此次上傳一個文本文件試試

[root@node1 ~]# mogupload--trackers=172.16.4.100:7001 --domain=conffiles --key='/configures/fstab'--file='/etc/fstab'
[root@node1 ~]# mogfileinfo --trackers=172.16.4.100:7001--domain=conffiles --key='/configures/fstab'
- file: /configures/fstab
    class:              default
 devcount:                    2
   domain:            conffiles
      fid:                    3
      key:    /configures/fstab
   length:                  921
 -http://172.16.4.102:7500/dev3/0/000/000/0000000003.fid
 -http://172.16.4.101:7500/dev2/0/000/000/0000000003.fid

分別訪問兩個URL路徑,查看文件均可以正常顯示



不光能夠上傳文件,還能夠下載文件,使用mogfetch指明domain是那個,key路徑,使用file在指明下載以後存儲到本地的那裏便可

[root@node1 ~]# mogfetch--trackers=172.16.4.100:7001 --domain=conffiles --key='/configures/fstab'--file='/root/fstab'
[root@node1 ~]# ll /root/fstab
-rw-r--r-- 1 root root 921 May 27 06:34 /root/fstab

六、Mogilefsd高可用

Node1,node2,node3這三個節點否啓動mogilefsd和mogstored,使客戶端不管訪問那一個節點均可以獲取到數據,並且replpolicy設置最少2份,計算是一臺節點故障下線其餘節點也能夠繼續提供服務。

六、1 Node1配置mogstored

手動安裝mogstored的依賴包,若是不安裝此包,啓動mogstroed時端口不會正常啓動

 [root@node1~]# yum install perl-IO-AIO

建立存儲目錄並掛載

[root@node1 ~]# mkdir /mogstore
[root@node1 ~]# vim /etc/fstab
/dev/sda4               /mogstore               ext4    defaults        0 0
[root@node1 ~]# mount -a
[root@node1 ~]# mount
/dev/sda4 on /mogstore type ext4 (rw)

建立設備目錄並受權mogilefs用戶

[root@node1 ~]# mkdir /mogstore/dev1
[root@node1 ~]# chown -R mogilefs.mogilefs/mogstore/

修改配置文件,指定存儲目錄位置

[root@node1 ~]# vim /etc/mogilefs/mogstored.conf
maxconns = 10000
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501
docroot = /mogstore

啓動服務

[root@node1 ~]# service mogstored start
[root@node1 ~]# netstat -lntp | egrep"7500|7501"
tcp       0      0 0.0.0.0:7500                0.0.0.0:*                   LISTEN      41087/mogstored    
tcp       0      0 0.0.0.0:7501                0.0.0.0:*                   LISTEN      41087/mogstored


配置完成以後使用mogadm命令將本身也添加到集羣中

[root@node1 ~]# mogadm --trackers=172.16.4.100:7001host add node1 --ip=172.16.4.100 --status=alive
[root@node1 ~]# mogadm --trackers=172.16.4.100:7001host list
node2 [1]: alive
  IP:       172.16.4.101:7500
 
node3 [2]: alive
  IP:       172.16.4.102:7500
 
node1 [3]: alive
  IP:       172.16.4.100:7500

添加node1的設備到集羣中

[root@node1 ~]# mogadm --trackers=172.16.4.100:7001device add node1 1
[root@node1 ~]# mogadm --trackers=172.16.4.100:7001device list
node2 [1]: alive
                   used(G)    free(G)   total(G) weight(%)
   dev2:   alive     0.043     27.865     27.908        100
 
node3 [2]: alive
                   used(G)    free(G)   total(G) weight(%)
   dev3:   alive     0.043     27.865     27.908        100
 
node1 [3]: alive
                   used(G)    free(G)   total(G) weight(%)
   dev1:   alive     0.042     27.866     27.908        100

因爲node2和node3節點須要配置mogilefsd須要把node1上面的配置文件直接拷貝過去,省的node2和node3節點修改

[root@node1 ~]# scp /etc/mogilefs/mogilefsd.conf172.16.4.101:/etc/mogilefs/
[root@node1 ~]# scp /etc/mogilefs/mogilefsd.conf 172.16.4.102:/etc/mogilefs/

六、2 Node2配置mogilefsd

因爲node1節點已經將配置文件拷貝過來了,因此直接修改配置文件的監聽地址便可,其餘選項無需修改

[root@node2 ~]# vim /etc/mogilefs/mogilefsd.conf
listen = 172.16.4.101

設置完成啓動服務便可

[root@node2 ~]# service mogilefsd start
[root@node2 ~]# netstat -lnt | grep 7001
tcp       0      0 172.16.4.101:7001           0.0.0.0:*                   LISTEN

六、3 Node3配置mogilefsd

同node2只須要修改監聽地址

[root@node3 ~]# vim /etc/mogilefs/mogilefsd.conf
listen = 172.16.4.102

啓動服務便可

[root@node3 ~]# service mogilefsd start
[root@node3 ~]# netstat -lnt | grep 7001
tcp       0      0 172.16.4.102:7001           0.0.0.0:*                   LISTEN

六、4 驗證MogileFS的高可用

在三個節點各自配置好了tracker和storage以後高可用的MogileFS就配置完成了。

 

驗證方法以下:不管使用mogadm鏈接那一個節點,均可以看到節點中包含了三個主機

[root@node3 ~]# mogadm --trackers=172.16.4.100:7001host list
node2 [1]: alive
  IP:       172.16.4.101:7500
 
node3 [2]: alive
  IP:       172.16.4.102:7500
 
node1 [3]: alive
  IP:       172.16.4.100:7500
 
[root@node3 ~]# mogadm --trackers=172.16.4.101:7001host list
node2 [1]: alive
  IP:       172.16.4.101:7500
 
node3 [2]: alive
  IP:       172.16.4.102:7500
 
node1 [3]: alive
  IP:       172.16.4.100:7500
 
[root@node3 ~]# mogadm --trackers=172.16.4.102:7001host list
node2 [1]: alive
  IP:       172.16.4.101:7500
 
node3 [2]: alive
  IP:       172.16.4.102:7500
 
node1 [3]: alive
  IP:       172.16.4.100:7500

上傳文件驗證,因爲只是設置兩個複製份數,因此上傳的文件會隨機出如今兩個節點中。

[root@node3 ~]# mogupload--trackers=172.16.4.100:7001,172.16.4.101:7001,172.16.4.102:7001--domain=conffiles --key='/issue' --file='/etc/issue'
[root@node3 ~]# mogfileinfo --trackers=172.16.4.100:7001,172.16.4.101:7001,172.16.4.102:7001--domain=conffiles --key='/issue'
- file: /issue
    class:              default
 devcount:                    2
   domain:            conffiles
      fid:                    7
      key:               /issue
   length:                  103
 -http://172.16.4.100:7500/dev1/0/000/000/0000000007.fid
 -http://172.16.4.101:7500/dev2/0/000/000/0000000007.fid

 

七、使用nginx反向代理MogileFS

拓撲圖:

Nginx IP地址:172.16.4.10

系統環境和node節點一致


七、1 安裝nginx

Nginx默認不支持MogileFS的配置,須要在編譯nginx時指定nginx_mogilefs_module模塊才能夠代理MogileFS

 

nginx的mogilefs模塊官方配置地址

http://www.grid.net.ru/nginx/mogilefs.en.html


編譯安裝nginx

[root@nginx ~]# useradd nginx
[root@nginx ~]# mkdir /var/tmp/nginx/client -p
[root@nginx ~]# yum -y install pcre-devel
[root@nginx ~]# tar xf nginx-1.6.2.tar.gz    
[root@nginx ~]# tar xf nginx_mogilefs_module-1.0.4.tar.gz   #編譯nginx以前須要先解壓出來,編譯nginx的時候須要用
[root@nginx ~]# cd nginx-1.6.2

編譯配置,這裏須要指定MogileFS的模塊位置

./configure \
 --prefix=/usr/local/nginx \
 --sbin-path=/usr/local/nginx/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\
--add-module=../nginx_mogilefs_module-1.0.4/    #編譯時必定要使用這一項指明mogilefs模塊的解壓目錄位置
make && make install

編譯完成提供nginx啓動腳本

[root@nginx ~]# cat /etc/init.d/nginx
#!/bin/sh
#
# nginx - this script starts and stops the nginxdaemon
#
# chkconfig:  - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
#              proxy and IMAP/POP3 proxy server
# processname: nginx
# config:     /etc/nginx/nginx.conf
# config:     /etc/sysconfig/nginx
# pidfile:    /var/run/nginx.pid
 
# Source function library.
. /etc/rc.d/init.d/functions
 
# Source networking configuration.
. /etc/sysconfig/network
 
# Check that networking is up.
[ "$NETWORKING" = "no" ]&& exit 0
 
nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)
 
NGINX_CONF_FILE="/etc/nginx/nginx.conf"
 
[ -f /etc/sysconfig/nginx ] && ./etc/sysconfig/nginx
 
lockfile=/var/lock/subsys/nginx
 
make_dirs() {
   # make required directories
  user=`nginx -V 2>&1 | grep "configure arguments:" | sed's/[^*]*--user=\([^ ]*\).*/\1/g' -`
  options=`$nginx -V 2>&1 | grep 'configure arguments:'`
   for opt in$options; do
       if [`echo $opt | grep '.*-temp-path'` ]; then
          value=`echo $opt | cut -d "=" -f 2`
           if[ ! -d "$value" ]; then
              # echo "creating" $value
              mkdir -p $value && chown -R $user $value
           fi
       fi
   done
}
 
start() {
    [ -x$nginx ] || exit 5
    [ -f$NGINX_CONF_FILE ] || exit 6
    make_dirs
    echo -n$"Starting $prog: "
    daemon$nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval-eq 0 ] && touch $lockfile
    return$retval
}
 
stop() {
    echo -n$"Stopping $prog: "
    killproc$prog -QUIT
    retval=$?
    echo
    [ $retval-eq 0 ] && rm -f $lockfile
    return$retval
}
 
restart() {
   configtest || return $?
    stop
    sleep 1
    start
}
 
reload() {
   configtest || return $?
    echo -n$"Reloading $prog: "
    killproc$nginx -HUP
    RETVAL=$?
    echo
}
 
force_reload() {
    restart
}
 
configtest() {
  $nginx -t-c $NGINX_CONF_FILE
}
 
rh_status() {
    status$prog
}
 
rh_status_q() {
    rh_status>/dev/null 2>&1
}
 
case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
       rh_status_q || exit 0
        $1
        ;;
   restart|configtest)
        $1
        ;;
    reload)
       rh_status_q || exit 7
        $1
        ;;
   force-reload)
       force_reload
        ;;
    status)
       rh_status
        ;;
   condrestart|try-restart)
       rh_status_q || exit 0
           ;;
    *)
        echo$"Usage: $0{start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit2
esac

設置執行權限,並加入服務列表

[root@nginx ~]# chmod +x /etc/rc.d/init.d/nginx
[root@nginx ~]# chkconfig --add nginx

啓動nginx服務

[root@nginx ~]# service nginx start
[root@nginx ~]# netstat -lntp | grep 80
tcp       0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      8841/nginx

 

七、2 設置反向代理

修改nginx配置文件添加一個location

        location /p_w_picpaths/ {
            mogilefs_tracker172.16.4.100:7001;
            mogilefs_domainp_w_picpaths;
 
            mogilefs_pass {
                proxy_pass$mogilefs_path;
               proxy_hide_header Content-Type;
               proxy_buffering off;
            }

設置完成重啓服務,配置生效

 

向存儲中上傳文件

[root@node1 ~]# mogupload --trackers=172.16.4.100:7001 --domain=p_w_picpaths--key="2.jpg" --file="/root/2.jpg"
[root@node1 ~]# mogfileinfo --trackers=172.16.4.100:7001--domain=p_w_picpaths --key="2.jpg"
- file: 2.jpg
     class:              default
  devcount:                    2
    domain:               p_w_picpaths
       fid:                    8
       key:                2.jpg
    length:               150255
 -http://172.16.4.100:7500/dev1/0/000/000/0000000008.fid
 -http://172.16.4.102:7500/dev3/0/000/000/0000000008.fid

使用nginx訪問/p_w_picpaths/下的2.jpg,就能夠看到剛剛上傳的2.jpg文件

七、3 設置負載均衡

因爲後端有3個tracker服務器,因此可使用nginx的upstream實現負載均衡,配置方法以下所示:

  upstream mogtrackers {
      server 172.16.4.100:7001;
      server172.16.4.101:7001;
      server172.16.4.102:7001;
    }
 
server {
 省略內容……
       location /p_w_picpaths/ {
           mogilefs_tracker mogtrackers;
           mogilefs_domain p_w_picpaths;
 
           mogilefs_pass {
                proxy_pass $mogilefs_path;
               proxy_hide_header Content-Type;
               proxy_buffering off;
            }
        }
相關文章
相關標籤/搜索