导读目录:
一、 分布式存储概念
二、 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,一定注意。