返回顶部
首页 > 资讯 > 数据库 >分布式文件系统mogilefs的简单应用
  • 159
分享到

分布式文件系统mogilefs的简单应用

2024-04-02 19:04:59 159人浏览 安东尼
摘要

简介MogileFS是一个开源的分布式文件存储系统,由LiveJournal旗下的Dangainteractive公司开发。Danga团队开发了包括Memcached、MogileFS、Perlbal等多个

简介

MogileFS是一个开源分布式文件存储系统,由LiveJournal旗下的Dangainteractive公司开发。Danga团队开发了包括Memcached、MogileFS、Perlbal等多个知名的开源项目

 

 

特性

 1、应用层:用户空间文件系统,无须特殊的核心组件

  2、无单点:(tracker, mogstore, database(Mysql))

  3、自动文件复制:复制的最小单位不是文件,而class;

  4、传输中立,无特殊协议:可以通过NFS或Http进行通信;

   5、简单的命名空间: 每个文件对应一个key:用于domain定义名称空间

 

组成部分

  

MogileFS:

     tracker:追踪元数据

     database:存储元数据

     storage:存储数据

 

 tracker:

        mogilefsd(守护进程),职责:

         replication:节点之间的文件复制

         deletion:删除文件

         queryworker:响应客户请求的文件元数据访问请求

         reaper:在存储失败后将文件复制请求重新放置于队列中

         monitor:检测主机和设备的健康状态

database:

      存储mogilefs的元数据,一般使用mysql,建议使用冗余方案保证可用性(MMM,MHA)

      mogilefs专门提供了数据结构管理工具mogdbsetup;

storage:

      mogstored(进程名),一个准备停当的mogstored节点可通过mogadm命令添加至现在的集群中,

      存储节点需定义“设备dev”用作存储空间;每个设备在当前集群中需通过一个唯一的DevID标识。

client:

            客户端用于与mogilefs简历通信,完成数据存取;

 

 

安装包:

MogileFS-Server-2.46-2.el6.noarch.rpm

MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm

MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm

MogileFS-Utils-2.19-1.el6.noarch.rpm

perl-MogileFS-Client-1.14-1.el6.noarch.rpm

perl-Net-Netmask-1.9015-8.el6.noarch.rpm

perl-Perlbal-1.78-1.el6.noarch.rpm

 

架构:

 

分布式文件系统mogilefs的简单应用

 

1.安装mogilefs和数据库

# ls

MogileFS-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

# yum localinstall *.rpm  -y

# yum install mysql-server mysql -y

2.数据库授权远程访问,并继承授权权限

mysql> grant all on *.* to root@'192.168.95.%' identified by 'liaobin' with grant option;

mysql> flush privileges;

3.创建mofilefs的数据库用户以及授权

mysql> grant all on *.* to mguser@'192.168.95.%' identified by 'liaobin';

mysql> flush privileges;

4.用mogilefs自带工具mogdbsetup初始化mogilefs数据库

# mogdbsetup  --dbhost=192.168.95.30 --dbname=mogilefs --dbrootuser=root --dbrootpass=liaobin --dbuser=mguser --dbpass=liaobin --yes

查看初始化的数据库

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| infORMation_schema |

| mogilefs           |

| mysql              |

| test               |

+--------------------+

4 rows in set (0.01 sec)

 

5.修改tracker(mogilefsd)配置文件

# 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=192.168.95.30   #配置database的连接信息

db_user = mguser                                                            #配置mogilefs的数据库用户密码

db_pass = liaobin

# 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

6.启动mogilefsd服务

[root@localhost mgfs]# /etc/init.d/mogstored start

7.为每个节点新增加分区,作为存储

# fdisk /dev/sda

.........

# partx -a /dev/sda

# mkfs.ext4 /dev/sda5

# mkdir /mgfs

# vim /etc/fstab

#新增如下条目

/dev/sda5                /mgfs                        ext4        defaults        0 0

# mount -a

# mount

/dev/sda5 on /mgfs type ext4 (rw)

8.三台服务器分别创建存储目录,并修改权限

95.30:

# mkdir /mgfs/dev1

# chown -R /mgfs/dev1

95.34:

# mkdir /mgfs/dev2

# chown -R /mgfs/dev2

95.35:

# mkdir /mgfs/dev3

# chown -R /mgfs/dev3

9.修改store(mogstored)的配置文件

#vim /etc/mogilefs/mogstored.conf

maxconns = 10000

httplisten = 0.0.0.0:7500

mgmtlisten = 0.0.0.0:7501

