导读目录:

一、 分布式存储概念

二、 MogileFS简介

 1、MogileFS特性
 2、MogileFS结构
 3、MogileFS工作原理
 4、MogileFS管理结构

三、 实现MogileFS分布式存储

 1、	实验环境
 2、	实验前的准备
 3、	对主机进行角色分配
 4、	配置数据库服务器节点
 5、	tracker节点的配置
 6、	管理端节点配置
 7、	storage节点的配置
 8、	安装Sys::Syscall模块
 9、	添加host以及上传文件测试

四、 实验错误总结及注意事项

一、分布式存储简介:

分布式存储系统,是将数据分散存储在多台独立的设备上。传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能满足大规模存储应用的需要。分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性、可用性和存取效率,还易于扩展。

二、MogileFS简介

1、MogileFS的特性:

	1、支持多接点冗余。
	2、可实现自动的文件复制。
	3、使用名称空间(命令空间),每个文件通过key来确定分布的文件的位置。
	4、不需要RAID,应用层可以直接实现RAID,不共享任何东西,通过集群接口体用服务。
	5、工作于应用层,没用特殊的组件要求。
	6、不共享任何数据,MogileFS不需要依赖昂贵的SAN来共享磁盘,每个机器只能维护好自己的磁盘。

2、MogileFS主要由三部分构成:

	tracker接点、database节点、storage节点
	1、tracker(MogileFSd进程),这个是MogileFS的核心部分,他是一个调度器,MogileFSd进程就是trackers进程程序,trackers做了很多工作,REplication、Deletion、Query、REaper、Monitor等等,这个是基于事件的(event-based)父进程/消息总线来管理所有来自客户端应用的交互,包括负载均衡到多个“query workers”中,然后让 MogileFSd 的子进程去处理。
	2、MySQL:用来存放 MogileFS 的元数据 (命名空间, 和文件在哪里),是Trackers 来操作和管理它,可以用mogdbsetup程序来初始化数据库,因为数据库保存了MogileFS的所有元数据,建议做成HA架构;(需要在数据库中给tracker授权用户)。
	3、Storage Nodes:这个是 MogileFS 存储文件存放在这些机器上,也是 mogstored 节点,也叫 Storage Server,一台存储主要都要启动一个 mogstored 服务.扩容就是增加这些机器,实际文件存放的地方。

3、MogileFS工作原理

