mogilefs-企业级分布式存储应用与实战
项目场景:
公司已经有了大量沉淀用户,为了让这些沉淀用户长期使用公司平台,公司决定增加用户粘性,逐步发展基于社交属性的多样化业务模式,决定开展用户讨论区、卖家秀、买家秀、用户试穿短视频等业务,因此,公司新的业务的业务特征将需要海量数据存储,要求基于开源技术,实现对公司海量存储业务的技术研究和实现。
项目分析:
Web 2.0 时代的到来,使得单个计算机节点远远无法满足用户对海量数据和应用程序运行空间的需求。个人和企业都有安全而持久的存储信息的需求,备份成为最通俗的手段。个人用户通过保存多个拷贝的形式实现信息存储的安全,但如果多个拷贝都失去,那么就崩溃了。存储需要保持实时读写,提供复杂的查询功能,缺乏容灾和备份能力,大量无结构的数据的存储和处理,对传统的存储方式提出挑战。
分布式存储,就是将数据信息分散存储,在网络发达的现代,这种存储利用多台存储服务器,部署简单化,操作智能化,稳定、可靠、易扩展。然而虽然缓解了问题,但依然存在的难点与挑战。例如:节点间通信、数据存储、数据空间平衡、容错、文件系统支持等一系列问题仍处在不断摸索和完善中。
MogileFS是一个开源的分布式文件存储系统, 目前使用MogileFS 的公司非常多。Mogilefs具有以下特性:
1、支持多节点冗余
2、可实现自动的文件复制
3、使用名称空间(命名空间),每个文件通过key来确定
比如:123.jpg /000/000/00/01/md5hash.fid 前者是key,后者是真实的存储文件名
4、不需要RAID,应用层可以直接实现RAID
5、工作于应用层,没有特殊的组件要求
6、不共享任何数据,通过“集群”接口提供服务。MogileFS不需要依靠昂贵的SAN来共享磁盘,每个机器只用维护好自己的磁盘。
Mogilefs架构:
mogileFS主要由三部分构成:tracker节点,database节点,storage节点。
每次文件的上传和读取,都经过前端TrackerServer服务器,trackerServer服务器收到client端的请求,查询数据库,返回一个上传或者是读取的可用的后端StorageServer的地址,然后由client端直接操作后端StorageServer服务器。
项目环境:
mysql+tracker服务器:ip 172.17.13.136
storage node1主机: ip 172.17.13.134
storage node2主机: ip 172.17.13.135
项目实现:
一、所有节点都安装perl相关包:
yum install perl-Net-Netmask perl-IO-String perl-Sys-Syslog perl-IO-AIO
mkdir ~/mogilefs 创建一个目录用来存放下面需要安装的rpm包
cd ~/mogilefs
lftp 172.17.0.1 连接服务器下载rpm包
>cd /pub/Sources/7.x86_64/mogilefs/
>mget *
>exit
yum localinstall ./* 安装
本地安装的rpm包有:ls ~/mogilefs
MogileFS-Server-2.46-2.el6.noarch.rpm #核心服务
perl-Danga-Socket-1.61-1.el6.rf.noarch.rpm #socket
MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm # tracker节点
perl-MogileFS-Client-1.14-1.el6.noarch.rpm #客户端
MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm #Storage存储节点
MogileFS-Utils-2.19-1.el6.noarch.rpm #主要是MogileFS的一些管理工具,例如mogadm等。
perl-Perlbal-1.78-1.el6.noarch.rpm
二、在mysql+tracker服务器操作:
1、安装数据库并启动服务
yum install mariadb-server
systemctl start mariadb
2、创建数据库并授权用户
【mysql -uroot -p 也可以不用授权,下面的命令会自动创建数据库和授权用户
>GRANT ALL PRIVILEGES ON modilefs.* TO 'mogile' @'127.0.0.1' IDENTIFIED BY 'mogile' WITH GRANT OPTION;
>flush priveleges;】此步骤可省略
mogdbsetup --dbpass=123456 设置mogile用户密码,此命令会创建数据库mogilefs和授权用户mogile
3、修改mogilefs配置文件并启动服务
①vim /etc/mogilefs/mogilefsd.conf
改用户名密码:
db_user = mogile
db_pass = 123456
监听端口为本机网卡的ip
listen = 172.17.13.136:7001
②vim /etc/mogilefs/mogilefs.conf
trackers = 172.17.13.136:7001 避免每次在命令行执行命令都需要指定--tracker,即以下命令中的--tracker可以省略
③启动服务
/etc/init.d/mogilefsd start [如果是perl安装,那么启动时需切换到普通用户mogilfs]
4、检查
mogadm --tracker=172.17.13.136:7001 check
三、在storage1和storage2主机上操作:
1、创建工作目录并修改权限
mkdir -p /data/mogdata
chown -R mogilefs.mogilefs /data/mogdata
2、修改配置文件并启动服务
vim /etc/mogilefs/mogstored.conf
工作目录:docroot = /data/mogdata
/etc/init.d/mogstored start 启动服务
四、在mysql+tracker服务器操作:
1、将上面准备的两个节点加入:
mogadm --tracker=172.17.13.136:7001 host add nod1 --ip=172.17.13.134 --port=7500 --status=alive
mogadm --tracker=172.17.13.136:7001 host add nod2 --ip=172.17.13.135 --port=7500 --status=alive
如果不小心写错ip或者状态了,可以使用下面的命令进行修改:
mogadm --tracker=172.17.13.136:7001 host modify nod1 --ip=xxx.xxx.xxx.xxx --status=xxx
2、检查
mogadm --tracker=172.17.13.136:7001 check 或者
mogadm --tracker=172.17.13.136:7001 host list
五、在storeage1及storeage2主机操作:
创建块设备目录并且修改权限
storeage1:
mkdir /data/mogdata/dev1;chown mogilefs.mogilefs -R /data/mogdata/dev1
storeage2:
mkdir /data/mogdata/dev2;chown mogilefs.mogilefs -R /data/mogdata/dev2
六、在mysql+tracker服务器操作:
1、将上面的两个块设备加入:
mogadm --tracker=172.17.13.136:7001 device add nod1 1
mogadm --tracker=172.17.13.136:7001 device add nod2 2
2、查看加入的设备信息
mogadm device list
也可以在数据库中查看信息:
mysql mysql -uroot -p
>use mogilfs;
>select * from device;
>select * from host;
3、添加域:mogadm domain add img 这里添加的是img域
列出域:mogadm domain list
4、在"域"中建"类",并设置最小保存份数,即副本数
mogadm class add img c29 --mindevcount=3 表示在img域中创建c29类,最小副本数为3
七、所有机器上操作:
1、安装perl相关包
yum -y install make gcc unzip perl-DBD-MySQL perl perl-CPAN perl-YAML perl-Time-HiRes
2、下载Sys-Syscall-0.23.tar.gz包,并且实现自动复制
①cd /tmp;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
③编译安装:cd Sys-Syscall-0.23/;perl Makefile.PL&&make install
④重启mogilefs服务(stop、start报错无所谓,查看端口已经开启即可):
tracker+mysql服务器操作:
/etc/init.d/mogilefsd stop
/etc/init.d/mogilefsd start
所有机器操作:
/etc/init.d/mogstored stop
/etc/init.d/mogstored start
项目最终实现效果:
在Tracker+mysql服务器操作:上传文件,不指定类就上传至default类
mogupload --domain=img --key=photo [--class=c29] --file=2345_image_file_copy_2.jpg
mogfileinfo --domain=img --key=photo 查询文件
访问以下url都可显示出图片:
http://172.17.13.135:7500/dev2/0/000/000/0000000005.fid
http://172.17.13.134:7500/dev1/0/000/000/0000000005.fid