Nginx实现MogileFS的反向代理

MogileFS简介:

MogileFS是一个开源的分布式文件存储系统,MogileFS适用于存储海量小文件的工作场景,由LiveJournal旗下的Danga Interactive公司开发,该团队开发了包括 Memcached、MogileFS、Perlbal 等多个知名的开源项目。

MogileFS的组成:

1、server:主要包括mogilefsd和mogstored两个应用程序。mogilefsd实现的是tracker,它通过数据库(通常是MySQL)来保存元数据信息,包括站点domain、class、host等;mogstored是存储节点(store node),它其实是个WebDAV服务,默认监听在7500端口。

2、utils(工具集):主要由MogileFS的一些管理工具组成,如mogadm等

3、客户端API:MogileFS的客户端API很多,如Perl、PHP、Java、Python等,用这个模块可以编写客户端程序,实现文件的备份管理功能等,不过这通常是程序员所做的工作范畴。对于普通的使用者来说前两部分是我们主要关注的。

Nginx与MogileFS的结合:

由于MogileFS是使用http协议工作的,其后端的mogstored程序相当于web服务器,如果在浏览器内直接输入保存在mogstored中的文件路径,就可以直接将文件内容显示在浏览器中,而在MogileFS的存储节点只有一个的情况下,在存储文件很多且集中时,可能不足以满足存储的需要,此时,可以增加多个MogileFS存储节点,以平衡存储压力,这种场景下可以使用Nginx作为这些存储节点的反向代理将用户请求分发到各个节点上,同时也能发挥出Nginx强大的保持会话和响应连接的能力。


实验:使用Nginx作为MogileFS的反向代理:

实验过程中三台主机均安装mogilefs的server端程序,每个节点都连接到同一个数据库进行元数据的存储操作,这样访问到每个节点都可以获取到相同的文件数据。

实验用主机:node1:172.16.103.1 (安装mogilefs的server端程序,mogilefsd和mogstored)

            node2:172.16.103.2 (安装mogilefsd、mogstored、nginx)

            node3:172.16.103.3 (安装mogilefsd、mogstored、mysql)


实验步骤:

一、安装配置数据库:

1、安装数据库可以选择三个主机上的哪一台都可以(实验过程中选择了node3),然后为管理员账号创建mogilefs数据库进行授权,另外还需要创建用于保存mogilefs元数据的用户账号moguser:

# yum -y install mysql-server
# service mysqld start
# mysql
mysql> GRANT ALL ON mogilefs.* TO 'moguser'@'172.16.%.%' IDENTIFIED BY 'mogpass';
mysql> GRANT ALL ON *.* TO 'root'@'172.16.%.%' IDENTIFIED BY 'redhat';
mysql> GRANT ALL ON mogilefs.* TO 'moguser'@'node3.cluster.com' IDENTIFIED BY 'mogpass';
mysql> FLUSH PRIVILEGES;

注:数据库在授权账号连接的时候由于node3是使用本地连接的,所以需要为其单独授权。

二、配置node1:

1、安装mogilefs的服务器端软件及工具软件,注意需要安装依赖的包perl-IO-AIO:

# cd mogilefs/
# yum -y install *.rpm perl-IO-AIO

wKioL1QsBCvy_9U5AAGGKBE3GHI973.jpg

2、使用mogdbsetup创建数据库:

# mogdbsetup --dbhost=172.16.103.3 --dbname=mogilefs --dbuser=moguser --dbpass=mogpass --dbrootuser=root --dbrootpass=redhat

3、编辑配置文件,使该节点的mogilefsd进程与数据库通信,图中红框部分内容是需要根据实际需要与调整的参数:

# vim /etc/mogilefs/mogilefsd.conf

wKioL1Qr_naQveObAAIJmMGIkv8995.jpg

4、启动服务,并查看监听的端口是否启动

# service mogilefsd start
# netstat -tnlp

wKiom1Qr-9Pi3DWCAALiD-lAfYU075.jpg

5、创建该存储节点的数据目录,该目录的属主数组要修改为mogilefs用户和mogilefs组

# mkdir -pv /mogdata/data/dev1
# chown -R mogilefs.mogilefs /mogdata/

6、修改mogstored配置文件,使配置文件对应的存储数据目录与创建的目录保持一致

# vim /etc/mogilefs/mogstored.conf

wKiom1Qr_aHxSMWmAAB1ivdwaVg005.jpg

7、启动服务,查看服务启动的结果:

# service mogstored start
# netstat -tnlp

wKiom1Qr_DuAjV0FAAMQbzkVts0817.jpg

8、将node1节点配置好的mogilefsd.conf和mogstored.conf配置文件复制到node2和node3上:

# cd /etc/mogilefs
# scp ./* node2:/etc/mogilefs
# scp ./* node3:/etc/mogilefs

三、在node1和node2上安装mogilefs,创建node2和node3的数据目录,并启动服务:

