构建Mogilefs分布式文件系统:
 当下互联网飞速发展,海量并发所产生的数据量以几何方式增长,随着信息链接方式日益多样化,数据存储的结构也发生了变化,在这样的压力下我们不得不重新审视大量数据的存储所带来了巨大的挑战:
   1、数据采集 :对于社交网站一般都是由用户上传的;
   2、数据存储 :现在是数据量大爆炸时代,每天都会产生大量的数据,所以数据存储就成了一个大问题;
   3、数据搜索 :如果说存储是考验数据的存储能力的话,那搜索就是考量计算机能力了,从大量的数据中搜索出来;
   4、数据共享 :数据存储下来之后还要进行数据的共享问题,大量的数据该怎么共享这些数据呢;
   5、数据传输 :而海量数据存储下来之后数据怎么用户与用户之间进行安全的传输;
   6、数据分析 :数据的分析是了解我们过去的一些行为规范;
   7、数据可视化 :而海量数据存储下来之后怎么样可以直观的展示在人们面前呢;
分布式文件系统的几个难点:
  1、缺乏全局时钟、不过同步本身就存在时间差,很难做到步调一致,
  2、面对故障的独立性,分布式是由多个节点组成的,而每个节点都是独立工作的,一个节占故障度不会影响其它节点正常工作,
  3、如何去处理单点故障, 一是:做冗余,对单点做备份;二是:降低单点故障的影响范围
  4、事务类的挑战,在分布环境中怎么处理事务呢;ACID或2PI(两段式提交)、最终一致、BASE法则、CAP理论、Paxos算法;
 
什么是两段式提交:
 通过使用某种协议进行通信来完成分布式事务,被称为两段式提交。从名字上看,您可能已经知道有两个阶段:
 
  第一个阶段,即预提交:
   事务协调器给每个事务管理器发送准备操作的信号。
   事务管理器将操作(通常是数据更新)步骤(或细节)写入事务日志。如果失败,事务管理器使用这些步骤重复操作。
   事务管理器本地创建事务并通知资源管理器对资源(例如,数据库或消息服务器)执行操作。
   资源管理器执行操作并向事务管理器报告成功(准备提交信号)或失败(准备回滚)。
   资源管理器等待事务管理器进一步的指令。
   事务管理器向事务协调器报告成功或失败。
  
 第二阶段,即提交阶段:在第二阶段中,第一阶段的结果将传送给所有事务管理器。
  
   如果任何事务管理器报告失败,所有的事务参与者都必须回滚。
   事务协调器让所有事务管理器提交(或回滚)。
   所有事务管理器将提交或回滚信息传递给其资源管理器。
   资源管理器将成功或失败提示返回给事务管理器。
   事务管理器向事务协调器报告成功或失败。
CAP理论 :一致性,可用性,分区容错性;指一个分布式系统不可以满足一致性,可用性和分区容错性这三个需求,最多只能同时满足其中的两个;
    C(Consistency):一致性 ,任何一个读操作总是能够读取之前完成的写操作;就是一个数据写入一立马被读到;
    A(Availability):可用性 ,每一次操作总是能够 在确定的时间返回;无论成功或失败都能收到一个返回值的;
    P(Tolerance of network Partition):分区容错性 ,在出现网络分区的情况下,仍然能够满足一致性和可用性;
   
BASE法则 模型反ACID模型,完全不同ACID模型,牺牲高一致性,获得可用性或可靠性:
    BA :BasicallyAvailable,基本可以用,支持分区失败(sharding碎片划分数据库);
    S :Soft state,软状态,接受一段时间内的状态不同步,异步;
    E :Eventuallyconsistent:最终一致性,弱一致性的表现;
   
BASE思想主要强调基本的可用性,如果你需要High 可用性,也就是纯粹的高性能,那么就要以一致性或容错性为牺牲,BASE思想的方案在性能上还是有潜力可挖的。
Paxos算法 :
  比2PC提交更轻量级的分布式事务的协调方式;大概是指不出现故拜占庭将军的前提下,要取得数据的一致性,在通信信道不安全的时候,我们数据传输可能会被人劫持,这样就不能保证数据的可信了,所以必须保证通信信道安全下Paxos算法才可行;
