Mogilefs配置以及nginx代理mogilefs

MogileFS:是一個開源的分佈式存儲,適用於存儲海量的小文件。由LiveJournal旗下的Danga Interactive。這個公司還有memcache , MogileFS, Perlbal(http代理)等產品。其特色以下:html

        1,工用於應用層(用戶空間):無須特殊的核心組件,由於基於http或都nfs,通常客戶端都支持。node

        2,無單點故障所在,假設MySQL已經高可用而且tracker爲多個節點。由於MySQL是否高可用,取決於MySQL。mysql

        3,自動文件複製,用戶在上傳一份數據都,tracker會根據設定好的策略自動複製一份或多份其它節點。假如其中一個節點故障,tracker會自動把數據複製一份,作到數據一直有冗餘。若是使用中增長一個節點,須要手動作策略把那些節點的數據與新加入的節點作平均。nginx

        4,比「RAID」好多了,由於其實現了主機間的冗餘。官方就這麼解釋的!sql

        5,傳輸中立,無特殊協議。傳輸中用的是http協議或nfs協議。數據庫

        6,命名空間比較簡單。使用域(domain)來表示名稱空間的。每一個文件對應於一個KEY,文件存儲的機制是一個值。是以 key-value 對兒在任的。KEY是一個全局名稱空間,可使用domain模擬實現目錄級別,也能夠把全部文件放在一個平面。vim

        7,不依賴於任何共享存儲設備。使用系統上的通常存儲就能夠。後端

 

MogileFS的組件:centos

跟蹤節點,Tracker : Mogilefsd進程,主控制進程,。其實現的功能包括:文件的複製,文件的刪除,查詢文件是否存儲,監控一個文件存儲的位置是否正常等等。這個進程工做於元數據節點。瀏覽器

存儲節點(storage nodes),由mogstored進程監聽於套接字上。文件實際存儲的位置。其實質上是一個http服務器。基於WebDAV模式工做。可以實現建立,刪除,重命名等操做。其實現方式是把一個大容量的磁盤掛載上,而後上傳下載數據。

MySQL節點:用於爲tracker存儲元數據信息:爲mogilefs的名稱空間及文件名。

MogileFS自帶了不少管理文件的工具。



安裝配置過程。

安裝完成後,須要在mysql爲mogliefs受權一個用戶,讓其對mogilefs庫有所有權限。此數據庫主要用來存儲node數據。若是tracker與mysql在一臺服務器上,須要對本機的主機名進行受權。

MariaDB [mogilefs]> grant all on *.* to 'root'@'172.16.2.%' identified by 'mogpass';

MariaDB [mogilefs]> grant all on *.* to 'mogilefs'@'172.16.2.%' identified by 'mogpass';

MariaDB [mogilefs]> grant all on *.* to 'root'@'firewall' identified by 'mogpass';

MariaDB [mogilefs]> grant all on *.* to 'root'@'172.16.2.%' identified by 'mogpass';

MariaDB [mogilefs]> flush privileges;

注:若是tracker與mysql在一個節點上,須要爲本機的主機名受權,由於mysql在驗證時會驗證主機名。

msql受權完成後,在tracker上初始化數據庫

# mogdbsetup --dbhost=172.16.2.13 --dbport=3306 --dbname=mogilefs --dbrootuser=root --dbrootpass=mogpass --dbuser=moguser --dbpass=mogpass

修改配置文件 ,大概以下:

# grep '^[^#]' /etc/mogilefs/mogilefsd.conf

daemonize = 1                                     #是否運行爲守護進程,1表示爲真

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

db_dsn = DBI:mysql:mogilefs:host=172.16.2.13        #指定鏈接數據庫,mogilefs爲數據庫名。

db_user = moguser                                    鏈接mysql時使用的用戶

db_pass = mogpass                                    鏈接mysql時使用的密碼

listen = 172.16.2.16:7001                            tracker端監聽的ip和tcp端口,默認就是7001

conf_port = 7001

query_jobs = 10                最多的查詢線程數

delete_jobs = 1                 用於刪除文件的線程數最多有幾個。1 比較穩當

    replicate_jobs = 5           

    reaper_jobs = 1

    min_free_space = 200      最小的利於空間,以m爲單位

# service mogilefsd start

# chkconfig mogilefsd on      確保tracker的服務能開機自動啓動

# ss -tnl   查看是否有7001端口處於監聽

mogilefd配置端口處理監聽後,到mogstor上安裝配置。第個存儲節點都須要執行下面的操做

# yum -y install  perl-Net-Netmask-1.9015-8.el6.noarch.rpm perl-Net-Netmask-1.9015-8.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

# yum -y install perl-IO-AIO    這個模塊必需要安裝。

把準備用於存儲的磁盤格式化掛載,把用戶和組都設置爲mogilefs。而後修改配置文件/etc/mogilefs/mogstored.conf

maxconns = 10000                  最大併發鏈接數

httplisten = 172.16.2.100:7500        監聽地址

mgmtlisten = 172.16.2.100:7501     管理地址

docroot = /mogiled/data                文件存儲的位置,生產環境中應當爲掛載的整個磁盤。

# mkdir -pv  /mogiled/data  && chwon -R  mogilefs.mogilefs /mogiled/data

# service mogstored star  若是啓動不了,多是mogilefs用戶沒有建立。添加用戶就能夠了。

# chkconfig mogstroed on        讓存儲服務開機自動啓動。

# ss -tnl     查看配置文件中定義的端口是否啓動。

數據存儲端配置好後到tracker 上把存儲端加入到本分佈式系統中。有多少個就加多少個。輸入mogadm 就會顯示這命令的使用方法。這個命令能夠

# mogadm --trackers=172.16.2.16:7001 host add s2 --ip=172.16.2.100 --status=alive

