今天小編給大家分享一下Nginx反代Mogilefs分布式儲(chǔ)存的方法的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。
創(chuàng)新互聯(lián)建站主要從事成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)石林,十多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢建站服務(wù):13518219792
一、分布式存儲(chǔ)系統(tǒng)簡(jiǎn)介
隨著信息技術(shù)不斷的發(fā)展,給我們帶來(lái)便利的同時(shí),不斷增加的數(shù)據(jù)量級(jí)、信息之間的連接關(guān)聯(lián)越來(lái)越復(fù)雜、數(shù)據(jù)訪問(wèn)的并發(fā)量日益增加對(duì)i/o的要求越來(lái)越高、數(shù)據(jù)類(lèi)型越來(lái)越復(fù)雜等難題也成為信息技術(shù)繼續(xù)高速發(fā)展亟需解決的難題。分布式存儲(chǔ)系統(tǒng)的出現(xiàn)在很大程度上解決了以上大部分難題。
分布式存儲(chǔ)系統(tǒng),是將數(shù)據(jù)分散存儲(chǔ)在多臺(tái)獨(dú)立的設(shè)備上。傳統(tǒng)的網(wǎng)絡(luò)存儲(chǔ)系統(tǒng)采用集中的存儲(chǔ)服務(wù)器存放所有數(shù)據(jù),存儲(chǔ)服務(wù)器成為系統(tǒng)性能的瓶頸,也是可靠性和安全性的焦點(diǎn),不能滿足大規(guī)模存儲(chǔ)應(yīng)用的需要。分布式存儲(chǔ)系統(tǒng)采用可擴(kuò)展的系統(tǒng)結(jié)構(gòu),利用多臺(tái)存儲(chǔ)服務(wù)器分擔(dān)存儲(chǔ)負(fù)荷,利用位置服務(wù)器定位存儲(chǔ)信息,它不但提高了系統(tǒng)的可靠性、可用性和存取效率,還易于擴(kuò)展。
分布式存儲(chǔ)系統(tǒng)在接口類(lèi)型上可分為通用分布式儲(chǔ)存和專(zhuān)用分布式儲(chǔ)存。通用分布式儲(chǔ)存是指沒(méi)有文件系統(tǒng)接口,需要通過(guò)api接口進(jìn)行訪問(wèn);專(zhuān)用分布式儲(chǔ)存也稱(chēng)為分布式文件系統(tǒng),它們一般都會(huì)有文件系統(tǒng)接口,可以直接掛載。通用分布式儲(chǔ)存有mogilefs、fastdfs等,專(zhuān)用分布式儲(chǔ)存系統(tǒng)有moosefs等。
二、mogilefs
mogilefs是一個(gè)開(kāi)源的分布式文件存儲(chǔ)系統(tǒng),mogilefs適用于存儲(chǔ)海量小文件的工作場(chǎng)景,由livejournal旗下的danga interactive公司開(kāi)發(fā),該團(tuán)隊(duì)開(kāi)發(fā)了包括 memcached、mogilefs、perlbal 等多個(gè)知名的開(kāi)源項(xiàng)目。
1.mogilefs架構(gòu)圖:

2.組成mogliefs的組件:
1.trackers(mogilefsd):mogliefs的核心組件,主要功能是(replication)節(jié)點(diǎn)文件復(fù)制、(deletion)文件刪除、(query)元數(shù)據(jù)查詢、(monitor)健康監(jiān)測(cè)、(reaper)儲(chǔ)存失敗重置等等。它通常稱(chēng)為元數(shù)據(jù)服務(wù)器,但它不會(huì)去儲(chǔ)存元數(shù)據(jù),而是將元數(shù)據(jù)儲(chǔ)存在如MySQL這一類(lèi)的數(shù)據(jù)庫(kù)中。為保證架構(gòu)的可靠性,trackers一般有多個(gè)。trackers可看作是一個(gè)旁掛式代理,只負(fù)責(zé)處理元數(shù)據(jù)信息。
2.數(shù)據(jù)庫(kù):數(shù)據(jù)庫(kù)用來(lái)存放mogliefs的元數(shù)據(jù),而由trackers來(lái)管理數(shù)據(jù)。因此通常建議做ha。
3.mogstored(儲(chǔ)存節(jié)點(diǎn)):實(shí)際文件存放的地方。通常會(huì)將實(shí)際文件保存至少兩份副本。
3.示例演示拓?fù)鋱D
在三個(gè)節(jié)點(diǎn)同時(shí)安裝trackers和mogstored,選擇其中一個(gè)節(jié)點(diǎn)安裝mysql。在生產(chǎn)環(huán)境最好是能單獨(dú)將mysql部署并且做主從復(fù)制。trackers和mogstored也可以分開(kāi)部署在不同節(jié)點(diǎn)上,這些都需要根據(jù)實(shí)際的生產(chǎn)環(huán)境來(lái)決定。這里主要是演示mogilefs,不做mysql主從復(fù)制演示。若想要mogilefs能掛載,可以用fuse來(lái)實(shí)現(xiàn)。
需要注意的是:mogilefs存儲(chǔ)的文件url很特殊(后面會(huì)解釋mogilefs文件名生產(chǎn)的過(guò)程),如存儲(chǔ)一張圖片時(shí)文件url可能會(huì)是類(lèi)似6060/0000/0000/0000/00000021.jpg這樣的格式,對(duì)用戶來(lái)講就不太友好,用戶可能需要直觀的類(lèi)似image.hello.com/21.jpg這樣的url。所以通常會(huì)使用nginx來(lái)反代mogilefs。

