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

[经验分享] 分布式文件存储系统 mogilefs 的使用(1)

[复制链接]

尚未签到

发表于 2019-2-1 08:03:59 | 显示全部楼层 |阅读模式
  
一、mogilefs简介
       mogilefs是一种分布式存储(不可挂载,通过API调用或专门客户端)的解决方案,可存储海量图片、静态文件。
       mogilefs的相关程序是用perl语言编写,元数据存储在关系型数据库中(国内有人用C语言将mogilefs重写的程序叫做FastDFS,后者的元数据是存储在内存中的)
  
mogilefs的基本组成结构:
     (1) tracker:追踪器,从database中追踪用户请求数据的元数据
            与客户端通过http协议通信,RESTful风格。
            提供mogilefsd(守护进程),主要职责包括:
                 ① replication:节点间文件的复制
                 ② deletion:删除文件
                 ③ queryworker:响应客户请求的文件元数据访问请求
                 ④ reaper:在存储失败后将文件复制请求重新放置于队列中
                 ⑤ monitor:监测主机和设备的健康状态
      (2) database:
              存储mogilefs的元数据(存储数据的内容、大小、存储的节点等非数据内容信息),一般使用MySQL;建议使用冗余方案以保证其可用性(如MMM,MHA)
             mogilefs专门提供了数据结构管理工具mogdbsetup(功用:初始化MySQL、管理元数据)
       (3) storage:存储数据,数据副本冗余量默认是2个(可修改)
              mogstored(进程名),一个准备停当的mogstored节点可通过mogadm命令添加至现在的集群中;
              存储节点需要定义“设备(dev)”用作存储空间:每个“设备”在当前集群都需要通过一个唯一的DevID来标识;
        (4)client:
              客户端用于与mogilefs建立通信,完成数据存取;


  

  mogilefs特性:
         (1)工作于应用层:无需特殊核心组件;
         (2)无单点;
         (3)自动完成文件复制;
           (由tracker指挥storage自动完成)
         (4)传输无需特殊协议(使用http或nfs);
         (5)使用简单名称空间机制来完成复制;
         (6)不在任何节点之间共享任何数据;
         (7)non-RAID
         (8)不能追加写、随机写
         (9)Tracker Client传输(Mogilefsd),管理数据复制、删除、查询、修复以及监控
         (10)数据通过HTTP/WebDAV服务上传到Storage node(mogstored)
         (11)MySQL存储MofileFS元数据(命名空间、位置)
  mogilefs所存储数据的存储结构:
         ① domain: name space,命名空间 ,key的名字空间
          一个mogilefs可以有多个domain,是一种路径映射,类似于目录,同一个domain内key(文件名)唯一,不同domain内的key可以相同
          实际应用中可以将不同的类别文件存储在不同的domain中
         ② class: 最小复制单元
  
    定位文件: 先定位 domain,再定位 fid
    一个domain内 可以有多个class,是最小复制单位、最小调度单元,是多个文件合起来组成的。
  

  本次试验架构:
  

  
  配置服务顺序:
node1上安装mariadb-5.5.43-linux-x86_64-->在node1、node2、node3上安装tracker --> 在node1、node2、node3上安装mogstored --> 在node2上安装nginx做反向代理
  
本次试验只是做mogilefs的练习,未对元数据的存储做高可用。
  

  对mariadb做高可用参考:
http://ctrry.blog.运维网.com/9990018/1658665
参考架构可以如下:
  


  
二、mariadb数据库及分区及mogstored专用数据存储分区的准备
  
  (一)准备磁盘分区:

  

  在node1、node2、node3上执行下面创建新分区的步骤:

# fdisk /dev/sda
……
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26        7859    62914560   8e  Linux LVM
/dev/sda4            7859       14386    52435161    5  Extended
/dev/sda5            7859        9164    10489414+  8e  Linux LVM          10G
/dev/sda6            9165       10470    10490413+  8e  Linux LVM         10G
# partx -a /dev/sda
# partx -a /dev/sda  
# bash mogilefs.sh