各种分布式存储文件系统介绍
  #Google Filesystem :GFS+MapReduce擅长处理单个大文件
  #Hadoop Distibuted Filesystem :GFS山寨版+MapReduce 擅长处理单个大文件
  #GlusterFS :擅长处理单个大文件
  #Taobao Filesystem :擅长处理海量小文件
  #MogileFS:擅长处理海量小文件
  #Ceph    :PB级别的分布式文件系统
  #MooseFS :通用简单
  #Lustre  :一种平行分布式文件系统
一,介绍
MofileFS是一个开源的分布式文件系统,用于组件分布式文件集群。其主要特性包括:应用层组件、无单点故障、自动文件复制(复制单位不是文件而是class类)、传输中使用http协议,基于域的简单命名方式、具有比RAID更好的可靠性
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。
  环境:
  trackers节点:192.168.125.200
  storage节点1:192.168.125.200 dev1
  DB节点:192.168.125.200
  storage节点2:192.168.125.201 dev3
  storage节点1:192.168.125.202 dev2
 
 
二,安装
yum -y install ntpdate && ntpdate ntp1.aliyun.com   #时间必须要同步,不然使用cpanm安装Mogilefs会fail
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo    #安装epel源
setenforce 0 && service iptables stop   #因这是测试环境,需要关闭防火墙和selinux
yum -y install perl-Net-Netmask perl-IO-String perl-Sys-Syslog perl-IO-AIO   #安装mogilefs关联安装包
yum -y install make gcc unzip perl-DBD-MySQL perl perl-CPAN perl-YAML perl-Time-HiRes  
wget http://xrl.us/cpanm -O /usr/bin/cpanm && chmod +x /usr/bin/cpanm    #下载cpanm
cpanm MogileFS::Server    #安装mogilefs server
cpanm MogileFS::Utils  #安装管理工具
cpanm MogileFS::Client 
cpanm IO::AIO
三,安装mysql,负责存储trackers元数据。
 授权root用户:
  MariaDB [(none)]> grant all on *.* to 'root'@'192.168.125.%' identified by '123123';
 创建mogiles数据库:
  MariaDB [(none)]> create database mogilefs;
 授权访问mogiles数据用户:
  MariaDB [(none)]> grant all on mogilefs.* to 'moguser'@'192.168.125.%' indentified by '123123';
 刷新数据库系统权限相关表:
  MariaDB [(none)]> flush privileges;
四,添加启动脚本并添加用户
 mogilefsd不会以root运行,需要创建non-root用户:
  useradd mogilefs
 添加mogilefsd启动脚本,赋予755权限:
  #!/bin/sh
  #
  # mogilefsd    Startup script for the MogileFS tracker
  #
  # chkconfig: - 85 15
  # description: MogileFS tracker
  # processname: mogilefsd
  # config: /etc/mogilefs/mogilefs.conf
  # pidfile: /var/run/mogilefsd.pid
  
  # Source function library.
  . /etc/init.d/functions
  
  # Check that networking is up.
  . /etc/sysconfig/network
  
  # Check that networking is up.
  [ "$NETWORKING" = "no" ] && exit 0
  
  mogilefsd="/usr/local/bin/mogilefsd"
  
  MOGILEFS_CONF_FILE="/etc/mogilefs/mogilefs.conf"
  SUDO_USER=mogile
  
  lockfile=/var/lock/subsys/mogilefsd
  
  start() {
     echo -n $"Starting mogilefsd: "
  #         sudo -u $SUDO_USER $mogilefsd -c $MOGILEFS_CONF_FILE --daemon --no_schema_check
     daemon --user $SUDO_USER $mogilefsd -c $MOGILEFS_CONF_FILE --daemon
     retval=$?
     echo
     [ $retval = 0 ] && touch ${lockfile}
     return $retval
  }
  stop() {
     echo -n $"Stopping $prog: "
     killproc mogilefsd
     retval=$?
     echo
     [ $retval = 0 ] && rm -f ${lockfile}
     return $retval
  }
  reload() {
    echo -n $"Reloading mogilefsd: "
    killproc mogilefsd -HUP
    retval=$?
    echo
  }
  
  # See how we were called.
  case "$1" in
     start)
     start
     ;;
     stop)
     stop
     ;;
     status)
     status mogilefsd
     retval=$?
     ;;
     restart)
     stop
     start
     ;;
     reload)
     reload
     ;;
     *)
     echo $"Usage: mogilefsd {start|stop|restart|reload|status}"
     exit 1
  esac
  
  exit $retval
