新手必读:Linux分布式存储之——Mogilefs


一:分布式存储产生背景

①时代背景

Web 2.0 时代的到来,使得单个计算机节点远远无法满足用户对海量数据和应用程序运行空间的需求。个人和企业都有安全而持久的存储信息的需求,备份成为最通俗的手段。个人用户通过保存多个拷贝的形式实现信息存储的安全,小概率事件不易发生,但如中奖发生了,多个拷贝都失去后,崩溃恐怕不是简单的心理表达,而将成为不可改变的事实,无法复原。存储需要保持实时读写,提供复杂的查询功能,缺乏容灾和备份能力,大量无结构的数据的存储和处理,对传统的存储方式提出挑战。

②技术背景

互联网技术的日新月异,迅速发展,风起“云”
涌,“云存储”(Cloud Storage)系统提供在线的存储服务。而分布式存储正是通过利用这些存储服务,将数据分散存储在多台服务器上,从而使得数据存储实现部署简单化,操作智能化,稳定、可靠、易扩展。

二:MogileFS软件介绍

1、MogileFS软件特点

①支持多节点冗余

② 可实现自动的文件复制

③ 使用名称空间(命名空间),每个文件通过key来确定

如:文件123.jpg的key为 :/000/000/00/01/md5hash.fid

④ 不需要RAID,应用层可以直接实现RAID,不共享任何东西,通过“集群”接口提供服务

⑤工作于应用层,没有特殊的组件要求;

⑥不共享任何数据,MogileFS不需要依靠昂贵的SAN来共享磁盘,每个机器只用维护 好自己的磁盘。

2、MogileFS架构详解

基于MogileFS分布式存储系统三大组件:

①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:存储节点服务器,也叫 Storage Server,用来存储真实数据。每台存储节点要启动一个 mogstored服务。通过增加存储节点服务器来实现扩容。

3、MogileFS系统管理相关概念

①Domain:域。一个MogileFS可以有多个Domain,用来存放不同文件(大小,类型)
,同一个Domain内key必须唯一,不同Domain内,key可以相同;

②每一个存储节点称为一个主机host,一个主机上可以有多个存储设备dev(单独的硬盘
),每个设备都有ID号,Domain+Fid用来定位文件;

③Class:文件属性管理,定位文件存储在不同设备上的份数;

三:MogileFS软件详解

1、MogileFS软件安装流程

①安装perl相关程序包

yum install perl-Net-Netmask perl-IO-String perl-Sys-Syslog perl-IO-AIO

②本地安装下列rpm包

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

2、程序文件&&配置文件

主程序:/usr/bin/mogilefsd
命令行管理工具程序:/usr/bin/mogadm
主配置文件(Tracker):/etc/mogilefs/mogilefsd.conf
主配置文件(Storage Nodes):/etc/mogilefs/mogstored.conf

四:MogileFS基础操作详解

1、Tracker初始化

1.数据库授权
GRANT ALL PRIVILEGES ON mogilefs.* TO 'mogile' @'127.0.0.1' IDENTIFIED BY 'mogile' WITH GRANT OPTION;

2.设定数据库
mogdbsetup --dbhost=127.0.0.1 --dbpass=mogile

3.添加运行用户mogilefs(yum安装无需此步骤)
useradd -r mogilefs 
mkdir /var/run/mogilefsd/ 
chown -R mogilefs.mogilefs /var/run/mogilefsd

4.修改tracker配置文件
vim /etc/mogilefs/mogilefsd.conf
    # Database connection information     设置数据库用户和密码
    db_dsn = DBI:mysql:mogilefs:host=127.0.0.1
    db_user = mogile  
    db_pass = mogile
    # IP:PORT to listen on for mogilefs client requests  mogilefs客户端IP
    listen = 172.17.250.121:7001
5.启动mogilefsd
/etc/init.d/mogilefsd start

6.创建tracker子配置文件,指定tracker_IP,创建完成后tracker主机使用mogilefs相关命令无需再指定tracker
vim /etc/mogilefs/mogilefs.conf   #注意,不是主配置文件!!
    trackers=172.17.250.121:7001

2、Storage Nodes初始化

1.修改配置文件,自定义数据存储目录
vim /etc/mogilefs/mogstored.conf
    docroot = /data/mogdata/    #指定数据存储位置,一般挂载在单独磁盘上

