分布式文件系统:
1:系统的各个组件分布于网络上的多个计算机上
2:各组件彼此之间仅仅通过消息传递来通信并协调运行
分布式文件系统存在的意义:
A: 向上扩展的性价比越来越低;单机扩展存在性能的临界点
B: 出稳定性及可用性考虑,单机会存在多方面的问题
CPU 内存 IO:性能
网络IO
多进程;每个进程响应一个请求
多进程;每个进程生成多个进程,每个进程响应一个请求
多线程:每个线程响应多个请求
基于socket实现网络通信开发,实现方式
BIO:Blocaing IO:阻塞io
一个进程或者一个线程处理一个请求,
NIO:Nonblocking IO
基于事件驱动(epll)思想,采用Reactor模式
AIO:基于事件驱动(epll)思想,采用Proactor模式
如何把应用从单机扩展为多机
输入设备的变化
变得多了
输出设备的变化
分布式系统实现的难点
缺乏全局时钟
面对故障时的独立性
处理单点故障
事务处理麻烦:ACID
2pc BASE CAP Paxos
大型网站站点的架构演进方式:
LAMT LNMT
应用从资源占用的角度分类:
CPU bound:cpu 密集型
IO bound:IO密集型
引用mysql主从面临的问题:
数据复制的问题
应用选择数据源的问题
引用缓存
页面缓存:varnish ,squid
数据缓存:key-value:memcached
主库写数据操作压力:数据库拆分
垂直拆分:把数据库中不同的业务的数据拆分到不同的数据库中
难点 :单机的ACID保证被打破:要么放弃事务,要么引入分布式事务,
一些join查询操作将变得非常困难:
原来依赖于外键实现的约束将无法保证
水平拆分:把一个单独表中的数据拆分到多个不同的数据服务器上
难点:单机的ACID保证被打破,一些join查询操作将变得非常困难,原来依赖于外键实现的约束将无法保证,自增序列号的ID的产生会有影响,针对单张表的查询可能要垮库操作,
Nosql:非关系型数据库
文档数据库
列式数据库
DFS:非结构化数据
Tfs,MogileFS:适用于海量的小文件
HDFS,GFS:少量文件
分布式的事务的实现:
事务:事物的参与者,支持事务的服务器,资源服务器,事务管理器
2PC:两段式提交协议:就是当一个事务发出请求和响应请求是同步的
Paxos:比2PC更加轻量级:不存在拜占庭将军问题,通讯网络不安全,无法完成可靠的消息传输
要同时OK在commit,当上面的请求有一个出错时,就无法commit
CAP:一致性,可用性,网络分区容错性
只能同时满足三者中的两者,因此,分布式系统的目标:AP(大多数分布式系统都选择此项) CA(无法实现分布式) CP(用的少,代价大)
分布式的目标:加强A和P,在C上进行妥协:
满足BASE模型:基本可用性
同时大数据给我们带来的挑战:
数据采集,数据的存储,数据的搜索,数据的共享,数据的传输,数据的分析,数据的可视化都难以实现
挂载到一个目录就可以使用le
Tracker:mogilefsd进程,实现的功能:文件的复制{replication} 删除(deletion) query 监控(monitor)
Mysql节点:用于Tracker存储元数据:mogilefs的名称空间及文件名,实际是一个httpd服务
Storagenodes:mogstored进程,文件实际存储位置
Mogildfs:W R N W+R<N弱一致性
实现:三个节点:分别是172.16.249.97 172.16.249.85 172.16.249.165
172.16.249.85:tracker服务器mysql服务器
Lftp172.16.0.1/pub/Sources/6.x86_64下下载mogilefs包
Yum 安装如下包:MogileFS-Server-2.46-2.el6.noarch.rpm
MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm
MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm
perl-Net-Netmask-1.9015-8.el6.noarch.rpm
perl-Perlbal-1.78-1.el6.noarch.rpm
MogileFS-Utils-2.19-1.el6.noarch.rpm
perl-MogileFS-Client-1.14-1.el6.noarch.rpm
在yum install –y mysql-server
授权数据库用户,并初始化mysql
MariaDB [(none)]> grant all on mogdb.* to‘moguser‘@‘172.16.%.%‘ identified by ‘mogpass‘;
MariaDB[(none)]> flush privileges;
然后连接[[email protected] mogilefs]# mogdbsetup --dbname=mogdb --dbuser=moguser--dbhost=172.16.249.85 --dbpass=mogpass
会发现出现错误:大概意思需要一个root的远程连接
MariaDB[(none)]> grant all on *.* to ‘root‘@‘172.16.%.%‘ identified by ‘han‘;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
再次连接:[[email protected] mogilefs]# mogdbsetup --dbname=mogdb --dbuser=moguser--dbhost=172.16.249.85 --dbpass=mogpass --dbrootuser=root --dbrootpass=han
出现如下错误:
Failed to connect to DBI:mysql:mysql;host=172.16.249.85;port=3306 asspecified root user (root): Access denied for user ‘root‘@‘www.http3.com‘(using password: NO)
解决:MariaDB [(none)]> grant all on *.* to ‘root‘@‘www.han3.com‘ identifiedby ‘han‘;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
在次连接[[email protected] mogilefs]# mogdbsetup --dbname=mogdb --dbuser=moguser--dbhost=172.16.249.85 --dbpass=mogpass --dbrootuser=root --dbrootpass=han
就会成功了
修改配置文件:
[[email protected] mogilefs]# vimmogilefsd.conf
db_dsn = DBI:mysql:mogdb:host=172.16.249.85
db_user = moguser
db_pass = mogpass
listen = 172.16.249.85:7001
启用:[email protected] mogilefs]# service mogilefsd restart
如果出现错误:使用mogilefsd –-help查看
172.16.249.97:mogstored节点
172.16.249.165:mogstored节点
scp -r mogilefs/172.16.249.165:/root/
scp -r mogilefs/ 172.16.249.97:/root/
分别安装
Yum 安装如下包:MogileFS-Server-2.46-2.el6.noarch.rpm
MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm
MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm
perl-Net-Netmask-1.9015-8.el6.noarch.rpm
perl-Perlbal-1.78-1.el6.noarch.rpm
perl-IO-AIO
编辑配置文件
[[email protected] mogilefs]# vim /etc/mogilefs/mogstored.conf
docroot = /mogdata/data
mkdir –pv /mogdata/data
chown –R mogilefs.mogilefs /mogdata
启动mogstored:(750l)
[[email protected] mogilefs]# service mogstored start
会出现好多命令mog双击tab键盘:
我们查看当前的mogstored节点
[[email protected] mogilefs]# mogadm --trackers=172.16.249.85:7001 host list
加入一个mogstored节点
[[email protected] mogilefs]# mogadm --trackers=172.16.249.85:7001 host add node2(自己去的) --ip 172.16.249.97 --status=alive
[[email protected] mogilefs]# mogadm --trackers=172.16.249.85:7001 host add node3 --ip=172.16.249.165--status=alive
我们可以使用mogadm –help查看语法
使用mark时可以把各个节点下线
[[email protected] mogilefs]# mogadm --trackers=172.16.249.85:7001 host mark node3 down(下线)
[[email protected] mogilefs]# mogadm --trackers=172.16.249.85:7001 host list
node2 [1]: alive
IP: 172.16.249.97:7500
node3 [2]: down
IP: 172.16.249.165:7500
[[email protected] mogilefs]# mogadm --trackers=172.16.249.85:7001 host mark node3 alive(上线)
添加主机上的设备:device
[[email protected] mogilefs]# mogadm --trackers=172.16.249.85:7001 device list(列出设备)
node2 [1]: alive
used(G) free(G) total(G) weight(%)
node3 [2]: alive
used(G) free(G) total(G) weight(%)
添加设备:[[email protected] mogilefs]# mogadm --trackers=172.16.249.85:7001 device add node2 dev1
[[email protected] mogilefs]# mogadm --trackers=172.16.249.85:7001 device add node3 dev2
[[email protected] mogilefs]# mogadm --trackers=172.16.249.85:7001 device list
node2 [1]: alive
used(G) free(G) total(G) weight(%)
dev1: alive 0.000 0.000 0.000 100
node3 [2]: alive
used(G) free(G) total(G) weight(%)
dev2: alive 0.000 0.000 0.000 100
查看整体摘要信息
[[email protected] mogilefs]# mogadm --trackers=172.16.249.85:7001 device summary
Hostname HostID Status used(G) free(G) total(G) %Used
node2 [ 1]: alive 0.000 0.000 0.000
node3 [ 2]: alive 0.000 0.000 0.000
添加一个domain(名称空间)domain内部可以有一个class代表一个dirtory
查看domain
[[email protected] mogilefs]# mogadm --trackers=172.16.249.85:7001 domain list
domain class mindevcount replpolicy hashtype
-------------------- -------------------- -------------
添加一个域:
[[email protected]]#mogadm --trackers=172.16.249.85:7001domain add files
我们要在响应的、/mogdata/data下建立相应的devn并且把其属主属组该我mogilefs这样就可以使用了在上传文件就好了
上传数据:
[[email protected] ~]# mogupload --trackers=172.16.249.85:7001 --domain=files--key=‘/fstab.html‘ --file=‘/etc/fstab‘
查看数据:
[[email protected] ~]# clear
[[email protected] ~]# mogfileinfo --trackers=172.16.249.85:7001 --domain=files--key=‘/fstab.html‘
- file: /fstab.html
class: default
devcount: 1
domain: files
fid: 6
key: /fstab.html
length: 921
- http://172.16.249.165:7500/dev2/0/000/000/0000000006.fid
我们也可以在浏览器上输入http://172.16.249.165:7500/dev2/0/000/000/0000000006.fid查看
[[email protected] ~]# mogadm --trackers=172.16.249.85:7001 domain add images也可以上传一个图片与其上
Mogilefs:W写节点 R读节点 N所有节点: