mogilefs-企业级分布式存储应用与实战

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

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节点。

blob.png 

   每次文件的上传和读取,都经过前端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

blob.png  

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]

blob.png 

4、检查

mogadm --tracker=172.17.13.136:7001 check

blob.png 

三、storage1storage2主机上操作:

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 启动服务

blob.png 

四、在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

blob.png 

blob.png

五、在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 

blob.png 

也可以在数据库中查看信息:

mysql mysql -uroot -p

>use mogilfs;

>select * from device;

>select * from host;

blob.png 

blob.png

3、添加域:mogadm domain add img  这里添加的是img域

列出域:mogadm domain list 

 blob.png

4、在""中建"",并设置最小保存份数,即副本数

mogadm class add img c29 --mindevcount=3 表示在img域中创建c29类,最小副本数为3

blob.png 

七、所有机器上操作:

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 查询文件

blob.png 

访问以下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

blob.png 


















本文转自lc0108131451CTO博客,原文链接:http://blog.51cto.com/13150617/2046600 ,如需转载请自行联系原作者


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4天前
|
人工智能 Kubernetes 异构计算
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
本教程演示如何在ACK中多机分布式部署DeepSeek R1满血版。
|
27天前
|
存储 缓存 Java
Java中的分布式缓存与Memcached集成实战
通过在Java项目中集成Memcached,可以显著提升系统的性能和响应速度。合理的缓存策略、分布式架构设计和异常处理机制是实现高效缓存的关键。希望本文提供的实战示例和优化建议能够帮助开发者更好地应用Memcached,实现高性能的分布式缓存解决方案。
39 9
|
2月前
|
数据管理 API 调度
鸿蒙HarmonyOS应用开发 | 探索 HarmonyOS Next-从开发到实战掌握 HarmonyOS Next 的分布式能力
HarmonyOS Next 是华为新一代操作系统,专注于分布式技术的深度应用与生态融合。本文通过技术特点、应用场景及实战案例,全面解析其核心技术架构与开发流程。重点介绍分布式软总线2.0、数据管理、任务调度等升级特性,并提供基于 ArkTS 的原生开发支持。通过开发跨设备协同音乐播放应用,展示分布式能力的实际应用,涵盖项目配置、主界面设计、分布式服务实现及部署调试步骤。此外,深入分析分布式数据同步原理、任务调度优化及常见问题解决方案,帮助开发者掌握 HarmonyOS Next 的核心技术和实战技巧。
260 76
鸿蒙HarmonyOS应用开发 | 探索 HarmonyOS Next-从开发到实战掌握 HarmonyOS Next 的分布式能力
|
2月前
|
物联网 调度 vr&ar
鸿蒙HarmonyOS应用开发 |鸿蒙技术分享HarmonyOS Next 深度解析:分布式能力与跨设备协作实战
鸿蒙技术分享:HarmonyOS Next 深度解析 随着万物互联时代的到来,华为发布的 HarmonyOS Next 在技术架构和生态体验上实现了重大升级。本文从技术架构、生态优势和开发实践三方面深入探讨其特点,并通过跨设备笔记应用实战案例,展示其强大的分布式能力和多设备协作功能。核心亮点包括新一代微内核架构、统一开发语言 ArkTS 和多模态交互支持。开发者可借助 DevEco Studio 4.0 快速上手,体验高效、灵活的开发过程。 239个字符
242 13
鸿蒙HarmonyOS应用开发 |鸿蒙技术分享HarmonyOS Next 深度解析:分布式能力与跨设备协作实战
|
2月前
|
NoSQL Java Redis
秒杀抢购场景下实战JVM级别锁与分布式锁
在电商系统中,秒杀抢购活动是一种常见的营销手段。它通过设定极低的价格和有限的商品数量,吸引大量用户在特定时间点抢购,从而迅速增加销量、提升品牌曝光度和用户活跃度。然而,这种活动也对系统的性能和稳定性提出了极高的要求。特别是在秒杀开始的瞬间,系统需要处理海量的并发请求,同时确保数据的准确性和一致性。 为了解决这些问题,系统开发者们引入了锁机制。锁机制是一种用于控制对共享资源的并发访问的技术,它能够确保在同一时间只有一个进程或线程能够操作某个资源,从而避免数据不一致或冲突。在秒杀抢购场景下,锁机制显得尤为重要,它能够保证商品库存的扣减操作是原子性的,避免出现超卖或数据不一致的情况。
87 10
|
3月前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
69 5
|
4月前
|
人工智能 文字识别 Java
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
尼恩,一位拥有20年架构经验的老架构师,通过其深厚的架构功力,成功指导了一位9年经验的网易工程师转型为大模型架构师,薪资逆涨50%,年薪近80W。尼恩的指导不仅帮助这位工程师在一年内成为大模型架构师,还让他管理起了10人团队,产品成功应用于多家大中型企业。尼恩因此决定编写《LLM大模型学习圣经》系列,帮助更多人掌握大模型架构,实现职业跃迁。该系列包括《从0到1吃透Transformer技术底座》、《从0到1精通RAG架构》等,旨在系统化、体系化地讲解大模型技术,助力读者实现“offer直提”。此外,尼恩还分享了多个技术圣经,如《NIO圣经》、《Docker圣经》等,帮助读者深入理解核心技术。
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
|
4月前
|
NoSQL Java Redis
开发实战:使用Redisson实现分布式延时消息,订单30分钟关闭的另外一种实现!
本文详细介绍了 Redisson 延迟队列(DelayedQueue)的实现原理,包括基本使用、内部数据结构、基本流程、发送和获取延时消息以及初始化延时队列等内容。文章通过代码示例和流程图,逐步解析了延迟消息的发送、接收及处理机制,帮助读者深入了解 Redisson 延迟队列的工作原理。
|
4月前
|
消息中间件 中间件 数据库
NServiceBus:打造企业级服务总线的利器——深度解析这一面向消息中间件如何革新分布式应用开发与提升系统可靠性
【10月更文挑战第9天】NServiceBus 是一个面向消息的中间件,专为构建分布式应用程序设计,特别适用于企业级服务总线(ESB)。它通过消息队列实现服务间的解耦,提高系统的可扩展性和容错性。在 .NET 生态中,NServiceBus 提供了强大的功能,支持多种传输方式如 RabbitMQ 和 Azure Service Bus。通过异步消息传递模式,各组件可以独立运作,即使某部分出现故障也不会影响整体系统。 示例代码展示了如何使用 NServiceBus 发送和接收消息,简化了系统的设计和维护。
94 3
|
4月前
|
缓存 网络协议 API
分布式系统应用之服务发现!
分布式系统应用之服务发现!