1、实现企业级分布式存储之mogilefs的应用。
(1)关于mogilefs
Web 2.0 时代的到来,使得单个计算机节点远远没法知足用户对海量数据和应用程序运行空间的需求。我的和企业都有安全而持久的存储信息的需求,备份成为最通俗的手段。我的用户经过保存多个拷贝的形式实现信息存储的安全,小几率事件不易发生,但如中奖发生了,多个拷贝都失去后,崩溃恐怕不是简单的心理表达,而将成为不可改变的事实,没法复原。存储须要保持实时读写,提供复杂的查询功能,缺少容灾和备份能力,大量无结构的数据的存储和处理,对传统的存储方式提出挑战。
这个时候,分布式存储,应运而生,就是将数据信息分散存储,在网络发达的现代,这种存储利用多台存储服务器,部署简单化,操做智能化,稳定、可靠、易扩展。数据的存储服务成为一个新兴的服务项目,加上互联网技术的突飞猛进,迅速发展,风起“云”涌,“云存储”(Cloud Storage)系统提供在线的存储服务,获得众多行业巨鳄的追捧,国外有 Amazon、IBM、Google 等不断推动技术创新,国内有阿里、百度、金山等快速跟进推广应用。
分布式面临的挑战:
虽然分布式出如今必定程度上有效的缓解了这一问题,之因此称之为缓解是由于分布式存储在面对海量数据存储时也并不是十全十美毫无压力,依然存在的难点与挑战例如:节点间通讯、数据存储、数据空间平衡、容错、文件系统支持等一系列问题仍处在不断摸索和完善中。
在理论计算机科学中,CAP定理(CAP theorem),又被称做布鲁尔定理(Brewer's theorem),它指出对于一个分布式计算系统来讲,不可能同时知足如下三点:
一致性(Consistency)---全部节点在同一时间具备相同的数据
可用性(Availability)---保证每一个请求无论成功或者失败都有响应
分隔容忍(Partition tolerance)---系统中任意信息的丢失或失败不会影响系统的继续运做
对于大型站点,可用性(Availability)与分隔容错性(Partition Tolerance)的优先级会高于一致性(Consistency),这里并非指彻底舍弃一致性,而是经过其余手段实现数据的弱一致性,例如:用户微博的浏览数和评论能够容忍相对长时间的不一致,几乎不会影响用户体验,例如用户访问美食图片时,不会由于一张图片加载慢,致使整个访问请求出错。
强一致性
ACID
在单机环境中,强一致性能够由数据库的事务来保证
在多级环境中,强一致性很难作到
分布式事务:性能太差,在化联网的应用中不适合
弱一致性(包括最终一致性)
经过提交处理的半同步、半异步或全异步,取得最终一致性效果
最终一致性使得数据的提交具备延时性,而在必定范围时的延时性范围内(好比一秒),应用的可用性时正常的
(2)mogilefs的特色
①支持多节点冗余
②可实现自动的文件复制
③使用名称空间(命名空间),每一个文件经过key来肯定
④不须要RAID,应用层能够直接实现RAID,不共享任何东西,经过“集群”接口提供服务
⑤工做于应用层,没有特殊的组件要求
⑥不共享任何数据,MogileFS不须要依靠昂贵的SAN来共享磁盘,每一个机器只用维护好本身的磁盘。
(3)mogilefs的构成
mogileFS主要由三部分构成:tracker节点,database节点,storage节点
①tracker(Mogilefsd进程):这个是 MogileFS 的核心部分,他是一个调度器, MogileFSd 进程就是trackers进程程序,trackers 作了不少工做:Replication,Deletion,Query,Reaper,Monitor 等等,这个是基于事件的( event-based ) 父进程/消息总线来管理全部来之于客户端应用的交互(requesting operations to be performed), ,包括将请求负载平衡到多个“query workers”中,而后让 MogileFSd 的子进程去处理;
②MySQL:用来存放 MogileFS 的元数据 (命名空间, 和文件在哪里),是Trackers 来操做和管理它,能够用mogdbsetup程序来初始化数据库,由于数据库保存了MogileFS的全部元数据,建议作成HA架构;
③Storage Nodes:这个是 MogileFS 存储文件存放在这些机器上,也是 mogstored 节点,也叫 Storage Server,一台存储主要都要启动一个 mogstored 服务.扩容就是增长这些机器,实际文件存放的地方。
(4)mogilefs的实现
环境准备:
三台centos7.3机器,一台安装mariadb和tracker,另外两台安装storagenode
角色 | ip |
---|---|
mariadb+tracker | 172.17.5.2 |
storage1 | 172.17.5.3 |
storage2 | 172.17.5.4 |
网络拓扑图:
注:本图只针对本实验,也只是实验mogilefs。
(5)具体实验步骤:
《1》配置好epel源,解决依赖关系包。(三台机器都要安装)
命令:yum install perl-Net-Netmask perl-IO-String perl-Sys-Syslog perl-IO-AIO
《2》配置安装包,并安装全部安装包。(三台机器都要安装)
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等。
建议:先建立个文件夹,把下载的安装包都放到里面而后再安装,便于后期管理使用。
《3》配置远程用户(如下步骤tracker上配置,记得数据库启动)
远程配置mysql用户:with grant option 选项表示容许该用户有权限受权其余用户。
命令:GRANT ALL PRIVILEGES ON . TO 'mogile' @'127.0.0.1' IDENTIFIED BY 'mogilefs' WITH GRANT OPTION;
《4》初始化配置以及设定数据库。
命令:mogdbsetup --help
mogdbsetup --dbhost=127.0.0.1 --dbpass=mogilefs
用户名默认为:mogilemysql
--
《5》修改配置文件:先备份一份,养成好习惯。
《6》启动mogilefsd服务。
(6)配置两个storage节点。
《1》打开配置文件,设置节点存放的目录。
《2》建立和修改存放节点数据目录的权限,并启动服务。
storage1:mkdir -p /var/mogdata/dev1
storage2:mkdir -p /var/mogdata/dev2
chown mogilefs:mogilefs /var/mogdata -R
《3》把storage1和storage2添加到tracker中,也就至关于每一个主机加到mogilefs储存系统。(在tracker中执行)
若是不当心操做错误:mogadm --tracker=127.0.0.1:7001 host modify node1 --ip=123.xxx.xxx.70 --status=alive #能够修改主机IP、状态等
《4》添加目录(在tracker中执行)
《5》添加domain-----域用来存储不一样应用类型的数据的容器。(在tracker中执行)
《6》在域中添加类。(在tracker中执行)
在这说明一下类和域的概念:
域(domain)
在一个 MogileFS 中,能够有多个域,用来存放不一样的文件,好比,不一样大小的文件,不一样类型的文件.在上图中全部 alive 的"设备"是一个大的总体,造成一个统一的存储空间,里面的数据能够根据 "域" domain 和类 class 来分类管理,属于同一个 domain,即便是属于不一样的class,文件的key也必须是惟一的.不一样域的 key 才能重复.nginx
类(class)
在一个域中,能够有多个类,主要是用来控制复制单元的,类是用来作属性管理的,类是比域 domain 低一个级别,能够定义一个文件存储在不一样 device 中的份数.一个文件必须经过 domain,class 和 key 才能找出来.咱们能够给不一样的重要程度的文件,不一样热度的文件,来分别用类来控制份数.
《7》测试。
用mogupload工具在这里是为了测试,实际环境中上传是由程序员在代码中使用mogilefs的API进行交互的。
在根下上传一张为111.jpg的图片
命令:mogupload --trackers=127.0.0.1 --domain=image --key='test' --file='./111.jpg'
查看上传的图片:mogfileinfo --trackers=127.0.0.1:7001 --domain=image --key=test
《8》其它一些经常使用命令来管理mogilefs
mogdelete --domain=<domain_name> --key=<key_name> 删除指定文件
moglistkeys --domain=<domain_name> --key_prefix=<key_name> 列出全部文件key
moglistfids --fromfid=<file_id> --count=<数量> 列出指定fid的文件
mogadm host mark mystorage down 指定某个节点服务器进行系统维护
mogadm --trackers=127.0.0.1 device add mystorage 5 --status=alive 添加设备
2、实现企业级分布式存储之fastdfs的应用
(1)FASTDFS是什么?
FastDFS是由国人余庆所开发,其项目地址:https://github.com/happyfish100 ,FastDFS是一个轻量级的开源分布式文件系统,主要解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡。
(2)FastDFS的特性
一、分组存储,灵活简洁、对等结构,不存在单点
文件ID由FastDFS生成,做为文件访问凭证。FastDFS不须要传统的name server
和流行的web server无缝衔接,FastDFS已提供apache和nginx扩展模块
大、中、小文件都可以很好支持,支持海量小文件存储
支持多块磁盘,支持单盘数据恢复
支持相同文件内容只保存一份,节省存储空间
存储服务器上能够保存文件附加属性
下载文件支持多线程方式,支持断点续传
(3)fastdfs优势对比
(4) fastdfs架构图
• 只有两个角色,tracker server和storage server,不须要存储文件索引信息
• 全部服务器都是对等的,不存在Master-Slave关系
• 存储服务器采用分组方式,同组内存储服务器上的文件彻底相同(RAID 1)
• 不一样组的storage server之间不会相互通讯
• 由storage server主动向tracker server报告状态信息,trackerserver之间一般不会相互通讯
(5)fastdfs请求过程。git
角色 | ip |
---|---|
tracker | 172.17.5.2 |
storage1+nginx | 172.17.5.3 |
storage2+nginx | 172.17.5.4 |
《2》下载安装包(这是我下载好的安装包) fastdfs-5.0.11-1.el7.centos.x86_64.rpm libfdfsclient-5.0.11-1.el7.centos.x86_64.rpm nginx-mod-http-image-filter-1.10.2-1.el7.centos.x86_64.rpm
fastdfs-debuginfo-5.0.11-1.el7.centos.x86_64.rpm
libfdfsclient-devel-5.0.11-1.el7.centos.x86_64.rpm
nginx-mod-http-perl-1.10.2-1.el7.centos.x86_64.rpm
fastdfs-server-5.0.11-1.el7.centos.x86_64.rpm
nginx-1.10.2-1.el7.centos.x86_64.rpm
nginx-mod-http-xslt-filter-1.10.2-1.el7.centos.x86_64.rpm
fastdfs-tool-5.0.11-1.el7.centos.x86_64.rpm
nginx-all-modules-1.10.2-1.el7.centos.noarch.rpm
nginx-mod-mail-1.10.2-1.el7.centos.x86_64.rpm
libfastcommon-1.0.36-1.el7.centos.x86_64.rpm
nginx-filesystem-1.10.2-1.el7.centos.noarch.rpm
nginx-mod-stream-1.10.2-1.el7.centos.x86_64.rpm
libfastcommon-devel-1.0.36-1.el7.centos.x86_64.rpm
nginx-mod-http-geoip-1.10.2-1.el7.centos.x86_64.rpm
fastdfs安装包地址:http://sourceforge.net/projects/fastdfs/files/?source=navbar
此版本须要安装libfastcommon
下载地址:
https://github.com/happyfish100/libfastcommon.git
《3》配置tracker服务器
安装安装包(全部机器上安装全部包)
建议全部包都放在一个文件夹里,便于管理
mkdir fastdfs
cd fastdfs/
yum localinstall *
①修改(tracker)配置文件
②建立tracker的工做目录,并修改client.conf配置文件。
mkdir -p /data/fastdfs/tracker
vim client.conf
只须要修改:
tracker_
tracker_server=172.17.5.2:22122
③启动tracker服务器。
《4》配置storage服务器【两个storage配置同样】
①拷贝配置文件,并修改之。【只需修改这几行】
disabled=false(默认为false,表示是否无效)
port=23000(默认为23000)
base_path=/data/fastdfs/storage
tracker_server=172.18.10.232:22122
store_path0=/data/fastdfs/storage
http.server_port=8888(默认为8888,nginx中配置的监听端口那之一致)
②建立storage服务器工做目录
命令:mkdir -p /data/fastdfs/dtorage
③测试启动storage server,启动成功会自动在/data/fastdfs/tracker目录新建data和logs目录(启动storage server的前提是tracker server必须事先已启动)
《5》测试(tracker服务器上测试)
①查看储存节点状态。
fdfsmonitor /etc/fdfs/client.co
②上传测试
fdfs_test <config_file> upload <local_filename> [FILE | BUFF | CALLBACK]
③文件上传
fdfs_upload_file /etc/fdfs/client.conf /root/mha4mysql-manager-0.56-0.el6.noarch.rpm
④文件查看
fdfs_file_info /etc/fdfs/client.conf group1/M00/00/00/rBEFA1odXd-AA1UIAAFUT8QgCA0946.rpm
⑤文件下载
fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/rBH7vFoax3KANb_FAUlr7-L-yRM9.0.war
《6》storage配置nginx服务
①安装nginx以及对应模块
前面已经安装过了nginx模块了,此处只须要安装nginx服务并启动。
②修改nginx的location配置,映射路径和启动模块
location /group1/M00 {
root /data/fdfs/store/data;
ngx_fastdfs_module;
}
③修改模块的配置文件
vim /etc/fdfs/ mod_fastdfs.conf
修改两行:
url_have_group_name = true
tracker_server=172.17.5.2:22122程序员