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

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

[复制链接]

尚未签到

发表于 2019-2-1 07:58:09 | 显示全部楼层 |阅读模式
  系统环境
1.系统环境:
  # uname -smr
  Linux 2.6.32-504.23.4.el6.centos.plus.x86_64 x86_64
  # cat /etc/issue
  CentOS release 6.6 (Final)
2.MogileFS规划:
  数据库 (MySQL):192.168.10.241             (储存MogileFS元数据)
  管理节点(tarckers):192.168.10.200:7001    (负责MogileFS的调度,管理)
  存储节点(storage1):192.168.10.220:7500    (存储文件)
  存储节点(storage2):192.168.10.231:7500    (存储文件)
  反向代理服务器(Nginx):192.168.10.231:8080   (为MogileFS的Tracker提供反向代理服务)
  

  1.特性
1).工作于应用层:无需特殊的核心组件;
2).单点:三大组件(tracker,mogstore,database)皆可实现高可用;
3).自动文件复制:复制的最小单位不是文件,而是class;基于不同的class,文件可以被自动的复制到多个有足够存储空间的存储节点上;
4).传输中立,无特殊协议:可以通过NFS或HTTP协议进行通信;
5).简单的命名空间:文件通过一个给定的key来确定,是一个全局的命名空间;没有目录,基于域实现文件隔离;
6).不共享数据:无需通过昂贵的SAN来共享磁盘,每个存储节点只需维护自己所属的存储设备(device)  2.MogileFS架构(如果数据量较大可以对MySQL做主从,并使用amoeba实现读写分离)


Tracker:MogileFS的核心,是一个调度器;服务进程为mogilefsd;可以做负载均衡调度;

  • 主要职责有:
  • 数据删除;
  • 数据复制;
  • 监控:故障后生成新的数据副本;
  • 查询;
  

Database:Tracker访问Database,返回用户可用的Storage Node及文件的存放位置;
mogstored:数据存储的位置,通常是一个HTTP(WebDAV)服务器,用于数据的创建、删除、获取等;不可做负载均衡调度;
  

