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
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
4、启动服务,并查看监听的端口是否启动
# service mogilefsd start # netstat -tnlp
5、创建该存储节点的数据目录,该目录的属主数组要修改为mogilefs用户和mogilefs组
# mkdir -pv /mogdata/data/dev1 # chown -R mogilefs.mogilefs /mogdata/
6、修改mogstored配置文件,使配置文件对应的存储数据目录与创建的目录保持一致
# vim /etc/mogilefs/mogstored.conf
7、启动服务,查看服务启动的结果:
# service mogstored start # netstat -tnlp
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
注: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
然后可以对该mogilefs集群添加domain和class:
# mogadm domain add files # mogadm domain add images # mogadm class add files c1 # mogadm class add images c1
此时可以向该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存储节点的定义:
此时,可以在浏览器内查看之前上传至mogilefs存储节点上的key:fstab.html:
如果要使用上传和下载的功能,可以在Nginx的配置文件中的server段中添加如下定义:
注:由于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存储节点上的文件:
如果需要删除存储在mogilefs存储节点上的文件,操作方式如下:
# curl -X DELETE http://172.16.103.1/images/default.png
在浏览器内再次访问就会显示找不到资源:
Nginx反向代理mogilefs的配置过程完成。