设为首页 收藏本站
查看: 1454|回复: 0

[经验分享] 分布式文件系统Mogilefs

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-12-8 09:33:59 | 显示全部楼层 |阅读模式
MogileFS简介:
MogileFS是一个开源的分布式文件存储系统,由LiveJournal旗下的Danga Interactive公司开发。Danga团队开发了包括 Memcached、MogileFS、Perlbal 等多个知名的开源项目。目前使用MogileFS 的公司非常多,如日本排名先前的几个互联公司及国内的yupoo(又拍)、digg、豆瓣、1号店、大众点评、搜狗和安居客等,分别为所在的组织或公司管理着海量的图片。

MogileFS特性
    1   工在于应用层
    2   无单点,三大组件(tracker,mogstore,database)皆可实现高可用;
    3   自动完成文件复制,制的最小单位不是文件,而是class;基于不同的class,文件可以被自动的复制到多个有足够存储空间的存储节点上;
    4   传输无需特殊协议,可以通过NFS或HTTP协议进行通信;
    5   名称安间简单,文件通过一个给定的key来确定,是一个全局的命名空间;没有目录,基于域实现文件隔离;
    6   不共享任何数据,每个存储节点只需维护自己所属的存储设备(device)即可;

MogileFS由部分组成:
  (1) server:主要包括mogilefsd和mogstored两个应用程序。
    mogilefsd实现的是tracker,它通过数据库来保存元数据信息,包括站点domain、class、host等;
    mogstored是存储节点(store node),它其实是个WebDAV服务,默认监听在7500端口,接受客户端的文件存储请求。
  (2) utils(工具集):主要是MogileFS的一些管理工具,例如mogadm等。
    在MogileFS安装完后,要运行mogadm工具将所有的store node注册到mogilefsd的数据库里,mogilefsd会对这些节点进行管理和监控。
  (3) 客户端API:MogileFS的客户端API很多,例如Perl、PHP、Java、Python等,用这个模块可以编写客户端程序,实现文件的备份管理功能等。

存储主机(节点)
    这个是 MogileFS 存储文件存放在这些机器上,也是 mogstored 节点,也叫 Storage Server,一台存储主要都要启动一个 mogstored 服务.扩容就是增加这些机器.

设备(device)
    一个存储节点,以就是上面的主机,可以有多个 device, 就是用来存放文件的目录(例如挂载的目录),每个设备都有一个设备id,需要在 mogstored 的配置文件中的 docroot 配置的项目 指定的目录下面创建相应的设备的目录,目录名为 $docroot/dev$id,设备是不能删除的.只能将其设备的状态的值置为dead,当一个设备 dead 之后,就真的 dead了,里面的数据也无法恢复了,且这个dead了的设备的 id 也不能再用.

MogileFS架构
  tracker     追踪元数据
    mogilefsd 守护进程
    它的主要职责
        replication     节点之间文件得复制
        deletion        删除文件
        queryworker     响应客户请求的文件元数据访问请求
        reaper          在存储失败后将文件复制请求重新放置于队列中
        monitor         监主机和设备的健康状态
  database    存储元数据
       存储mogilefs的元数据,一般使用MySQL ,建议使用冗余方案以保证其可用性:(MMM,MHA)
       mogilefs专门提供了数据结构管理工具mogdbsetup
  storage     存储数据
        mogstored 守护进程,一个准备好的mogstored节点可通过mogadm命令添加至现在的集群中。
        存储节点需要定义"设备" 用作存储空间 每个"设备"在当前集群都需要通过一个惟一的DevID来标识
  Client
        客户端用于与mogilefs建立通信,完成数据存取;
QQ截图20151208093307.png
工作流程
QQ截图20151208093319.png
高可用架构
QQ截图20151208093338.png

MogileFS管理的几个概念:
  Domain
    一个MogileFS 可以有多个Domain
    用来存放不同文件(大小,类型)
    同一个Domain内,key必须唯一
    不周Domain内,Key可以相同
  Class
    最小复制单元
    文件属性管理
    定义文件存储在不同设备上份数据
  每个设备都有ID号,Domain+Fid用来定位文件

实验准备
安装MySQL
https://mariadb.org/  网站下载 mariadb-5.5.46-linux-x86_64.tar.gz