#注意此处,写到dev(1,2,3)的上级目录就好

docroot = /mgfs

10.启动mogstored服务

# /etc/init.d/mogstored start

 

11.用mogadm管理

创建存储主机:

# mogadm --trackers=192.168.95.30:7001 host add store1 --ip=192.168.95.30

# mogadm --trackers=192.168.95.30:7001 host add store2 --ip=192.168.95.34

# mogadm --trackers=192.168.95.30:7001 host add store3 --ip=192.168.95.35

查看创建的主机:

# mogadm --trackers=192.168.95.30:7001 host list

 

创建存储设备:

# mogadm --trackers=192.168.95.30:7001 device add store1 1 --status=alive

# mogadm --trackers=192.168.95.30:7001 device add store2 2 --status=alive

# mogadm --trackers=192.168.95.30:7001 device add store3 3 --status=alive

查看创建的存储设备:

# mogadm --trackers=192.168.95.30:7001 device list

 

创建域domain:

mogadm --trackers=192.168.95.30:7001 domain add img

mogadm --trackers=192.168.95.30:7001 domain add conf

查看创建的域:

mogadm --trackers=192.168.95.30:7001 domain list

 

上传文件测试

mogupload --trackers=192.168.95.30:7001 --domain=img --key="1.jpg" --file="/root/1.jpg"

查看上传的文件:

# mogfileinfo --trackers=192.168.95.30:7001 --domain=img --key="1.jpg"

- file: 1.jpg

     class:              default

  devcount:                    2

    domain:                  img

       fid:                    9

       key:                1.jpg

    length:                34892

 - http://192.168.95.35:7500/dev3/0/000/000/0000000009.fid

 - http://192.168.95.30:7500/dev1/0/000/000/0000000009.fid

用fid的url访问测试:

分布式文件系统mogilefs的简单应用

正常访问

 

Nginx反向代理mogilefs

 

1.安装nginx和mogilefs模块

安装好开发环境:

# yum groupinstall "Development tools" "Server Platform Development" -y

#  yum install pcre-devel -y

下载解压nginx包和mogilefs包:

分布式文件系统mogilefs的简单应用

开始编译安装:

#cd nginx-1.6.2

# ./configure \

  --prefix=/usr/local/nginx \

  --sbin-path=/usr/local/nginx/sbin/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 --add-module=../nginx_mogilefs_module-1.0.4

# make && make install

给nginx创建服务脚本

# vim /etc/init.d/nginx

#!/bin/sh

#

# nginx - this script starts and stops the nginx daemon

#

# chkconfig:   - 85 15

# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \

#               proxy and IMAP/POP3 proxy server

# processname: nginx

# config:      /etc/nginx/nginx.conf

# config:      /etc/sysconfig/nginx

# pidfile:     /var/run/nginx.pid

 

# Source function library.

. /etc/rc.d/init.d/functions

 

# Source networking configuration.

. /etc/sysconfig/network

 

# Check that networking is up.

[ "$NETWORKING" = "no" ] && exit 0

 

nginx="/usr/local/nginx/sbin/nginx"

prog=$(basename $nginx)

 

NGINX_CONF_FILE="/etc/nginx/nginx.conf"

 

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

 

lockfile=/var/lock/subsys/nginx

 

