MogileFS簡介:html
MogileFS是一個開源的分佈式文件存儲系統,由LiveJournal旗下的Danga Interactive公司開發。Danga團隊開發了包括 Memcached、MogileFS、Perlbal 等多個知名的開源項目。目前使用MogileFS 的公司很是多,如日本排名先前的幾個互聯公司及國內的yupoo(又拍)、digg、豆瓣、1號店、大衆點評、搜狗和安居客等,分別爲所在的組織或公司管理着海量的圖片。node
MogileFS特性
1 工在於應用層
2 無單點,三大組件(tracker,mogstore,database)皆可實現高可用;
3 自動完成文件複製,制的最小單位不是文件,而是class;基於不一樣的class,文件能夠被自動的複製到多個有足夠存儲空間的存儲節點上;
4 傳輸無需特殊協議,能夠經過NFS或HTTP協議進行通訊;
5 名稱安間簡單,文件經過一個給定的key來肯定,是一個全局的命名空間;沒有目錄,基於域實現文件隔離;
6 不共享任何數據,每一個存儲節點只需維護本身所屬的存儲設備(device)便可;mysql
MogileFS由部分組成:
(1) server:主要包括mogilefsd和mogstored兩個應用程序。
mogilefsd實現的是tracker,它經過數據庫來保存元數據信息,包括站點domain、class、host等;
mogstored是存儲節點(store node),它實際上是個WebDAV服務,默認監聽在7500端口,接受客戶端的文件存儲請求。
(2) utils(工具集):主要是MogileFS的一些管理工具,例如mogadm等。
在MogileFS安裝完後,要運行mogadm工具將全部的store node註冊到mogilefsd的數據庫裏,mogilefsd會對這些節點進行管理和監控。
(3) 客戶端API:MogileFS的客戶端API不少,例如Perl、PHP、Java、Python等,用這個模塊能夠編寫客戶端程序,實現文件的備份管理功能等。linux
存儲主機(節點)
這個是 MogileFS 存儲文件存放在這些機器上,也是 mogstored 節點,也叫 Storage Server,一臺存儲主要都要啓動一個 mogstored 服務.擴容就是增長這些機器.nginx
設備(device)
一個存儲節點,以就是上面的主機,能夠有多個 device, 就是用來存放文件的目錄(例如掛載的目錄),每一個設備都有一個設備id,須要在 mogstored 的配置文件中的 docroot 配置的項目 指定的目錄下面建立相應的設備的目錄,目錄名爲 $docroot/dev$id,設備是不能刪除的.只能將其設備的狀態的值置爲dead,當一個設備 dead 以後,就真的 dead了,裏面的數據也沒法恢復了,且這個dead了的設備的 id 也不能再用.git
MogileFS架構github
tracker 追蹤元數據
mogilefsd 守護進程
它的主要職責
replication 節點之間文件得複製
deletion 刪除文件
queryworker 響應客戶請求的文件元數據訪問請求
reaper 在存儲失敗後將文件複製請求從新放置於隊列中
monitor 監主機和設備的健康狀態
database 存儲元數據
存儲mogilefs的元數據,通常使用MySQL ,建議使用冗餘方案以保證其可用性:(MMM,MHA)
mogilefs專門提供了數據結構管理工具mogdbsetup
storage 存儲數據
mogstored 守護進程,一個準備好的mogstored節點可經過mogadm命令添加至如今的集羣中。
存儲節點須要定義"設備" 用做存儲空間 每一個"設備"在當前集羣都須要經過一個唯一的DevID來標識
Client
客戶端用於與mogilefs創建通訊,完成數據存取;sql
工做流程數據庫
高可用架構apache
MogileFS管理的幾個概念:
Domain
一個MogileFS 能夠有多個Domain, 用來存放不一樣文件(大小,類型)
同一個Domain內,key必須惟一
不一樣Domain內,Key能夠相同
Class
最小複製單元
文件屬性管理
定義文件存儲在不一樣設備上份數據
每一個設備都有ID號,Domain+Fid用來定位文件
實驗準備
安裝Mariadb
https://mariadb.org/ 網站下載 mariadb-5.5.46-linux-x86_64.tar.gz
1.準備
groupadd -r -g 306 mysql useradd -r -g 306 -u 306 mysql mkdir -pv /mydata/data chown -R mysql.mysql /mydata
2.安裝Mariadb
tar zxf mariadb-5.5.46-linux-x86_64.tar.gz -C /usr/local/ cd /usr/local/ ln -sv mariadb-5.5.46-linux-x86_64 mysql cd mysql chown -R root.mysql ./* scripts/mysql_install_db --user=mysql --datadir=/mydata/data mkdir /etc/mysql cp support-files/my-large.cnf /etc/mysql/my.cnf
3.配置Mariadb
vim /etc/mysql/my.cnf datadir = /mydata/data innodb_file_per_table = on skip_name_resolve = on
4.將Mariadb加到服務項
cp support-files/mysql.server /etc/init.d/mysqld chkconfig --add mysqld service mysqld start
5.將Mariadb客戶端程序加到環境變量
vim /etc/profile.d/mysql.sh export PATH=/usr/local/mysql/bin:$PATH source /etc/profile.d/mysql.sh
源碼安裝MogileFS
去官方下載http://www.danga.com/的源碼
MogileFS-Server MogileFS-Server-2.72.zip
MogileFS-Utils MogileFS-Utils-2.29.zip
perl-MogileFS-Client perl-MogileFS-Client-1.17.zip
Perlbal Perlbal-1.80.zip #Tracker不用安裝,storage必須安裝
1.安裝epel
wget http://mirrors.aliyun.com/epel/6/x86_64/epel-release-6-8.noarch.rpm rpm -ivh epel-release-6-8.noarch.rpm
2.安裝MogileFs 用到的依賴包
yum install perl-IO-stringy perl-DBD-MySQL perl-BSD-Resource #base源 yum install perl-Danga-Socket perl-IO-AIO perl-Net-Netmask #epel源
3 安裝MogileFS-Client
unzip perl-MogileFS-Client-1.17.zip cd perl-MogileFS-Client-1.17 perl Makefile.PL make make test make install
4.安裝MogileFS-Utils
unzip MogileFS-Utils-2.29.zip cd MogileFS-Utils-2.29 perl Makefile.PL make make install
5.安裝MogileFS-Server
unzip MogileFS-Server-2.72.zip cd MogileFS-Server-2.72 perl Makefile.PL make make test make install
6.安裝Perlbal (Tracker不用安裝,storage必須安裝)
unzip Perlbal-1.80.zi cd Perlbal-1.80.zip perl Makefile.PL make make test make install
7.添加mogilefs系統服務啓動帳號
groupadd -r mogilefs useradd -r -g mogilefs mogilefs
8.複製mogilefs的配置文件到/etc/mogilefs/ ,並建立用到的目錄
mkdir /etc/mogilefs/ cp /root/MogileFS-Server-2.72/conf/* /etc/mogilefs/ mkdir /var/run/mogilefsd/ chown mogilefs.mogilefs /var/run/mogilefsd/
9添加mogilefsd的服務啓動腳本
vim /etc/rc.d/init.d/mogilefsd #!/bin/bash # Author: MageEdu <linuxedu@foxmail.com> # mogilefsd - Startup script for the MogileFS tracker # # chkconfig: - 85 15 # description: MogileFS tracker # processname: mogilefsd # config: /etc/mogilefs/mogilefsd.conf # pidfile: /var/run/mogilefsd/mogilefsd.pid # Source function library. . /etc/rc.d/init.d/functions # Path to the apachectl script, server binary, and short-form for messages. lockfile=${LOCKFILE-/var/lock/subsys/mogilefsd} RETVAL=0 prog=/usr/local/bin/mogilefsd #prog=$(which mogilefsd) start() { ulimit -n 65535 echo -n $"Starting mogilefsd" su - mogilefs -c "$prog -c /etc/mogilefs/mogilefsd.conf --daemon" &> /dev/null RETVAL=$? [ $RETVAL = 0 ] && success && touch ${lockfile} || failure echo return $RETVAL } stop() { echo -n $"Stopping mogilefsd" netstat -nlp|grep "mogilefsd"|grep -v grep|awk '{print $7}'|awk -F"/" '{print $1}'|xargs kill -9 RETVAL=$? [ $RETVAL = 0 ] && success && rm -f ${lockfile} || failure echo } reload() { echo -n $"Reloading mogilefsd: " killall mogilefsd -HUP RETVAL=$? [ $RETVAL = 0 ] && success || failure echo } case "$1" in start) start ;; stop) stop ;; status) status mogilefsd RETVAL=$? ;; restart) stop sleep 1 start ;; reload) reload ;; *) echo $"Usage: mogilefsd {start|stop|restart|reload|status}" exit 1 esac exit $RETVAL
10.設置mogstored 的服務啓動腳本
vim /etc/rc.d/init.d/mogstored #!/bin/bash # Author: MageEdu <linuxedu@foxmail.com> # mogstored - Startup script for the MogileFS storage # # chkconfig: - 86 14 # description: MogileFS storage # processname: mogstored # config: /etc/mogilefs/mogstored.conf # pidfile: /var/run/mogilefsd/mogstored.pid # Source function library. . /etc/rc.d/init.d/functions # Path to the apachectl script, server binary, and short-form for messages. lockfile=${LOCKFILE-/var/lock/subsys/mogstored} RETVAL=0 configfile='/etc/mogilefs/mogstored.conf' prog=/usr/local/bin/mogstored #prog=$(which mogstored) start() { ulimit -n 65535 echo -n $"Starting mogstored" su - mogilefs -c "$prog -c $configfile --daemon" &> /dev/null RETVAL=$? [ $RETVAL = 0 ] && success && touch ${lockfile} || failure echo return $RETVAL } stop() { echo -n $"Stopping mogstored" netstat -nlp|grep "mogstored"|grep -v grep|awk '{print $7}'|awk -F"/" '{print $1}'|xargs kill -9 RETVAL=$? [ $RETVAL = 0 ] && success && rm -f ${lockfile} || failure echo } reload() { echo -n $"Reloading mogstored: " killall mogstored -HUP RETVAL=$? [ $RETVAL = 0 ] && success || failure echo } case "$1" in start) start ;; stop) stop ;; status) status mogstored RETVAL=$? ;; restart) stop sleep 1 start ;; reload) reload ;; *) echo $"Usage: mogstored {start|stop|restart|reload|status}" exit 1 esac exit $RETVAL
11.將mogilefsd和mogstored 添加到服務項
chmod +x /etc/init.d/mogilefsd chmod +x /etc/init.d/mogstored chkconfig --add mogilefsd chkconfig --add mogstored
實驗一 單tracker + 雙 storage
10.10.10.54 tracker + database
10.10.10.55 storage
10.10.10.56 storage
分別在三臺服安裝mogilefs ,並在10.10.10.54安裝mariadb
準備mysql受權10.10.10.0/24段的IP 所有能夠鏈接MySQL
GRANT ALL ON *.* TO 'root'@'10.10.10.%' IDENTIFIED BY 'root' WITH GRANT OPTION; FLUSH PRIVILEGES; SHOW GRANTS; +---------------------------------------------------------------------+ | Grants for root@localhost | +---------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION | | GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION | +---------------------------------------------------------------------+
初始化Mogilefs 數據庫,使用mogdbsetup
mogdbsetup --dbhost=10.10.10.54 --dbrootuser=root --dbrootpass=root --dbname=mogilefs --dbuser=mogilefs --dbpass=mogilefs This will attempt to setup or upgrade your MogileFS database. 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 'mogilefs'? [Y/n]: y Grant all privileges to user 'mogilefs', connecting from anywhere, to the mogilefs database 'mogilefs'? [Y/n]: y
配置10.10.10.54 tracker
vim /etc/mogilefs/mogilefsd.conf # Enable daemon mode to work in background and use syslog daemonize = 1 # Where to store the pid of the daemon (must be the same in the init script) pidfile = /var/run/mogilefsd/mogilefsd.pid # Database connection information db_dsn = DBI:mysql:mogilefs:host=10.10.10.54 db_user = mogilefs db_pass = mogilefs # IP:PORT to listen on for mogilefs client requests listen = 0.0.0.0:7001
啓動
service mogilefsd start
檢查監聽的7001端口
ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:7001 *:*
配置10.10.10.55 和10.10.10.56 storage
mkdir -pv /mogdata/dev2 #10.10.10.55 storage2 mkdir -pv /mogdata/dev3 #10.10.10.56 storage3 chown -R mogilefs.mogilefs /mogdata
vim /etc/mogilefs/mogstored.conf maxconns = 10000 httplisten = 0.0.0.0:7500 mgmtlisten = 0.0.0.0:7501 docroot = /mogdata
開啓storage(若是啓動失敗安裝Perlbal 和perl-BSD-Resource)
service mogstored start
檢查7500 和7501端口是否存在
ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:7500 *:* LISTEN 0 128 *:7501 *:*
使用mogadm 進行管理
1 add host
mogadm --trackers=10.10.10.54:7001 host add 10.10.10.55 --ip 10.10.10.55 --status=alive mogadm --trackers=10.10.10.54:7001 host add 10.10.10.56 --ip 10.10.10.56 --status=alive mogadm --trackers=10.10.10.54:7001 host list 10.10.10.55 [1]: alive IP: 10.10.10.55:7500 10.10.10.56 [2]: alive IP: 10.10.10.56:7500
2 add device
mogadm --trackers=10.10.10.54:7001 device add 10.10.10.55 2 mogadm --trackers=10.10.10.54:7001 device add 10.10.10.56 3 mogadm --trackers=10.10.10.54:7001 device list 10.10.10.55 [1]: alive used(G) free(G) total(G) weight(%) dev2: alive 1.885 44.705 46.590 100 10.10.10.56 [2]: alive used(G) free(G) total(G) weight(%) dev3: alive 1.886 44.704 46.590 100 mogadm --trackers=10.10.10.54:7001 check Checking trackers... 10.10.10.54:7001 ... OK Checking hosts... [ 1] 10.10.10.55 ... OK [ 2] 10.10.10.56 ... OK Checking devices... host device size(G) used(G) free(G) use% ob state I/O% ---- ------------ ---------- ---------- ---------- ------ ---------- ----- [ 1] dev2 46.590 1.917 44.674 4.11% writeable 0.0 [ 2] dev3 46.590 1.917 44.674 4.11% writeable 0.0 ---- ------------ ---------- ---------- ---------- ------ total: 93.181 3.834 89.347 4.11% 3 add domain mogadm --trackers=10.10.10.54:7001 domain add pic mogadm --trackers=10.10.10.54:7001 domain add conf mogadm --trackers=10.10.10.54:7001 domain list domain class mindevcount replpolicy hashtype -------------------- -------------------- ------------- ------------ ------- conf default 2 MultipleHosts() NONE pic default 2 MultipleHosts() NONE 4 add class mogadm --trackers=10.10.10.54:7001 class add pic test1 --mindevcount=2 mogadm --trackers=10.10.10.54:7001 class list domain class mindevcount replpolicy hashtype -------------------- -------------------- ------------- ------------ ------- conf default 2 MultipleHosts() NONE pic default 2 MultipleHosts() NONE pic test1 2 MultipleHosts() NONE
檢查數據庫內容(要上傳一次文件刷新纔有內容)
mogstats --db_dsn="DBI:mysql:mogilefs:host=10.10.10.54" --db_user="mogilefs" --db_pass="mogilefs" --stats="all" Fetching statistics... (all) Statistics for devices... device host files status ---------- ---------------- ------------ ---------- dev2 10.10.10.55 1 alive dev3 10.10.10.56 1 alive ---------- ---------------- ------------ ---------- Statistics for file ids... Max file id: 3 Statistics for files... domain class files size (m) fullsize (m) -------------------- ----------- ---------- ----------- ------------- pic default 1 0 0 -------------------- ----------- ---------- ----------- ------------- Statistics for replication... domain class devcount files -------------------- ----------- ---------- ---------- pic default 2 1 -------------------- ----------- ---------- ---------- Statistics for replication queue... status count -------------------- ------------ -------------------- ------------ Statistics for delete queue... status count -------------------- ------------ -------------------- ------------ Statistics for general queues... queue status count --------------- -------------------- ------------ --------------- -------------------- ------------
測試
mogupload 上傳文件
(注意文件大小寫,Could not stat at /usr/local/bin/mogupload line 77. 文件名寫錯,找不到要上傳的文件)
mogupload --trackers=10.10.10.54:7001 --domain=pic --key='mog1.PNG' --file='./mog1.PNG' mogfileinfo 獲取文件的信息 mogfileinfo --trackers=10.10.10.54:7001 --domain=pic --key='mog1.PNG' - file: mog1.PNG class: default devcount: 2 domain: pic fid: 3 key: mog1.PNG length: 299456 - http://10.10.10.55:7500/dev2/0/000/000/0000000003.fid - http://10.10.10.56:7500/dev3/0/000/000/0000000003.fid
流覽器打開查到的連接測試
mogfetch 下載文件
格式
/usr/bin/mogfetch --trackers=host --domain=foo --key='/hello.jpg' --file='./output'
實驗二 三臺服務器同時爲tracker 和storage
10.10.10.54 tracker + database + storage
10.10.10.55 tracker + storage
10.10.10.56 tracker + storage
mysql 另外實現,本實驗爲mysql單實例
複製tracker的配置文件到另外兩臺storage服務器
scp /etc/mogilefs/mogilefsd.conf 10.10.10.55:/etc/mogilefs/ scp /etc/mogilefs/mogilefsd.conf 10.10.10.56:/etc/mogilefs/
複製storage的配置文件到tracker服務器
scp /etc/mogilefs/mogstored.conf 10.10.10.54:/etc/mogilefs/
在三臺服務器上所有開啓 tracker 和 storage(若是storage啓動失敗,安裝Perlbal 和perl-BSD-Resource))
service mogilefsd start service mogstored start
檢查狀態 7500 7501 7001 都處於監聽狀態
ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:7500 *:* LISTEN 0 128 *:7501 *:* LISTEN 0 128 *:7001 *:*
添加tracker 服務器的host 和 device
mogadm --trackers=10.10.10.54:7001 host add 10.10.10.54 --ip 10.10.10.54 --status=alive mogadm --trackers=10.10.10.54:7001 device add 10.10.10.54 1
查看信息
[root@node4 ~]# mogadm --trackers=10.10.10.54:7001 host list 10.10.10.55 [1]: alive IP: 10.10.10.55:7500 10.10.10.56 [2]: alive IP: 10.10.10.56:7500 10.10.10.54 [3]: alive IP: 10.10.10.54:7500 [root@node4 ~]# mogadm --trackers=10.10.10.54:7001 device list 10.10.10.55 [1]: alive used(G) free(G) total(G) weight(%) dev2: alive 1.917 44.673 46.590 100 10.10.10.56 [2]: alive used(G) free(G) total(G) weight(%) dev3: alive 1.917 44.673 46.590 100 10.10.10.54 [3]: alive used(G) free(G) total(G) weight(%) dev1: alive 2.932 43.658 46.590 100 [root@node4 ~]# mogadm --trackers=10.10.10.54:7001 device list 10.10.10.55 [1]: alive used(G) free(G) total(G) weight(%) dev2: alive 1.917 44.673 46.590 100 10.10.10.56 [2]: alive used(G) free(G) total(G) weight(%) dev3: alive 1.917 44.673 46.590 100 10.10.10.54 [3]: alive used(G) free(G) total(G) weight(%) dev1: alive 2.932 43.658 46.590 100 [root@node4 ~]# mogadm --trackers=10.10.10.55:7001 device list 10.10.10.55 [1]: alive used(G) free(G) total(G) weight(%) dev2: alive 1.917 44.673 46.590 100 10.10.10.56 [2]: alive used(G) free(G) total(G) weight(%) dev3: alive 1.917 44.673 46.590 100 10.10.10.54 [3]: alive used(G) free(G) total(G) weight(%) dev1: alive 2.932 43.658 46.590 100 [root@node4 ~]# mogadm --trackers=10.10.10.56:7001 device list 10.10.10.55 [1]: alive used(G) free(G) total(G) weight(%) dev2: alive 1.917 44.673 46.590 100 10.10.10.56 [2]: alive used(G) free(G) total(G) weight(%) dev3: alive 1.917 44.673 46.590 100 10.10.10.54 [3]: alive used(G) free(G) total(G) weight(%) dev1: alive 2.932 43.658 46.590 100
檢查三臺服務器顯示數據徹底一到
上傳文件測試
mogupload --trackers=10.10.10.54:7001,10.10.10.55:7001,10.10.10.56:7001 --domain=pic --key='mog2.PNG' --file='mog2.PNG' mogupload --trackers=10.10.10.54:7001,10.10.10.55:7001,10.10.10.56:7001 --domain=pic --key='mog3.PNG' --file='mog3.PNG'
查看文件信息
mogfileinfo --trackers=10.10.10.54:7001,10.10.10.55:7001,10.10.10.56:7001 --domain=pic --key='mog2.PNG' - file: mog2.PNG class: default devcount: 2 domain: pic fid: 6 key: mog2.PNG length: 526096 - http://10.10.10.55:7500/dev2/0/000/000/0000000006.fid - http://10.10.10.56:7500/dev3/0/000/000/0000000006.fid mogfileinfo --trackers=10.10.10.54:7001,10.10.10.55:7001,10.10.10.56:7001 --domain=pic --key='mog3.PNG' - file: mog3.PNG class: default devcount: 2 domain: pic fid: 7 key: mog3.PNG length: 945124 - http://10.10.10.54:7500/dev1/0/000/000/0000000007.fid - http://10.10.10.55:7500/dev2/0/000/000/0000000007.fid
流覽器打開測試
實驗三 nginx 反向代理,使用真實URL地址鏈接mogilefs(上傳文件失敗)
10.10.10.51 nginx 反向代理mogilefs
10.10.10.54 tracker + database + storage
10.10.10.55 tracker + storage
10.10.10.56 tracker + storage
安裝nginx 和 nginx_mogilefs_module
下載nginx
wget http://nginx.org/download/nginx-1.8.0.tar.gz
下載nginx_mogilefs_module
https://www.nginx.com/resources/wiki/modules/
Mogilefs Implements a MogileFS client Download
nginx 提供的版本爲nginx_mogilefs_module-1.0.2.tar.gz
能夠去開方者提供的下載地址下載
http://www.grid.net.ru/nginx/download/nginx_mogilefs_module-1.0.4.tar.gz
https://github.com/pyh/nginx-mogilefs-module/tree/1.0.4
注:因爲nginx的mogilefs模塊的做者再也不維護該模塊的緣由,因此若是要使用該模塊的上傳功能,
須要使用nginx的0.7.1到0.8之間的版本,高版本的nginx因爲API的變化而不支持PUT功能了。有個用戶寫了個這個模塊的補丁,測試一樣不能用curl put上傳文件。
引用http://mailman.nginx.org/pipermail/nginx/2010-September/022700.html
http://nginx.org/pipermail/nginx/p_w_uploads/20100928/8dd35bf7/p_w_upload-0001.bin
diff --git a/ngx_http_mogilefs_module.c b/ngx_http_mogilefs_module.c index e229f47..a4d249d 100644 --- a/ngx_http_mogilefs_module.c +++ b/ngx_http_mogilefs_module.c @@ -483,6 +483,9 @@ ngx_http_mogilefs_put_handler(ngx_http_request_t *r) case FETCH: spare_location = mgcf->create_close_spare_location; ctx->state = CREATE_CLOSE; +#if defined nginx_version && nginx_version >= 8011 + r->main->count++; +#endif break; case CREATE_CLOSE: r->headers_out.content_length_n = 0;
使用方法 ,編輯ngx_http_mogilefs_module.c.c
在483行case FETCH: 修改成
case FETCH: spare_location = mgcf->create_close_spare_location; ctx->state = CREATE_CLOSE; #if defined nginx_version && nginx_version >= 8011 r->main->count++; #endif break;
2.編譯nginx
yum install gcc openssl-devel pcre-devel tar zxf nginx-1.8.0.tar.gz tar zxf nginx_mogilefs_module-1.0.4.tar.gz cd nginx-1.8.0 ./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 make make install
3.添加nginx服務帳號
groupadd -r nginx useradd -r -g nginx nginx mkdir -pv /var/tmp/nginx/client/
4.建立啓動項文件/etc/rc.d/init.d/nginx,內容以下:
vim /etc/rc.d/init.d/nginx #!/bin/sh # # nginx - this script starts and stops the nginx daemon # # 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}" exit 2 esac
5.將nginx加入到服務
chmod +x /etc/rc.d/init.d/nginx chkconfig --add nginx service nginx start
6.配置nginx鏈接mogilefs
vim /etc/nginx/nginx.conf upstream mogtrackers { server 10.10.10.54:7001; server 10.10.10.55:7001; server 10.10.10.56:7001; } location /pic/ { mogilefs_tracker mogtrackers; mogilefs_domain pic; mogilefs_pass { proxy_pass $mogilefs_path; proxy_hide_header Content-Type; proxy_buffering off; } }
從新加載nginx 配置
service nginx reload
使用瀏覽器打開直接URL http://10.10.10.51/pic/mog1.png 測試
7.nginx上傳圖片 (測試失敗)
注:因爲nginx的mogilefs模塊的做者再也不維護該模塊的緣由,因此若是要使用該模塊的上傳功能,
須要使用nginx的0.7.1到0.8之間的版本,高版本的nginx因爲API的變化而不支持PUT功能了。
vim /etc/nginx/nginx.conf location /upload/ { allow 10.10.10.0/24; deny all; mogilefs_tracker mogtrackers; mogilefs_domain pic; mogilefs_methods PUT DELETE; mogilefs_pass { proxy_pass $mogilefs_path; proxy_hide_header Content-Type; proxy_buffering off; } }
nginx 使用 curl直接上傳,特修改
curl -X PUT -T '1.png' http://10.10.10.51/upload/