揭开cinder-backup服务的神秘面纱
注意:转载请注明出处,欢迎大家交流学习!!!
cinder-backup的作用
cinder-backup用于将volume备份到其他存储系统上,目前支持的备份存储系统有swift、ceph、IBM Tivoli storage manager(TSM)、glusterFS等,默认是swift。
cinder-backup代码分析
Cinder-backup服务的代码位于/usr/lib/python2.7/site-packages/cinder/backup:
[[email protected] ~]# tree -L 2/usr/lib/python2.7/site-packages/cinder/backup
/usr/lib/python2.7/site-packages/cinder/backup
|-- __init__.py 指定并导入cinder-backup的API类;
|-- __init__.pyc
|-- __init__.pyo
|-- api.py 处理所有与卷备份服务相关的请求;
Cat api.py
class API(base.Base):卷备份管理的接口API,主要定义了卷的备份相关的三个操作的API:
create:实现卷的备份的建立;
delete:实现删除卷的备份;
restore:实现恢复备份;
这三个操作都需要通过backup的rpcapi定义的RPC框架类的远程调用来实现;
|-- api.pyc
|-- api.pyo
|-- chunkeddriver.py
|-- chunkeddriver.pyc
|-- chunkeddriver.pyo
|-- driver.py 所有备份驱动类的基类;
Cat driver.py
classBackupDriver(base.Base):所有备份驱动类的基类;
|-- driver.pyc
|-- driver.pyo
|-- drivers
| |-- __init__.py
| |-- __init__.pyc
| |-- __init__.pyo
| |-- bcec.py
| |-- bcec.pyc
| |-- bcec.pyo
| |-- ceph.py ceph备份服务实现;
cat ceph.py
class CephBackupDriver(BackupDriver):Ceph对象存储的Cinder卷备份类;这个类确认备份Cinder卷到Ceph对象存储系统;
| |-- ceph.pyc
| |-- ceph.pyo
| |-- fujitsu_onest.py
| |-- fujitsu_onest.pyc
| |-- fujitsu_onest.pyo
| |-- nfs.py
| |-- nfs.pyc
| |-- nfs.pyo
| |-- sheepdog.py
| |-- sheepdog.pyc
| |-- sheepdog.pyo
| |-- swift.py 用swift作为后端的备份服务的实现;
cat swift.py
classSwiftBackupDriver(BackupDriver):用swift作为后端的备份服务的各种管理操作实现类;
| |-- swift.pyc
| |-- swift.pyo
| |-- tsm.py IBM Tivoli存储管理(TSM)的备份驱动类;
cat tsm.py
classTSMBackupDriver(BackupDriver):实现了针对TSM驱动的卷备份的备份、恢复和删除等操作;
| |-- tsm.pyc
| `-- tsm.pyo
|-- manager.py 卷备份的管理操作的实现,其中的backupmanager类用于执行接收到的rpc请求
Cat manager.py
classBackupManager(manager.SchedulerDependentManager):块存储设备的备份管理;继承自类 SchedulerDependentManager;
主要实现的是三个远程调用的方法:
create_backup:实现卷的备份的建立(对应api.py中的creat方法);
restore_backup:实现恢复备份(对应api.py中的restore方法);
delete_backup:实现删除卷的备份(对应api.py中的delete方法);
|-- manager.pyc
|-- manager.pyo
|-- rpcapi.py 类似于cinder-volume服务,rpcapi.py文件定义了提供给RPC调用的接口backupAPI
|-- rpcapi.pyc
`-- rpcapi.pyo
不同的备份存储系统已driver的形式得以支持,driver文件中定义了各种driver的基类backupdriver,所有具体driver的实现都位于drivers子目录,通过配置文件的backup_driver选项指定使用的driver。
cinder 驱动服务的配置在cinder.conf文件中,默认配置如下所示:
backup_driver=cinder.backup.drivers.swift
用Ceph作为后端存储的配置
backup_driver = cinder.backup.drivers.ceph
backup_ceph_conf=/etc/ceph/ceph.conf
backup_ceph_user = cinder
backup_ceph_chunk_size = 134217728
backup_ceph_pool = backups
backup_ceph_stripe_unit = 0
backup_ceph_stripe_count = 0
TSM作为后端存储的配置
backup_driver = cinder.backup.drivers.tsm
backup_tsm_compression = True (BoolOpt)启用或禁用压缩备份
backup_tsm_password = password (StrOpt) 运行TSM用户的密码(节点密码)
backup_tsm_volume_prefix = backup (StrOpt)当备份到TSM时备份标识id的卷前缀
Swift作为后端存储的配置
backup_driver = cinder.backup.drivers.swift
backup_swift_url = http://localhost:8080/v1/AUTH
backup_swift_auth = per_user
backup_swift_user = <None>
backup_swift_key = <None>
backup_swift_container = volumebackups
backup_swift_object_size = 52428800
backup_swift_retry_attempts = 3
backup_swift_retry_backoff = 2
backup_compression_algorithm = zlib
当前cinder只支持设置一个备份存储后端,从mitaka开始,backup服务和volume服务解除了紧耦合,不再需要安装在同一台主机上,cinder-backup服务在接到情况后任何挑选
一个backup host来提供备份服务。
创建备份:cinder-backup通过rpc请求cinder-volume服务提供需要备份的卷(get_backup_device)。如果需要备份的卷处于available状态,直接把该卷返回给
cinder_backup,如果需要备份的卷正在被使用,则先根据该卷创建一份快照或者克隆卷,返回快照或者克隆卷给cinder-backup。Cinder-backup收到备份卷后,把备份卷挂载
到本机,将数据备份到后端存储,如下图所示:
恢复备份:cinder-backup将需要进行数据还要的卷挂载到本机,将数据从备份存储读出,恢复到卷上。
删除备份:cinder-backup直接调用backup driver中的接口进行删除
cinder-backup服务的相关操作
cinder type-create EBS 创建EBS卷类型
cinder type-list 查看卷类型
cinder create --display-name ling_volume 1 创建大小为1G的卷 (创建卷)
cinder create --volume-type ebs-ssd --display-name hing_volume 1 创建大小为1G,类型为ebs-ssd的卷(创建指定类型的卷)
cinder backup-create --container volumes_backup --display-name backuphing hing_volume 备份hing_volume卷,卷名为backuphing (备份卷)
cinder backup-restore --volume-id b5391c29-bf67-4e73-8337-5b322a057316 hing_volume (恢复卷)
cinder delete b5391c29-bf67-4e73-8337-5b322a057316 (删除卷)