4.系統(tǒng)環(huán)境與安裝
mogilefs是一個(gè)相對(duì)較年代較久但成熟的分布式儲(chǔ)存,考慮到可能在centos7上會(huì)出現(xiàn)兼容問(wèn)題,這里centos6來(lái)演示。
操作系統(tǒng):centos release 6.6
mogilefs:2.46
nginx:1.10
mysql:5.1
ip分配:
n1:192.168.29.111,n2:192.168.29.112,n3:192.168.29.113,n4:192.168.29.114
結(jié)構(gòu)如上圖所示。
1.在n1節(jié)點(diǎn)上安裝mysql、mogilefsd、mogstored,并將n1配置為trackers、storage node
mysql直接用yum安裝。
~]# yum install -y mysql mysql-server
安裝mogilefs的trackers和storage node組件,安裝時(shí)一定要安裝perl相關(guān)的依賴(lài)包,依賴(lài)包有:
perl-danga-socket-1.61-1.el6.rf.noarch.rpm perl-io-stringy-2.110-1.2.el6.rfx.noarch.rpmperl-net-netmask-1.9015-8.el6.noarch.rpm perlbal-1.78-1.el6.noarch.rpmperl-perlbal-1.78-1.el6.noarch.rpm perlbal-doc-1.78-1.el6.noarch.rpmperl-io-aio-3.71-2.el6.x86_64.rpm
上述依賴(lài)包一定要安裝后才能安裝mogilefs。安裝組件:
yum install -y mogilefs-server-mogstored-2.46-2.el6.noarch.rpm mogilefs-server-mogilefsd-2.46-2.el6.noarch.rpm mogilefs-server-2.46-2.el6.noarch.rpm
配置mogilefs-server-mogilefsd:
~]# vim /etc/mogilefs/mogilefsd.conf #mogilfs trackers的主配置文件
# enable daemon mode to work in background and use syslog daemonize = 1 #是否以守護(hù)進(jìn)程的方式運(yùn)行。 # where to store the pid of the daemon (must be the same in the init script) pidfile = /var/run/mogilefsd/mogilefsd.pid #pid文件路徑 # database connection information db_dsn = dbi:mysql:mogilefs:host=192.168.29.111 #數(shù)據(jù)庫(kù)的地址 db_user = moguser #配置數(shù)據(jù)庫(kù)的用戶名及密碼 db_pass = 123456 # ip:port to listen on for mogilefs client requests listen = 0.0.0.0:7001 #監(jiān)聽(tīng)的地址與端口 # optional, if you don't define the port above. conf_port = 7001 #默認(rèn)端口 # number of query workers to start by default. query_jobs = 10 #查詢進(jìn)程數(shù)量 # number of delete workers to start by default. delete_jobs = 1 # number of replicate workers to start by default. replicate_jobs = 5 # number of reaper workers to start by default. # (you don't usually need to increase this) reaper_jobs = 1 # number of fsck workers to start by default. # (these can cause a lot of load when fsck'ing) #fsck_jobs = 1 # minimum amount of space to reserve in megabytes # default: 100 # consider setting this to be larger than the largest file you # would normally be uploading. #min_free_space = 200 # number of seconds to wait for a storage node to respond. # default: 2 # keep this low, so busy storage nodes are quickly ignored. #node_timeout = 2 # number of seconds to wait to connect to a storage node. # default: 2 # keep this low so overloaded nodes get skipped. #conn_timeout = 2 # allow replication to use the secondary node get port, # if you have apache or similar configured for get's #repl_use_get_port = 1
修改完配置后,進(jìn)入數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)可以遠(yuǎn)程連接的root用戶,或者使用mogdbsetup初始化數(shù)據(jù)庫(kù):
mysql> grant all on mogilefs.* to 'moguser'@'192.168.29.%' identified by '123456'; #創(chuàng)建用戶moguser,擁有管理mogilefs庫(kù)的所有權(quán)限,并允許192.168.29.*的用戶遠(yuǎn)程連接。 mysql> flush privileges; mysql> quit
~]# mogdbsetup --dbhost=127.0.0.1 --dbuser=moguser --dbpass=123456
初始化完成后可以在mysql中看到創(chuàng)建好的mogilefs庫(kù)以及里面的表:

