深入理解Ceph存储架构( 七 )
注: client.admin 用户必须以安全的方式向用户提供用户ID和密钥 。
文章插图
第3章 客户端架构Ceph客户端在数据存储的接口方面还是存在比较大的差异的 。 Ceph的块设备提供了可以像挂载本地物理驱动盘一样的块存储 , 而Ceph对象网关则通过用户的管理提供了兼容S3与Swift的Restful对象存储接口 。 而对于这些接口 , 都是使用的RADOS(可靠且自动分布式的对象存储)协议与Ceph存储集群进行的交互;同时这些接口也都有一些相同的基本前提:
- Ceph配置文件 , 或集群名称(通常为ceph )与mon地址
- 存储池名称
- 用户名以及密钥的路径
3.1 本地协议与Librados现代的应用需要有异步通信能力简单的对象存储接口 , Ceph存储集群就有这个能力并提供简单的接口 。 此接口提供了对集群直接、并行的对象存取 。
- 存储池操作
- 快照
- 读、写对象– 创建或删除– 整个对象或字节范围– 追加或截断
- 创建/设置/获取/删除 XATTRs
- 创建/设置/获取/删除 K/V对
- 复合操作和双重ack语义
文章插图
3.3 独占锁独占锁提供一种功能特性:任一客户端可以对RBD中资源进行’排它的’锁定(如果有多个终端对同一RBD资源进行操作时) 。 这有助于解决当有多个客户端尝试写入同一对象时发生冲突的场景 。 此功能基于前一节中介绍的对象的监视与通知 。 因此 , 在写入时 , 如果一个客户端首先在对象上建立独占锁 , 那么其它的客户端如果想写入数据的话就需要在写入前先检查是否在对象上已经放置了独占锁 。
设置了这一特性的话 , 同一时刻只有一个客户端能够对RBD资源进行修改 , 尤其像快照创建与删除这种改变RBD内部结构的时候 。 这一特性对于失败的客户端也起到了一些保护的作用 , 例如 , 虚拟机没有响应了 , 然后在其他地方使用同一块磁盘启动它的副本 , 那么这个无响应的虚拟机将在Ceph中被列入黑名单 , 并且无法破坏新的虚拟机中数据 。
强制的独占锁功能特性默认是不开启的 , 但是可以在创建镜象时显示的通过加入–image-features参数来开启这一特性 , 例如:
rbd -p mypool create myimage –size 102400 –image-features 5
这里的5是1与4的和值 ,其中1使得分层特性生效 , 4使得独占锁特性生效 。 所以执行上面这个命令后会创建100GB的RBD镜象 , 同时既支持分层特性也支持独占锁特性 。
强制的独占锁也是后面提到的对象索引映射使用的前提 。 如果没有开启强制的独占锁 , 那么对象索引映射也不会生效 。
独占锁也为mirror这块内容做了不少的工作 。
3.4 对象映射索引对象映射索引也是一种功能特性 , 可以在客户端写入rbd映像时跟踪RADOS对象是否已经存在了 。 当有写入操作时 , 写操作被转义为RADOS对象中的偏移 , 如果对象映射索引功能开启那么对于存在的RADOS对象就会被跟踪到 。 所以当对象已经存在时我们就可以提前知道 。 对象映射索引保存在librbd客户端机器内存中 , 所以对于不存在的对象就省去了再去查询OSD的这一步开销 。 对象映射索引对于一些操作还是比较有利的 , 即:
- 调整大小
- 导出操作
- 复制操作
- 扁平化
- 删除
- 读取
删除操作仅删除镜象中存在的对象 。 读取操作对于不存在的对象会直接跳过 。 因此 , 对于调整大小(仅缩小)、导出操作、复制操作、扁平化和删除等操作 , 这些操作需要针对所有可能受到影响的RADOS对象(无论它们是否存在)发布操作 。 如果启用对象映射索引特性的话 , 对象若不存在就不需要发布操作了 。
- 启动|拼多多深入布局母婴产业带 补贴+直播启动“母婴产品溯源”行动
- RFID在冷链物流中的作用-RFID冷链资产管理解决方案
- 《深入理解Java虚拟机》:对象创建、布局和访问全过程
- 都说编程要逻辑好,如何理解这个逻辑
- 成长思维:我大哥对“道法术器”的理解,80%的人不懂
- Linux信号透彻分析理解与各种实例讲解
- 深入理解Netty编解码、粘包拆包、心跳机制
- 从底层理解this是什么
- 《深入理解Java虚拟机》:锁优化
- 不外|一发工资就转走,损失的是银行吗?原来我们都理解错了