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

  • 时间:
  • 浏览:0
  • 来源:大发快3官方直播—彩神UU快三代理

   第一步:安装MogileFS软件,一点人前面提到,它是由三每项组成,不要 八个多组件都得安装上,然后每个节点都做MogileFS和Mogstored;

configtest() {

db_dsn = DBI:mysql:mogdb:host=172.16.27.1

db_user = moguser  # 指登录mogdb数据所使用的用户名

[root@node0 nginx-1.4.2]# vim /etc/rc.d/init.d/nginx

db_pass = linux    登录mogdb数据所使用密码

# 解决依赖关系

   第五步:以上的都配置好了就可不并能 在前端的Nginx上配置访问控制了,修改配置文件:

[root@node0 nginx-1.4.2]# service nginx start

Starting nginx:                                            [  OK  ]

# Check that networking is up.

[root@node0 nginx]# service nginx restart

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

Stopping nginx:                                            [  OK  ]

Starting nginx:                                            [  OK  ]

[root@node0 nginx]#

# Source networking configuration.

[root@node1 ~]# mogupload --trackers=172.16.27.1:7001 --domain=images --key='/images/3.png' --file='/usr/share/backgrounds/centos_wallpaper_01_1920x1100.png'

   

Paxos算法:比2PC提交更轻量级的分布式事务的协调办法;离米 是指不老出故拜占庭将军的前提下,要取得数据的一致性,在通信信道不安全的然后,一点人数据传输是因为会被人劫持,原来就只有保证数据的可信了,不要 都要保证通信信道安全下Paxos算法才可行;

[root@node0 ~]# unzip nginx-mogilefs-module-master.zip

MariaDB [(none)]> USE mysql;

MariaDB [mysql]> GRANT ALL ON mogdb.* TO 'moguser'@'172.16.%.%' IDENTIFIED BY 'linux';

Query OK, 0 rows affected (0.00 sec)MariaDB [mysql]> FLUSH PRIVILEGES;

Query OK, 0 rows affected (0.21 sec)MariaDB [mysql]> 

#

分布式文件系统的哪几次难点:

   1、不够全局时钟、不过同步你這個就存在时间差,如此 做到步调一致,

   2、面对故障的独立性,分布式是由多个节点组成的,而每个节点不是 独立工作的,八个多节占故障度不必影响其它节点正常工作,

   3、如何去解决单点故障, 一是:做冗余,对单点做备份;二是:降低单点故障的影响范围

   4、事务类的挑战,在分布环境中为何在么在解决事务呢;ACID或2PI(两段式提交)、最终一致、BASE法则、CAP理论、Paxos算法;

images               class0                    2        MultipleHosts() NONE #加在类 images               default                   2        MultipleHosts() NONE   

           mogilefs_pass {

# 修改好配置文件后保存退出重启服务

# 再加在设备

[root@node1 ~]# mogadm --trackers=172.16.27.1:7001 class add images class0 --mindevcount=2

maxconns = 1000

httplisten = 0.0.0.0:7100

mgmtlisten = 0.0.0.0:71001

docroot = /dfs/mogdata   # 把这项改八个多特定的目录,以便存储数据,最好是八个多独立分区

rh_status() {

   在这里先说八个多笔者的基本布局,node0(172.16.27.88)上安装nginx和MariaDB,node1(172.16.27.1)和node2(172.16.27.2)上分别安装了MogileFS和Mogstored,node1和node2都一同使用node0上的MariaDB数据库,nginx做为前端接收用户请求并负载均衡到后端八个多节点上;

listen = 0.0.0.0:7001  # 0.0.0.0表示监听所有地址

force_reload() {

[root@node2 ~]# chown -R mogilefs.mogilefs /dfs/mogdata/dev2 # 修改属主属组

html                 default                   2        MultipleHosts() NONE   

make_dirs() {

第三步:连接上数据库,给八个多用户授权:

[root@node1 mogilefsd]# mogadm --trackers=172.16.27.1:7001 device add 172.16.27.1 1

[root@node1 mogilefsd]# mogadm --trackers=172.16.27.1:7001 device add 172.16.27.2 2

[root@node1 mogilefsd]# mogadm --trackers=172.16.27.1:7001 device list

172.16.27.1 [1]: alive

                   used(G)    free(G)   total(G)  weight(%)

  dev1:   alive      2.799     15.887     18.686        100

172.16.27.2 [2]: alive

   MogileFS是一套高效的文件自动备份组件,由Six Apart开发,广泛应用在包括LiveJournal等web2.0站点上。

MogileFS由八个每项组成

   第八个多每项:是server端,包括mogilefsd和mogstored八个多多线程 。前者即是mogilefsd的tracker,它将一点全局信息保存在数据库里,类似于于站点domain,class,host等。后者即是存储节点(store node),它人太好是个HTTP Daemon,默认侦听在7100端口,接受客户端的文件备份请求。在安装然后,要运行mogadm工具将所有的store node注册到mogilefsd的数据库里,mogilefsd会对哪些节点进行管理和监控。

   第八个多每项:是utils(工具集),主不要 MogileFS的一点管理工具,类似于于mogadm等。

   第八个每项:是客户端API,目前只有Perl API(MogileFS.pm)、PHP,用你這個模块可不并能 编写客户端多线程 ,实现文件的备份管理功能,提供MogileFS.pm。

[root@node2 ~]# mkdir -pv /dfs/mogdata/dev2  # 创建修改的docroot目录

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/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.

[root@node2 ~]# rpm -ivh 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

[root@node0 nginx-1.4.2]# vim /etc/profile.d/nginx.sh

[root@node1 ~]# chown -R mogilefs.mogilefs /var/run/mogilefsd/

[root@node1 ~]# vim /etc/mogilefs/mogilefsd.conf

   当下互联网飞速发展,海量并发所产生的数据量以几何办法增长,随着信息链接办法日益繁复,数据存储的形态也存在了变化,在原来的压力下一点人不得不重新审视少许数据的存储所带来了巨大的挑战:

   1、数据分类整理:对于社交网站一般不是 由用户上传的;

   2、数据存储:现在是数据量大爆炸时代,每天不是产生少许的数据,不要 数据存储就成了八个多大哪些的问题;

   3、数据搜索:是因为说存储是考验数据的存储能力说说,那搜索不要 考量计算机能力了,从少许的数据中搜索出来;

   4、数据共享:数据存储下来然后都要进行数据的共享哪些的问题,少许的数据该为何在么在共享哪些数据呢;

   5、数据传输:而海量数据存储下来然后数据为何在么在用户与用户之间进行安全的传输;

   6、数据分析:数据的分析是了解一点人过去的一点行为规范;

   7、数据可视化:而海量数据存储下来然后为何在么在样可不并能 直观的展示在一点人眼前 呢;

   最后还可不并能 测试一下把八个多节点掉了,试着访问一下看另外正常工作的节点可不可不并能 正常提供服务,这里还可不并能 加在不要 功能的,后续不是更新相关的基础网站服务器架构搭建的文章,在此,是因为发现在哪些不妥或做得只有的还望一点人多提点建议。

[root@node0 ~]# groupadd -r nginx

[root@node0 ~]# useradd -r -g nginx nginx

[root@node0 ~]# tar xf nginx-1.4.2.tar.gz

第四步:再到八个多节点上,在其中八个多上设置即可:

MariaDB [mogdb]> SHOW TABLES;

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

| Tables_in_mogdb      |

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

| checksum             |

| class                |

| device               |

| domain               |

| file                 |

| file_on              |

| file_on_corrupt      |

| file_to_delete       |

| file_to_delete2      |

| file_to_delete_later |

| file_to_queue        |

| file_to_replicate    |

| fsck_log             |

| host                 |

| server_settings      |

| tempfile             |

| unreachable_fids     |

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

17 rows in set (0.03 sec)

rh_status_q() {

[root@node0 ~]# yum -y groupinstall "Development Tools" "Server Platform Development"

[root@node1 ~]# chown -R mogilefs.mogilefs /var/run/mogilefsd/

CAP理论:一致性,可用性,分区容错性;指八个多分布式系统不可不并能 满足一致性,可用性和分区容错性你這個八个多需求,最多只有一同满足其中的八个多;

   C(Consistency):一致性,任何八个多读操作经常 并能读取然后完成的写操作;不要 八个多数据写入一立马被读到;

   A(Availability):可用性,每一次操作经常 并能 在选用的时间返回;无论成功或失败都能收到八个多返回值的;

   P(Tolerance of network Partition):分区容错性,在老出网络分区的情况汇报下,仍然并能满足一致性和可用性;

images               default                   2        MultipleHosts() NONE   

stop() {

   upstream mogcluster {    # 定义多个上游服务器

       server 172.16.27.1:7001;

       server 172.16.27.2:7001;

   }

   server {    # 定义八个多虚拟主机

       listen 100;

       server_name www.tanxw.com;

       location /images/ {

Copyright (c) 100, 2014, Oracle, SkySQL Ab and others.

# 这里MariaDB安装过程不再说明了,可不并能 参数前面的博文,编译安装好然后就可不并能 可不并能 启动MariaDB和去配置Nginx的相关配置了,都要给nginx提供八个多服务脚本;

case "$1" in

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

[root@node1 ~]# yum -y install MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm MogileFS-Utils-2.19-1.el6.noarch.rpm MogileFS-Server-2.46-2.el6.noarch.rpm MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm perl-IO-AIO

   是因为任何事务管理器报告失败,所有的事务参与者都都要回滚。

   事务协调器让所有事务管理器提交(或回滚)。

   所有事务管理器将提交或回滚信息传递给其资源管理器。

   资源管理器将成功或失败提示返回给事务管理器。

   事务管理器向事务协调器报告成功或失败。

[root@node1 ~]# moglistkeys --trackers=172.16.27.1:7001 --domain=images

/images/3.png

1.png

2.png

[root@node1 ~]# mogfileinfo --trackers=172.16.27.1:7001 --domain=images --key='/images/3.png'

- file: /images/3.png

    class:              default

 devcount:                    2

   domain:               images

      fid:                    5

      key:        /images/3.png

   length:               202652

- http://172.16.27.2:7100/dev2/0/000/000/0000000005.fid

- http://172.16.27.1:7100/dev1/0/000/000/0000000005.fid

[root@node1 ~]# mogfileinfo --trackers=172.16.27.1:7001 --domain=files --key='/files/index.html'

- file: /files/index.html

    class:              default

 devcount:                    2

   domain:                files

      fid:                    9

      key:    /files/index.html

   length:                   53

- http://172.16.27.2:7100/dev2/0/000/000/0000000009.fid

- http://172.16.27.1:7100/dev1/0/000/000/0000000009.fid

[root@node1 ~]#

在node2上的安装和配置,这里的配置文件由node1上一键复制过来就可不并能 了

[root@node2 ~]# yum -y install MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm MogileFS-Utils-2.19-1.el6.noarch.rpm MogileFS-Server-2.46-2.el6.noarch.rpm MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm perl-IO-AIO

[root@node0 nginx-1.4.2]# . /etc/profile.d/nginx.sh

[root@node1 ~]# mkdir -pv /dfs/mogdata/dev1  # 创建修改的docroot目录

BASE法则模型反ACID模型,完整版不同ACID模型,牺牲高一致性,获得可用性或可靠性:

   BA:Basically Available,基本可不并能 用,支持分区失败(sharding碎片划分数据库);

   S:Soft state,软情况汇报,接受一段时间内的情况汇报不同步,异步;

   E:Eventually consistent:最终一致性,弱一致性的表现;

   BASE思想主要强调基本的可用性,是因为你都要High 可用性,只是要 纯粹的高性能,如此 就要以一致性或容错性为牺牲,BASE思想的方案在性能上还是有潜力可挖的。

export PATH=/usr/sbin/nginx:$PATH

[root@node1 ~]# rpm -ivh 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

# 再编辑mogstored.conf你這個配置文件

nginx="/usr/sbin/nginx"

测试访问一下nginx的页面:

[root@node0 nginx-1.4.2]# make && make install

   

# 上传几张图片和测试的页面上去 [root@node1 ~]# mogupload --trackers=172.16.27.1:7001 --domain=images --key='1.png' --file='/usr/share/backgrounds/default_1920x1100.png'                    

domain               class                mindevcount   replpolicy   hashtype

-------------------- -------------------- ------------- ------------ -------

files                default                   2        MultipleHosts() NONE   

html                 default                   2        MultipleHosts() NONE   

   在node1上的安装和配置过程,修改好配置文件然后一键复制一份相同的配置文件到node2节点上,是因为它们的配置参数不是 一样的:

mysql指使用的数据库是哪些,MariaDB也是写mysql;mogdb指数据库名;host=172.16.27.88指定安装数据的地址

[root@node1 mogilefs]# mogdbsetup --dbhost=172.16.27.88 --dbport=31006 --dbname=mogdb --dbrootuser=root --dbrootpass=linux --dbuser=moguser --dbpass=linux --yes

第二步:安装nginx和MariaDB,这里安装Nginx都要编译安装,是因为他都要装载第三方模块才可不并能 使用mogilefs,MariaDB安装这里就不再说明了;

第五步:在八个多节点的其中八个多加在在主机:

lockfile=/var/lock/subsys/nginx

   在node0节点上的安装步骤:

[root@node0 nginx-1.4.2]# chmod +x /etc/init.d/nginx

[root@node0 nginx-1.4.2]# ss -tnl

State      Recv-Q Send-Q        Local Address:Port       Peer Address:Port 

LISTEN     0      128              :::111                     :::*     

LISTEN     0      128               *:111                      *:*     

LISTEN     0      128                *:100                      *:* 


哪些是两段式提交: 

   通过使用你這個协议进行通信来完成分布式事务,被称为两段式提交。从名字上看,您是因为是因为知道八个多多阶段:

第八个多阶段,即预提交:

   事务协调器给每个事务管理器发送准备操作的信号。

   事务管理器将操作(通常是数据更新)步骤(或细节)写入事务日志。是因为失败,事务管理器使用哪些步骤重复操作。

   事务管理器本地创建事务并通知资源管理器对资源(类似于于,数据库或消息服务器)执行操作。

   资源管理器执行操作并向事务管理器报告成功(准备提交信号)或失败(准备回滚)。

   资源管理器在等待事务管理器进一步的指令。

   事务管理器向事务协调器报告成功或失败。

第二阶段,即提交阶段:在第二阶段中,第一阶段的结果将传送给所有事务管理器。

[root@node0 support-files]# service mysqld start

Starting MySQL...                                          [  OK  ]

reload() {

# 安装好然后修改配置文件,只都要修改以下几项就可不并能 了

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

start() {

[root@node1 ~]# cd /etc/mogilefs

   实现MogileFS的分布式过程,按照下图构建MogileFS分布式文件系统的形态,这里限于机器的是因为,一点服务都整合在一同;

[root@node1 ~]# mogupload --trackers=172.16.27.1:7001 --domain=html --key='/files/index.html' --file='/var/www/html/index.html'

[root@node1 ~]# mogupload --trackers=172.16.27.1:7001 --domain=files --key='/files/index.html' --file='/var/www/html/index.html'

[root@node0 nginx]# vim nginx.conf

[root@node0 ~]# cd nginx-1.4.2

[root@node0 nginx-1.4.2]# ls 

auto  CHANGES  CHANGES.ru  conf configure contrib  html  LICENSE  man  README  src

[root@node0 nginx-1.4.2]# ./configure \

>   --prefix=/usr \

>   --sbin-path=/usr/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 \

>   --with-debug \

>   --add-module=/root/nginx-mogilefs-module-master  # 这里要指定编译的模块

然后在页面上测试访问刚才上传的文件以及图片:

# 可不并能 再回到node0上查看一下生成的数据库

总结:

[root@node1 ~]# scp mogilefsd.conf mogstored.conf root@172.16.27.2:/etc/mogilefs/  # 一键复制修改好的配置文件到node2的mogilefs目录下,覆盖即可,八个多节点都安装配置好然后先从不启动服务,数据库还如此 安装

Database changed

restart() {

 IP:       172.16.27.2:7100

[root@node1 ~]# mogadm --trackers=172.16.27.1:7001 domain add images # 加在域

[root@node1 ~]# mogadm --trackers=172.16.27.1:7001 domain add files

[root@node1 ~]# mogadm --trackers=172.16.27.1:7001 domain add html

[root@node1 ~]# mogadm --trackers=172.16.27.1:7001 domain list  # 查看域

           mogilefs_pass $1 {

   可不并能 一键复制你這個地址在页面上测试一下,这里是每上传八个多文件就不是在八个多节点是都存一份,是因为节点多说说它会根据定义的devcount当事人选用节点存储几份,原来在八个多节点掉了也可不并能 在别的节点在有相同的资源可用;

172.16.27.2 [2]: alive

MariaDB [mysql]> USE mogdb;

Database changed

[root@node1 ~]# chown -R mogilefs.mogilefs /dfs/mogdata/dev1 # 修改属主属组

[root@node0 ~]# yum -y install openssl-devel pcre-devel