MogileFS是一套开源的分布式存储组件,由LiveJournal旗下的Danga Interactive研发,主要应用于存储海量的小文件。
MogileFS有3个组件:
1)Tracker Nodes:是文件系统集群的核心节点,借助数据库节点保存元数据,主要功能包括监控后端Storage节点,及指示Storage节点完成数据的添加、删除、查询,及节点之间数据的复制等,该节点上运行的进程为mogilefsd。往往Tracker节点有多个,以实现负载均衡和高可用;
2)Storage Nodes:实际存储数据的位置,基于WebDAV模式工作,能完成文件创建、删除、重命名等操作,运行的进程为mogstored;
3)database Nodes:帮助Tracker节点存放元数据及全局信息,包括host,domain,class等。数据库建议使用高可用集群,防止单点故障。
实现机制
在该文件系统集群中,每一个数据块都会有多个副本,存放于多个Storage Node上,不同的文件系统副本的数量各不相同(一般建议为3份),在Tracker Node上会分别单独记录每一个数据块的存储位置(位于哪个Storage及路径)。若某个Storage节点不在线了,客户端向Tracker节点请求获取数据时,Tracker节点会返回用于冗余的副本的存储位置给客户端。这样就保证了整个文件系统中数据的高可用性。当有数据存储至某一storage节点后,各storage节点会根据Tracker的指示通过节点间通信将副本发送至其他节点上。若某一storage下线了,该节点上的副本会由其他节点重新提供,保证副本的个数不少于指定的值。
MogileFS结构图
工作原理:客户端需要存取数据时,首先与Tracker进行交互,Tracker通过查询数据库来获取客户端存取数据时所需要访问的元数据,然后返回给客户端,客户端利用Tracker返回的结果,与Storage Nodes节点进行交互完成数据存取(一次有可能联系一个也可能联系多个)。
部署MogileFS
部署Tracker Nodes
1)安装程序包
使用cpan在线安装,首先安装必要的perl库。
[root@node1 ~]# cpan Sys::Syscall
[root@node1 ~]# cpan IO::WrapTie
[root@node1 ~]# cpan Danga::Socket
[root@node1 ~]# cpan IO::AIO
[root@node1 ~]# cpan MogileFS::Client
[root@node1 ~]# cpan Net::Netmask
[root@node1 ~]# cpan Perlbal
安装MogileFS Server:
[root@node1 ~]# cpan MogileFS::Server
或者下载源码包编译安装:
[root@node1 ~]# wget
[root@node1 ~]# tar xf MogileFS-Server-2.72.tar.gz
[root@node1 ~]# cd MogileFS-Server-2.72
[root@node1 MogileFS-Server-2.72]# perl Makefile.PL
[root@node1 MogileFS-Server-2.72]# make && make install
2)完成配置
创建配置文件目录并添加配置文件:
[root@www ~]# mkdir /etc/mogilefs
[root@node1 ~]# vim /etc/mogilefs/mogilefsd.conf
daemonize = 1
pidfile = /var/run/mogilefsd/mogilefsd.pid
db_dsn = DBI:mysql:mogilefs:host=192.168.1.134;port=3306;mysql_connect_timeout=5 #连接数据库的信息
db_user = mogilefs #数据库上的用户名
db_pass = mogilefs #用户名对应的密码
listen = 0.0.0.0:7001 #监听的地址和端口
conf_port = 7001
query_jobs = 10 #用于查询的进程数
delete_jobs = 1 #用于删除操作的进程数
replicate_jobs = 5 #用于复制的进程数
reaper_jobs = 1 #用于回收资源的进程数
在数据库节点上创建数据库,并授权用户:
MariaDB [(none)]> create database mogilefs;
Query OK, 1 row affected (0.04 sec)
MariaDB [(none)]> grant all on mogilefs.* to 'mogilefs'@'192.168.%.%' identified by 'mogilefs';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
初始化数据库:
[root@node1 ~]# mogdbsetup --dbhost=192.168.1.134 --dbname=mogilefs --dbuser=mogilefs --dbpass=mogilefs --dbrootpass=mogilefs
若出现如下错误,是没有安装perl连接mysql的驱动引起的,安装perl-DBD-MySQL即可。
Failed to load MogileFS::Store::MySQL: Can't locate DBD/mysql.pm in @INC (@INC contains: lib /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/local/share/perl5/MogileFS/Store/MySQL.pm line 5.........
........
###########################################
[root@node1 ~]# yum install perl-DBD-MySQL
3)启动服务
mogilefsd不能以root身份运行,必须用其他用户运行,为此添加mogilefs用户,然后启动服务:
[root@node1 ~]# useradd -r mogilefs
[root@node1 ~]# su - mogilefs -c "mogilefsd -c /etc/mogilefs/mogilefsd.conf --daemon"
更好的方式是添加服务脚本,然后通过脚本启动服务。