五,配置trackers节点:
 1,添加running目录:
  [root@localhost ~]# mkdir -pv /var/run/mogilefsd
  [root@localhost ~]# chown -R mogilefs.mogilefs /var/run/mogilefsd
 2,使用mogdbsetup初始化数据库:(此处会删除所有数据库,此处操作需谨慎)
     [root@localhost ~]# mogdbsetup --dbhost=192.168.125.200 --dbrootpass='123123' --dbuser='moguser' --dbpass='123123'
 3,配置mogilefs.conf文件:
  [root@localhost ~]# cat /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=192.168.125.200
  db_user = moguser
  db_pass = 123123
  # IP:PORT to listen on for mogilefs client requests
  listen = 0.0.0.0:7001
  # Optional, if you don't define the port above.
  conf_port = 7001
  # Number of query workers to start by default.
  query_jobs = 10
  # Number of delete workers to start by default.
  delete_jobs = 1
  # Number of replicate workers to start by default.
  replicate_jobs = 5
  # Number of reaper workers to start by default.
  # (you don't usually need to increase this)
  reaper_jobs = 1
  # Number of fsck workers to start by default.
  # (these can cause a lot of load when fsck'ing)
  #fsck_jobs = 1
  # Minimum amount of space to reserve in megabytes
  # default: 100
  # Consider setting this to be larger than the largest file you
  # would normally be uploading.
  #min_free_space = 200
  # Number of seconds to wait for a storage node to respond.
  # default: 2
  # Keep this low, so busy storage nodes are quickly ignored.
  #node_timeout = 2
  # Number of seconds to wait to connect to a storage node.
  # default: 2
  # Keep this low so overloaded nodes get skipped.
  #conn_timeout = 2
  # 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@localhost ~]# service mogilefsd start
   Starting mogilefsd                                         [  OK  ]
六,配置mogstore node节点:
 1,在每个mogstored节点创建dev设备,此处设备号需要唯一:
  [root@localhost ~]#mkdir /var/mogdata/dev1
  [root@localhost ~]#chmod -R mogilef.mogilefs /var/mogdata/dev1
 2,设置mogstore.conf:
  [root@localhost ~]# cat /etc/mogilefs/mogstored.conf
  maxconns = 10000
  httplisten = 0.0.0.0:7500
  mgmtlisten = 0.0.0.0:7501
  docroot = /data/mogdata
 3,添加启动脚本;
  #!/bin/bash
  # 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'
  pidfile=/var/run/mogstored/mogstored.pid
  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} && echo $(pidof mogstored) > ${pidfile} || 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} ${pidfile} || 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
 4,启动:
  [root@localhost ~]# service mogstored start
  Starting mogstored                                         [  OK  ]

