原生Openstack学习笔记(三)--- Swift、Cinder
  

培训认证部_顾优 27592人觉得有帮助

{{ttag.title}}
“当前已有100+用户参与分享,共计发放奖励50000+“




https://docs.openstack.org/zh_CN/  可以配合官网使用用

Swift对象存储:对象即存储内容,业内一般将对象存储认为是IaaS,详细概念这里不再赘述,可参考百度网盘,相当于对象存储的SaaS体现

一致性散列(哈希)(DHT路由,通过该环找到主机的对应存储位置)








1.将每个计算节点(VM1-4)通过hash映射到圆环上
2.将每个对象通过hash映射到圆环上,并且绑定顺时针找到的第一个节点
3.新增一个VM5,根据hash计算出落点在2和3之间,此时仅有2和5之间的对象受影响,从3迁移到5上。


Replicator数据(最终)一致性模型NWR
1.N:数据的副本总数   W:写操作被确认接收的副本数量    R:读操作的副本数量
2.强一致性    R+W>N,保证对副本的读写操作产生交集,保证可以读到数据的最新版本,如果W=N,R=1,每次更新都为全部更新,适合于大量读少量写的强一致性场景;R=N,W=1,每次更新仅需要更新一个副本,适合于大量写少量读的强一致性场景。
3.弱一致性  R+W≤N,如果读写操作不产生交集,那就有可能读到脏数据,比较适用于对一致性要求不高的场景。

SWIFT采用了一个折中的策略
写操作需要满足一半以上成功:W>N/2,
再保证读与写操作至少有一个交集:R+W>N。
默认配置是N=3,W=2>N/2,R=1或2
R=2是会先读取两个副本的元数据,再通过元数据比较谁最新。








环的数据结构
环:为了将虚拟节点(分区)映射到一组物理设备上,提供冗余度设计,包含以下数据结构。
1.存储设备列表。设备信息包括  唯一标识号(id)、区域号(zone)、权重(weight)、IP地址(ip)、端口(port)、元数据(meta)。
2.分区到设备的映射关系(replica2part2dev-id 数组)
3.计算分区号的位移(part_shift)

账户名/容器名/对象名



数据模型
三层逻辑结构,账户/容器/对象 (Account/Container/Object)




Swift逻辑架构




     Proxy node:
  Proxy Server:提供操作swift的接口api。通过ring环查找物理实体位置,然后发送请求。还可以作为负载,切换不同storage node.
  storage node:
Account server:处理account的请求:get/head/post/put/delete/replication,通过数据库SQLite保存account状态

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上去。


























打赏鼓励作者,期待更多好文!

打赏
4人已打赏

一一氵 发表于 2020-8-4 16:51
  
感谢分享
avic 发表于 2020-8-4 16:59
  
超详细啊
云中骏马 发表于 2020-8-7 15:38
  
感谢分享。
新手045243 发表于 2020-8-11 19:46
  
我在社区摸爬滚打这么多年,所谓阅人无数,就算没有见过猪走路,也总明白猪肉是啥味道的。一看到楼主的气势,我就觉得楼主同在社区里灌水的那帮小混子有着本质的差别,你一定就是传说中的最强技术牛。
新手899116 发表于 2020-8-12 09:43
  
这操作步骤非常专业啊
新手517842 发表于 2020-8-12 09:53
  
文件包含都有,够有深度
marco 发表于 2020-8-12 10:12
  
手绘图,非常详细,感谢分享。
叶庆豪 发表于 2020-8-12 20:15
  
看了一轮,没看懂,收藏一下有时间再研究
xin2004108 发表于 2020-8-16 19:28
  
手稿教学。
发表新帖
热门标签
全部标签>
每日一问
技术笔记
功能体验
技术咨询
新版本体验
2023技术争霸赛专题
干货满满
技术盲盒
标准化排查
产品连连看
技术晨报
GIF动图学习
信服课堂视频
安装部署配置
运维工具
深信服技术支持平台
秒懂零信任
自助服务平台操作指引
答题自测
安全攻防
每日一记
用户认证
通用技术
云计算知识
SDP百科
畅聊IT
sangfor周刊
资源访问
排障笔记本
专家问答
技术圆桌
在线直播
MVP
网络基础知识
升级
上网策略
测试报告
日志审计
问题分析处理
流量管理
原创分享
解决方案
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
功能咨询
终端接入
授权
设备维护
迁移
地址转换
虚拟机
存储
加速技术
产品预警公告
玩转零信任
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
社区帮助指南
答题榜单公布
纪元平台
卧龙计划
华北区拉练
天逸直播
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
每周精选

本版达人

新手89785...

本周建议达人

YangZhe...

本周分享达人