# cd mogilefs/
# yum -y install *.rpm perl-IO-AIO
# mkdir -pv /mogdata/data/dev2
# chown -R mogilefs.mogilefs /mogdata/
# service mogilefsd start
# service mogstored start
# netstat -tnlp

wKiom1QsAlCy78QLAAL76vNfQqA145.jpg

注:node2和node3上这些操作都相同,只是node3对应的创建里面的数据目录要使用/mogdata/data/dev3。所以就没有重复列出操作过程。

四、添加各个mogilefs节点至数据库中,并查看添加后的结果:

# mogadm host add  node1 --status=alive
# mogadm host add  node2 --status=alive
# mogadm host add  node3 --status=alive
# mogadm device add node1 1 --status=alive
# mogadm device add node2 2 --status=alive
# mogadm device add node3 3 --status=alive
# mogadm check

wKioL1QsCMfBYIyWAAGkLr-VpOI590.jpg

然后可以对该mogilefs集群添加domain和class:

# mogadm domain add files
# mogadm domain add images
# mogadm class add files c1
# mogadm class add images c1

wKiom1QsCQODlIA5AAGpeaEwAWE668.jpg

此时可以向该mogilefs存储节点中上传文件:

[root@node3 mogilefs]# mogupload --trackers=172.16.103.1 --domain=files --key='/fstab.html' --file='/etc/fstab'

如果要查看具体的domain中有哪些key,操作方法为:

[root@node3 mogilefs]# moglistkeys --trackers=172.16.103.2 --domain=files

如果要查看具体的某个key对应的存储文件信息,操作方法为:

[root@node3 mogilefs]# mogfileinfo --trackers=172.16.103.3 --domain=files --key='/fstab.html'

五、编译安装Nginx:

Nginx要作为mogilefs的反向代理,需要在Nginx中添加mogilefs的第三方模块,系统自带的Nginx默认不带有这个模块,于是需要使用编译的方式安装Nginx,以便将该模块添加进Nginx,安装可以选择在这三台主机上的任意一个都可以,实验中安装的节点是node1:

1、解决依赖关系:

# yum -y groupinstall "Development tools" "Server Platform Development"
# yum -y install pcre-devel
# yum -y install openssl-devel

2、解压编译过程中需要用的mogilefs模块及主程序源码包,执行编译安装过程:

# tar xf nginx_mogilefs_module-1.0.4.tar.gz 
# tar xf nginx-1.6.1.tar.gz 
# cd nginx-1.6.1
# ./configure   --prefix=/usr   --sbin-path=/usr/sbin/nginx   --conf-path=/etc/nginx/nginx.conf   --ttp-log-path=/var/log/nginx/access.log   --pid-path=/var/run/nginx/nginx.pid    --lock-path=/var/loc  --with-http_flv_module   --with-http_stub_status_module   --with-http_gzip_static_module   --http-=/var/tmp/nginx/proxy/   --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/   --http-uwsgi-temp-path=/var-pcre   --with-debug   --add-module=../nginx_mogilefs_module-1.0.4
# make && make install

注:在编译的过程中添加mogilefs模块时,建议使用官方网站上提供的nginx_mogilefs_module-1.0.4

3、创建nginx启动时需要的目录并启动nginx:

# mkdir -pv /var/tmp/nginx/client
# nginx -c /etc/nginx/nginx.conf

4、修改nginx的配置文件,在配置文件的http段中添加upstream段定义内容,另外在http的server段中添加Nginx反向代理至后端mogilefs存储节点的定义:

wKioL1QsFQOSJXiLAAHIcc0O898567.jpg

此时,可以在浏览器内查看之前上传至mogilefs存储节点上的key:fstab.html:

wKiom1QsGF2zrPskAALQtjchQIk577.jpg

如果要使用上传和下载的功能,可以在Nginx的配置文件中的server段中添加如下定义:

wKiom1QsHvzRPho1AADQLNdJ_10865.jpg

注:由于nginx的mogilefs模块的作者不再维护该模块的原因,所以如果要使用该模块的上传功能,需要使用nginx的0.7.1到0.8之间的版本,高版本的nginx由于API的变化而不支持PUT功能了。

# mogupload --trackers=172.16.103.1 --domain=images --key='/default.png' --file='/usr/share/backgrounds/default.png'

在浏览器内输入172.16.103.1/images/default.png(IP+domain+key)可以访问到存储在mogilefs存储节点上的文件:

wKiom1QsHjzSLt3jAAMxIPKgu_w751.jpg

如果需要删除存储在mogilefs存储节点上的文件,操作方式如下:

# curl -X DELETE http://172.16.103.1/images/default.png

在浏览器内再次访问就会显示找不到资源:

wKiom1QsLkKwfJ6dAAFuc3G3Q4c674.jpg

Nginx反向代理mogilefs的配置过程完成。

你可能感兴趣的:(nginx,反向代理,mogilefs)