2.创建此文件夹,并修改存储目录的属主和属组为mogilefs
chown -R  mogilefs.mogilefs /data/mogdata/

3.启动mogstored服务
/etc/init.d/mogstored start

注意:mogstored启动完成后后,将会让本机成为一个存储节点,接下来要配合mogadm来让当前的这个主机加入到 MogileFS 的系统中

3、添加节点到MogileFS

1.添加storage到指定tracker
mogadm --tracker=172.17.250.121:7001 host add node1 --ip=172.17.214.74 --port=7500 --status=alive
mogadm --tracker=172.17.250.121:7001 host add node2 --ip=172.17.214.75 --port=7500 --status=alive
注意:此命令在tracker和storage上都能执行,因为已经指定特定tracker。

2.检查主机是否添加成功
mogadm --tracker=172.17.214.73:7001 check
mogadm --tracker=172.17.214.73:7001 host list  

3.修改节点信息
mogadm host modify node1 --ip=123.xxx.xxx.70 --status=alive

4、添加存储设备到MogileFS

注意:生产环境中,会将devID/目录挂载到指定硬盘上,然后在将其添加为节点设备,不会使用系统盘。

1.创建目录/dev/mogdata/devID
目录名:dev+ID,且ID唯一,不可重复
mkdir /data/mogdata/dev1
mkdir /data/mogdata/dev2

2.修改目录权限为mogilefs
chown -R  mogilefs.mogilefs dev1/
chown -R  mogilefs.mogilefs dev2/

3.添加设备
格式:mogadm device add --tracker=<IP:PORT>  <storage_node_name>  ID
mogadm --tracker=172.17.214.73:7001 device add node1 1
mogadm --tracker=172.17.214.73:7001 device add node2 2

4.查看设备列表
mogadm --tracker=172.17.214.73:7001 device list

题外话:
标记设备为:dead (谨慎操作!!!)
当硬盘损坏,设备出现问题时,可将设备标记为dead,这时,MogileFS 将开始删除设备上的文件,并试图在集群间重新复制它们到其它的设备上.
mogadm --tracker=172.17.214.73:7001 device mark node1 1 dead

5、Domain&&Class 管理

1.添加域名
mogadm --tracker=172.17.250.121:7001 domain add zdd

2.检查”域“,显示存在的域
[[email protected] ~]# mogadm --tracker=172.17.250.121:7001 domain list
domain                   class                 mindevcount       replpolicy       hashtype
-------------------- -------------------- -------------     ------------         -------
zdd                       default                       2                    MultipleHosts()         NONE
注:  mindevcount  副本数

3.在域zdd中建"类"zd,并加入最小保存份数(副本数)为3
mogadm --tracker=172.17.250.121:7001 class add zdd zd --mindevcount=3

6、MogileFS文件管理

1.上传文件:mogupload
mogupload --domain=zdd --key=test1 --file=Chrysanthemum.jpg

2.查询文件:mogfileinfo
mogfileinfo --domain=zdd --key=test1

3.删除文件:mogdelete
mogdelete --domain=zdd  --key=test1      

4.列出所有文件key:moglistkeys
这个可以列出指定 domain 下面的所有的key , 也可以指定的一个前缀, 来找特定前缀的所有文件的key.
moglistkeys --domain=zdd
moglistkeys --domain=<domain_name>  --key_prefix=<string>

5.列出指定 fid 的文件:moglistfids

fid:MogileFS文件系统中文件的编号,是自增的,mysql数据表mogilefs.file存放了相关信息

用途:查询指定fid后 所有/指定数量 的文件
moglistfids     --fromfid=    显示指定fid后的所有文件
moglistfids     --fromfid=     --count=<num>  显示指定fid后的num个文件

7、Storage服务器状态管理&&硬盘管理

1.暂时停止服务器
使用场景:如果你需要维护一个服务器,比如更新内存,升级操作系统之类的需要关机的操作,推荐你在操作 之前先设置这些为 "down". MogileFS 对这种偶
然的故障可以很弹性的处理.
mogadm host mark node_name down   ##标记存储节点下线   注意:此节点可读,不可写
...............做相关操作.................................
...............操作完成,启动服务器...............
mogadm host  mark  node_name  alive     ##存储节点机器重新上线