make_dirs() {

   # make required directories

   user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`

   options=`$nginx -V 2>&1 | grep 'configure arguments:'`

   for opt in $options; do

       if [ `echo $opt | grep '.*-temp-path'` ]; then

           value=`echo $opt | cut -d "=" -f 2`

           if [ ! -d "$value" ]; then

               # echo "creating" $value

               mkdir -p $value && chown -R $user $value

           fi

       fi

   done

}

 

start() {

    [ -x $nginx ] || exit 5

    [ -f $NGINX_CONF_FILE ] || exit 6

    make_dirs

    echo -n $"Starting $prog: "

    daemon $nginx -c $NGINX_CONF_FILE

    retval=$?

    echo

    [ $retval -eq 0 ] && touch $lockfile

    return $retval

}

 

stop() {

    echo -n $"Stopping $prog: "

    killproc $prog -QUIT

    retval=$?

    echo

    [ $retval -eq 0 ] && rm -f $lockfile

    return $retval

}

 

restart() {

    configtest || return $?

    stop

    sleep 1

    start

}

 

reload() {

    configtest || return $?

    echo -n $"Reloading $prog: "

    killproc $nginx -HUP

    RETVAL=$?

    echo

}

 

force_reload() {

    restart

}

 

configtest() {

  $nginx -t -c $NGINX_CONF_FILE

}

 

rh_status() {

    status $prog

}

 

rh_status_q() {

    rh_status >/dev/null 2>&1

}

 

case "$1" in

    start)

        rh_status_q && exit 0

        $1

        ;;

    stop)

        rh_status_q || exit 0

        $1

        ;;

    restart|configtest)

        $1

        ;;

    reload)

        rh_status_q || exit 7

        $1

        ;;

    force-reload)

        force_reload

        ;;

    status)

        rh_status

        ;;

    condrestart|try-restart)

        rh_status_q || exit 0

            ;;

    *)

        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"

        exit 2

esac

给予执行权限:

# chmod +x /etc/init.d/nginx

创建nginx用户和必须目录:

# useradd -r nginx

# mkdir /var/tmp/nginx/client -pv

修改nginx配置文件让其支持mogilefs反向代理(红色字体为添加项):

# vim /etc/nginx/nginx.conf

#user  nobody;

worker_processes  1;

 

#error_log  logs/error.log;

#error_log  logs/error.log  notice;

#error_log  logs/error.log  info;

 

#pid        logs/nginx.pid;

 

 

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"';

 

    #access_log  logs/access.log  main;

 

    sendfile        on;

    #tcp_nopush     on;

 

    #keepalive_timeout  0;

    keepalive_timeout  65;

 

    #gzip  on;

    upstream stores {

server 192.168.95.30:7001;

server 192.168.95.34:7001;

server 192.168.95.35:7001;

    }

    server {

        listen       80;

        server_name  localhost;

 

        #charset koi8-r;

 

        #access_log  logs/host.access.log  main;

 

        location / {

            root   html;

            index  index.html index.htm;

        }

location /img/ {

mogilefs_tracker stores;

mogilefs_domain img;

 

                 mogilefs_pass {

proxy_pass $mogilefs_path;

proxy_hide_header Content-Type;

proxy_buffering off;

}

}

location /upload/ {

mogilefs_tracker stores;

mogilefs_domain img;

mogilefs_methods PUT GET DELETE;

 

                 mogilefs_pass {

proxy_pass $mogilefs_path;

proxy_hide_header Content-Type;

proxy_buffering off;

}

}

 

        #error_page  404              /404.html;

 

     

}

用路径访问测试nginx代理:

分布式文件系统mogilefs的简单应用

 

再上传一个文件测试:

# mogupload --trackers=192.168.95.30:7001 --domain=img --key="2.jpg" --file="/root/2.jpg"

分布式文件系统mogilefs的简单应用

 

测试删除文件:

# curl -X DELETE http://192.168.95.34/upload/1.jpg

分布式文件系统mogilefs的简单应用

 

 

 

 

 

您可能感兴趣的文档:

--结束END--

本文标题: 分布式文件系统mogilefs的简单应用

本文链接: https://lsjlt.com/news/36187.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 分布式文件系统mogilefs的简单应用
    简介MogileFS是一个开源的分布式文件存储系统,由LiveJournal旗下的DangaInteractive公司开发。Danga团队开发了包括Memcached、MogileFS、Perlbal等多个...
    99+
    2024-04-02
  • 分布式系统介绍及MogileFS安装、基本配置
    分布式系统介绍及MogileFS安装、基本配置分布式 MogileFS大纲前言:什么是分布式分布式存在的意义分布式的难点及CAP、BASE、2PC、X/Open XA介绍分布式存储和分布式文件系统...
    99+
    2024-04-02
  • 分布式文件系统HDFS的示例分析
    小编给大家分享一下分布式文件系统HDFS的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 从RAID说起大数据技术主要要解决的问题的是大规模数据的计算处理问题,那么首先要解决的就是大规模数据的存储问题。大规模数据存...
    99+
    2023-06-19
  • 分布式系统及NoSQLl简介
    分布式系统及NoSQL简介==============================================================================数据存储 1....
    99+
    2024-04-02
  • golang函数的分布式系统应用
    使用 go 函数构建分布式系统:分布式函数执行:利用 goroutine 和通道实现函数在多个分布式节点上的并行执行。分布式数据处理:将大数据集分解并分配给多个 goroutine 并行...
    99+
    2024-04-28
    golang 分布式系统 并发访问 同步机制
  • Linux文件分布式系统是什么
    这篇文章主要介绍“Linux文件分布式系统是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Linux文件分布式系统是什么”文章能帮助大家解决问题。Lustre(www.lustre.org)  ...
    99+
    2023-06-28
  • linux有什么分布式文件系统
    今天小编给大家分享一下linux有什么分布式文件系统的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解...
    99+
    2023-03-22
    linux
  • Hadoop分布式文件系统HDFS架构分析
    本文小编为大家详细介绍“Hadoop分布式文件系统HDFS架构分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Hadoop分布式文件系统HDFS架构分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Hadoo...
    99+
    2023-06-27
  • HDFS分布式文件系统如何设计
    这篇文章将为大家详细讲解有关HDFS分布式文件系统如何设计,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。正文HDFS的设计以及概念  HDFS集群是典型的 master/slave 架构,master 节...
    99+
    2023-06-02
  • 如何使用Python实现分布式文件系统?
    分布式文件系统是一种可以将文件储存在多个节点上的文件系统,它可以提高文件系统的可靠性和可扩展性。Python是一种非常流行的编程语言,它可以用来实现分布式文件系统。在本文中,我们将介绍如何使用Python实现分布式文件系统,并提供一些演示代...
    99+
    2023-06-02
    并发 文件 分布式
  • 分布式文件系统FastDFS的原理是什么
    今天就跟大家聊聊有关分布式文件系统FastDFS的原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。什么是FastDFS?FastDFS是一个开源的轻量级分布式文件系统。它解决...
    99+
    2023-06-16
  • PHP 多线程在分布式系统的应用?
    php多线程在分布式系统中可实现并发处理,提高吞吐量和扩展性。在php中,使用pthread类创建线程,并使用run方法执行任务。通过实战案例演示,使用php多线程为传入请求创建线程,并...
    99+
    2024-05-12
    php 分布式系统
  • golang函数在分布式系统中的应用
    golang 函数式编程在分布式系统中,函数式编程被广泛应用于可扩展、可维护的高性能系统开发。golang 支持匿名函数、闭包和高阶函数等特性,使函数式编程成为可能。例如,在分布式任务处...
    99+
    2024-04-25
    golang 分布式系统
  • Redis在分布式系统中的作用及应用
    Redis在分布式系统中的作用及应用引言:随着互联网的发展,分布式系统已经成为构建现代应用的基石。分布式系统可以提供高可用性、容错性和扩展性,但也面临着一些挑战,比如数据一致性、性能瓶颈和负载均衡。为了解决这些问题,Redis作为一种内存键...
    99+
    2023-11-07
    应用 redis 分布式系统
  • Java中如何处理分布式文件系统?
    随着互联网的发展,越来越多的应用需要处理大量的文件数据,而传统的单机文件系统已经无法满足这种需求。因此,分布式文件系统应运而生。分布式文件系统是一种能够将数据存储在多台服务器上的文件系统,通过将数据分散到不同的服务器上,可以提高数据的可靠...
    99+
    2023-07-28
    文件 分布式 numpy
  • Go语言实战之实现一个简单分布式系统
    目录引子思路实战节点通信主节点工作节点将它们放在一起代码效果总结引子 如今很多云原生系统、分布式系统,例如 Kubernetes,都是用 Go 语言写的,这是因为 Go 语言天然支持...
    99+
    2024-04-02
  • 如何使用Go编写高效的分布式文件系统?
    分布式文件系统是当今互联网时代必备的一种技术,它能够帮助我们在多个服务器上存储和管理大量数据,提高数据的可靠性和可用性。而Go语言作为一种高效且具有并发特性的编程语言,也成为了分布式文件系统开发的首选语言。下面,我们将介绍如何使用Go编写高...
    99+
    2023-08-02
    编程算法 文件 分布式
  • Python使用multiprocessing实现一个最简单的分布式作业调度系统
    mutilprocess像线程一样管理进程,这个是mutilprocess的核心,他与threading很是相像,对多核CPU的利用率会比threading好的多。 介绍 Python的multiproc...
    99+
    2022-06-04
    作业 分布式 最简单
  • Python利用multiprocessing实现最简单的分布式作业调度系统实例
    介绍 Python的multiprocessing模块不但支持多进程,其中managers子模块还支持把多进程分布到多台机器上。一个服务进程可以作为调度者,将任务分布到其他多个机器的多个进程中,依靠网络通信...
    99+
    2022-06-04
    作业 分布式 最简单
  • Django如何优化分布式文件系统的性能?
    随着互联网技术的不断发展,分布式文件系统被越来越多的企业采用。然而,分布式文件系统的性能问题一直是困扰开发人员的难题。本文将介绍如何通过Django优化分布式文件系统的性能。 一、使用缓存 缓存是提高分布式文件系统性能的有效手段之一。Dj...
    99+
    2023-09-29
    分布式 文件 django
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作