MogileFS

多线程与进程的执行模式
互不通信的多线程模式
基于共享容器协同的多线程模式
通过事件协同的多线程模型

输入设备的变化
控制器的变化:
透明代理
旁路模式
名称服务
规则服务器
运算器的变化:
存储器的变化:
代理模型
名称服务
规则服务器
Master

分布式系统的难点:
缺乏全局时钟
面对故障的独立性
处理单点故障
冗余
降低单点故障的影响范围
事物的挑战
ACID
2PC(两段式提交)、最终一致,BASE、CAP、Paxos

分布式事务的模型及规范
X/Open:XA
DTP:Distributed Transaction Processing Reference Model
定义了三个组件:
AP:Application Program,应用程序
RM:Resource Manager,资源管理器
TM:Transaction Manager,事务管理器

两段式提交:
CAP
BASE:
BA:Basically Available,基本可用
S:Soft state,软状态,接受一段时间内的状态不同步
E:Eventually consistent:最终一致性
Paxos:
比2PC提交更轻量级的分布式事务的协调方式

集群内数据一致性算法实施过程案例:
Quorum,Vector Clock

 Quorum:
    N:数据复制的节点量
    R:成功读操作所依赖的最少节点数
    W:成功写操作所依赖的最少节点数
    当W+R>N:强一致性
     假设,W=N,R=1
      W+R<=N:可以保证最终一致性

分布式应用:
分布式计算
MapReduce:分布式运算框架
MapReduce
分布式存储
GFS,Google File System
HDFS:
BigTable:列式数据库
HBase

     NoSQL:

Hadoop

分布式存储
不能mount,基于API进行存取
分布式文件系统
mount,VFS

GFS
HDFS:适合存储大文件
TFS:在名称节点上将元数据存储于关系型数据中,文件数量不再受限于名称节点的内存空间;可以存储海量小文件

Lustre:企业级应用,重量级
GlusterFS:
MooseFS:FUSE
Mogilefs:使用Perl语言,FastDFS

MogileFS的特性:
应用层
无单点:(tracker,mogstore,database(MySQL))
自动文件复制:复制的最小单位不是文件,而是class
传输中立,无特殊协议:可以NFS或HTTP进行通信
简单的命名空间
不共享任何数据

Tracker:
MogileFS的核心,是一个调度器;服务进程为mogilefsd;职责:删除、复制、监控、查询等

Database:为tracker节点存储节点文件的元数据信息

mogstored:数据存储的位置,通常是一个HTTP(WebDAV)服务器,用来数据的创建、删除、获取;

安装过程:
tracker:
1.安装
2.设定数据库
(1)grant all on mogilefs.* to 'moguser'@'hostname' identifiled by 'mogpass';
(2)mogdbsetup --dbrootuser=... --dbhost=... --dbport=... --dbrootpass=... --dbuser=moguser --dbpass=mogpass
3.配置mogilefsd.conf
4.#chown -R mogilefs.mogilefs /var/run/mogilefsd/

 mogstored:
    1.安装
    2.安装perl-IO-AIO
    3.配置,指定数据存储位置

安装配置MogileFS

Perl
cpan>install module::name

172.16.100.6做tracker节点:

useradd -r mogilefs

yum install MogileFS-Server MogileFS-Server-mogilefsd MogileFS-Server-mogstored MogileFS-Utils perl-MogileFS-Client perl-Net-Netmask perl-Perlbal

cd /etc/mogilefs/

mysql>grant all on . to 'root'@'172.16.%.%' identified by 'magedu';
mysql>flush privileges;
mysql>grant all on . 'root'@'www.magedu.com' identified by 'magedu';
mysql>flush privileges;
mysql>grant all on mogilefs. to 'moguser'@'172.16.%.%' identified by 'mogpass';
mysql>grant all on mogilefs.
to moguser@'www.magedu.com' identified by 'mogpass';
mysql>flush privileges;

mogdbsetup --dbhost=172.16.100.6 --dbport=3306 --dbname=mogilefs --dbrootuser=root --dbrootpass=magedu --dbuser=moguser --dbpass=mogpass

vim /etc/mogilefsd.conf
db_dsn = DBI:mysql:mogilefs:host=172.16.100.6
db_user = moguser
db_pass = mogpass
listen = 172.16.100.6:7001
query_jobs = 10(测试使用,正式环境看情况)

mkdir /var/run/mogilefsd
chown -R mogilefs.mogilefs /var/run/mogilefsd/

service mogilefsd start

