mogilefs
架构
mogilefs包含了三个节点,tracker、database和storage
- tracker是mogilefs功能的实现,它相当于一个调度器,用户发来请求后,由tracker通过放database来查询用户想要访问数据的元数据,然后在返回给用户真正的uri。用户再次请求真正的uri。
- database是存储mogilefs的元数据,tracker来管理和操作。
- storage node是存储节点,所有的存储文件都是在这个机器上。
其它术语
Domain
:一个mogilefs可以有多个domain,用来存放不同文件,不同Domain内,同一个Domain内key必须唯一,key可以相同。 每一个存储节点称为一个主机host,一个主机上可以有多个存储设备dev(单独的硬盘),每个设备都有ID号,Domain+Fid用来定位文件。class
:文件属性管理,定位文件存储在不同设备上的份数。 一个domain内有多个class,是最小复制单元,而不是文件。 class决定了把数据放在哪几个服务器上
找文件的时候,通过domain加fileid来查找。
*device
:一个存储节点,可以有多个 device, 就是用来存放文件的目录(比较挂载的目录),每个设备都有一个设备 id,需要在 mogstored 的配置文件中的 docroot 配置的项目 指定的目录下面创建相应的设备的目录,目录名为 docroot/devid,设备是不能删除的.只能将其设备的状态的值置为dead,当一个设备 dead 之后,就真的 dead了,里面的数据也无法恢复了,且这个dead了的设备的 id 也不能再用.
mogilefs的安装
主机 | 功能 |
---|---|
11.2.3.63 | tracker,database,mogstored |
11.2.3.25 | mogstored |
由于网上已经停止了对mogilefs的更新,所有的包都停留在centos6上。 下面是在centos7上演示
1)安装各种依赖包
yum -y install make gcc unzip perl-DBD-MySQL perl perl-CPAN perl-YAML perl-Time-HiRes```
2)安装mogilefs服务的包
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201213024848869.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0NTY0MzY2,size_16,color_FFFFFF,t_70)
```bash
yum install -y *.rpm
3)安装数据库
yum install -y mariadb-server
4)为数据库创建用户
MariaDB [(none)]> GRANT ALL ON *.* TO 'ydong'@'11.2.%.%' IDENTIFIED BY 'centos';
Query OK, 0 rows affected (0.00 sec)
此种方式创建的用户权限太大,可以专门创建一个用户只对mogilefs表有效
5)生成mogilefs库
[root@localhost ~]# mogdbsetup --dbhost=127.0.0.1 --dbuser=ydong --dbpass=centos --dbport=3306 --dbname=mogilefs
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
Create/Upgrade database name 'mogilefs'? [Y/n]: y 是否生成mogilefs库
Grant all privileges to user 'ydong', connecting from anywhere, to the mogilefs database 'mogilefs'? [Y/n]: y 是否支持远程连接
6)配置tracker
daemonize = 1 ##设置为1表示启动为守护进程
db_dsn = DBI:mysql:mogilefs:host=127.0.0.1 db_user = username db_pass = password ##配置数据库连接相关信息
listen = 127.0.0.1:7001 ##mogilefs监听地址,监听在127.0.0.1表示只允许从本机登录进行管理
query_jobs = 10 ##启动多少个查询工作线程
delete_jobs = 1 ##启动多少个删除工作线程
replicate_jobs = 5 ##启动多少个复制工作线程
reaper_jobs = 1 ##启动多少个用于回收资源的线程
maxconns = 10000 ##存储系统的最大连接数.
httplisten = 0.0.0.0:7500 ##可通过http访问的服务端口
mgmtlisten = 0.0.0.0:7501 ##mogilefs的管理端口
docroot = /var/mogdata ##该项决定了数据的在storage上存储的实际位置,建议使用的是一个单独挂载使用的磁盘
7)启动tracker,mogilefs不用在root用户下启动 需要切到mogilefs用户运行
[root@localhost ~]# mogilefsd -h
Unknown option: h
mogilefsd cannot be run as root
bash-4.2$ systemctl start mogilefsd
8)配置mogstored
[root@localhost ~]# cat /etc/mogilefs/mogstored.conf
maxconns = 10000
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501
docroot = /data/mogilefs #数据存放的目录。此目目录需要以mogilefs用户来访问
[root@localhost ~]# mkdir /data/mogilefs -p
[root@localhost ~]# chown -R mogilefs.mogilefs /data/
[root@localhost ~]# ll /data/
总用量 0
drwxr-xr-x 2 mogilefs mogilefs 6 12月 13 03:22 mogilefs
9)启动mogstored节点
[root@localhost ~]# mogstored -c /etc/mogilefs/mogstored.conf --daemon
10)将存储节点加入到tracker中
[root@localhost ~]# mogadm host add 11.2.3.63 --status=alive
显示tracker中的host
[root@localhost ~]# mogadm host list
11.2.3.63 [1]: alive
IP: 11.2.3.63:7500
修改tracker的host
[root@localhost ~]# mogadm host modify 11.2.3.63 --status=down
[root@localhost ~]# mogadm host list
11.2.3.63 [1]: down
IP: 11.2.3.63:7500
11)添加存储设备(device)。也就是mogstored里面docroot
指定的目录供存储设备使用。在该目录里建目录使用 dev + ID 这种格式,记的所有系统中 ID 不能重复.也必须和配置文件中的路径一样
[root@localhost ~]# mkdir /data/mogilefs/dev1
[root@localhost ~]# chown -R mogilefs.mogilefs /data/mogilefs/
[root@localhost ~]# mogadm device add 11.2.3.63 1
[root@localhost ~]# mogadm device list
11.2.3.63 [1]: alive
used(G) free(G) total(G) weight(%)
dev1: alive 5.209 44.767 49.976 100
12)添加别的存储节点(11.2.3.25)。 按照1、2、8步骤安装
mogstored -c /etc/mogilefs/mogstored.conf --daemon
13)在tracker中添加
[root@localhost ~]# mogadm host list
11.2.3.63 [1]: alive
IP: 11.2.3.63:7500
11.2.3.25 [2]: down
IP: 11.2.3.25:7500
14)为第二个节点添加设备
在11.2.3.25中创建dev2的目录
[root@localhost ~]# ll /data/mogilefs/
总用量 0
drwxr-xr-x 3 mogilefs mogilefs 37 12月 13 03:47 dev2
[root@localhost ~]# mogadm device list
11.2.3.63 [1]: alive
used(G) free(G) total(G) weight(%)
dev1: alive 5.209 44.767 49.976 100
11.2.3.25 [2]: alive
used(G) free(G) total(G) weight(%)
dev2: alive 4.014 45.962 49.976 100
15)在tracker中建域
[root@localhost ~]# mogadm domain add imgs
[root@localhost ~]# mogadm domain add files
[root@localhost ~]# mogadm domain list
domain class mindevcount replpolicy hashtype
-------------------- -------------------- ------------- ------------ -------
files default 2 MultipleHosts() NONE
imgs default 2 MultipleHosts() NONE
class:复制文件的最小单位 (最大为64M,如果一个单文件超出此大小将拆分为多个class存储)。在一个域中,可以有多个类,主要是用来控制复制单元的,类是用来做属性管理的,类是比域 domain 低一个级别,可以定义一个文件存储在不同 device 中的份数.一个文件必须通过 domain,class 和 key 才能找出来.我们可以给不同的重要程度的文件,不同热度的文件,来分别用类来控制份数.
mindevcount:表示最小的份数
16)上传文件
[root@localhost ~]# mogupload --trackers=127.0.0.1 --domain=files --key='/fstab' --file='/etc/fstab'
key:http访问的url
file:本地文件
17)查询文件
[root@localhost ~]# mogfileinfo --tracker=127.0.0.1 --domain=files --key='/fstab'
- file: /fstab
class: default
devcount: 1
domain: files
fid: 2
key: /fstab
length: 541
- http://11.2.3.25:7500/dev2/0/000/000/0000000002.fid
.fid的文件就是web访问的路径