标签:mogilefs
一、分布式文件系统
分布式文件系统(Distributed File
System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连,也就是集群文件系统,可以支持大数量的节点以及PB级的数量存储。
相对地,在一个分享的磁盘文件系统中,所有节点对数据存储区块都有相同的访问权,在这样的系统中,访问权限就必须由客户端程序来控制。
分布式文件系统可能包含的功能有:透通的数据复制与容错。也就是说,即使系统中有一小部份的节点脱机,整体来说系统仍然可以持续运作而不会有数据损失
分布式文件系统类别
名称
特性
MogileFS
适用于处理海量小文件Ceph
是一个 Linux PB级别的分布式文件系统MooseFS
通用简便,适用于研发能力不强的公司Taobao Filesystem
适用于处理海量小文件ClusterFS
适用于处理单个大文件Google Filesystem
GFS+MapReduce擅长处理单个大文件Hadoop Distributed Filesystem
GFS的山寨版+MapReduce,擅长处理单个大文件
MogileFS由3个部分组成:
第1个部分:
是server端,包括mogilefsd和mogstored两个程序。前者即是mogilefsd的tracker,它将一些全局信息保存在数据库
里,例如站点domain,class,host等。后者即是存储节点(store node),它其实是个HTTP
Daemon,默认侦听在7500端口,接受客户端的文件备份请求。在安装完后,要运行mogadm工具将所有的store
node注册到mogilefsd的数据库里,mogilefsd会对这些节点进行管理和监控。
第2个部分:是utils(工具集),主要是MogileFS的一些管理工具,例如mogadm等。
第3个部分:是客户端API,目前只有Perl
API(MogileFS.pm)、PHP,用这个模块可以编写客户端程序,实现文件的备份管理功能,提供MogileFS.pm
CAP理论:一致性,可用性,分区容错性;指一个分布式系统不可以满足一致性,可用性和分区容错性这三个需求,最多只能同时满足其中的两个;
C(Consistency):一致性,任何一个读操作总是能够读取之前完成的写操作;就是一个数据写入一立马被读到;
A(Availability):可用性,每一次操作总是能够
在确定的时间返回;无论成功或失败都能收到一个返回值的;
P(Tolerance of network
Partition):分区容错性,在出现网络分区的情况下,仍然能够满足一致性和可用性;
环境:3台虚拟机:172.16.17.3调度器(tracker+MogileFS+mysql),172.16.17.11存储节点(mogstored),172.16.17.12存储节点(mogstored)。
172.16.17.3上安装mysql,mysql数据库可以安装在这3台主机里的任意一台。
[root@MinR mogilefs]# service mysqld start Starting mysqld: [ OK ] 启动mysql [root@MinR mogilefs]# mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.1.71 Source distribution Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement. mysql> GRANT ALL ON *.* TO ‘root‘@‘172.16.%.%‘ IDENTIFIED BY ‘mageedu‘; Query OK, 0 rows affected (0.00 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) 给root用户授权 mysql> GRANT ALL ON *.* TO ‘root‘@‘MinR‘ IDENTIFIED BY ‘mageedu‘; Query OK, 0 rows affected (0.00 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) 主机名授权, 防止反向解析出错 mysql> GRANT ALL ON mogdb.* TO ‘moguser‘@‘172.16.%.%‘ IDENTIFIED BY ‘mogpass‘; Query OK, 0 rows affected (0.01 sec) 给 moguser用户授权 mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) mysql> GRANT ALL ON mogdb.* TO ‘moguser‘@‘MinR‘ IDENTIFIED BY ‘mogpass‘; Query OK, 0 rows affected (0.00 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec)
安装MogileFS
[root@MinR mogilefs]# yum install MogileFS-Server-2.46-2.el6.noarch.rpm MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm perl-Perlbal-1.78-1.el6.noarch.rpm perl-Net-Netmask-1.9015-8.el6.noarch.rpm这个后面会用到不装会报错 注意这里的perl-Perlbal是所依赖的包必须安装。否则不成功 设定数据库,这里要用mogdbsetup命令,用mogdbsetup --help查看下具体用法 [root@MinR mogilefs]# mogdbsetup --dbhost=172.16.17.3 --dbname=mogdb --dbuser=moguser --dbpass=mogpass --dbrootuser=root --dbrootpass=mageedu This will attempt to setup or upgrade your MogileFS database. It won‘t destroy existing data. Run with --help for more information. Run with --yes to shut up these prompts. Continue? [N/y]: y 验证下 [root@MinR mogilefs]# mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 41 Server version: 5.1.71 Source distribution Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement. mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mogdb | | mysql | | test | +--------------------+ 4 rows in set (0.00 sec) mysql> use mogdb Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> SHOW TABLES; +----------------------+ | Tables_in_mogdb | +----------------------+ | checksum | | class | | device | | domain | | file | | file_on | | file_on_corrupt | | file_to_delete | | file_to_delete2 | | file_to_delete_later | | file_to_queue | | file_to_replicate | | fsck_log | | host | | server_settings | | tempfile | | unreachable_fids | +----------------------+ 17 rows in set (0.00 sec) mysql> \q Bye
编辑mogilefsd 的配置文件
[root@MinR mogilefs]# vim /etc/mogilefs/mogilefsd.conf db_dsn = DBI:mysql:mogdb:host=172.16.17.3 db_user = moguser db_pass = mogpass # IP:PORT to listen on for mogilefs client requests listen = 172.16.17.3:7001 这几项是我们要改动的,其余默认不用改
启动mogilefs
[root@MinR mogilefs]# service mogilefsd start Starting mogilefsd [ OK ]
在另外2个节点上也安装mogilefs
yum install MogileFS-Server-* perl-Net-Netmask-1.9015-8.el6.noarch.rpm perl-Perlbal-1.78-1.el6.noarch.rpm [root@MinR1 mogilefs]# yum install -y perl-IO-AIO 编辑配置文件 [root@MinR1 mogilefs]# cd /etc/mogilefs/ [root@MinR1 mogilefs]# cp mogstored.conf mogstored.conf.bak 备份 [root@MinR1 mogilefs]# vim mogstored.conf maxconns = 10000 最大并发连接数 httplisten = 0.0.0.0:7500 mgmtlisten = 0.0.0.0:7501 docroot = /mogdata/data 此目录需要手动创建,并加权限 [root@MinR1 mogilefs]# chown -R mogilefs.mogilefs /mogdata /data
在tracker节点
[root@MinR mogilefs]# yum install MogileFS-Utils-2.19-1.el6.noarch.rpm
perl-MogileFS-Client-1.14-1.el6.noarch.rpm 安装所需的包
当这2个包安装完成后,就可看到mog打头的命令工具多了很多
[root@MinR mogilefs]# mog mogadm mogdbsetup mogfetch
mogfileinfo moglistfids mogrename mogstored mogupload
mogautomount mogdelete mogfiledebug mogilefsd moglistkeys
mogstats mogtool
[root@MinR mogilefs]# mogadm --trackers=172.16.17.3:7001 host add
查看下其具体用法
Help for ‘host-add‘ command:
mogadm host add <hostname> [opts] Add a host to
MogileFS.
<hostname> Hostname of machine
--altip=s Alternate IP that is machine is reachable from
--altmask=s Netmask which, when matches client, uses alt IP
--getport=i Alternate HTTP port serving readonly traffic
--ip=s IP address of machine. --port=i HTTP
port of mogstored --status=s One of {alive,down}. Default
‘down‘.
[root@MinR mogilefs]# mogadm --trackers=172.16.17.3:7001 host add
node2 –ip=172.16.17.11 –status=alive 添加节点
[root@MinR mogilefs]# mogadm --trackers=172.16.17.3:7001 host add
node2 –ip=172.16.17.12 –status=alive
[root@MinR ~]# mogadm --trackers=172.16.17.3:7001 host listnode2 [1]:
alive IP: 172.16.17.11:7500
node3 [2]: alive IP: 172.16.17.12:7500 查看
[root@MinR ~]# mogadm --trackers=172.16.17.3:7001 device add node2 1
--status=alive
[root@MinR ~]# mogadm --trackers=172.16.17.3:7001 device add node3 2
--status=alive
[root@MinR ~]# mogadm --trackers=172.16.17.3:7001 device add node3 3
--status=alive
注意上面的设备Id(1,2,3)都要提前在所对应的 节点上的/mogdata/data/dev1或者dev2或者dev3….创建好
[root@MinR ~]# mogadm --trackers=172.16.17.3:7001 device list
查看个节点的设备node2 [1]: alive used(G) free(G)
total(G) weight(%) dev1: alive 0.926 17.760
18.686 100 node2节点的设备已添加
node3 [2]: alive used(G) free(G) total(G)
weight(%) node3节点的设备未添加
添加好后
[root@MinR ~]# mogadm --trackers=172.16.17.3:7001 device listnode2 [1]:
alive used(G) free(G) total(G) weight(%)
dev1: alive 0.926 17.760 18.686 100
node3 [2]: alive used(G) free(G) total(G)
weight(%) dev2: alive 0.419 18.267 18.686 100
dev3: alive 0.419 18.267 18.686 100
[root@MinR ~]# mogadm --trackers=172.16.17.3:7001 device
summaryHostname HostID Status used(G) free(G) total(G)
%Usednode2 [ 1]: alive 0.926 17.760 18.686
4.95node3 [ 2]: alive 0.840 36.531 37.371
2.25[root@MinR ~]# mogadm --trackers=172.16.17.3:7001 domain add files
默认名称空间[root@MinR ~]# mogadm --trackers=172.16.17.3:7001 domain
list domain class mindevcount replpolicy
hashtype-------------------- -------------------- ------------- ------------
------- files default 2
MultipleHosts() NONE
[root@MinR ~]# mogupload --trackers=172.16.17.3:7001 --domain=files
--key=‘/fstab.html‘ --file=‘/etc/fstab‘ 上传文件
上传成功后,就可一在另外的2个节点中的任意一个来查看上传的文件,注意这里的文件保存的目录格式和我们想的不太一样
[root@node3 data]# cat dev2/0/000/000/0000000003.fid
## /etc/fstab# Created by anaconda on Thu Aug 14 21:10:35
2014## Accessible filesystems, by reference, are maintained under
‘/dev/disk‘# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for
more info#/dev/mapper/vg0-root / ext4
defaults 1 1UUID=b7e0fe27-dea3-444c-9d20-4d7edb7e4570
/boot ext4 defaults 1 2/dev/mapper/vg0-usr
/usr ext4 defaults 1 2/dev/mapper/vg0-var
/var ext4 defaults 1 2/dev/mapper/vg0-swap
swap swap defaults 0 0tmpfs
/dev/shm tmpfs defaults 0 0devpts
/dev/pts devpts gid=5,mode=620 0 0sysfs
/sys sysfs defaults 0 0proc
/proc proc defaults 0 0这的确是我们上传的结果。
在172.16.17.3上也可查看到文件的2个副本
[root@MinR ~]# mogfileinfo --trackers=172.16.17.3:7001 --domain=files
--key=‘/fstab.html‘- file: /fstab.html class:
default devcount: 2 domain:
files fid: 3 key:
/fstab.html length: 921 - http://172.16.17.11:7500/dev1/0/000/000/0000000003.fid
用http协议也可访问。本来就是通过http协议共享的 - http://172.16.17.12:7500/dev2/0/000/000/0000000003.fid
再上传一个图片文件
[root@MinR ~]# mogupload --trackers=172.16.17.3:7001 --domain=files --key=‘/bg.png‘ --file=‘/usr/share/backgrounds/wallpaper-six-2048x1536.png‘ [root@MinR ~]# mogfileinfo --trackers=172.16.17.3:7001 --domain=files --key=‘/bg.png‘ - file: /bg.png class: default devcount: 2 domain: files fid: 4 key: /bg.png length: 608517 - http://172.16.17.12:7500/dev2/0/000/000/0000000004.fid - http://172.16.17.11:7500/dev1/0/000/000/0000000004.fid
在浏览器访问
标签:mogilefs
原文地址:http://tliss.blog.51cto.com/6883268/1560613