mogadm --trackers=172.16.100.6:7001 check

vim /root/.mogilefs.conf
--db_dsn="DBI:mysql:mogilefs:host=172.16.100.6"
--db_user="mfs"
--db_pass="mogpass"
--verbose
--stats="all"

mogstats

mogadm --trackers=172.16.100.6:7001 host add 172.16.100.7 --ip=172.16.100.7 --status=alive
mogadm --trackers=172.16.100.6:7001 host list
mogadm --trackers=172.16.100.6:7001 device add 172.16.100.7 001
mogadm --trackers=172.16.100.6:7001 device list
mogadm --trackers=172.16.100.6:7001 domain add files
mogadm --trackers=172.16.100.6:7001 domain list

mogadm --trackers=172.16.100.6:7001 host add 172.16.100.8 --ip=172.16.100.8 --status=alive
mogadm --trackers=172.16.100.6:7001 device add 172.16.100.8 002
mogadm --trackers=172.16.100.6:7001 host list
mogadm --trackers=172.16.100.6:7001 device list

上传文件:
mogupload --trackers=172.16.100.6:7001 --domain=files --keys='fstab.html' --file='/etc/fstab'
moglistkeys --trackers=172.16.100.6:7001 --domain=files

mogfileinfo --trackers=172.16.100.6:7001 --domain=files --keys='/fstab.html'(该条命令出来http那一行的信息,可以在浏览器中直接打开访问)

mogadm --trackers=172.16.100.6:7001 domain add images
mogupload --tracker=172.16.100.6:7001 --domain=images --key='logo.jpg' --file='/usr/share/backgrounds/default.png'

mogfileinfo --trackers=172.16.100.6:7001 --domain=images --key='/logo.png'

将其中一个节点下线/上线
mogadm --trackers=172.16.100.6:7001 host list
mogadm --trackers=172.16.100.6:7001 host mark 172.16.100.8 down(或者active)

下载文件:
mogfetch --trackers=172.16.100.6:7001 --domain=images --keys='/log.png' --file='./logo.png'

删除文件:
mogdelete --trackers=172.16.100.6 --domain=images --key='/logo.png'
moglistkeys --trackers=172.16.100.6 --domain=images

172.16.100.7(做mogstored)

yum install MogileFS-Server MogileFS-Server-mogilefsd MogileFS-Server-mogstored MogileFS-Utils perl-MogileFS-Client perl-Net-Netmask perl-Perlbal perl-IO-AIO

mkdir /var/run/mogilefsd/
chown -R mogilefs.mogilefs /var/run/mogilefsd

mkdir /dfs/mogdata -pv
chown -R mogilefs.mogilefs /dfs/mogdata/

cd /etc/mogilefs/
vim mogstored.conf
docroot = /dfs/mogdata

service mogstored start

cd /dfs/mogdata
chown -R mogilefs.mogilefs /dfs/dev1/

servie mogstored restart

172.16.100.8(做mogstored)

yum install MogileFS-Server MogileFS-Server-mogilefsd MogileFS-Server-mogstored MogileFS-Utils perl-MogileFS-Client perl-Net-Netmask perl-Perlbal perl-IO-AIO

vim /etc/mogilefs/mogstored.conf
docroot = /dfs/mogdata

mkdir /dfs/mogdata
chown -R mogilefs.mogilefs /dfs/mogdata

service mogstored start

cd /dfs/mogdata
mkdir dev2
chown -R mogilefs.mogilefs dev2/

service mogstored restart

使用nginx进行反代:

172.16.100.6(做mysql)
mysql>grant all on mogdb. to 'moguser'@'172.16.%.%' identified by 'mogpass';
mysql>grant all on
.* to 'root'@'172.16.%.%' identifiled by 'mageedu';
mysql>flush privileges;

172.16.100.7(做tracker和mogstored)
yum install MogileFS-Server MogileFS-Server-mogilefsd MogileFS-Server-mogstored MogileFS-Utils perl-MogileFS-Client perl-Net-Netmask perl-Perlbal perl-IO-AIO

chown -R mogilefs.mogiles /var/run/mogilefsd/

mogdbsetup --dbhost=172.16.100.6 --dbport=3306 --dbname=mogdb --dbrootuser=mageedu --dbuser=moguser --dbpass=mogpass

cd /etc/mogilefs/
vim mogilefsd.conf
db_dsn = DBI:mysql:mogdb:host=172.16.100.6
db_user = moguser
db_pass = mogpass
listen = 0.0.0.0:7001

