Mogilefs配置以及nginx代理mogilefs

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

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

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

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

        4,比“RAID”好多了,因爲其實現了主機間的冗餘。官方就這麼解釋的!

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

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

        7,不依賴於任何共享存儲設備。使用系統上的一般存儲就可以。

 

MogileFS的組件:

跟蹤節點,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]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章