cinder开发文档
Openstack Cinder 开发文档
1、简介
- Openstack block storage service (ISCSI)并不是一个共享存储的解决方案(NFS),同一时刻只能将一个volume绑定到一个实例。
- Openstack volume create #在cinder-volumes中创建一个LV
- Openstack server add volume #将volume和实例绑定
- Cinder API service为openstack-cinder-api,进程为cinder-api。为适应实际环境所需的吞吐量(throughput),可以调整cinder-api的数量——通过设置cinder.conf中的osapi_volume_workers的值(默认等于cpu数量)。
2、配置cinder-volume的后端为NFS
(1) 以root用户登录cinder-volume节点,创建/etc/cinder/nfs_shares(root.cinder:640):
HOST:SHARE
注:一行代表一个实体,HOST:NFS的ip或主机名,SHARE:共享路径
(2)配置cinder.conf中参数
nfs_shares_config=/etc/cinder/nfs_shares
volume_driver=cinder.volume.drivers.nfs.NFSDriver
nfs_mount_options OPTIONS
Nfs_sparsed_volumes false(true表示volume的空间采用增量分配方式)
(3)设置selinux,setsebool -P virt_use_nfs on
3、配置cinder-volume为多后端
通过cinder.conf中enabled_backends定义启动的后端。一个cinder-volume对应一个back end,每个back end 有一个名字volume_backend_name。可以如下配置cinder.conf:
enabled_backends=lvmdriver-1,lvmdriver-2,lvmdriver-3
[lvmdriver-1]
volume_group=cinder-volumes-1
volume_driver=cinder.volume.drivers.lvm.LVMVolumeDriver
volume_backend_name=LVM
[lvmdriver-2]
volume_group=cinder-volumes-2
volume_driver=cinder.volume.drivers.lvm.LVMVolumeDriver
volume_backend_name=LVM
[lvmdriver-3]
volume_group=cinder-volumes-3
volume_driver=cinder.volume.drivers.lvm.LVMVolumeDriver
volume_backend_name=LVM_b
4、创建volume type及volume
$ openstack volume type create lvm
$ openstack volume type set lvm --property volume_backend_name=LVM
$ openstack volume create --size 1 --type lvm test_multi_backend
5、远程调试源码
远程调试的工作原理
远程调试的功能在Eclipse、IntelliJ IDEA等大型IDE中均有支持,实现原理都基本相同,这里采用PyCharm进行说明。
在远程调试的模式下,PyCharm(IDE)扮演服务端(Server)的角色,而运行在远程计算机上的应用程序扮演客户端(Client)的角色。正因如此,进行远程调试时,需要先在本地开发环境中设定端口并启动IDE,IDE会对设定的端口开始监听,等待客户端的连接请求;那远程计算机中的应用程序又是怎样与IDE建立通讯连接的呢?
针对远程调试功能,PyCharm提供了pydevd模块,该模块以pycharm-debug.egg的形式存在于PyCharm的安装路径中。远程计算机安装该库文件后,然后就可以调用pydevd.settrace方法,该方法会指定IDE所在机器的IP地址和监听的端口号,用于与IDE建立连接;建立连接后,便可在IDE中对远程在远程计算机中的程序进行单步调试。
远程调试的配置方法
(1)在远程计算机上安装pydevd模块
首先,在本地开发环境的PyCharm安装路径中找到pycharm-debug.egg文件(若远程计算机运行的是Python3,则需要pycharm-debug-py3k.egg);
然后,将pycharm-debug.egg文件拷贝至远程计算机,在远程计算机中将pycharm-debug.egg添加至引用路径,可以采用多种方式:
- 采用easy_install pycharm-debug.egg命令进行安装(pip命令无法安装,只能使用easy_install)
- 将pycharm-debug.egg添加至PYTHONPATH或sys.path: import sys; sys.path.append('/home/leo/app-dependancies/pycharm-debug.egg')
- 解压pycharm-debug.egg,将其中的pydev文件夹拷贝至远程应用程序目录下
最后,在远程计算机的Python命令行中输入import pydevd,若没有报错则说明pydevd模块安装成功。
(2)在本地开发环境的PyCharm中进行监听配置
在PyCharm中配置如下:
【Run】->【Edit Configurations】,【Add New Configuration】->【Python Remote Debug】,填写Local host name和Port,其中Local host name指的是本机开发环境的IP地址,而Port则随便填写一个10000以上的即可;需要注意的是,由于远程计算机需要连接至本地开发环境,因此本地IP地址应该保证远程可以访问得到,最后【Apply】and【OK】。
(3)在本地开发环境的PyCharm中配置Mapping映射
(4)在远程计算机的应用程序中插入代码
将如下代码插入至远程计算机的应用程序中。
<font color=#00BB00>有颜色</font>
import pydevd
pydevd.settrace('100.84.48.156', port=31235, stdoutToServer=True, stderrToServer=True)
其中,IP地址和端口号要与PyCharm中的监听配置保持一致。
(5)在PyCharm中启动Debug Server
【Run】->【Debug…】,选择刚创建的远程调试配置项,在Debug Console中会显示如下信息:
Starting debug server at port 31235
Waiting for process connection...
Use the following code to connect to the debugger:
import pydevd
pydevd.settrace('100.84.48.156', port=31235, stdoutToServer=True, stderrToServer=True)
这说明Debug Server已经启动并处于监听状态。
(6)在远程计算机中启动应用程序
在远程计算机中启动应用程序,当执行到pydevd.settrace语句时,便会与本地开发环境中的PyCharm建立通讯连接,接下来便可以在本地IDE中进行单步调试了。
注:若可连接却无法调试,需要关闭远程源码的多线程(对于cinder,修改cmd/api.py和volume.py中的eventlet.monkey_patch(thread=False))