2.添加硬盘设备
使用场景:有时候需要用旧硬盘来替换新硬盘,就需要一个新的deviceID。这样做的原因是可以将旧设备中所有文件列表中的文件复制到新硬盘上,从而保
持数据的完整性。
mogadm device add node_name  node_ID --status=alive
mogadm device add node_name  node_ID --status=down

8、Storage模式管理

1、只读模式:radonly,只能读,禁止写和删除
mogadm device mark node_name node_id readonly

2、耗尽模式:drain,只能读和删除,禁止写
mogadm device mark node_name node_id drain      

注:耗尽(Drain) 模式在 MogileFS 的早期版本,将会从设备删除FIDS。现在它已经被重新均衡的功能取代。

3、重新复制文件
如果有一个硬盘坏了,MogileFS 可以自动的让请求不在访问这个设备,但是不会自动的重新复制这个硬盘的文件,你必须通过 mogadm 来
手工来标志成 'dead'. 只要你这样做, MogileFS将开始删除设备上的文件,并试图在集群间重新复制它们到其它的设备上.
mogadm  device mark  node_name  node_id  dead

9、MogileFS软件bug修复:无法创建副本

细心的朋友发现,设置完MogileFS的mindevcount后无法生效,因此,可通过下列步骤解决

一:tracker和storage进行如下操作
1.安装perl语言编译环境
yum -y install make gcc unzip perl-DBD-MySQL perl perl-CPAN perl- YAML perl-Time-HiRes

2.下载相关模块
包地址:http://www.cpan.org/authors/id/B/BR/BRADFITZ/Sys-Syscall-0.23.tar.gz

3.解包并编译
tar zxvf Sys-Syscall-0.23.tar.gz
cd Sys-Syscall-0.23/  
perl Makefile.PL
make&&make install

二:重启服务
1.重启tracker的mogilefsd服务
2.重启storage的mogstored服务

10、rebalance 重平衡策略

Rebalance策略官方文档:https://github.com/hrchu/mogilefs/blob/wiki/Rebalance.md

①策略描述

将剩余空间较小盘上的数据写入另一个剩余空间较大的盘上,从而平衡空间使用率

②策略工作图解

策略图示解读:如上图,当新增硬盘和集群已有硬盘磁盘大小及使用率不一致时,继续进行写操作将会使其他四块硬盘先用光,从而引起副本创建失败,从而造成安全隐患。

③策略相关执行命令

命令选项:
mogadm rebalance settings:
rebal_policy = from_percent_used=95 to_percent_free=50 limit_type=device limit_by=size limit=5g fid_age=old

1、将使用率为50%的dev2的数据搬到使用率为40%的磁盘上,以平衡存储
mogadm rebalance policy --options="from_hosts=2 to_percent_free=40"

2、查看已存在的平衡策略
mogadm rebalance test

3、策略的 开始|暂停|重设|队列
$ mogadm rebalance start
$ mogadm rebalance stop
$ mogadm rebalance reset
$ mogadm --stats="general-queues"     ##stop后仍在运行的rebalance策略,为这些策略将会以队列(queues)的方式继续执行
注意:stop不会影响正在进行的rebalance策略

4、查看rebalance状态
$ mogadm rebalance status
时间: 2024-12-13 19:16:56

新手必读:Linux分布式存储之——Mogilefs的相关文章

44 分布式存储与mogilefs、mogiles使用进阶

01 分布式存储与mogilefs 实战:安装配置mogilefs 配置环境: node1:192.168.1.130 CentOS7.2 node2:192.168.1.131 CentOS7.2 node3:192.168.1.132 CentOS7.2 node4:192.168.1.133 CentOS7.2 [[email protected] ~]# vim /etc/hosts 添加 192.168.1.130           node1 192.168.1.131      

[转帖]新手必读,16个概念入门 Kubernetes

新手必读,16个概念入门 Kubernetes https://www.kubernetes.org.cn/5906.html 2019-09-29 22:13 中文社区 分类:Kubernetes教程/入门教程 阅读(333) 作者:汉科云团队 评论(0) Kubernetes是Google开源的容?集群管理系统,是Google多年?规模容?管理技术Borg的开源版本,主要功能包括: 基于容器的应用部署.维护和滚动升级 负载均衡和服务发现 跨机器和跨地区的集群调度 自动伸缩 无状态服务和有状态

新手关于Linux虚拟机的配置

