OpenStack Nova: 在一个hypervisor中配置多个Ceph后端

本文由 Ceph中国社区-老王翻译,耿航、张冬洪 校稿。

英文出处:Sebastien Han 欢迎加入 翻译组

本文讲述的是如何配置一个Nova hypervisor用于多个后端存储实例的临时根分区

1:基本原理

我的主要思路是能够正确使用你自己的hypervisors的资源,目前,nova不支持多image_type后端,临时根分区取决于实例的规格,针对一个单一的计算节点。
这有点像cinder那种多后端的支持,我们可以选择类型
因为我不想每个计算节点分别对应不同后端存储,所以我开始寻找一个合适的解决方案。
这种解决方案有点特殊,但是我认为对拥有有限的计算节点或者其他用户案例都是有用处的

一个案例:
我想设置不同的QOS,在不同的临时根分区,但是我不像在每一个hypervisors做这种限制,那种我可以采用不同Ceph后端存储(例如:不同速率的盘)

2:配置CEPH

首先安装部署ceph集群,然后配置两个不同的存储池:

ceph osd pool create vms 128
ceph osd pool create vms2 128

最后创建能够访问两个存储池的key

ceph auth get-or-create client.cinder mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms, allow rwx pool=vms2, allow rx pool=images

3.1 配置 OpenStack Nova

因为我们要使用host aggregates,我们需要特别的调度程序过滤器,配置您的调度:

scheduler_default_filters=RetryFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter,AggregateInstanceExtraSpecsFilter

那么现在我可以用两种nova配置文件,只有这样才能区分这两个nova的实例在同一个hypervisor运行使用不同的主机变量。
所以这两个nova实例不会是一个真正的节点,但确实一个逻辑实体
这需要配置DNS解析或者在/etc/hosts定义你的主机名在你的openstack控制节点

第一个nova-compute 进程使用的是nova-ceph1配置文件:

[DEFAULT]
host = compute-ceph1

[libvirt]
images_rbd_ceph_conf = /etc/ceph/ceph.conf
images_rbd_pool = vms
images_type = rbd

第二个nova-compute 进程使用的是nova-ceph2配置文件:

[DEFAULT]
host = compute-ceph2

[libvirt]
images_rbd_ceph_conf = /etc/ceph/ceph.conf
images_rbd_pool = vms2
images_type = rbd

现在你需要执行如下命令启动你的nova进程:

nova-compute –config-file /etc/nova/nova-ceph1.conf –config-file /etc/nova/nova-ceph2.conf

如果使用systemd,可以添加如下配置:

[Unit]
Description=OpenStack Nova Compute Server
After=syslog.target network.target

[Service]
Environment=LIBGUESTFS_ATTACH_METHOD=appliance
Type=notify
Restart=always
User=nova
ExecStart=/usr/bin/nova-compute –config-file /etc/nova/nova-ceph1.conf –config-file /etc/nova/nova-ceph2.conf

[Install]
WantedBy=multi-user.target

验证nova服务:

nova service-list
+—-+—————-+—————+———-+———+——-+—————————-+—————–+
| Id | Binary | Host | Zone | Status | State | Updated_at | Disabled Reason |
+—-+—————-+—————+———-+———+——-+—————————-+—————–+
| 1 | nova-conductor | deventer | internal | enabled | up| 2015-09-14T09:55:09.000000 | – |
| 2 | nova-cert | deventer | internal | enabled | up| 2015-09-14T09:55:18.000000 | – |
| 3 | nova-network | deventer | internal | enabled | up| 2015-09-14T09:55:11.000000 | – |
| 4 | nova-scheduler | deventer | internal | enabled | up| 2015-09-14T09:55:16.000000 | – |
| 6 | nova-compute | compute-ceph1 | nova | enabled | up| 2015-09-14T09:55:12.000000 | – |
| 7 | nova-compute | compute-ceph2 | nova | enabled | up| 2015-09-14T09:55:17.000000 | – |
+—-+—————-+—————+———-+———+——-+—————————-+—————–+

3.2 Host aggregates

我们创建两个逻辑上独立的Host aggregates,并且将compute-ceph1和compute-ceph2分别加入:

$ nova aggregate-create ceph-compute-storage1
+—-+———————–+——————-+——-+———-+
| Id | Name | Availability Zone | Hosts | Metadata |
+—-+———————–+——————-+——-+———-+
| 1 | ceph-compute-storage1 | – | | |
+—-+———————–+——————-+——-+———-+

