一、分布式存储系统简介
随着信息技术不断的发展,给我们带来便利的同时,不断增加的数据量级、信息之间的连接关联越来越复杂、数据访问的并发量日益增加对i/o的要求越来越高、数据类型越来越复杂等难题也成为信息技术继续高速发展亟需解决的难题。分布式存储系统的出现在很大程度上解决了以上大部分难题。
分布式存储系统,是将数据分散存储在多台独立的设备上。传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能满足大规模存储应用的需要。分布式存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性、可用性和存取效率,还易于扩展。
分布式存储系统在接口类型上可分为通用分布式储存和专用分布式储存。通用分布式储存是指没有文件系统接口,需要通过api接口进行访问;专用分布式储存也称为分布式文件系统,它们一般都会有文件系统接口,可以直接挂载。通用分布式储存有mogilefs、fastdfs等,专用分布式储存系统有moosefs等。
二、mogilefs
mogilefs是一个开源的分布式文件存储系统,mogilefs适用于存储海量小文件的工作场景,由livejournal旗下的dangainteractive公司开发,该团队开发了包括memcached、mogilefs、perlbal等多个知名的开源项目。
1.mogilefs架构图:
2.组成mogliefs的组件:
1.trackers(mogilefsd):mogliefs的核心组件,主要功能是(replication)节点文件复制、(deletion)文件删除、(query)元数据查询、(monitor)健康监测、(reaper)储存失败重置等等。它通常称为元数据服务器,但它不会去储存元数据,而是将元数据储存在如mysql这一类的数据库中。为保证架构的可靠性,trackers一般有多个。trackers可看作是一个旁挂式代理,只负责处理元数据信息。
2.数据库:数据库用来存放mogliefs的元数据,而由trackers来管理数据。因此通常建议做ha。
3.mogstored(储存节点):实际文件存放的地方。通常会将实际文件保存至少两份副本。
3.示例演示拓扑图
在三个节点同时安装trackers和mogstored,选择其中一个节点安装mysql。在生产环境最好是能单独将mysql部署并且做主从复制。trackers和mogstored也可以分开部署在不同节点上,这些都需要根据实际的生产环境来决定。这里主要是演示mogilefs,不做mysql主从复制演示。若想要mogilefs能挂载,可以用fuse来实现。
需要注意的是:mogilefs存储的文件url很特殊(后面会解释mogilefs文件名生产的过程),如存储一张图片时文件url可能会是类似6060/0000/0000/0000/00000021.jpg这样的格式,对用户来讲就不太友好,用户可能需要直观的类似image.hello.com/21.jpg这样的url。所以通常会使用nginx来反代mogilefs。
4.系统环境与安装
mogilefs是一个相对较年代较久但成熟的分布式储存,考虑到可能在centos7上会出现兼容问题,这里centos6来演示。
操作系统:centosrelease6.6
n1:192.168.29.111,n2:192.168.29.112,n3:192.168.29.113,n4:192.168.29.114
1.在n1节点上安装mysql、mogilefsd、mogstored,并将n1配置为trackers、storagenode
~]#yuminstall-ymysqlmysql-server
安装mogilefs的trackers和storagenode组件,安装时一定要安装perl相关的依赖包,依赖包有:
perl-danga-socket-1.61-1.el6.rf.noarch.rpm
perl-io-stringy-2.110-1.2.el6.rfx.noarch.rpmperl-net-netmask-1.9015-8.el6.noarch.rpm
perlbal-1.78-1.el6.noarch.rpmperl-perlbal-1.78-1.el6.noarch.rpm
perlbal-doc-1.78-1.el6.noarch.rpmperl-io-aio-3.71-2.el6.x86_64.rpm
上述依赖包一定要安装后才能安装mogilefs。安装组件:
yuminstall-ymogilefs-server-mogstored-2.46-2.el6.noarch.rpmmogilefs-server-mogilefsd-2.46-2.el6.noarch.rpmmogilefs-server-2.46-2.el6.noarch.rpm
配置mogilefs-server-mogilefsd:
~]mogilfstrackers的主配置文件
#enabledaemonmodetoworkinbackgroundandusesyslog
daemonize=1#是否以守护进程的方式运行。
#wheretostorethepidofthedaemon(mustbethesameintheinitscript)
pidfile=/var/run/mogilefsd/mogilefsd.pid#pid文件路径
#databaseconnectioninformation
db_dsn=dbi:mysql:mogilefs:host=192.168.29.111#数据库的地址
db_user=moguser#配置数据库的用户名及密码
#ip:porttolistenonformogilefsclientrequests
listen=0.0.0.0:7001#监听的地址与端口
#optional,ifyoudon'tdefinetheportabove.
#numberofqueryworkerstostartbydefault.
query_jobs=10#查询进程数量
#numberofdeleteworkerstostartbydefault.
#numberofreplicateworkerstostartbydefault.
#numberofreaperworkerstostartbydefault.
#(youdon'tusuallyneedtoincreasethis)
#numberoffsckworkerstostartbydefault.
#(thesecancausealotofloadwhenfsck'ing)
#minimumamountofspacetoreserveinmegabytes
#considersettingthistobelargerthanthelargestfileyou
#wouldnormallybeuploading.
#numberofsecondstowaitforastoragenodetorespond.
#keepthislow,sobusystoragenodesarequicklyignored.
#numberofsecondstowaittoconnecttoastoragenode.
#keepthislowsooverloadednodesgetskipped.
#allowreplicationtousethesecondarynodegetport,
#ifyouhaveapacheorsimilarconfiguredforget's
创建用户moguser,拥有管理mogilefs库的所有权限,并允许192.168.29.*的用户远程连接。
mysql>flushprivileges;
mysql>quit
~]#mogdbsetup--dbhost=127.0.0.1--dbuser=moguser--dbpass=123456
初始化完成后可以在mysql中看到创建好的mogilefs库以及里面的表:
启动mogilefs并确认7001端口处于监听状态:
~]vim/etc/mogilefs/mogstored.conf
maxconns=10000#最大并发连接数
httplisten=0.0.0.0:7500#mogilefs数据的传输是通过http协议实现的,这里是监听的地址和端口
mgmtlisten=0.0.0.0:7501#健康监测的监听地址和端口
docroot=/mogliefs/mogdatamkdir-pv/mogliefs/mogdata