3. 组成
MogileFS由3部分组成:
    server:主要包括mogilefsd和mogstored两个应用程序。

  • mogilefsd实现的是tracker,它通过数据库来保存元数据信息,包括站点domain、class、host等;
  • mogstored是存储节点(store node),它其实是个WebDAV服务,默认监听在7500端口,接受客户端的文件存储请求。
    Utils(工具集):主要是MogileFS的一些管理工具,例如mogadm等;

  • 在MogileFS安装完后,要运行mogadm工具将所有的store node注册到mogilefsd的数据库里,mogilefsd会对这些节点进行管理和监控;
    客户端API:MogileFS的客户端API很多,例如Perl、PHP、Java、Python等,用这个模块可以编写客户端程序,实现文件的备份管理功能等;
  4.  安装部署MogileFS(在192.168.10.220和192.168.100.231执行相同操作
1.  安装MogileFS分布式文件系统
    yum install perl perl-YAML
cpan -I Danga::Socket
cpan -I IO::AIO
cpan -I  Net::Netmask
cpan -I Perlbal
cpan -I DBD::mysql
cpan -I IO::WrapTie
tar xf MogileFS-Client-1.17.tar.gz
cd MogileFS-Client-1.17
perl Makefile.PL
make && make install
tar xf MogileFS-Server-2.72.tar.gz
perl Makefile.PL
make
make install
cpan -I  MogileFS::Utils
2.  MogileFS不能以root用户启动,必须为Mogilefs创建用户
useradd mogilefs  
3. 增大打开文件数,并且重启服务器(默认1024)
vim /etc/security/limits.conf  
*       soft    nofile          65535
*       hard    nofile          65535
4. 准备存储设备
mkdir /etc/mogilefs
mkdir -p /data/mogdata/dev1
将添加一块磁盘挂载至/data/mogdata/dev1
chown -R mogilefs /data/mogdata/dev1
5. 为MogileFS提供配置文件
# vim /etc/mogilefs/mogilefsd.conf #MogileFS(调度节点或管理节点)的配置文件
daemonize = 1
db_dsn = DBI:mysql:mogilefs:host=192.168.10.241;port=3306;mysql_connect_timeout=5
db_user = mogilefs
db_pass = mogilefs
trackers = 192.168.10.241
conf_port = 7001
listener_jobs = 5
node_timeout = 5
rebalance_ignore_missing = 1
query_jobs = 10
delete_jobs = 1
replicate_jobs = 5
reaper_jobs = 1
# vim /etc/mogilefs/mogilefs.conf #该文件在MogileFS的家目录下
trackers = 192.168.10.220:7001
# vim /etc/mogilefs/mogstored.conf #MogileFS的Storage(存储节点)的配置文件
maxconns = 10000
httplisten=0.0.0.0:7500
mgmtlisten=0.0.0.0:7501
docroot=/data/mogdata
chown -R mogilefs /etc/mogilefs/
6. 部署数据库,参照以前文章,配置数据库,保存MogileFS的元数据
创建数据库
mysql> CREATE DATABASE mogilefs;
mysql> GRANT ALL ON mogilefs.* TO 'mogilefs'@'%' IDENTIFIED BY 'mogilefs';
mysql> FLUSH PRIVILEGES;
mysql> quit
初始化Mogilefs存储元数据的数据库(执行一次即可)
$ mogdbsetup --dbhost=192.168.10.241 --dbname=mogilefs --dbuser=mogilefs --dbpassword=mogilefs --yes
启动Trackers
$ mogilefsd
启动Storage
$ mogstored -d  

  5.  向MogileFS的Trackers节点添加host(主机),device(设备),domain(域),class(文件的最小复制单位)
添加节点
$ mogadm --trackers=192.168.10.220:7001 host add 192.168.10.220 --ip=192.168.10.220 --status=alive
$ mogadm --trackers=192.168.10.220:7001 host add 192.168.10.231 --ip=192.168.10.231 --status=alive
$ mogadm host list # 查看已添加节点
添加设备
$ mogadm device add 192.168.10.220 1
$ mogadm device add 192.168.10.231 2
$ mogadm device list # 查看已添加设备
在192.168.10.231 创建设备
mkdir -p /data/mogdata/dev2
chown -R mogilefs /data/mogdata/dev2
$ mogadm device list
192.168.10.220 [1]: alive
                    used(G)    free(G)   total(G)  weight(%)
    dev1:   alive      0.021      9.200      9.222        100
192.168.10.231 [2]: alive
                    used(G)    free(G)   total(G)  weight(%)
    dev2:   alive     16.371      9.725     26.096        100
   添加domain(域):
   $  mogadm domain add images
   $ mogadm domain list
domain               class                mindevcount   replpolicy   hashtype
-------------------- -------------------- ------------- ------------ -------
images               default                   2        MultipleHosts() NONE
   添加class(文件类别)
   $ mogadm class add images upload1 --mindevcount=2 # 在域images中添加类别upload和upload2,最小文件复制份数为2
   $ mogadm class add images upload2 --mindevcount=2
   测试文件
   $ mogtool  --trackers=192.168.10.220:7001 --domain=images inject /home/mogilefs/1.jpeg "1.jpeg"
   $ mogtool  --trackers=192.168.10.220:7001 --domain=images  inject  /home/mogilefs/2.jpg "/2.jpg"
   $ moglistkeys   --domain=images                              
/2.jpg
1.jpeg
   查看文件信息
    $ mogfileinfo --domain=images --key='fish.jpg'
    - file: fish.jpg
     class:              default
     devcount:                    2
     domain:               images
     fid:                   15
     key:             fish.jpg
     length:                50040
     - http://192.168.10.220:7500/dev1/0/000/000/0000000015.fid
     - http://192.168.10.231:7500/dev2/0/000/000/0000000015.fid  6.  通过Python脚本实现MogileFS文件的迁移,也可以结合Rsync实现备份
#!/usr/bin/python
# Author:zhooukanggen
# Dump File  of  MogileFS
import subprocess
import time
def MogileFS_Dump():
    moglistkeys = '/usr/local/bin/moglistkeys --trackers=127.0.0.1:7001 --domain=common_raw'
    Rest = subprocess.Popen([moglistkeys],stdout=subprocess.PIPE,shell=True).communicate()[0].split('\n')
    for i in Rest:
        status = subprocess.call(['/usr/local/bin/mogfetch','--trackers=127.0.0.1:7001','--domain=common_raw','--key=' + i,'--file=./' + i])
    time.sleep(1)
    if status == 0:
        print "Success"
    else:
        print "Fail"
MogileFS_Dump()#导出文件
def MogileFS_Upload():
    Upload = subprocess.Popen(['ls -1 /home/web/mogilefs'],stdout=subprocess.PIPE,shell=True).communicate()[0].split('\n')[:-1]
    for i in Upload:
        status = subprocess.call(['/usr/local/bin/mogupload','--trackers=192.168.10.220:7001','--domain=images','--key=' + i,'--file=/home/web/mogilefs/' + i])
    time.sleep(5)
    if status == 0:
        print "Success"
    else:
        print "Fail"

MogileFS_Upload() #导入文件  

  7.  使用nginx作为MogileFS的反向代理
1. 安装nginx
# wget
# wget
  # tar xf nginx-1.8.0.tar.gz
  # tar xf nginx_mogilefs_module-1.0.4.tar.gz
  # cd nginx-1.8.0 ./configure   \
    --prefix=/usr/local/nginx \
    --conf-path=/etc/nginx/nginx.conf \
    --error-log-path=/var/log/nginx/error.log \  
    --http-log-path=/var/log/nginx/access.log \  
    --pid-path=/var/run/nginx/nginx.pid  \  
    --lock-path=/var/lock/nginx.lock \  
    --user=nginx \  
    --group=nginx \  
    --with-http_ssl_module \  
    --with-http_flv_module \  
    --with-http_stub_status_module \  
    --with-http_gzip_static_module \  
    --http-client-body-temp-path=/var/tmp/nginx/client/ \  
    --http-proxy-temp-path=/var/tmp/nginx/proxy/ \  
    --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \  
    --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \  
    --http-scgi-temp-path=/var/tmp/nginx/scgi \  
    --with-pcre --with-debug \  
    --add-module=../nginx_mogilefs_module-1.0.4
    # make && make install
2. 配置nginx作为MogileFS的反向代理

    worker_processes  1;
    events {
        worker_connections  1024;
    }

    http {
        include       mime.types;
        default_type  application/octet-stream;
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';

        sendfile        on;
        tcp_nopush     on;
        keepalive_timeout  65;
   
        fastcgi_cache_path /var/tmp/nginx/fcgi levels=1:2 keys_zone=fcgicache:10m inactive=5m;
        server {
            listen       8080;
            server_name  localhost;
            location / {
                root   html;
                index  index.html index.htm;
            }
            error_page  404              /404.html;

            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
            location /images/ {
                mogilefs_tracker 192.168.10.220:7001;
                mogilefs_domain images;
        mogilefs_noverify on;
                mogilefs_pass  {
                    proxy_pass $mogilefs_path;
                    proxy_hide_header Content-Type;
                    proxy_buffering off;
                }
            }
        }

    }
  3. 启动nginx # /usr/local/nginx/sbin/nginx -c /etc/nginx/nginx.conf  

  8. 验证:
检查MogileFS
$ mogadm check
Checking trackers...  
  192.168.10.220:7001 ... OK
Checking hosts...  
  [ 1] 192.168.10.220 ... OK  
  [ 2] 192.168.10.231 ... OK
Checking devices...  
    host device    size(G)    used(G)    free(G)   use%   ob state   I/O%
    ---- ------------ ---------- ---------- ---------- ------ ---------- -----         
    [ 1] dev1     9.222      0.040       9.182    0.43%    writeable   0.0  
    [ 2] dev2     26.096     16.389      9.707    62.80%   writeable   N/A  
    ---- ------------ ---------- ---------- ---------- ------            
                total:    35.318     16.429     18.889  46.52%
获取详细状态
$ mogstats -c /etc/mogilefs/mogilefsd.conf
Fetching statistics... (all)
Statistics for devices...  
device     host                   files     status  
---------- ---------------- ------------ ----------  
dev1       192.168.10.220        107      alive  
dev2       192.168.10.231        107      alive  
---------- ---------------- ------------ ----------
Statistics for file ids...  
Max file id: 619 Statistics for files...  
domain               class           files    size (m)  fullsize (m)  
-------------------- ----------- ---------- ----------- -------------  
images               default           107          17            35  
-------------------- ----------- ---------- ----------- -------------
Statistics for replication...  
domain               class        devcount      files  
-------------------- ----------- ---------- ----------  
images               default             2        107  
-------------------- ----------- ---------- ----------
Statistics for replication queue...  
status                      count  
-------------------- ------------  
-------------------- ------------
Statistics for delete queue...  
status                      count  
-------------------- ------------  
-------------------- ------------
Statistics for general queues...  
queue           status                      count  
--------------- -------------------- ------------  
--------------- -------------------- ------------
done   
列出hots
$ mogadm host list
192.168.10.220 [1]: alive
   IP:       192.168.10.220:7500  
192.168.10.231 [2]: alive
   IP:       192.168.10.231:7500
查看domain
$ mogadm domain list domain               
class                mindevcount   replpolicy   hashtype
-------------------- -------------------- ------------- ------------ -------
images               default                   2        MultipleHosts() NONE   
images               upload1                   2        MultipleHosts() NONE   
images               upload2                   2        MultipleHosts() NONE  
查看host信息$ mogadm class list domain               
class                mindevcount   replpolicy   hashtype
-------------------- -------------------- ------------- ------------ -------
images               default                   2        MultipleHosts() NONE   
images               upload1                   2        MultipleHosts() NONE   
images               upload2                   2        MultipleHosts() NONE  
查看设备信息
$ mogadm device list
192.168.10.220 [1]: alive
                     used(G)    free(G)   total(G)  weight(%)   
    dev1:   alive      0.039      9.183      9.222        100
192.168.10.231 [2]: alive
                     used(G)    free(G)   total(G)  weight(%)   
    dev2:   alive     16.389      9.707     26.096        100  
添加文件
$ mogupload --domain=images  --key='1.jpg' --file='/home/mogilefs/2.jpg'  
查看key为1.jpg的信息
$ mogfileinfo --domain=images --key='1.jpg'
- file: 1.jpg
      class:              default  
   devcount:                    2   
     domain:               images      
        fid:                  619      
        key:                1.jpg   
     length:               279696
- http://192.168.10.220:7500/dev1/0/000/000/0000000619.fid
- http://192.168.10.231:7500/dev2/0/000/000/0000000619.fid
导出文件
$ mogfetch --domain=images --key='1.jpg' --file='./test.jpg'  
  
  通过浏览器访问1.jpg
  
  使用将host(192.168.10.231)的状态修改为down,并通过浏览器访问1.jpg
$ mogadm  host modify 192.168.10.231 --ip=192.168.10.231 --status=down
$ mogadm host list
192.168.10.220 [1]: alive
  IP:       192.168.10.220:7500
192.168.10.231 [2]: down
  IP:       192.168.10.231:7500

  注意 :

       1.Sys-Syscal 使用 Sys-Syscall-0.25.tar.gz  版本 会导致副本就只有一份(自身的bug),通过查找资料当Sys-Syscall模块需要使用 Sys-Syscall-0.23.tar.gz 副本就会恢复正常
     2.增大MogileFS用户最大打开文件数,重启服务器,如果不增大最大打开文件数,启动Mogstored就会报错  ERROR: Need to be root to increase max connections.
  

  





运维网声明 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-670231-1-1.html 上篇帖子: mogilefs服务自管理脚本 下篇帖子: mogileFS实现分布式存储和复制
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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