#!/bin/bash
#
pvcreate /dev/sda5
vgcreate myvg5 /dev/sda5
lvcreate -L 10G -n maria myvg5
mke2fs -t ext4 -L MARIA /dev/myvg5/maria
mkdir -p /mydata
mkdir -p /mogstore
pvcreate /dev/sda6
vgcreate myvg6 /dev/sda6
lvcreate -L 10G -n mogstore myvg6
mke2fs -t ext4 -L MOGSTORE /dev/myvg6/mogstore
echo "LABEL=MARIA             /mydata                 ext4    defaults        0 0" >> /etc/fstab
echo "LABEL=MOGSTORE          /mogstore                  ext4    defaults        0 0" >> /etc/fstab
mount -a
mount  
不安装mariadb的节点上可以将少创建一个分区
  
(二)在node1上安装mariadb

  # lftp 172.16.0.1/pub/Sources/sources/mariadb
lftp 172.16.0.1:/pub/Sources/sources/mariadb> get mariadb-5.5.43-linux-x86_64.tar.gz
  # bash -x mariainstall.sh
脚本内容如下:

#!/bin/bash
#
groupadd -r -g 306 mysql
useradd -r -g mysql -u 306 mysql
tar xf mariadb-5.5.43-linux-x86_64.tar.gz -C /usr/local
cd /usr/local
ln -s /usr/local/mariadb-5.5.43-linux-x86_64 mysql
chown -R root:mysql /usr/local/mysql/*
cd mysql
mkdir /mydata/data
./scripts/mysql_install_db --datadir=/mydata/data  --skip-name-resolve --basedir=/usr/local/mysql --user=mysql
chown -R mysql:mysql /mydata
cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
mkdir /etc/mysql
cp ./support-files/my-large.cnf /etc/mysql/my.cnf
echo "export PATH=/usr/local/mysql/bin:$PATH" > /etc/profile.d/mysqld.sh
. /etc/profile.d/mysqld.sh
ln -s /usr/local/mysql/include/ /usr/include/mysql
vim /etc/mysql/my.cnf  
  添加或修改下面4项:

thread_concurrency = 2
  datadir = /mydata/data
  skip_name_resolve = on
  innodb_file_per_table = on  
# service mysqld start
# /usr/local/mysql/bin/mysql_secure_installation
根据提示操作,第一次是需要输入登录密码,但第一次是没有设置得,直接回车就OK了。

  

  三、安装tracker和mogstored
  安装mogilefs有两种方式:
一是自己寻找到mogilefs相应的rpm包安装;
二是连到perl.can网,直接通过“cpan> install module::name”形式自动编译安装。
此次采用rpm包安装。
  在教室环境中,下载位置为:
# lftp 172.16.0.1:/pub/Sources/6.x86_64/mogilefs>
MogileFS-Server-2.46-2.el6.noarch.rpm    通行组件
MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm 提供tracker
MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm 提供mogstored
MogileFS-Utils-2.19-1.el6.noarch.rpm
perl-MogileFS-Client-1.14-1.el6.noarch.rpm  客户端调用API做开发时才需要的组件,被其他组件依赖
perl-Net-Netmask-1.9015-8.el6.noarch.rpm  实现机架感知能力组件
perl-Perlbal-1.78-1.el6.noarch.rpm  被依赖组件
  下载后下面的程序包并全部安装:

[root@node1 mogilefs]# lsMogileFS-Server-2.46-2.el6.noarch.rpm  perl-MogileFS-Client-1.14-1.el6.noarch.rpm  MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm  perl-Net-Netmask-1.9015-8.el6.noarch.rpm  MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm  perl-Perlbal-1.78-1.el6.noarch.rpm  MogileFS-Utils-2.19-1.el6.noarch.rpm
[root@node1 mogilefs]# yum localinstall -y --nogpgcheck *.rpm
……
Installed:  MogileFS-Server.noarch 0:2.46-2.el6   MogileFS-Server-mogilefsd.noarch 0:2.46-2.el6      MogileFS-Server-mogstored.noarch 0:2.46-2.el6   MogileFS-Utils.noarch 0:2.19-1.el6      perl-MogileFS-Client.noarch 0:1.14-1.el6     perl-Net-Netmask.noarch 0:1.9015-8.el6    perl-Perlbal.noarch 0:1.78-1.el6                        
Dependency Installed:  perl-BSD-Resource.x86_64 0:1.29.03-3.el6      perl-DBD-MySQL.x86_64 0:4.013-3.el6      perl-Danga-Socket.noarch 0:1.61-5.el6     perl-IO-stringy.noarch 0:2.110-10.1.el6      perl-Sys-Syscall.noarch 0:0.23-1.el6                    
Complete!  在mogstored的节点上都需要安装上perl-IO-AIO程序包,这是被隐式依赖的包:
[root@node1 mogilefs]# yum install -y perl-IO-AIO

……
Installed:  perl-IO-AIO.x86_64 0:3.71-2.el6                                                                                      
Dependency Installed:  perl-common-sense.noarch 0:3.5-1.el6                                                                                 
Complete!  在node2和node3上也做 同样安装。
生成文件说明:
[root@node1 mogilefs]# rpm -ql MogileFS-Server

(contains no files)  
[root@node1 mogilefs]# rpm -ql MogileFS-Server-mogilefsd

/etc/mogilefs/mogilefsd.conf  #tracker的配置文件
/etc/rc.d/init.d/mogilefsd #tracker服务脚本
/usr/bin/mogdbsetup # 初始化mariadb数据库的程序文件
/usr/bin/mogilefsd  #主程序文件
/usr/share/man/man1/mogilefsd.1.gz  #各种帮助文档文件
/usr/share/man/man3/MogileFS::Checksum.3pm.gz
……
/usr/share/perl5/vendor_perl/MogileFS/Checksum.pm  #各种相关的库文件
/usr/share/perl5/vendor_perl/MogileFS/Class.pm
……
/usr/share/perl5/vendor_perl/MogileFS/makedocs.pl
/var/run/mogilefsd   #运行时临时文件存放位置,如pid文件  

  [root@node1 mogilefs]# rpm -ql MogileFS-Utils

/usr/bin/mogadm # 对mogilefs做全面管理的程序,如健康检测、查看状态、主机管理、设备管理、domain管理、class管理、从节点管理、文件系统管理、数据均衡管理、设置mogilefs工作特性
/usr/bin/mogdelete #删除文件工具
/usr/bin/mogfetch #下载文件工具
/usr/bin/mogfiledebug
/usr/bin/mogfileinfo
/usr/bin/moglistfids # 列出所有fid文件工具
/usr/bin/moglistkeys
/usr/bin/mogrename #重命名工具
/usr/bin/mogstats #
/usr/bin/mogtool
/usr/bin/mogupload #上传文件工具
/usr/share/man/man1/mogadm.1.gz # 各种帮助文档
……
/usr/share/man/man3/MogileFS::Utils.3pm.gz
/usr/share/perl5/MogileFS/Utils.pm # 所用到的模块文件  [root@node1 mogilefs]# rpm -ql MogileFS-Server-mogstored

/etc/mogilefs/mogstored.conf #配置文件
/etc/rc.d/init.d/mogstored  # 服务脚本
/usr/bin/mogautomount # 自动挂载程序
/usr/bin/mogstored #守护进程程序
/usr/share/man/man1/mogautomount.1.gz
/usr/share/man/man1/mogstored.1.gz
/usr/share/perl5/vendor_perl/Mogstored/ChildProcess #大量模块文件
/usr/share/perl5/vendor_perl/Mogstored/ChildProcess.pm
……
/usr/share/perl5/vendor_perl/Mogstored/TaskQueue.pm  
[root@node1 mogilefs]# rpm -ql perl-MogileFS-Client

/usr/share/man #帮助文档
/usr/share/man/man3
/usr/share/man/man3/MogileFS::Client.3pm.gz
/usr/share/perl5/MogileFS/Admin.pm #提供所需的库文档
/usr/share/perl5/MogileFS/Backend.pm
/usr/share/perl5/MogileFS/Client.pm
/usr/share/perl5/MogileFS/ClientHTTPFile.pm
/usr/share/perl5/MogileFS/NewHTTPFile.pm  [root@node1 mogilefs]# rpm -ql perl-Perlbal

/usr/share/man/man3 # 提供大量帮助文档
……
/usr/share/man/man3/Perlbal::Util.3pm.gz
/usr/share/perl5/Perlbal.pm  # 提供大量模块文件
/usr/share/perl5/Perlbal/AIO.pm
……
/usr/share/perl5/Perlbal/ManageCommand.pm
/usr/share/perl5/Perlbal/Manual
/usr/share/perl5/Perlbal/Manual.pod
/usr/share/perl5/Perlbal/Manual/Configuration.pod
……
/usr/share/perl5/Perlbal/Manual/WebServer.pod
/usr/share/perl5/Perlbal/Plugin
/usr/share/perl5/Perlbal/Plugin/AccessControl.pm
……
/usr/share/perl5/Perlbal/Plugin/XFFExtras.pm
/usr/share/perl5/Perlbal/Pool.pm
/usr/share/perl5/Perlbal/ReproxyManager.pm
/usr/share/perl5/Perlbal/Service.pm
/usr/share/perl5/Perlbal/Socket.pm
/usr/share/perl5/Perlbal/SocketSSL.pm
/usr/share/perl5/Perlbal/TCPListener.pm
/usr/share/perl5/Perlbal/Test
/usr/share/perl5/Perlbal/Test.pm
/usr/share/perl5/Perlbal/Test/WebClient.pm
/usr/share/perl5/Perlbal/Test/WebServer.pm
/usr/share/perl5/Perlbal/UploadListener.pm
/usr/share/perl5/Perlbal/Util.pm  四、tracker配置

  

  tracker配置之前需要先配置好mariadb的对用户的授权,然后对数据库做初始化。
(一)数据库授权

[root@node1 ~]# mysql -uroot -h127.0.0.1 -p
Enter password:
MariaDB [(none)]> grant all on *.* to 'root'@'172.16.20.%' identified by '123' with grant option;
Query OK, 0 rows affected (0.42 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.07 sec)
MariaDB [(none)]> \q  (二)初始化数据库

  查看帮助说明
[root@node1 ~]# mogdbsetup --help

  

  根据自己需要选择参数,初始化数据库:
[root@node1 ~]# mogdbsetup --dbhost=172.16.20.50 --dbrootuser=root --dbrootpass=123 --dbname=mogdb --dbuser=moguser --dbpass=mogpass --yes
其中dbhost是远程主机的IP地址(需要远程主机设定了skip-name-resolve),dbroot和dbrootpass是远程主机的授权的允许远程登录数据库的账号和密码(上面刚授权的),dbname、dbuserdbpass是我们这次初始化需要创建的存储元数据的新数据库名称、使用用户、使用密码。
  

  查看初始化创建的数据库:
  # mysql -umoguser -h172.16.20.50 -p
  


  

  (三)修改配置文件

  

  [root@node1 ~]# cp /etc/mogilefs/mogilefsd.conf{,.bak}
[root@node1 ~]# vim /etc/mogilefs/mogilefsd.conf

# Enable daemon mode to work in background and use syslog采用守护进程模式运行于后台并使用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:数据库类型:元数据数据库名:所在主机IP
db_dsn = DBI:mysql:mogdb:host=172.16.20.50
db_user = moguser
db_pass = mogpass
# IP:PORT to listen on for mogilefs client requests
listen = 172.16.20.50:7001
# Optional, if you don't define the port above.
conf_port = 7001
# 默认启动时的查询线程数,根据需要修改
query_jobs = 10
# 默认启动时的删除线程数,根据需要修改
delete_jobs = 2
# 默认启动时的复制线程数,根据需要修改
replicate_jobs = 5
# 默认启动时的reaper线程数,这个数值是不需要修改的
# (you don't usually need to increase this)
reaper_jobs = 1
……
# Allow replication to use the secondary node get port,
# if you have apache or similar configured for GET's
#repl_use_get_port = 1  这个是有主从复制时需要设置的参数  

  启动服务:
[root@node1 ~]# service mogilefsd start
Starting mogilefsd                                         [  OK  ]
[root@node1 ~]# ss -tnl | grep 7001
LISTEN     0      128            172.16.20.50:7001                     *:*
  五、mogstored的配置
  
  (一)三个mogstored节点提供dev目录

  

  [root@node1 mogilefs]# mkdir /mogstore/dev1
[root@node2 mogilefs]# mkdir /mogstore/dev2
[root@node3 mogilefs]# mkdir /mogstore/dev3
  
  (二)三个节点上都修改mogstored的配置文件:

  

  只需要修改最后一行的文件存储位置为新建分区即可
# vim /etc/mogilefs/mogstored.conf

maxconns = 10000
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501
docroot = /mogstore  

  修改好配置文件后,查看是否能正常启动服务:
# service mogstored start

Starting mogstored                                         [  OK  ]  
# ss -tnl | grep "750"

LISTEN     0      128                       *:7500                     *:*     
LISTEN     0      128                       *:7501                     *:*  

  

  

  





运维网声明 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-670233-1-1.html 上篇帖子: mogileFS实现分布式存储和复制 下篇帖子: 分布式文件存储系统 mogilefs 的使用(1)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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