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

输入设备的变化 控制器的变化: 透明代理 旁路模式 名称服务 规则服务器 运算器的变化: 存储器的变化: 代理模型 名称服务 规则服务器 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