Nginx代理MogileFS并實現負載均衡和高可用
前言
上篇文章我們了解分布式系統和MogileFS的基本使用, 但是那樣的架構是有問題的, 本篇文章我們來了解一下如何使用
nginx-mogilefs-module-master
模塊來構建一個不一樣的 MogileFS Cluster
實驗拓撲
實驗環境
主機 | IP | 功用 |
---|---|---|
node6 | 172.16.1.7 | Nginx,Tracker, Storage,DataBase |
node7 | 172.16.1.8 | Tracker, Storage |
node8 | 172.16.1.9 | Tracker, Storage |
實驗步驟
配置MogileFS
安裝過程這里就不敘述了, 有疑問看我上一篇文章分布式系統介紹及MogileFS安裝、基本配置
配置數據庫:
[root@node6~] service mysqld start
mysql> GRANT ALL ON *.* TO root@'%' IDENTIFIED BY 'passwd' ; #配置一個可以遠程連接的root用戶
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL ON mogilefs.* TO mogileuser@'%' IDENTIFIED BY 'passwd'; #配置一個可管理mogilefs數據庫的用戶
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE DATABASE mogilefs; #創建mogilefs數據庫
Query OK, 1 row affected (0.00 sec)
配置mogilefsd
[root@node6~] vim /etc/mogilefs/mogilefsd.conf #node7, node8也要做操
db_dsn = DBI:mysql:mogilefs:host=172.16.1.7
db_user = mogileuser
db_pass = passwd
listen = 0.0.0.0:7001
conf_port = 7001
[root@node6~] service mogilefsd start
Starting mogilefsd [ OK ]
[root@node6~] mogadm host add node1 --ip=172.16.1.7 alive #只用在node6操作
[root@node6~] mogadm host add node2 --ip=172.16.1.8 alive #只用在node6操作
[root@node6~] mogadm host add node3 --ip=172.16.1.9 alive #只用在node6操作
[root@node6~] mogadm host list
node1 [1]: alive
IP: 172.16.1.7:7500
node2 [2]: alive
IP: 172.16.1.8:7500
node3 [3]: alive
IP: 172.16.1.9:7500
[root@node6~] scp /etc/mogilefs/mogilefsd.conf 172.16.1.8:/etc/mogilefs/ #復制配置文件給node7
[root@node6~] scp /etc/mogilefs/mogilefsd.conf 172.16.1.9:/etc/mogilefs/ #復制配置文件給node8
[root@node7~] service mogilefsd start #node7啟動mogfilefsd
Starting mogilefsd [ OK ]
[root@node7~] service mogilefsd start #node7啟動mogfilefsd
Starting mogilefsd [ OK ]
配置mogstored
[root@node6~] mkdir /data/mogilefs/dev1 -pv
mkdir: created directory `/data'
mkdir: created directory `/data/mogilefs'
mkdir: created directory `/data/mogilefs/dev1'
[root@node6~] vim /etc/mogilefs/mogstored.conf
maxconns = 10000
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501
docroot = /data/mogilefs/
[root@node6 ~]# chown mogilefs.mogilefs /data/mogilefs/ -R
[root@node6~] service mogstored start
Starting mogstored [ OK ]
##node7, node8都要做上述操作
[root@node6 ~]# mogadm device add node1 1
[root@node6 ~]# mogadm device add node2 2
[root@node6 ~]# mogadm device add node3 3
#查看設備信息
[root@node6~] mogadm device list
node1 [1]: alive
used(G) free(G) total(G) weight(%)
dev1: alive 2.069 72.365 74.435 100
node2 [2]: alive
used(G) free(G) total(G) weight(%)
dev2: alive 1.958 72.477 74.435 100
node3 [3]: alive
used(G) free(G) total(G) weight(%)
dev3: alive 1.954 72.480 74.435 100
創建域
[root@node6 ~]# mogadm domain add files
[root@node6 ~]# mogadm domain add images
[root@node6~] mogadm domain list
domain class mindevcount replpolicy hashtype
-------------------- -------------------- ------------- ------------ -------
files default 2 MultipleHosts() NONE
images default 2 MultipleHosts() NONE
上傳文件并測試
[root@node6~] mogupload --trackers=172.16.1.7 --domain=images --key='pal5q.jpg' --file=1.jpg
[root@node6~] mogfileinfo --trackers=172.16.1.7 --domain=images --key='pal5q.jpg'
- file: pal5q.jpg
class: default
devcount: 2
domain: images
fid: 5
key: pal5q.jpg
length: 103139
- http://172.16.1.8:7500/dev2/0/000/000/0000000005.fid
- http://172.16.1.7:7500/dev1/0/000/000/0000000005.fid
配置Nginx
編譯安裝Nginx
#Nginx和模塊自行下載
[root@node6 ~] yum groupinstall "Development Tools" "Server Platform Developments" #安裝開發包組
[root@node6/usr/local/nginx-1.9.15] yum install pcre-devel openssl-devel -y #安裝需要的軟件包
[root@node6~] tar xf nginx-1.9.15.tar.gz -C /usr/local/
[root@node6~] tar xf nginx_mogilefs_module-1.0.4.tar.gz -C /usr/local/
[root@node6~] cd /usr/local/nginx-1.9.15/
[root@node6/usr/local/nginx-1.9.15] ./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 \
> --with-pcre \
> --with-debug \
> --add-module=/usr/local/nginx_mogilefs_module-1.0.4/
[root@node6/usr/local/nginx-1.9.15] make && make install
配置Nginx
[root@node6~] vim /etc/nginx/nginx.conf
user nobody;
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.1.7:7001;
server 172.16.1.8:7001;
server 172.16.1.9:7001;
}
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
location /images/ {
mogilefs_tracker trackers;
mogilefs_domain images;
mogilefs_methods GET;
mogilefs_noverify on;
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;
}
}
}
啟動并測試
[root@node6~] /usr/sbin/nginx #啟動nginx
我們直接通過key值就能夠訪問到圖片, 停止后端任意主機都可以繼續訪問
總結
通過這個實驗, 我們可以將通過MogileFS實現的分布式存儲中的文件通過鍵值進行獲取, 也就是說, 我們也可以在站點中直接引用, 如果是Tengine的話, 還能夠通過Check_status看到更為詳細的信息
作者水平很低, 如果有錯誤及時指出, 如果你覺得本文寫的好請點一波贊~(≧▽≦)/~
作者: AnyISaIln QQ: 1449472454
感謝: MageEdu
原創文章,作者:Net18-AnyISalIn,如若轉載,請注明出處:http://www.www58058.com/16001