啟動(dòng)mogilefs并確認(rèn)7001端口處于監(jiān)聽(tīng)狀態(tài):
~]# service mogilefsd start starting mogilefsd [ ok ] ~]# ss -lnt
注:可以在n2、n3節(jié)點(diǎn)都安裝trackers服務(wù),從而消除單點(diǎn)故障風(fēng)險(xiǎn)也能平均i/o壓力。
3.在n1上配置storage node
storage node配置文件路徑為/etc/mogilefs/mogstored.conf:
~]# vim /etc/mogilefs/mogstored.conf maxconns = 10000 #最大并發(fā)連接數(shù) httplisten = 0.0.0.0:7500 #mogilefs數(shù)據(jù)的傳輸是通過(guò)http協(xié)議實(shí)現(xiàn)的,這里是監(jiān)聽(tīng)的地址和端口 mgmtlisten = 0.0.0.0:7501 #健康監(jiān)測(cè)的監(jiān)聽(tīng)地址和端口 docroot = /mogliefs/mogdata #數(shù)據(jù)的存儲(chǔ)路徑,目錄的屬組和屬主必須是mogilefs
創(chuàng)建數(shù)據(jù)存儲(chǔ)目錄并修改屬組和屬主為mogilefs:
~]# mkdir -pv /mogliefs/mogdata ~]# chown -r mogilefs.mogilefs /mogliefs/
啟動(dòng)mogstored,查看進(jìn)程是否正常啟動(dòng)端口是否監(jiān)聽(tīng):
~]# service mogstored start ~]# ss -lnt #監(jiān)聽(tīng)端口為7500、7501
4.按照n1的步驟在節(jié)點(diǎn)n2、n3上安裝mogilefs,并將n1上的配置文件復(fù)制到n2、n3。
~]# scp /etc/mogilefs/*.conf root@192.168.29.112:/etc/mogilefs/ ~]# scp /etc/mogilefs/*.conf root@192.168.29.113:/etc/mogilefs/
啟動(dòng)mogstored服務(wù)并確認(rèn)監(jiān)聽(tīng):
~]# service mogstored start ~]# ss -lnt #監(jiān)聽(tīng)端口為7500、7501
5.用在n1上用mogadm命令將所有節(jié)點(diǎn)整合成集群。
添加存儲(chǔ)節(jié)點(diǎn),并檢查:
1 ~]# mogadm host add 192.168.29.111 --ip=192.168.29.111 --port=7500 --status=alive 2 ~]# mogadm host add 192.168.29.112 --ip=192.168.29.112 --port=7500 --status=alive 3 ~]# mogadm host add 192.168.29.113 --ip=192.168.29.113 --port=7500 --status=alive
~]# mogadm check

若想讓mogilefs集群中的存儲(chǔ)被識(shí)別成不同設(shè)備,需要在創(chuàng)建的/mogliefs/mogdata目錄下再創(chuàng)建名為dev*的目錄,使每個(gè)節(jié)點(diǎn)被當(dāng)做存儲(chǔ)設(shè)備使用。mogilefs是將冗余存儲(chǔ)在不同設(shè)備中的,每一個(gè)節(jié)點(diǎn)都應(yīng)該被識(shí)別為不同的設(shè)備。
在n1、n2、n3上的/mogliefs/mogdata/目錄下分別創(chuàng)建dev1,dev2,dev3目錄,并在trackers上添加設(shè)備:
1 ~]# mogadm device add 192.168.29.111 1 2 ~]# mogadm device add 192.168.29.112 2 3 ~]# mogadm device add 192.168.29.113 3

6.創(chuàng)建domain和class
在mogilefs中,在多個(gè)節(jié)點(diǎn)上為了方便文件副本管理,通常在設(shè)備中不會(huì)以文件為單位進(jìn)行管理,而是以class(類(lèi))做管理,復(fù)制刪除等操作都是以class為最小單位進(jìn)行的。每個(gè)class中可以放很多文件,class的容積也不是固定的。
在mogilefs的存儲(chǔ)空間中,所有數(shù)據(jù)文件都在同一平面,所以不能有同名的情況發(fā)生,這樣會(huì)影響mogilefs的靈活性,所以引入了domain(名稱(chēng)空間)的概念。domain包含class,在不同的domain中可以有相同的文件名。