service mogilefsd start

mkdir /dfs/mogdata/dev1
chown -R mogilefs.mogilefs /dfs/mogdata

cd /etc/mogilefs/
vim mogstored.conf
docroot = /dfs/mogdata

service mgstored start

mogadm --trackers=172.16.100.7:7001 host add 172.16.100.7 --ip=172.100.7 --status=alive
mogadm --trackers=172.16.100.7:7001 host list

mogadm --trackers=172.16.100.7:7001 device add 172.16.100.7 1
service mogstored restart
mogadm --tracker=172.16.100.7:7001 device list
mogadm --tracker=172.16.100.7:7001 device add 172.16.100.8 2
mogadm --tracker=172.16.100.7:7001 device add 172.16.100.9 2

mogadm --tracker=172.16.100.8:7001 domain add images
mogadm --tracker=172.16.100.8:7001 domain add files
mogadm --trackers=172.16.100.8:7001 class list

添加类:
mogadm --trackers=172.16.100.8 class add images class0 --mindevcount=2
mogadm --trackers=172.16.100.8 class add images class1 --mindevcont=2
mogadm --trackers=172.16.100.8 class add images class2 --mindevcont=2
mogadm --trackers=172.16.100.8 class add images class3 --mindecvont=2

mogupload --trackers=172.16.100.7:7001 --domain=images --key='1.png' --file='/usr/share/backgrounds/default.png'
mogupload --trackers=172.16.100.7:7001 --domain=iamges --keys='2.png' --file='/usr/share/backgruonds/default_1920x1440.png'

moglistkeys --trackers=172.16.100.8:7001 --domain=images

mogfileinfo --trackers=172.16.100.9:7001 --domain=images --keys='1.png'

mogfetch --trackers=172.16.100.7:7001 --domain=images --key='1.png' --file='a.png'

mogupload --trackes=172.16.100.7:7001 --domain=file --keys='fstab.html' --file='/etc/fstab'

172.16.100.8(做tracker和mogstored)

同样安装yum .....

scp 172.16.100.7:/etc/mogilefs/* /etc/mogilefs/

mkdir /dfs/mogdata/dev2
chown -R nogilefs.mogilefs /var/run/mogilefsd/ /dfs/mogdata

service mogilefsd start
service mogstored start

mogadm --tracker=172.16.100.8:7001 host add 172.16.1008 --ip=172.16.100.8 --status=alive

172.16.100.9(做tracker和mogstored)

同样yum ....

scp 172.16.100.7:/etc/mogilefs/* /etc/mogilefs/

mkdir /dfs/mogdata/dev3
chown -R nogilefs.mogilefs /var/run/mogilefsd/ /dfs/mogdata

service mogilefsd start
service mogstored start

mogadm --tracker=172.16.100.9:7001 host add 172.16.100.9 --status=alive

172.16.100.10(做nginx服务器)

tar -zxvf nginx-1.4.7.tar.gz
unzip nginx_mogilefs_module-matser.zip

useradd -r nginx

cd nginx-1.4.7
./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=../nginx_mogilefs_module-master

make && make install

cd /etc/nginx
vim nginx.conf
upstream mogcluster {
server 172.16.100.7:7001;
server 172.16.100.8:7001;
server 172.16.100.9:7001;

server {
location /images/ {
mogilefs_tracker mogcluster;
mogilefs_domain images;
mogilefs_noverify on;
mogilefs_methods GET PUT DELETE;

     mogilefs_pass {
        proxy_pass $mogilefs_path;
        proxy_hide_header Content-Type;
        proxy_buffering off;
     }

}

 location ~* ^(/files/.*)$ {
      mogilefs_tracker 172.16.100.6:7001;
      mogilefs_domain files;
      mogilefs_noverify on;
      mogilefs_methods GET PUT DELETE;

     mogilefs_pass $1 {
        proxy_pass $mogilefs_path;
        proxy_hide_header Content-Type;
        proxy_buffering off;
     }

}
}

service nginx reload

http://172.16.100.10:/images/1.png
curl -X PUT -T "/etc/fstab" http://172.16.100.10/images/3.png

http://172.16.100.10/files/fatab.html

mogstats --config=/etc/mogilefs/mogfsd.conf

mogstats --config=/etc/mogilefs/mogilefsd.conf --stats="domains"

mogstats --db_dsn="DBI:mysql:mogdb:host=172.16.100.6" --db_user="moguser" --db_pass="mogpass"

mogadm --trackers=172.16.100.7:7001 setting list

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章