groupadd -r -g 306 mysql
useradd -r -g 306 -u 306 mysql
mkdir -pv /mydata/data
chown -R mysql.mysql /mydata
111
111
tar zxf mariadb-5.5.46-linux-x86_64.tar.gz -C /usr/local/
cd /usr/local/
ln -sv mariadb-5.5.46-linux-x86_64 mysql
cd mysql
chown -R root.mysql ./*
scripts/mysql_install_db --user=mysql --datadir=/mydata/data
mkdir /etc/mysql
cp support-files/my-large.cnf  /etc/mysql/my.cnf
111
111
vim /etc/mysql/my.cnf
datadir = /mydata/data
innodb_file_per_table = on
skip_name_resolve = on
111
111
cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
service mysqld start
111
111
vim /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin:$PATH
source /etc/profile.d/mysql.sh
源码安装MogileFS
去官方下载http://www.danga.com/的源码
MogileFS-Server         MogileFS-Server-2.72.zip
MogileFS-Utils          MogileFS-Utils-2.29.zip
perl-MogileFS-Client    perl-MogileFS-Client-1.17.zip
Perlbal                 Perlbal-1.80.zip                  #Tracker不用安装,storage必须安装
wget http://mirrors.aliyun.com/epel/6 ... ease-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm

yum install  perl-IO-stringy perl-DBD-MySQL  perl-BSD-Resource    #base源
yum install  perl-Danga-Socket perl-IO-AIO perl-Net-Netmask         #epel源

unzip perl-MogileFS-Client-1.17.zip
cd perl-MogileFS-Client-1.17
perl Makefile.PL  
make  
make test  
make install  
  
unzip MogileFS-Utils-2.29.zip
cd MogileFS-Utils-2.29  
perl Makefile.PL  
make  
make install

unzip MogileFS-Server-2.72.zip
cd MogileFS-Server-2.72
perl Makefile.PL
make
make test
make install

unzip Perlbal-1.80.zip
cd Perlbal-1.80.zip
perl Makefile.PL
make
make test
make install

groupadd -r mogilefs
useradd -r -g mogilefs  mogilefs

mkdir /etc/mogilefs/
cp /root/MogileFS-Server-2.72/conf/* /etc/mogilefs/

mkdir /var/run/mogilefsd/
chown mogilefs.mogilefs /var/run/mogilefsd/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
vim /etc/rc.d/init.d/mogilefsd
#!/bin/bash
# Author: MageEdu <linuxedu@foxmail.com>
# mogilefsd - Startup script for the MogileFS tracker
#
# chkconfig: - 85 15
# description: MogileFS tracker
# processname: mogilefsd
# config: /etc/mogilefs/mogilefsd.conf
# pidfile: /var/run/mogilefsd/mogilefsd.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Path to the apachectl script, server binary, and short-form for messages.
lockfile=${LOCKFILE-/var/lock/subsys/mogilefsd}
RETVAL=0
prog=/usr/local/bin/mogilefsd
#prog=$(which mogilefsd)
start() {
        ulimit -n 65535
        echo -n $"Starting mogilefsd"
        su - mogilefs -c "$prog -c /etc/mogilefs/mogilefsd.conf --daemon" &> /dev/null
        RETVAL=$?
        [ $RETVAL = 0 ] && success && touch ${lockfile} || failure
        echo
        return $RETVAL
}
stop() {
        echo -n $"Stopping mogilefsd"
        netstat -nlp|grep "mogilefsd"|grep -v grep|awk '{print $7}'|awk -F"/" '{print $1}'|xargs kill -9
        RETVAL=$?
        [ $RETVAL = 0 ] && success && rm -f ${lockfile} || failure
        echo
}
reload() {
        echo -n $"Reloading mogilefsd: "
        killall mogilefsd -HUP
        RETVAL=$?
        [ $RETVAL = 0 ] && success || failure
        echo
}
case "$1" in
        start)
                start
                ;;
        stop)
                stop
                ;;
        status)
                status mogilefsd
                RETVAL=$?
                ;;
        restart)
                stop
                sleep 1
                start
                ;;
        reload)
                reload
                ;;
        *)
                echo $"Usage: mogilefsd {start|stop|restart|reload|status}"
                exit 1
esac
exit $RETVAL



111
111
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
vim /etc/rc.d/init.d/mogstored
  
#!/bin/bash
# Author: MageEdu <linuxedu@foxmail.com>
# mogstored - Startup script for the MogileFS storage
#
# chkconfig: - 86 14
# description: MogileFS storage
# processname: mogstored
# config: /etc/mogilefs/mogstored.conf
# pidfile: /var/run/mogilefsd/mogstored.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Path to the apachectl script, server binary, and short-form for messages.
lockfile=${LOCKFILE-/var/lock/subsys/mogstored}
RETVAL=0
configfile='/etc/mogilefs/mogstored.conf'
prog=/usr/local/bin/mogstored
#prog=$(which mogstored)
start() {
        ulimit -n 65535
        echo -n $"Starting mogstored"
        su - mogilefs -c "$prog -c $configfile --daemon"  &> /dev/null
        RETVAL=$?
        [ $RETVAL = 0 ] && success && touch ${lockfile} || failure
        echo
        return $RETVAL
}
stop() {
        echo -n $"Stopping mogstored"
        netstat -nlp|grep "mogstored"|grep -v grep|awk '{print $7}'|awk -F"/" '{print $1}'|xargs kill -9
        RETVAL=$?
        [ $RETVAL = 0 ] && success && rm -f ${lockfile} || failure
        echo
}
reload() {
        echo -n $"Reloading mogstored: "
        killall mogstored -HUP
        RETVAL=$?
        [ $RETVAL = 0 ] && success || failure
        echo
}
case "$1" in
        start)
                start
                ;;
        stop)
                stop
                ;;
        status)
                status mogstored
                RETVAL=$?
                ;;
        restart)
                stop
                sleep 1
                start
                ;;
        reload)
                reload
                ;;
        *)
                echo $"Usage: mogstored {start|stop|restart|reload|status}"
                exit 1
esac
exit $RETVAL



111
111
chmod +x /etc/init.d/mogilefsd
chmod +x /etc/init.d/mogstored
chkconfig --add mogilefsd
chkconfig --add mogstored

实验一   单tracker + 2 storage
10.10.10.54    tracker + database
10.10.10.55    storage
10.10.10.56    storage
分别在三台服安装mogilefs ,并在10.10.10.54安装mariadb
准备mysql授权10.10.10.0/24段的IP 全部可以连接MySQL
GRANT ALL ON *.* TO 'root'@'10.10.10.%' IDENTIFIED BY 'root' WITH GRANT OPTION;
FLUSH PRIVILEGES;
SHOW GRANTS;
+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION        |
+---------------------------------------------------------------------+
初始化Mogilefs 数据库,使用mogdbsetup
mogdbsetup --dbhost=10.10.10.54 --dbrootuser=root --dbrootpass=root --dbname=mogilefs --dbuser=mogilefs --dbpass=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
Grant all privileges to user 'mogilefs', connecting from anywhere, to the mogilefs database 'mogilefs'? [Y/n]: y

配置10.10.10.54  tracker
vim /etc/mogilefs/mogilefsd.conf
# Enable daemon mode to work in background and use syslog
daemonize = 1
# Where to store the pid of the daemon (must be the same in the init script)
pidfile = /var/run/mogilefsd/mogilefsd.pid
# Database connection information
db_dsn = DBI:mysql:mogilefs:host=10.10.10.54
db_user = mogilefs
db_pass = mogilefs
# IP:PORT to listen on for mogilefs client requests
listen = 0.0.0.0:7001

启动service mogilefsd start
检查监听的7001端口
ss -tnl
State       Recv-Q Send-Q                   Local Address:Port        Peer Address:Port
LISTEN      0      128                                  *:7001                   *:*   

配置10.10.10.55 和10.10.10.56   storage
mkdir -pv /mogdata/dev2         #10.10.10.55  storage2
mkdir -pv /mogdata/dev3         #10.10.10.56  storage3
chown -R mogilefs.mogilefs /mogdata
vim /etc/mogilefs/mogstored.conf
maxconns = 10000
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501
docroot = /mogdata

开启storage(如果启动失败安装Perlbal 和perl-BSD-Resource)
service mogstored start
检查7500 和7501端口是否存在
ss -tnl
State       Recv-Q Send-Q             Local Address:Port    Peer Address:Port
LISTEN      0      128                            *:7500               *:*     
LISTEN      0      128                            *:7501               *:*

实验二
10.10.10.54    tracker + database + storage
10.10.10.55    tracker + storage
10.10.10.56    tracker + storage
mysql 另外实现,本实验为mysql单实例

实验三
10.10.10.51    nginx 反向代理mogilefs
10.10.10.54    tracker + database + storage
10.10.10.55    tracker + storage
10.10.10.56    tracker + storage



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-148286-1-1.html 上篇帖子: 分布式存储集群MogileFS的详细部署 下篇帖子: Linux分布式mogilefs文件系统
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表