nginx反代mogilefs實現海量小文件存儲

  • 一、簡介

    1、介紹

    MogileFS 是一個開源的分佈式文件系統,用於組建分佈式文件集羣,由 LiveJournal 旗下 Danga Interactive 公司開發,Danga 團隊開發了包括 Memcached、MogileFS、Perlbal 等不錯的開源項目:(注:Perlbal 是一個強大的 Perl 寫的反向代理服務器)

    2、MogileFS的特性

    (1)工作在應用層提供服務

    (2)無單點(至少存在兩份副本在不同的節點上)

    (3)自動文件複製

    mogilefs將多個文件組織成一個單位進行復制,複製的最小單元是class

    (4)傳輸中立,無特殊協議,可通過NFS或HTTP進行通信

    (5)簡單的命名空間

    mogilefs是基於域(domain)來訪問的,沒有目錄,所有的數據都直接存儲在各存儲空間中

    3、MogileFS的幾個部分

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

    (2)mogstored(存儲節點) mogstored是數據存儲的位置,用來數據的創建、刪除、獲取等,每一個節點必須向tracker註冊,然後才能使用device id,可以通過mogadm增加這臺機器到cluster中。

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

    (4)工具 主要就是mogadm這個工具,用來在命令行下控制整個mogilefs系統以及查看狀態等。

    (5)Client Client實際上是一個Perl的pm,可以寫程序調用該pm來使用mogilefs系統,對整個系統進行讀寫操作。

    二、拓撲流程圖

    <img alt="wKioL1NvhAKg3yUJAABDXIpfeuM507.png" src="http://www.it165.net/uploadfile/files/2014/0512/201405120826133.png" title="拓撲.Z喎�" http:="" www.it165.net="" pro="" pkqt="" "="" target="_blank" class="keylink" style="border: 1px solid rgb(204, 204, 204); padding: 5px; margin: 0px; list-style: none; width: 563px; height: 445px; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;">QTkc=" />

    三、說明

    1、規劃說明

    實驗共有5臺主機,nginx做爲前端反向代理接收用戶請求;mariadb作爲存儲mogilefs元數據的數據庫;剩下的三臺主機分別安裝tracker+mogstore。

    2、nginx反代流程

    爲了能夠基於URL進行(而非fid),nginx需要安裝一個第三方的mogilefs模塊(nginx-mogilfes就是利用mogilefs的API開發的一個應用程序)來自動轉換fid到URL的映射;當用戶請求來的時候,nginx通過location的判定明確知道這是一個存儲在後端mogilefs應用的話,將會啓用反向代理機制,nginx把自己扮演爲mogilefs的客戶端,此時把URL當作鍵直接向後端發起文件查詢請求,tracker就會返回一個地址;nginx再次扮演成客戶端到對應的mogstored進程上取,當nginx拿到後就去響應前端的http請求

    3、實驗拓撲:

    加載中...QTZJQUVNUEFjODM4LnBuZw==" src="http://www.it165.net/uploadfile/files/2014/0512/201405120826134.png" title="實驗拓撲.PNG" />

    四、分佈式文件系統的實現

    1、配置數據庫(172.16.7.10)

    1.MariaDB [mogilefs]&gt; grant all on *.* to 'root'@'172.16.7.10'; #授權root用戶所有權限
    2.MariaDB [mogilefs]&gt;
    3.MariaDB [mogilefs]&gt; grant all on *.* to  'moguser'@'172.16.%.%' identified by 'mogpass';    #授權mogilefs的tracker連接數據庫的用戶
    4.MariaDB [mogilefs]&gt; flush privileges;

    2、安裝配置mogilefs(三臺主機)

    (1)安裝

    1.[root@shuishui ~]# ls
    2.anaconda-ks.cfg                        MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm  perl-Net-Netmask-1.9015-8.el6.noarch.rpm
    3.install.log                            MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm  perl-Perlbal-1.78-1.el6.noarch.rpm
    4.install.log.syslog                     MogileFS-Utils-2.19-1.el6.noarch.rpm
    5.MogileFS-Server-2.46-2.el6.noarch.rpm  perl-MogileFS-Client-1.14-1.el6.noarch.rpm
    6.[root@shuishui ~]# yum -y install *.rpm perl-IO-AIO

    (2)配置tracker

    ①、修改mogilefsd的配置文件

    01.[root@shuishui ~]# vim /etc/mogilefs/mogilefsd.conf
    02.# Enable daemon mode to work in background and use syslog
    03.daemonize = 1
    04.# Where to store the pid of the daemon (must be the same in the init script)
    05.pidfile = /var/run/mogilefsd/mogilefsd.pid
    06.# Database connection information
    07.db_dsn = DBI:mysql:mogilefs:host=172.16.7.10    #數據庫
    08.db_user = moguser        #數據庫授權的用戶
    09.db_pass = mogpass        #用戶密碼
    10.# IP:PORT to listen on for mogilefs client requests
    11.listen = 172.16.7.200:7001    #監聽的端口及IP
    12.# Optional, if you don't define the port above.
    13.conf_port = 7001
    14.# Number of query workers to start by default.
    15.query_jobs = 10
    16.# Number of delete workers to start by default.
    17.delete_jobs = 1
    18.# Number of replicate workers to start by default.
    19.replicate_jobs = 5
    20.# Number of reaper workers to start by default.
    21.# (you don't usually need to increase this)
    22.reaper_jobs = 1

    ②、爲mogilefsd設定數據庫

    1.[root@nmshuishui ~]# mogdbsetup --dbhost=172.16.7.10 --dbname=mogilefs --dbrootuser=root --dbuser=moguser --dbpass=mogpass

    ③、查看7001端口是否成功監聽

    1.[root@nmshuishui ~]# service mogilefsd start

    wKiom1Nvcc6zOOFAAAAwSHExtzA376.png

    ④、驗證數據庫

    01.MariaDB [(none)]&gt; use mogilefs
    02.Database changed
    03.MariaDB [mogilefs]&gt;
    04.MariaDB [mogilefs]&gt; show tables;
    05.+----------------------+
    06.| Tables_in_mogilefs   |
    07.+----------------------+
    08.| checksum             |
    09.| class                |
    10.| device               |
    11.| domain               |
    12.file                 |
    13.| file_on              |
    14.| file_on_corrupt      |
    15.| file_to_delete       |
    16.| file_to_delete2      |
    17.| file_to_delete_later |
    18.| file_to_queue        |
    19.| file_to_replicate    |
    20.| fsck_log             |
    21.| host                 |
    22.| server_settings      |
    23.| tempfile             |
    24.| unreachable_fids     |
    25.+----------------------+

    (3)配置mogstored

    01.[root@shuishui ~]# mkdir /www/mogdata/dev3 -pv
    02.[root@shuishui ~]#
    03.[root@shuishui ~]# chown -R mogilefs.mogilefs /www/mogdata/dev1/ /var/run/mogilefsd//var/run/mogilefsd/
    04.[root@shuishui ~]#
    05.#########配置mogstored#########
    06.[root@shuishui ~]# vim /etc/mogilefs/mogstored.conf
    07.maxconns = 10000
    08.httplisten = 0.0.0.0:7500
    09.mgmtlisten = 0.0.0.0:7501
    10.docroot = /www/mogdata

    (4)查看7500端口監聽狀態

    wKioL1NvdCLCQqesAAA5x_bCZpk533.png

    (5)添加主機

    1.[root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 host add 172.16.7.200 --ip=172.16.7.200 --status=alive
    2.###查看添加主機命令
    3.[root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 host list

    (6)添加設備

    1.[root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 device add 172.16.7.200 1
    2.###查看設備命令
    3.[root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 device list

    (7)添加domain

    1.[root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 domain add images
    2.[root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 domain add files
    3.###列出domain###
    4.[root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 domain list

    (8)添加class

    1.[root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 class add images class1
    2.[root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 class add images class2
    3.[root@nmshuishui ~]# mogadm --trackers=172.16.7.200:7001 class list

    (9)配置其它兩臺主機的mogilefsd和mogstored

    因爲這三臺主機的tracker區用一個數據庫,所以在安裝配置時,不需再重新設定數據庫,只配置相應的mogilefsd和mogstored配置文件就可以了

    (10)查看最後的狀態信息

    ①、列出所有主機

    wKiom1NveK-Sjks6AAAkYPlqeHY947.png

    ②、列出所有設備

    wKioL1NveKagXg9KAAA97ij9JFk145.png

    ③、列出所有domain

    wKiom1NveOWi69WrAAAyATxdCxY477.png

    (11)上傳圖片資源到mogilefs

    1.[root@nmshuishui ~]# mogupload --trackers=172.16.7.200:7001 --domain=images --key='linux.jpg' --file='/root/1.jpg'

    (12)使用mogfileinfo獲取上傳圖片的訪問路徑

    wKiom1Nve7PTN6G6AABWI0ArGu4600.png

    wKioL1Nve_3QBZBEAAiXLe59bQI945.png

    五、配置nginx服務器(172.16.7.10)

    1、解壓nginx-mogilefs-module-master.zip模塊

    2、先停止nginx服務器,編譯安裝第三方模塊

    1.cd nginx-1.4.7
    2../configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/nginx --conf-path=/etc/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-pcre --add-module=/root/mogilefs/nginx-mogilefs-module-master
    3.make && make install

    3、修改nginx配置文件

    01.[root@shuishui ~]# vim /etc/nginx/nginx.conf
    02.http {
    03.include       mime.types;
    04.default_type  application/octet-stream;
    05.#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    06.#                  '$status $body_bytes_sent "$http_referer" '
    07.#                  '"$http_user_agent" "$http_x_forwarded_for"';
    08.#access_log  logs/access.log  main;
    09.sendfile        on;
    10.#tcp_nopush     on;
    11.#keepalive_timeout  0;
    12.keepalive_timeout  65;
    13.gzip  on;
    14.upstream mogcluster {                #定義upstream,做負載均衡輪調
    15.server  172.16.7.200:7001;
    16.server  172.16.7.201:7001;
    17.server  172.16.7.202:7001;
    18.}
    19.server {
    20.listen       80;
    21.server_name  localhost;
    22.#charset koi8-r;
    23.#access_log  logs/host.access.log  main;
    24.location / {
    25.root   html;
    26.index  index.html index.htm;
    27.}
    28.location /images/ {                    #增加此location
    29.mogilefs_tracker mogcluster;
    30.mogilefs_domain images;
    31.mogilefs_methods GET PUT DELETE;
    32.mogilefs_pass {
    33.proxy_pass $mogilefs_path;
    34.proxy_hide_header Content-Type;
    35.proxy_buffering off;
    36.}
    37.}
    38.# redirect server error pages to the static page /50x.html
    39.#
    40.error_page   500 502 503 504  /50x.html;
    41.location = /50x.html {
    42.root   html;
    43.}
    44.}
    45.}

    六、基於key做訪問測試

    wKiom1Nvf4Dw3gsvAAjehl3goJc368.png

發佈了32 篇原創文章 · 獲贊 23 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章