多线程与进程的执行模式
互不通信的多线程模式
基于共享容器协同的多线程模式
通过事件协同的多线程模型
输入设备的变化
控制器的变化:
透明代理
旁路模式
名称服务
规则服务器
运算器的变化:
存储器的变化:
代理模型
名称服务
规则服务器
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