~]# mogadm domain add imgs #創(chuàng)建名為imgs的domain ~]# mogadm domain add text #創(chuàng)建名為text的domain ~]# mogadm domain list #查看domain list

可以自定義class的屬性,格式為:mogadm class add <domain> <class> [opts]
~]# mogadm class add imgs png --mindevcount=3 --hashtype=md5 #在domain imgs中定義名為png的class,在不同設(shè)備中復(fù)制3份,并用md5做校驗(yàn) ~]# mogadm class add imgs jpg --mindevcount=3 --hashtype=md5 #在domain imgs中定義名為jpg的class,在不同設(shè)備中復(fù)制3份,并用md5做校驗(yàn) ~]# mogadm domain list

7.使用mogilefs做上傳下載測(cè)試
mogilefs可以用自建的api接口進(jìn)行交互,其中有很多用于管理存儲(chǔ)數(shù)據(jù)的命令。例如上傳數(shù)據(jù)命令為mogupload,查看數(shù)據(jù)命令為mogfileinfo等。
例:測(cè)試將文件/test/123.png上傳至mogilefs集群(文件事先在本地準(zhǔn)備好):
~]# mogupload --trackers=192.168.29.111 --domain=imgs --class=png --key='/111.png' --file='/test/123.png' #通過(guò)ip為192.168.29.111的trackers將123.png文件上傳,并保存至domain為imgs,class為png的空間中,并重命名為111.png ~]# mogfileinfo --trackers=192.168.29.111 --domain=imgs --class=png --key='/111.png' #查看domain為imgs,class為png中key為111.png的文件的存儲(chǔ)情況。


至此,mogilefs分布式儲(chǔ)存集群就搭建完成了,但若想要使客戶端能與之通信,就需要在接口上進(jìn)行編程,這樣就很麻煩了,好在我們能用nginx做反代進(jìn)行通信。下面來(lái)演示nginx反代mogilefs的步驟。
5.nginx反代mogilefs
1.打開(kāi)n2,n3的mogilefsd服務(wù),將3個(gè)節(jié)點(diǎn)全部設(shè)置為trackers(保證配置文件與n1相同):
~]# service mogilefsd start
2.在n4節(jié)點(diǎn)編譯安裝nginx
安裝依賴(lài)包:
~]# yum install gcc gcc-c++ perl pcre-devel openssl openssl-devel
下載nginx編譯安裝包nginx-1.10.3.tar.gz與nginx_mogilefs模塊nginx_mogilefs_module-1.0.4.tar.gz并展開(kāi):
~]# ls nginx-1.10.3 nginx_mogilefs_module-1.0.4 nginx-1.10.3.tar.gz nginx_mogilefs_module-1.0.4.tar.gz
~]# cd nginx-1.10.3 ./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/ #一定記得添加mogilefs模塊所在的路徑,不可少。
~]# make & make install
添加nginx用戶并啟動(dòng)nginx:
~]# useradd -s /sbin/nologin -m nginx ~]# /usr/sbin/nginx
3.配置nginx
單trackers示例:
location /imgs/ {
mogilefs_tracker 192.168.29.111:7001; #單trackers示例
mogilefs_domain imgs; #指定domain
mogilefs_class png jpg; #指定class
mogilefs_pass { #傳輸相關(guān)配置
proxy_pass $mogilefs_path;
proxy_hide_header content-type;
proxy_buffering off;
}
}多trackers示例:
在nginx配置中的http配置段添加調(diào)度模塊:
1 upstream mogsvr {
2 server 192.168.29.111:7001;
3 server 192.168.29.112:7001;
4 server 192.168.29.113:7001;
5 }在nginx配置中的server配置段添:
location /imgs/ {
mogilefs_tracker mogsvr;
mogilefs_domain imgs;
mogilefs_class png jpg;
mogilefs_pass {
proxy_pass $mogilefs_path;
proxy_hide_header content-type;
proxy_buffering off;
}
}重新啟動(dòng)nginx,并通過(guò)nginx訪問(wèn)之前上傳的圖片:

以上就是“Nginx反代Mogilefs分布式儲(chǔ)存的方法”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
分享文章:Nginx反代Mogilefs分布式儲(chǔ)存的方法
網(wǎng)站鏈接:http://www.chinadenli.net/article28/gcsccp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、微信公眾號(hào)、網(wǎng)站內(nèi)鏈、建站公司、網(wǎng)站導(dǎo)航、網(wǎng)站維護(hù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)