新手关于Linux虚拟机的配置 对于学习linux的新手来说,虚拟机的配置以及与主机之间的网络连接是非常重要的.在课堂上,也许这些配置老师都已经做好了,自己安心使用即可.但是回到家,如果不配置好的话,就无法自己练习.因为自己也是新手,深有体会,所以把自己配置虚机的方法总结出来,希望对大家有所帮助. 我自己使用的主机是redhat7.0的,因为学习的需要安装的虚拟机是redhat6.5的. 虚拟机使用的镜像:rhel-server-6.5-x86_64-dvd.iso 镜像一定要保证完整性,不然会

android开发新浪微博客户端 完整攻略 [新手必读]

开始接触学习android已经有3个礼拜了,一直都是对着android的sdk文档写Tutorials从Hello World到Notepad Tutorial算是初步入门了吧,刚好最近对微博感兴趣就打算开发个android版本的新浪微博客户端作为练手项目,并且以随笔的方式详细的记录开发的全过程.本人对java语言以及eclipse Ide都是初次应用基本上属于边学边用,做移动设备上的东西也是第一次,总的来说属于无基础.无经验.无天赋的纯三无人员,还请广大同学们多多给予指点. 开发第一件事情,那

分布式存储之MogileFS基于Nginx实现负载均衡(Nginx+MogileFS)

MogileFS分布式文件系统特点: 1.具有raid的性能 2.不存在单点故障 3.简单的命名空间: 每个文件对应一个key:用于domain定义名称空间 4.不共享任何数据 5.传输中立,无特殊协议:可以通过NFS或HTTP进行通信 6.自动文件复制:复制的最小单位不是文件,而class 7.应用层: 用户空间文件系统,无须特殊的核心组件 Nginx+MogileFS的好处: 1.将请求代理至后端MogileFS服务器集群中,能实现负载均衡的效果.  2.能对后端的tracker节点进行健康

分布式存储之MogileFS简单应用

分布式存储之MogileFS分布式文件系统简单应用 一. 分布式存储原理: a) 分布式存储系统,是将数据分散存储在多台独立的设备上.传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,也是 可靠性和安全性的焦点,不能满足大规模存储数据的需要.分布式网络存储采用扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性.可用性和存取效率,还易于扩展. b) 网络存储系统分为 1. 从传统的直接存储系统DAS(直接附加存储)

新手小白Linux(Centos6.5)部署java web项目(总)

一.准备 1.linux  centos版本的相关命令操作,千万别找ubuntu的,好多命令都不一样,新手小白我傻傻不知道硬是浪费了一天的时间--(百度百科linux版本了解一下) 2.远程登录: PuTTY .WinSCP .SecureCRT .mstsc.其他(我用的SecureCRT7.3 ,主要看环境支持哪种工具) 3.确认linux服务器有网,没网的话用不了yum,只能从本机获取资源,操作方式也不一样,本文部分安装只介绍yum. 二.明确部署所需要的环境 1.java环境:jdk 2

本人认为新手学习linux运维需要注意的事项

本人认为新手学习linux运维需要注意的事项: 未入门前,尽量不要使用tab补全命令.理由是:因为你需要大量的手打输入命令来达到记忆的目的,甚至是肌肉记忆,想都不需要想下意识的能打出来.(输入的速度比你的思想快) 尽量先学远程连接工具和vim操作的快捷键,你会在新手阶段反复使用相关的快捷键,从而达到记忆的目的之后提高你的工作效率. 每天要复习你当天学了哪些内容!每天要复习你当天学了哪些内容!每天要复习你当天学了哪些内容!重要的事情说三遍.以上是一些学习心得.留作记录!!! 原文地址:https:

深度剖析Linux与Windows系统的区别,新手必读!

当我们每个人接触Linux之前,应该先接触的都是windows吧?但我们一般接触Linux后,习惯linux的管理和使用方法后,我们再回过头再来使用windows的时候,内心其实是拒绝的.我们会觉得图形好麻烦,图形好Low的感觉,这个时候我们差不多是一个linux的重度爱好者了.对于Linux是欲罢不能的,真是一个遇到贵妇一样的感觉,总是觉的她很神秘.很多我们想探索的地方.windows和linux作为杰出的系统代表,磕磕盼盼在所难免,他们之间也有很多不为人知的故事,今天我将梳理一下linux与