# mogadm --trackers=172.16.2.16:7001 host list

clipboard

添加好節點後爲各個節點添加設備

# mogadm --trackers=172.16.2.16:7001 device add s3 dev3

# mogadm --trackers=172.16.2.16:7001 device list             若是像下面顯示,沒有顯示容量等信息,說明mogstored端存儲目錄下沒有與設備ID同名的目錄,且這個目錄的屬主和屬組應當爲mogliefs

clipboard[1]

# mogadm --trackers=172.16.2.16:7001 device summary  查看各個設備的摘要信息。

clipboard[2]

        注:若是顯示不出設備的摘要信息,須要在各個存儲節點下 docroot = /mogiled/data 所指定的路徑下建立一個名字與設備名同名的目錄,而且屬主和屬組是 mogilefs。

# mogadm --trackers=172.16.2.16:7001 device list

clipboard[3]

添加domain   domain是用來建立名稱空間的,每一個文件都須要用key來標記,每一個文件在名稱必須唯一。

# mogadm --trackers=172.16.2.16:7001 domain add "p_w_picpaths"

# mogadm --trackers=172.16.2.16:7001 domain list

clipboard[4]

class 是mogilefs中最小的複製單位。建立class若是有須要能夠指定複本存儲幾份。

上傳文件測試,在任意一臺節點上執行均可以。

# mogupload --trackers=172.16.2.16:7001 --domain=/p_w_picpaths/ --key='/p_w_picpaths/bg.png' --file='/usr/share/backgrounds/default.png'

# mogfileinfo --trackers=172.16.2.16:7001 --domain=/p_w_picpaths/ --key='/p_w_picpaths/bg.png'

clipboard[8]

複製紅框裏的任意一條到瀏覽器中訪問,能夠訪問到此文件了。

clipboard[9]

因爲存儲節點的mogiled使用的是 WebDAV機制,它容許使用http的 put , delete方法管理文件。這裏全用curl模仿一下。

其它的命令

mogfetch 下載文件

mogupload  上傳文件

mogrename 生命名

moglistkey 例出全部的key

        # moglistkeys --trackers=172.16.2.16:7001 --domain=test

# moglistkeys --trackers=172.16.2.16:7001 --domain=test  --key_prefix='/p_w_picpaths' 查看以p_w_picpaths開頭的。

# mogstats --db_dsn="DBI:mysql:mogilefs:host=172.16.2.13" --db_user="moguser" --db_pass="mogpass" --verbose    查看數據庫中主機信息,domain,class,文件個數等。


讓nginx代理mogilefs

編譯安裝

# yum -y groupinstall "Development tools" "Server Platform Development"

# yum -y install gcc

# yum -y install pcre-devel

# yum -y install bzip2-devel

# wget http://www.grid.net.ru/nginx/download/nginx_mogilefs_module-1.0.4.tar.gz

# wget http://nginx.org/download/nginx-1.7.3.tar.gz

# tar -xvf nginx_mogilefs_module-1.0.4.tar.gz

# tar -xvf nginx-1.7.3.tar.gz

# cd nginx-1.7.3

# ./configure --prefix=/usr/local/ --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/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/uwscgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre --with-debug --add-module=../nginx_mogilefs_module-1.0.4

 

--add-module=../nginx_mogilefs_module-1.0.4 用來添加模塊的選項

注:用nginx_mogilefs_module-1.0.4版本,1.0.2有問題。

# make && make install

# useradd -r nginx

# vim /etc/init.d/nginx  提供一個服務管理腳本

        官方提供的適用於red hat 系統的腳本:http://wiki.nginx.org/RedHatNginxInitScript

# chmod +x /etc/init.d/nginx

# service nginx start

# vim nginx.conf 

        官方 配置說明 http://www.grid.net.ru/nginx/mogilefs.en.html

        本次實驗的配置

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

worker_processes 1;

events {

    worker_connections 1024;

}

http {

    include mime.types;

    default_type application/octet-stream;

    sendfile on;

    keepalive_timeout 65;

        upstream trackers {                定義後端的服務器組

                server 172.16.2.10:7001;

                server 172.16.2.14:7001;

                server 172.16.2.16:7001;

        }

    server {

        listen 80;

        server_name localhost;

        client_max_body_size 500m;      容許客戶端上傳文件最大爲500M

        location / {

            root html;

            index index.html index.htm;

        }

        location /file {                                        定義一個URL,對此URL使用mogilefs模塊

                mogilefs_tracker trackers;            調用後端服務器

                mogilefs_domain file;                   

                mogilefs_methods  GET DELETE;        容許使用的方法,因爲這個版本的nginx不支持上傳,因此沒寫put

                mogilefs_pass {

                        proxy_pass $mogilefs_path;

                        proxy_hide_header Content-Type;

                        proxy_buffering off;

                }

        }

        location /p_w_picpaths {

                mogilefs_tracker trackers;

                mogilefs_domain p_w_picpaths;

                mogilefs_methods GET DELETE;

                mogilefs_pass {

                        proxy_pass $mogilefs_path;

                        proxy_hide_header Content-Type;

                        proxy_buffering off;

                }

        }

        error_page 500 502 503 504 /50x.html;

        location = /50x.html {

            root html;

        }

    }

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

測試階段

上傳一個文件

# mogupload --trackers=172.16.2.10:7001 --domain=p_w_picpaths --key='/test.jpg' --file='/usr/share/backgrounds/centos_1920x1200_logoonly.jpg'   

在瀏覽器中使用http://172.16.2.18/p_w_picpaths/test.jpg訪問。

clipboard[24]

使用crul模擬測試刪除文件。

# curl -X DELETE http://172.16.2.18/p_w_picpaths/test.jpg

clipboard[25]

相關文章
相關標籤/搜索