$ nova aggregate-create ceph-compute-storage2
+—-+———————–+——————-+——-+———-+
| Id | Name | Availability Zone | Hosts | Metadata |
+—-+———————–+——————-+——-+———-+
| 2 | ceph-compute-storage2 | – | | |
+—-+———————–+——————-+——-+———-+

$ nova aggregate-add-host ceph-compute-storage1 compute-ceph1
Host compute-ceph1 has been successfully added for aggregate 1
+—-+———————–+——————-+—————–+———-+
| Id | Name | Availability Zone | Hosts | Metadata |
+—-+———————–+——————-+—————–+———-+
| 1 | ceph-compute-storage1 | – | ‘compute-ceph1’ | |
+—-+———————–+——————-+—————–+———-+

$ nova aggregate-add-host ceph-compute-storage2 compute-ceph2
Host compute-ceph2 has been successfully added for aggregate 2
+—-+———————–+——————-+—————–+———-+
| Id | Name | Availability Zone | Hosts | Metadata |
+—-+———————–+——————-+—————–+———-+
| 2 | ceph-compute-storage2 | – | ‘compute-ceph2’ | |

设置元数据标志被Nova flavor识别:

$ nova aggregate-set-metadata 1 cephcomputestorage1=true
Metadata has been successfully updated for aggregate 1.
+—-+———————–+——————-+—————–+—————————-+
| Id | Name | Availability Zone | Hosts | Metadata |
+—-+———————–+——————-+—————–+—————————-+
| 1 | ceph-compute-storage1 | – | ‘compute-ceph1’ | ‘cephcomputestorage1=true’ |
+—-+———————–+——————-+—————–+—————————-+

$ nova aggregate-set-metadata 2 cephcomputestorage2=true
Metadata has been successfully updated for aggregate 2.
+—-+———————–+——————-+—————–+—————————-+
| Id | Name | Availability Zone | Hosts | Metadata |
+—-+———————–+——————-+—————–+—————————-+
| 2 | ceph-compute-storage2 | – | ‘compute-ceph2’ | ‘cephcomputestorage2=true’ |
+—-+———————–+——————-+—————–+—————————-+

3.3. Flavors
最后一步,我们确定新的flavor选择逻辑的aggregates,其实就是选择nova实例运行在哪个ceph存储池

$ nova flavor-create m1.ceph-compute-storage1 8 128 40 1
+—-+————————–+———–+——+———–+——+——-+————-+———–+
| ID | Name | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
+—-+————————–+———–+——+———–+——+——-+————-+———–+
| 8 | m1.ceph-compute-storage1 | 128 | 40 | 0 | | 1 | 1.0 | True |
+—-+————————–+———–+——+———–+——+——-+————-+———–+

$ nova flavor-create m1.ceph-compute-storage2 9 128 40 1
+—-+————————–+———–+——+———–+——+——-+————-+———–+
| ID | Name | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
+—-+————————–+———–+——+———–+——+——-+————-+———–+
| 9 | m1.ceph-compute-storage2 | 128 | 40 | 0 | | 1 | 1.0 | True |
+—-+————————–+———–+——+———–+——+——-+————-+———–+

我们将我们的元数据标记了分配给了flavors,所以可以区分它们:

$ nova flavor-key m1.ceph-compute-storage1 set aggregate_instance_extra_specs:cephcomputestorage1=true
$ nova flavor-key m1.ceph-compute-storage2 set aggregate_instance_extra_specs:cephcomputestorage2=true

4 该测试了:

$ nova boot –image 96ebf966-c7c3-4715-a536-a1eb8fc106df –flavor 8 –key-name admin ceph1
$ nova boot –image 96ebf966-c7c3-4715-a536-a1eb8fc106df –flavor 9 –key-name admin ceph2

$ nova list
+————————————–+——-+——–+————+————-+——————+
| ID | Name | Status | Task State | Power State | Networks |
+————————————–+——-+——–+————+————-+——————+
| 79f7c0b6-6761-454d-9061-e5f143f02a0e | ceph1 | ACTIVE | – | Running | private=10.0.0.5 |
| f895d02e-84f8-4e30-8575-ef97e21a2554 | ceph2 | ACTIVE | – | Running | private=10.0.0.6 |
+————————————–+——-+——–+————+————-+——————+

$ sudo rbd -p vms ls
79f7c0b6-6761-454d-9061-e5f143f02a0e_disk
79f7c0b6-6761-454d-9061-e5f143f02a0e_disk.config

$ sudo rbd -p vms2 ls
f895d02e-84f8-4e30-8575-ef97e21a2554_disk
f895d02e-84f8-4e30-8575-ef97e21a2554_disk.config

Leave a Comment

电子邮件地址不会被公开。