本文共 9867 字,大约阅读时间需要 32 分钟。
多线程与进程的执行模式
互不通信的多线程模式基于共享容器协同的多线程模式通过事件协同的多线程模型输入设备的变化
控制器的变化:透明代理旁路模式名称服务规则服务器运算器的变化:存储器的变化:代理模型名称服务规则服务器Master分布式系统的难点:
缺乏全局时钟面对故障的独立性处理单点故障冗余降低单点故障的影响范围事物的挑战ACID2PC(两段式提交)、最终一致,BASE、CAP、Paxos分布式事务的模型及规范
X/Open:XADTP:Distributed Transaction Processing Reference Model定义了三个组件:AP:Application Program,应用程序RM:Resource Manager,资源管理器TM:Transaction Manager,事务管理器两段式提交:
CAPBASE:BA:Basically Available,基本可用S:Soft state,软状态,接受一段时间内的状态不同步E:Eventually consistent:最终一致性Paxos:比2PC提交更轻量级的分布式事务的协调方式集群内数据一致性算法实施过程案例:
Quorum,Vector ClockQuorum: N:数据复制的节点量 R:成功读操作所依赖的最少节点数 W:成功写操作所依赖的最少节点数 当W+R>N:强一致性 假设,W=N,R=1 W+R<=N:可以保证最终一致性
分布式应用:
分布式计算MapReduce:分布式运算框架MapReduce分布式存储GFS,Google File SystemHDFS:BigTable:列式数据库HBaseNoSQL:
Hadoop
分布式存储
不能mount,基于API进行存取分布式文件系统mount,VFSGFSHDFS:适合存储大文件TFS:在名称节点上将元数据存储于关系型数据中,文件数量不再受限于名称节点的内存空间;可以存储海量小文件
Lustre:企业级应用,重量级
GlusterFS:MooseFS:FUSEMogilefs:使用Perl语言,FastDFSMogileFS的特性:
应用层无单点:(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=mogpass3.配置mogilefsd.conf4.#chown -R mogilefs.mogilefs /var/run/mogilefsd/mogstored: 1.安装 2.安装perl-IO-AIO 3.配置,指定数据存储位置
安装配置MogileFS
Perl
cpan>install module::name172.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.6db_user = moguserdb_pass = mogpasslisten = 172.16.100.6:7001query_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 listmogadm --trackers=172.16.100.6:7001 device add 172.16.100.7 001mogadm --trackers=172.16.100.6:7001 device listmogadm --trackers=172.16.100.6:7001 domain add filesmogadm --trackers=172.16.100.6:7001 domain listmogadm --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 002mogadm --trackers=172.16.100.6:7001 host listmogadm --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=filesmogfileinfo --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 listmogadm --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=images172.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/mogilefsdmkdir /dfs/mogdata -pv
chown -R mogilefs.mogilefs /dfs/mogdata/cd /etc/mogilefs/
vim mogstored.confdocroot = /dfs/mogdataservice 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/mogdatamkdir /dfs/mogdata
chown -R mogilefs.mogilefs /dfs/mogdataservice mogstored start
cd /dfs/mogdata
mkdir dev2chown -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-AIOchown -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.confdb_dsn = DBI:mysql:mogdb:host=172.16.100.6db_user = moguserdb_pass = mogpasslisten = 0.0.0.0:7001service mogilefsd start
mkdir /dfs/mogdata/dev1
chown -R mogilefs.mogilefs /dfs/mogdatacd /etc/mogilefs/
vim mogstored.confdocroot = /dfs/mogdataservice 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 listmogadm --trackers=172.16.100.7:7001 device add 172.16.100.7 1
service mogstored restartmogadm --tracker=172.16.100.7:7001 device listmogadm --tracker=172.16.100.7:7001 device add 172.16.100.8 2mogadm --tracker=172.16.100.7:7001 device add 172.16.100.9 2mogadm --tracker=172.16.100.8:7001 domain add images
mogadm --tracker=172.16.100.8:7001 domain add filesmogadm --trackers=172.16.100.8:7001 class list添加类:
mogadm --trackers=172.16.100.8 class add images class0 --mindevcount=2mogadm --trackers=172.16.100.8 class add images class1 --mindevcont=2mogadm --trackers=172.16.100.8 class add images class2 --mindevcont=2mogadm --trackers=172.16.100.8 class add images class3 --mindecvont=2mogupload --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/mogdataservice mogilefsd start
service mogstored startmogadm --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/mogdataservice mogilefsd start
service mogstored startmogadm --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.zipuseradd -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-mastermake && make install
cd /etc/nginx
vim nginx.confupstream 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
curl -X PUT -T "/etc/fstab"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
转载于:https://blog.51cto.com/12406012/2368232