Container server:处理container的请求,……
Object server:负责存储、检索、删除、保存本地对象。对象是文件系统中的二进制数据,元数据为xattr形式作为文件扩展属性,文件系统需要支持此特性。
三种保障数据一致性的服务:
Auditor:持续性磁盘扫描,检查account、container、object完整性,发现有问题,先进行隔离,然后通过Replicator从其他节点获取数据并恢复。
Updater:当创建容器或者对象时,要更新所属的账户或者容器,如果更新失败,则使用updater进行后续更新。
Replicator:…NWR
e.g
一个对象有三个副本
修改了一个副本
1.proxy node /account/container/object 查询ring文件,得知节点列表为3个长度
2.proxy node 同时向三个节点转发操作,只要两个节点写入成功,则认为put成功。
3.失败的节点后面通过其他节点的replicator进行恢复
Cinder:块存储服务
参考的就是亚马逊的EBS
1.组件
Cinder-api:访问cinder的http接口
Cinder-volume:运行在每个存储节点上,管理具体存储空间,定义了统一的接入接口,兼容LVM,NFS,Ceph,EMC。。。
Cinder-scheduler:根据调度算法(过滤+权重),选择合适节点创建卷
Cinder-backup:用于提供卷的备份功能,支持备份到swift、ceph对象存储。
2.存储设备
DAS/SAN/NAS/对象
不同的块设备厂商通过驱动形式对接到cinder,然后接入openstack,默认使用LVM作为后端存储
LVM: PV-VG-LV
iSCSI (SCSI Over IP)
Iscsi target(存储侧)、iSCSI initiator (主机侧)
挂载一个卷:
Cinder create---cinder api---cinder scheduler--cinder volume(lvm iscsi driver ,负责lv的创建,创建完lv之后,将lv定义为target,产生LUN ID,主机侧用initiator发现target)
调度算法:
创建volume时,cinder-scheduler会基于容量volume type等选择合适节点,默认为filter scheduler,有以下过滤器:
Retry:把曾经调度失败过的节点剔除
AZ:初始只有一个AZ:"nova",用户可以自行创建
Capacity:剔除容量不够的节点
capability:选择存储类型(lvm/san/ceph)
Json:通过json运算表达式自行定制过滤条件>,<,= ['>','$free_disk_mb',200*1024],选择空余容量大于200G的节点。
对象存储和块存储的区别(Cinder/Swift)?
Swift:
类似S3,兼容S3,通过web服务协议访问(rest/SOAP)。
常见领域:网盘、Iaas公有云、备份归档、移动互联网和CDN。
两种数据描述:容器、对象
扁平化结构,所有数据都有一个ID入口,可以直接访问。
Cinder:
类似EBS,仅给虚机挂载,通过cinder api访问
主要是个nova进行通信,将虚机所需的卷attach上去。