设为首页 收藏本站
查看: 1288|回复: 0

[经验分享] cinder glusterfs driver代码结构

[复制链接]

尚未签到

发表于 2019-2-1 11:07:42 | 显示全部楼层 |阅读模式
  glusterfs.py文件
  cinder/volume/drivers/glusterfs.py就是cinder调用glusterfs的驱动了
  glusterfs.py只有一个GlusterfsDriver class,如下图所示
  
  

  
from os_brick.remotefs import remotefs as remotefs_brick # client端操作
from oslo_concurrency import processutils
from oslo_config import cfg
from oslo_log import log as logging
from oslo_utils import fileutils
from oslo_utils import units
from cinder import exception
from cinder.i18n import _, _LE, _LI, _LW
from cinder.image import image_utils
from cinder import utils
from cinder.volume import driver   # 很多定义的方法还没具体实现
from cinder.volume.drivers import remotefs as remotefs_drv  # 基类
class GlusterfsDriver(remotefs_drv.RemoteFSSnapDriver, driver.CloneableVD,
                      driver.ExtendVD):
    """Gluster based cinder driver.
    Creates file on Gluster share for using it as block device on hypervisor.
    Operations such as create/delete/extend volume/snapshot use locking on a
    per-process basis to prevent multiple threads from modifying qcow2 chains
    or the snapshot .info file simultaneously.
    """  class GlusterfsDriver的父类remotefs_drv.RemoteFSSnapDriver(主要看这个)
  

  cinder/volume/drivers/remotefs.py有两个class,类RemoteFSSnapDriver从类RemoteFSDriver继承

class RemoteFSSnapDriver(RemoteFSDriver, driver.SnapshotVD):
    """Base class for remotefs drivers implementing qcow2 snapshots.
       Driver must implement:
         _local_volume_dir(self, volume)
    """  

  类RemoteFSSnapDriver主要是针对volume snapshot的一系列操作。
  类RemoteFSDriver可以认为是一个base class,里面定义了很多基本方法
  上面提到的class都是关于server端的封装。
  

  client端的封装已经独立为一个项目:os-brick

  os_brick/remotefs/remotefs.py,只有一个class RemoteFsClient,右边是类中定义的方法。

  
  

  cinder后端是glusterfs作为openstack的附加盘来使用,glusterfs本身没有快照机制,云硬盘快照是通过qemu来实现的,代码位置:

  


cinder做快照的时候,分为两种:
1、volume available的时候,cinder使用qemu-img直接做快照
2、volume in-use的时候,cinder会call nova来完成
  

  cinder/volume/drivers/remotefs.py
  
  

  
  qemu-img rebase的作用见这里:http://linux.die.net/man/1/qemu-img
  -u是非安全模式,适用于backing-file重命名和移动
  简而言之,就是对比backing_filename和旧的backing_filename的差异部分写入new_snap_path
  


  

  关于Cinder QuiescedSnapshot介绍:
  https://specs.openstack.org/openstack/nova-specs/specs/kilo/implemented/quiesced-image-snapshots-with-qemu-guest-agent.html
  https://wiki.openstack.org/wiki/Cinder/QuiescedSnapshotWithQemuGuestAgent
  https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Virtualization_Deployment_and_Administration_Guide/sect-QEMU_Guest_Agent-Using_the_QEMU_guest_virtual_machine_agent_protocol_CLI.html
  

  

  cinder删除快照的时候,分为两种:
  1、volume available的时候,cinder使用qemu-img直接删除快照
  2、volume in-use的时候,cinder会先计算快照链如何整合( 需要Libvirt版本'1.2.7'以上),最终call nova来完成

  

  
  

  大致流程:
  cinder/volume/drivers/remotefs.py ->> cinder/volume/drivers/glusterfs.py ->> cinder/compute/nova.py ->> novaclient/v1_1/contrib/assisted_volume_snapshots.py ->> novaclient/base.py ->> nova/virt/libvirt/driver.py
  

  nova/virt/libvirt/driver.py:
  
  

  
  这里可以看到Cinder QuiescedSnapshot,第一次会先尝试做Quiesce快照,如果抛异常了,就执行下面不带Quiesce的快照。
  

  cinder run unit test http://docs.openstack.org/developer/cinder/devref/unit_tests.html
  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-670383-1-1.html 上篇帖子: GlusterFS整体分析 下篇帖子: Glusterfs初体验
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表