这里openstack环境使用folsom-f3版本,在nova.conf中配置:
volume_driver=nova.volume.driver.RBDDriver
rbd_pool=nova
查看pool:
#rados lspools
data
metadata
rbd
为volume创建nova pool:
#rados mkpool nova
#rados lspools
data
metadata
rbd
nova
创建卷:
#nova volume-create --display_name=rbd-vol 1
#nova volume-list
查看nova池中的卷:
#rbd --pool nova ls
volume-badbe797-e0ef-418f-bd17-7f982978db58
#rbd --pool nova info volume-badbe797-e0ef-418f-bd17-7f982978db58
rbd image 'volume-badbe797-e0ef-418f-bd17-7f982978db58':
size 1024 MB in 256 objects
order 22 (4096 KB objects)
block_name_prefix: rb.0.0
parent: (pool -1)
在openstack中生成虚拟机之后,有三种办法对卷进行Attache:
第一种:修改virsh中的虚拟机的xml:
#virsh list --all
1 instance-00000001 running
#virsh edit 1
加入:
<disk type='network'>
<driver name="qemu" type="raw"/>
<source protocol="rbd" name="nova/ volume-1d3a2d86-07ad-4e2f-84b8-2e75a67052d8 ">
</source>
<target dev="vdb" bus="virtio"/>
</disk>
#virsh destroy 1
#virsh start instance-00000001
注意,这里的host填的是监控节点,有几个监控节点就写几个host。source中name的参数格式为:your-pool/your-volume。
第二种:
nova volume-attach e26afe59-c9a5-4000-ab50-d4fa4650d4ab 1d3a2d86-07ad-4e2f-84b8-2e75a67052d8 /dev/vdd
其中第一个id是实例id,第二个是卷id。
第三种:操作dashboard界面进行Attache。
进入虚拟机之后可以看到/dev/vdb的块设备,格式化、挂载就可以用了:
#mkfs.ext4 /dev/vdb
#mount /dev/vdb /mnt
需要安装python-ceph
修改/etc/glance/glance-api.conf:
# Set the rbd storage
default_store = rbd
# ============ RBD Store Options =============================
# Ceph configuration file path
# If using cephx authentication, this file should
# include a reference to the right keyring
# in a client.<USER> section
rbd_store_ceph_conf = /etc/ceph/ceph.conf
# RADOS user to authenticate as (only applicable if using cephx)
rbd_store_user = glance
# RADOS pool in which images are stored
rbd_store_pool = images
# Images will be chunked into objects of this size (in megabytes).
# For best performance, this should be a power of two
rbd_store_chunk_size = 8
创建images池:
#rados mkpool images
successfully created pool images
重启glance-api和glance-registry服务。
查看images池的详情:
#rados --pool=images ls
#rados --pool=images df
上传镜像到rbd中:
#glance add name=centos_6.2_ramdisk_rbd disk_format=ari container_format=ari is_public=True < initrd-2.6.32-220.el6.x86_64.img
Added new image with ID: b1f797b7-b995-48b5-b4e2-aaa55bd2e15f
#glance add name=centos_6.2_kernel_rbd disk_format=aki container_format=aki is_public=True < vmlinuz-2.6.32-220.el6.x86_64
Added new image with ID: 78f330fc-8598-4039-b851-f903a3b6cf8c
#glance add name=centos_6.2_final_rbd disk_format=ami container_format=ami is_public=True ramdisk_id=b1f797b7-b995-48b5-b4e2-aaa55bd2e15f kernel_id=78f330fc-8598-4039-b851-f903a3b6cf8c < centos_6.2_final.img
在ceph服务器上查看上传进度:
ceph -w
查看上传结果:
#glance index
#rados --pool=images ls
#rados --pool=images df
查看数据库:
select * from glance.images where status="Active" \G;
*************************** 4. row ***************************
created_at: 2012-09-26 15:22:35
updated_at: 2012-09-26 15:33:28
deleted_at: NULL
deleted: 0
id: 44ec62fa-43cc-49ea-9d09-df4fb042a2ff
name: centos_6.2_final_rbd
disk_format: ami
container_format: ami
size: 2146435072
status: active
is_public: 1
location: rbd://44ec62fa-43cc-49ea-9d09-df4fb042a2ff
checksum: e54e654825c36a0805ae7f45c24fa2d7
min_disk: 0
min_ram: 0
owner: NULL
protected: 0
1. 试验坏境:
node1:openstack控制节点+计算节点 ip:1.1.1.2
node2:openstack计算节点 ip:1.1.1.3
node3:cephFS存储 ip:1.1.1.4
2. 挂载共享
将openstack的实例存储目录挂到ceph共享上,如本文的目录为/home/nova/instances
命令:
mount.ceph 1.1.1.4:6789:/ /home/nova/instances
df -h
这里挂载时需要注意:挂载机要安装ceph模块,否则报没有模块的错误。
安装模块有两种方法:
第一种:下载代码编译出模块,但是这种方法需要至少linux内核为2.6.34以上,否则会报错:
# git clone git://ceph.newdream.net/git/ceph-client-standalone.git
# cd ceph-client-standalone/
# git branch master-backport origin/master-backport
# make -C libceph
# cp libceph/Module.symvers ceph/
# make -C ceph
# insmod ./libceph/libceph.ko
# insmod ./ceph/ceph.ko
第二种:下载较新的linux内核,进行内核升级,升级时将ceph编译为模块。
3. 修改配置文件
修改nova.conf的配置文件:
--live_migration_retry_count=30
--live_migration_uri=qemu+tcp://%s/system
--live_migration_flag=VIR_MIGRATE_TUNNELLED,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_UNDEFINE_SOURCE
--live_migration_bandwidth=0
其中live_migration_flag的作用:
VIR_MIGRATE_LIVE 迁移中不进行暂停操作,只在成功的瞬间出现短暂的暂停。在xp的虚拟机迁移时,该选项会导致迁移后的实例鼠标无法响应,需要重启才能恢复。建议去掉该选项,迁移过程中一直暂停,迁移之后实例状态正常。
VIR_MIGRATE_PEER2PEER 源主机和目标主机进行直连。
VIR_MIGRATE_TUNNELLED 在libvirt的RPC通道上使用隧道传输迁移数据。
VIR_MIGRATE_PERSIST_DEST
VIR_MIGRATE_UNDEFINE_SOURCE 迁移成功后删除源主机的domain。
VIR_MIGRATE_CHANGE_PROTECTION
将ceph存储系统node3上的ceph.conf配置文件拷贝到node1和node2的/etc/ceph文件夹下。
修改libvirt相关配置(Centos):
vi /etc/libvirt/libvirtd.conf:
listen_tls = 0
listen_tcp = 1
listen_addr = "0.0.0.0"
vi /etc/sysconfig/libvirtd
#LIBVIRTD_OPTS="--listen"
去掉以上语句注释
重启libvirt服务,查看进程是否有--listen
service libvirtd restart
ps aux | grep libvirt
root 3068 1.8 0.1 1005608 13176 ? Sl 06:00 0:05 libvirtd --daemon --listen
4. 在线迁移
使用命令:
nova --debug live-migration bb63b800-c6ce-4de3-aa2d-d6cfa421d77b node2
以上命令是调用openstack的迁移命令,将node1上的uuid为bb63b800-c6ce-4de3-aa2d-d6cfa421d77b的虚拟机迁移到node2上。
virsh migrate --debug --live instance_name qemu+tcp://node2/system
以上命令是使用libvirt的迁移命令进行迁移。
在dashboard中添加迁移功能进行迁移。
5. 错误解决
在迁移过程中如果报错: error: Unable to read from monitor: Connection reset by peer
解决:将nova.conf中关于vnc的字段去掉。如果要使用vnc协议的话,解决方法如下:安装或更新最新的vnc相关软件包之后可以正常进行迁移。