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

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