一:分布式存储产生背景
node
①时代背景mysql
Web 2.0 时代的到来,使得单个计算机节点远远没法知足用户对海量数据和应用程序运行空间的需求。我的和企业都有安全而持久的存储信息的需求,备份成为最通俗的手段。我的用户经过保存多个拷贝的形式实现信息存储的安全,小几率事件不易发生,但如中奖发生了,多个拷贝都失去后,崩溃恐怕不是简单的心理表达,而将成为不可改变的事实,没法复原。存储须要保持实时读写,提供复杂的查询功能,缺少容灾和备份能力,大量无结构的数据的存储和处理,对传统的存储方式提出挑战。git
②技术背景github
互联网技术的突飞猛进,迅速发展,风起“云” 涌,“云存储”(Cloud Storage)系统提供在线的存储服务。而分布式存储正是经过利用这些存储服务,将数据分散存储在多台服务器上,从而使得数据存储实现部署简单化,操做智能化,稳定、可靠、易扩展。sql
二:MogileFS软件介绍数据库
一、MogileFS软件特色
vim
①支持多节点冗余centos
② 可实现自动的文件复制安全
③ 使用名称空间(命名空间),每一个文件经过key来肯定服务器
如:文件123.jpg的key为 :/000/000/00/01/md5hash.fid
④ 不须要RAID,应用层能够直接实现RAID,不共享任何东西,经过“集群”接口提供服务
⑤工做于应用层,没有特殊的组件要求;
⑥不共享任何数据,MogileFS不须要依靠昂贵的SAN来共享磁盘,每一个机器只用维护 好本身的磁盘。
二、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服务。经过增长存储节点服务器来实现扩容。
三、MogileFS系统管理相关概念
①Domain:域。一个MogileFS能够有多个Domain,用来存放不一样文件(大小,类型) ,同一个Domain内key必须惟一,不一样Domain内,key能够相同;
②每个存储节点称为一个主机host,一个主机上能够有多个存储设备dev(单独的硬盘 ),每一个设备都有ID号,Domain+Fid用来定位文件;
③Class:文件属性管理,定位文件存储在不一样设备上的份数;
三:MogileFS软件详解
一、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等。
二、程序文件&&配置文件
主程序:/usr/bin/mogilefsd 命令行管理工具程序:/usr/bin/mogadm 主配置文件(Tracker):/etc/mogilefs/mogilefsd.conf 主配置文件(Storage Nodes):/etc/mogilefs/mogstored.conf
四:MogileFS基础操做详解
一、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
二、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 的系统中
三、添加节点到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
四、添加存储设备到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
五、Domain&&Class 管理
1.添加域名 mogadm --tracker=172.17.250.121:7001 domain add zdd 2.检查”域“,显示存在的域 [root@centos7 ~]# 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
六、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个文件
七、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
八、Storage模式管理
一、只读模式:radonly,只能读,禁止写和删除 mogadm device mark node_name node_id readonly 二、耗尽模式:drain,只能读和删除,禁止写 mogadm device mark node_name node_id drain 注:耗尽(Drain) 模式在 MogileFS 的早期版本,将会从设备删除FIDS。如今它已经被从新均衡的功能取代。 三、从新复制文件 若是有一个硬盘坏了,MogileFS 能够自动的让请求不在访问这个设备,可是不会自动的从新复制这个硬盘的文件,你必须经过 mogadm 来 手工来标志成 'dead'. 只要你这样作, MogileFS将开始删除设备上的文件,并试图在集群间从新复制它们到其它的设备上. mogadm device mark node_name node_id dead
九、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服务
十、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 一、将使用率为50%的dev2的数据搬到使用率为40%的磁盘上,以平衡存储 mogadm rebalance policy --options="from_hosts=2 to_percent_free=40" 二、查看已存在的平衡策略 mogadm rebalance test 三、策略的 开始|暂停|重设|队列 $ mogadm rebalance start $ mogadm rebalance stop $ mogadm rebalance reset $ mogadm --stats="general-queues" ##stop后仍在运行的rebalance策略,为这些策略将会以队列(queues)的方式继续执行 注意:stop不会影响正在进行的rebalance策略 四、查看rebalance状态 $ mogadm rebalance status