启动mogstored,查看进程是否正常启动端口是否监听:
~]监听端口为7500、7501
4.按照n1的步骤在节点n2、n3上安装mogilefs,并将n1上的配置文件复制到n2、n3。
~]#scp/etc/mogilefs/*.confroot@192.168.29.112:/etc/mogilefs/
~]#scp/etc/mogilefs/*.confroot@192.168.29.113:/etc/mogilefs/
启动mogstored服务并确认监听:
~]监听端口为7500、7501
5.用在n1上用mogadm命令将所有节点整合成集群。
1~]#mogadmhostadd192.168.29.111--ip=192.168.29.111--port=7500--status=alive
2~]#mogadmhostadd192.168.29.112--ip=192.168.29.112--port=7500--status=alive
3~]mogadmcheck
若想让mogilefs集群中的存储被识别成不同设备,需要在创建的/mogliefs/mogdata目录下再创建名为dev*的目录,使每个节点被当做存储设备使用。mogilefs是将冗余存储在不同设备中的,每一个节点都应该被识别为不同的设备。
在n1、n2、n3上的/mogliefs/mogdata/目录下分别创建dev1,dev2,dev3目录,并在trackers上添加设备:
1~]#mogadmdeviceadd192.168.29.1111
2~]#mogadmdeviceadd192.168.29.1122
3~]mogadmdomainaddimgs#创建名为imgs的domain
~]查看domainlist
可以自定义class的属性,格式为:mogadmclassadd<domain><class>[opts]
~]在domainimgs中定义名为png的class,在不同设备中复制3份,并用md5做校验
~]在domainimgs中定义名为jpg的class,在不同设备中复制3份,并用md5做校验
~]mogupload--trackers=192.168.29.111--domain=imgs--class=png--key='/111.png'--file='/test/123.png'#通过ip为192.168.29.111的trackers将123.png文件上传,并保存至domain为imgs,class为png的空间中,并重命名为111.png
~]查看domain为imgs,class为png中key为111.png的文件的存储情况。
至此,mogilefs分布式储存集群就搭建完成了,但若想要使客户端能与之通信,就需要在接口上进行编程,这样就很麻烦了,好在我们能用nginx做反代进行通信。下面来演示nginx反代mogilefs的步骤。
5.nginx反代mogilefs
1.打开n2,n3的mogilefsd服务,将3个节点全部设置为trackers(保证配置文件与n1相同):
~]yuminstallgccgcc-c++perlpcre-developensslopenssl-devel
下载nginx编译安装包nginx-1.10.3.tar.gz与nginx_mogilefs模块nginx_mogilefs_module-1.0.4.tar.gz并展开:
nginx-1.10.3nginx_mogilefs_module-1.0.4
nginx-1.10.3.tar.gznginx_mogilefs_module-1.0.4.tar.gz
~]#cdnginx-1.10.3
https://www.fruan.com/post/configure\
>--sbin-path=/usr/sbin/nginx\
>--conf-path=/etc/nginx/nginx.conf\
>--error-log-path=/var/log/nginx/error.log\
>--http-log-path=/var/log/nginx/access.log\
>--pid-path=/var/run/nginx/nginx.pid\
>--lock-path=/var/lock/nginx.lock\
>--with-http_ssl_module\
>--with-http_flv_module\
>--with-http_stub_status_module\
>--with-http_gzip_static_module\
>--http-client-body-temp-path=/var/tmp/nginx/client/\
>--http-proxy-temp-path=/var/tmp/nginx/proxy/\
>--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/\
>--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi\
>--http-scgi-temp-path=/var/tmp/nginx/scgi\
>--add-module=https://www.fruan.com/nginx_mogilefs_module-1.0.4/make&makeinstall
添加nginx用户并启动nginx:
~]#useradd-s/sbin/nologin-mnginx
~]#/usr/sbin/nginx
3.配置nginx
mogilefs_tracker192.168.29.111:7001;#单trackers示例
mogilefs_domainimgs;#指定domain
mogilefs_classpngjpg;#指定class
mogilefs_pass{#传输相关配置
proxy_pass$mogilefs_path;
proxy_hide_headercontent-type;
}
1upstreammogsvr{
2server192.168.29.111:7001;
3server192.168.29.112:7001;
4server192.168.29.113:7001;
5}
在nginx配置中的server配置段添:
proxy_pass$mogilefs_path;
proxy_hide_headercontent-type;
}
重新启动nginx,并通过nginx访问之前上传的图片:
以上就是Nginx反代Mogilefs分布式储存的方法的详细内容,更多请关注主机测评网其它相关文章!
本文来源:国外服务器--Nginx反代Mogilefs分布式储存的方法(nginx分布式部署方案)
本文地址:https://www.idcbaba.com/guowai/4327.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 1919100645@qq.com 举报,一经查实,本站将立刻删除。