![](http://i2.51cto.com/images/blog/201712/04/17b05cbcfb836a44b662b0cfe83ce125.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x _10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

每次文件的上传和读取,都经过前端tracker-Server服务器,tracker-Server服务器受到client端的请求,查询数据库,返回一个上传或者是读取的可用的后端StorageServer的地址,然后由client端直接操作后端Storage-Server服务器。upload操作返回就是成功或者失败的结果,read操作就是返回对应的查询数据。

4、MogileFS管理概念:

1、Domian:一个MOgileFS可以有多个Domain,用来存放不同文件(大小、类型)同一个Domain内key必须唯一,不同Domain内,key可以相同。
2、每一个存储节点称为一个主机,一个主机上可以有多个存储设备(单独的硬盘),每个设备多有ID号,Domain+FID用来定位文件。
3、Class:文件属性管理,定位文件存储在不同设备上的份数。

三、实现MogileFS分布式存储

1、实验环境

	关闭防火墙、关闭selinux
	安装依赖的包:
	在tracker节点和storage节点:

yum install perl-Net-Netmask perl-IO-AIO perl-IO-String perl-Sys-Syslog

2、实验前的准备

准备四台centos、配置好yum源、准备好安装包:

对于tracker节点:

  • 只需要安装:
MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm
perl-Danga-Socket-1.61-1.el6.rf.noarch.rpm
两个包就可以实现tracker节点
MogileFS-Server-2.46-2.el6.noarch.rpm

在测试的时候没有这个包,可以启动

对于storage节点:

  • 需要安装:
perl-Perlbal-1.78-1.el6.noarch.rpm
MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm 
perl-Danga-Socket-1.61-1.el6.rf.noarch.rpm

(如果这个包通过yum localinstall ...安装不上,可以使用rpm -ivh perl-Dan...rpm --force进行安装)

对于管理端节点:

  • 需要安装:
perl-MogileFS-Client-1.14-1.el6.noarch.rpm
MogileFS-Utils-2.19-1.el6.noarch.rpm 

3、对主机进行角色分配

	centos7-1: tracker节点      IP_1
	centos7-2: mysql服务器	IP_2
	centos7-3: storage1	       IP_3	
	centos7-4: storage2           IP_4
(注:为了节省主机资源,将管理节点放置到tracker节点上,不影响其正常功能,如有条件,可以单独作为管理节点)

4、配置数据库服务器节点

如果没有数据库需要提前安装,并初始化数据库 登录数据库:

mysql -uroot -pjiake

为tracker节点管理数据库授权:

grant all on mogilefs.* to mogile@'%' identified by 'jiake' with grant option;```

>>(最后这个with grant option是赋予授权用户对该数据库有授权的权限)

>授权之后,刷新用户的权限:

flush privileges;```

5、tracker节点的配置

首先安装依赖的包:

yum install perl-Net-Netmask perl-Sys-Syslog perl-IO-AIO perl-IO-String
yum localinstall MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm perl-Danga-Socket-1.61-1.el6.rf.noarch.rpm MogileFS-Server-2.46-2.el6.noarch.rpm

配置配置文件:

vim /etc/mogilefs/mogilefsd.conf
		db_dsn = DBI:mysql:mogilefs:host=192.168.11.17
		db_user = mogile
		db_pass = jiake
		(指向数据的地址,配置数据库中经过授权的用户和用户密码)
		listen = 0.0.0.0:7001
		(监听端口,如果想监听所有的地址,不可以使用*:7001,只能使用0.0.0.0:7001这种形式)

查看是否有mogilefs用户,如果没有则创建:

useradd -r mogilefs```
查看存放pid文件的目录的权限

ll -d /var/run/mogilefsd/``` 所属人是否是mogilefs,如果不是将所属人改为mogilefs:

chown mogilefs.mogilefs /var/run/mogilefsd/```
为数据库创建存放索引信息的数据库和表:

mogdbsetup --dbhost=192.168.11.17 --dbpass=jiake --dbrootpass=jiake```

#IP地址是指向数据库的地址,默认用户是moilge其他的配置参数都是默认的,可以不用改,回车之后都是选y

创建完之后到数据库中进行查看!

测试在tracker节点上,使用授权的用户是否能够登录到远程的数据库,如果可以登上,则表明tracker于数据库之间的链路是通畅的,否则需要重新授权,必须能够远程登录才可以!

** 启动服务:**

/etc/init.d/mogilefsd start

** 停止服务使用:**

	/etc/init.d/mogilefsd stop```
** 重新加载服务使用:**
/etc/init.d/mogilefsd restart```

6、管理端节点配置

管理端需要关闭防火墙和selinux,安装相对应的管理端工具包就可以了。 同样要先安装依赖的包:

yum install perl-Net-Netmask perl-IO-String perl-IO-AIO perl-Sys-Syslog
yum localinstall perl-MogileFS-Client-1.14-1.el6.noarch.rpm MogileFS-Utils-2.19-1.el6.noarch.rpm 

管理端拥有的管理工具有:

Mogadm、mogfetch、mogrename、mogupload、mogtool、moglistkeys、mogfiledebug、moglistfids、mogstats、mogdelete、mogfileinfo      ```

> 将trackers=192.168.11.17:7001写入客户端的配置文件中,这样在每次测试的时候就不用每次都指定--trackers=192.168.11.17:7001

vim /etc/mogilefs/mogilefs.conf trackers=192.168.11.17:7001

(如果想检测多个tracker,可以在后面加多个,使用逗号隔开就行了)
经过以上的配置,就可测试tracker的状态了:

mogadm --trackers=192.168.11.17:7001 check因为我们已经配置了 /etc/mogilefs/mogilefs.conf```文件,所以我们就可以这样:

 mogadm check

7、storage节点的配置(两个storage节点配置相同)

首先安装依赖的包:

yum install perl-IO-String Perl-Net-Netmask perl-IO-AIO perl-Sys-Syslog
yum localinstall perl-Perlbal-1.78-1.el6.noarch.rpm MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm  perl-Danga-Socket-1.61-1.el6.rf.noarch.rpm

(如果安装出现问题,可以尝试用rpm -ivh rpm_package --force) 配置文件:

vim /etc/mogilefs/mogstored.conf
maxconns = 10000    #最大连接数
httplisten = 0.0.0.0:7500  #监听的http请求的端口
mgmtlisten = 0.0.0.0:7501 
docroot = /data/mogdata   #存储数据的目录
  • 查看是否有mogilefs用户,如果没有,创建: useradd -r mogilefs
  • 创建存储数据目录: mkdir -p /data/mogdata
  • 修改存储数据目录的所属人: chown mogilefs.mogilefs /data/mogdata
  • 查看是否有存放pid文件的目录: ll -d /var/run/mogilefsd/
  • 如果没有创建出来: mkdir -p /var/run/mogilefsd/
  • 并修改其所属人: chown mogilefs.mogilefs /var/run/mogilefsd/
  • 在存储数据的目录下创建一个设备: mkdir /data/mogdata/dev1 chown mogilefs.mogilefs /data/mogdata/dev1
  • 启动服务: /etc/init.d/mogstored start

有时候启动失败,但是端口是已经打开了,这就表明启动了,注意端口。

8、由于mogilefs系统需要一个Sys::Syscall的模块才可以实现自动创建文件副本,所以需要安装带有该模块的包

** 注意:在tracker节点和storage节点上都要安装 **

首先安装编译该包需要的编译环境:

yum install make gcc perl-DBD-MySQL perl perl-CPAN perl-YAML perl-Time-HiRes```
下载该包:

wget http://search.cpan.org/CPAN/authors/id/B/BR/BRADFITZ/Sys-Syscall-0.23.tar.gz``` 解压:

tar xvf Sys-Syscall-0.23.tar.gz -C /tmp/
cd /tmp/Sys-Syscall-0.23
perl Makefile.PL
make && make install

安装完成之后要重新启动各个服务,使配置生效。

9、管理端将storage节点连接到tracker节点

  • (1)、添加host到tracker节点:
		mogadm host add node1 --ip=IP_3 --port=7500 --status=alive
		mogadm host add node2 --ip=IP_4 --port=7500 --status=alive

查看添加状态:

			mogadm host list 或 mogadm check

  • (2)、添加host上的device到tracker节点
		mogadm device add node1 1
		mogadm device add node2 2
		mogadm device add node2 3```
查看添加状态:
		mogadm device list 或 mogadm check```

  • (3)、向tracker节点中添加域(domain)
		mogadm domain add images
		mogadm domain add doc```
查看域的状态:
		mogadm domain list```

  • (4)、向tracker节点添加class
		mogadm class add images jk1 --mindevcount=3
		mogadm class add images jk2 --mindevcount=3```
查看class的状态:
	mogadm class list```

  • (5)、上传文件
			mogupload --domain=images --class=jk1 --key=jk.jpg  --file=/root/jk.jpg```
查看上传文件的存储信息:
		mogfileinfo --domain=images --key=jk.jpg```

四、实验错误总结及注意事项

错误总结:

1、 在启动tracker节点mogilfsd服务的时候,一直启动不起来,pid文件目录也正常,但就是启动不起来。 解决:最后发现是数据库连接的问题,在数据库中创建的用户,远程登录不上,一直显示拒绝,最后进入数据库中,刷新了用户权限:flush privilege; 就可以了。 2、 在测试过数据库创建的用户可以正常的远程登录后,还是不能启动服务。 解决:查看了pid文件生成的目录,显示没有问题,最后查看启动该进程的用户,显示没有该系统用户。又手动创建了该系统用户:useradd –r mogilefs

注意事项:

1、 安装完各种包之后,检测是否自动创建了mogilefs该系统用户,如果没有该用户,需要手动创建。 2、 创建完数据库中授权用户后,一定要刷新用户权限:flush privilege; 并测试看是否能够远程登录。 3、 查看pid生成目录是否存在:ll –d /var/run/mogilefsd/,并查看该目的所属人是否是mogilefs。如果不是需要在启动服务前创建该目录,并更改所属人和所属组为mogilefs 4、 在tracker的配置文件中,监听7001的IP地址在本机上一定要存在,否则,启动不起来。 5、 在storage节点上启动之前一定要确保配置文件中指定的数据存放目录存在,并且目录所属人和所属组是mogilefs。 6、 在storage节点上创建的设备dev的所属人和所属组也是mogilefs,一定注意。