构建Mogilefs分布式文件系统(配置篇)的更多相关文章

  1. 构建MFS分布式文件系统

    ++++++++++++++构建MFS分布式文件系统++++++++++++++PB级别:企业存储空间达到PB级别,即100万GB空间.(1PB=1000TB,1TB=1000GB,1GB=1000M ...

  2. 分布式存储之MogileFS分布式文件系统简单应用

    一.分布式存储原理: 分布式存储系统,是将数据分散存储在多台独立的设备上.传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能满足大规模存储 ...

  3. CentOS7搭建FastDFS V5.11分布式文件系统-第一篇

    1.绪论 最近要用到fastDFS,所以自己研究了一下,在搭建FastDFS的过程中遇到过很多的问题,为了能帮忙到以后搭建FastDFS的同学,少走弯路,与大家分享一下.FastDFS的作者淘宝资深架 ...

  4. webpack构建vue项目(配置篇)

    最近公司要求用vue重构项目,还涉及到模块化开发,于是乎,我专门花了几天的时间研究了一下webpack这个目前来看比较热门的模块加载兼打包工具,发现上手并不是很容易,现将总结的一些有关配置的心得分享出 ...

  5. CentOS7搭建FastDFS V5.11分布式文件系统-第二篇

    1.CentOS7 FastDFS搭建 前面已下载好了要用到的工具集,下面就可以开始安装了: 如果安装过程中出现问题,可以下载我提供的,当前测试可以通过的工具包: 点这里点这里 1.1 安装libfa ...

  6. 分布式文件系统之MogileFS工作原理及实现过程

    MogileFS是一套高效的文件自动备份组件,由Six Apart开发,广泛应用在包括LiveJournal等web2.0站点上.MogileFS由3个部分组成:   第1个部分:是server端,包 ...

  7. centos 6.5环境下分布式文件系统MogileFS工作原理及分布式部署实现过程

    MogileFS是一套高效的文件自动备份组件,由Six Apart开发,广泛应用在包括LiveJournal等web2.0站点上 MogileFS由3个部分组成:    第1个部分:是server端, ...

  8. 分布式文件系统 ~MogileFS~

    一.分布式文件系统 分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连,也就是集群文件系统,可以支持 ...

  9. 【转载】Hadoop分布式文件系统HDFS的工作原理详述

    转载请注明来自36大数据(36dsj.com):36大数据 » Hadoop分布式文件系统HDFS的工作原理详述 转注:读了这篇文章以后,觉得内容比较易懂,所以分享过来支持一下. Hadoop分布式文 ...

随机推荐

  1. cf935E

    题解: 树形dp 要记录一个最小的,一个最大的 然后转移 代码: #include<bits/stdc++.h> using namespace std; ; ][],f[N*][],T[ ...

  2. Flask初级(一)创建及运行flash

    和前面的django差不多,选个类型,定义个目录. 选个模板解释器,定义一个模板文件夹名称. Create就创建成功了. 运行一下.会显示 Hello World! 最好给它换个运行环境,建个虚拟环境 ...

  3. Crystal Report Error: Either the Crystal Reports registy key permission are insufficient or the Crystal Reports runtime is not installed correctly

    在64位 Windows 7中水晶报表的错误: Crystal Report Error: Either the Crystal Reports registy key permission are ...

  4. 清除 eclipse svn 账号密码

    进入目录 C:\Documents and Settings\administrator\Application Data\Subversion\auth 删除目录下所有文件,然后重新刷新svn地址就 ...

  5. [转]CentOS 6和CentOS 7防火墙的关闭

      CentOS6.5查看防火墙的状态: 1 [linuxidc@localhost ~]$service iptable status 显示结果: 1 2 3 4 5 [linuxidc@local ...

  6. Eclipse中SVN的安装步骤(两种)和使用方法

    Eclipse中SVN的安装步骤(两种)和使用方法 一.给Eclipse安装SVN,最常见的有两种方式:手动方式和使用安装向导方式.具体步骤如下: 方式一:手动安装 1.下载最新的Eclipse,我的 ...

  7. nginx keepalive 高可用

    https://blog.csdn.net/u012410733/article/details/57078407 在网络中机器不可避免的出现单点故障,当我们使用nginx进行反向代理的时候如果出现了 ...

  8. POJ 2407:Relatives(欧拉函数模板)

    Relatives AC代码 Relatives Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16186   Accept ...

  9. 辞树的QAQ水题(字符串统计,思维)

    思路:统计一串字符有多少个'A',并分别统计出每个'A'前后有多少'Q'.然后让每个'A'前后的'Q'相乘并相加就能得出结果了. 注意:数据的类型,卡了int,要用long long. 还有就是在pc ...

  10. win10系统把文件夹固定到任务栏

    为某个文件夹创建快捷方式 右键该快捷方式,选择固定到开始屏幕 点击win图标进入开始屏幕,在屏幕的右侧有刚才固定的快捷方式 右键该快捷方式,选择固定到任务栏即可.