Openstack Zoning – Region/Availability Zone/Host Aggregate
转自:http://www.tuicool.com/articles/qay673
背景知识
Openstack 自上而下可以分为不同的区域:Regions,Availability Zones和 Host Aggregates。
Region
每个region都有个完整的Openstack部署, 包括它自己的 API终点, 网络和计算资源。不同的region共享一套keystone和horizon来提供访问控制与web操作。
更像是一个地理上的概念,每个region有自己独立的endpoint,regions之间完全隔离,但是多个regions之间共享同一个keystone和dashboard。(注: openstack(f版)的dashboard还不支持多region)。所以除了提供隔离的功能,region的设计更多侧重地理位置的概念,用户可以选择离自己更近的region来部署自己的服务。
Cells
cell是openstack一个非常重要的概念,主要用来解决openstack的扩展性和规模瓶颈。众所周知,openstack是由很多的组件通过松耦合构成,当达到一定的规模后,某些模块必然成为整个系统的瓶颈。比较典型的组件就是database和AMQP了,所以,每个cell有自己独 立的DB和AMQP。
另外,由于cell被实现为树形结构,自然而然引入了分级调度的概念。通过在每级cell引入nova-cell服务,实现了以下功能:
(1)Messages的路由,即父cell通过nova-cell将Messages路由到子cell的AMQP模块。
(2)分级调度功能,即调度某个instances的时候先要进行cell的选择,目前只支持随机调度,后续会增加基于filter和weighing策略的调度。
(3)资源统计,子cell定时的将自己的资源信息上报给父cell,用来给分级调度策略提供决策数据和基于cell的资源监控。
(4)cell之间的通信(通过rpc完成)。
最后,所有的子cell公用底层cell的nova-api,子cell包含除了nova-api之外的其他nova服务,当然所有的cell都共用keystone服务。
(注:nova-*是指除了nova-api之外的其他nova服务,子cell + 父cell才构成了完整的nova服务)
注意,该层zone – Cell ,从Grizzly才开始介绍
Availability Zone
一个region中的计算结点可以被逻辑上划分为不同的availability zones(AZ)。启动虚拟机时,可以指定特定的AZ甚至特定AZ中的结点来启动该虚拟机实例。
AZ可以简单理解为一组节点的集合,这组节点具有独立的电力供应设备,比如一个个独立供电的机房,一个个独立供电的机架都可以被划分成AZ。所以,AZ主 要是通过冗余来解决可用性问题。在亚马逊的声明中,instance不可用指的是用户所有AZ中的同一instances都不可达才表明不可用。
AZ是用户可见的一个概念,用户在创建instance的时候可以选择创建到哪些AZ中,以保证instance的可用性。
更通俗点说,使用availability zone这个概念,用户可以指定虚拟机从哪个位置启动。AZ也可以根据可用性划分,比如大的集群可以根据地理位置划分,小的集群可以根据更加具体指标来划分,比如特定的供电设备。
修改availability zone,直接修改 nova.conf中的 字段node_availability_zone即可。
Host Aggregate
除了AZ,计算结点也可以被逻辑上划分为主机集合(Host Aggregates简称HA)。主机集合使用元数据去标记计算结点组,比如使用一个带有SSD磁盘的主机集合,或一个装有万兆网卡的主机集合。
一个计算结点可以同时属于一个主机集合以及AZ而不会有冲突,它也可以属于多个主机集合。主机集合仅能被管理员看到,对于终端用户而言,只能创建带有主机集合元数据链接的flavor定义的虚拟机。
Host Aggregates也是一组节点的组合,但强调这组节点具有共同的属性,比如:cpu是特定类型的一组节点,disks是ssd的一组节点,os是linux或windows的一组节点等等。
需要注意的是,Host Aggregates是用户不可见的概念,主要用来给nova-scheduler通过某一属性来进行instance的调度,比如讲数据库服务的 instances都调度到具有ssd属性的Host Aggregate中,又或者让某个flavor或某个image的instance调度到同一个Host Aggregates中。 Host Aggregates之间共享keystone和所有的nova服务。
简要总结
AZ用于让用户指定从哪个特定的服务器组合里发起虚拟机,主机集合主要用来为具有特定性能的主机分组以此让调度器根据某种特性在特定的集合中发起虚拟机。一个主机可以属于多个主机集合,只有云管理员才能看到主机集合。 主机集合以availability zone的形式展现给用户。
用实例解释AZ/HA
配置:
在nova中配置novascheduler启用主机集合,在控制结点/etc/nova.conf添加下面信息,然后重启nova-* services。
scheduler_default_filters=AggregateInstanceExtraSpecsFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter
常用 命令:
创建主机集合:
$ nova aggregate-create aggregate-SSD
创建一个主机集合,暴露给用户作为availability zone.。( 并非是AZ中创建主机集合! )
$ nova aggregate-create test-aggregate2
添加一个主机到主机集合,test-aggregate2。 由于主机集合定义了AZ test-az,这就使得该主机成为AZ test-az的一部分。
nova aggregate-add-host 2 devstackAggregate 2已经被成功更
列出AZ:
nova availability-zone-list
在AZ test-az中启动一个实例:
$ nova boot –flavor 84 –image 64d985ba-2cfa-434d-b789-06eac141c260 \> –availability-zone test-az testinstance
$ nova show 进行检验
在第一个主机集合中增加元数据,aggregate-SSD。
$ nova aggregate-set-metadata 1 ssd=true
Aggregate 1 has been successfully
创建一个flavor,它只能运行在具有ssd=true元数据的主机集合中的主机上。
$ nova flavor-create –is-public true m1.ssd 100 2048 20
创建flavor key-value以匹配主机集合的元数据:
$ nova flavor-key 100 set ssd=true
通过nova flavor-list ,可在extra_specs字段中看到key-value已经存在。
$ nova flavor-show
用新创建的 flavor启动虚拟机:
nova boot flavor m1.ssd –image f1e5e50a-2668-4627-bcd4-769a0dbe28d3 vm-flavor-m1.ssd
检查一下vm是否运行在compute-2上:
nova show vm-flavor-m1.ssd
思考
对于用户而言,AZ是唯一的选择。
对于管理员来说,可能需要考虑以下这些因素:
- 机器之间是否有明确的物理隔离,或者是考虑冗余。 如果的确有,则可考虑AZ
- 是否有基于硬件能力的隔离, 如果有很可能要使用HA
- 特定种类的主机是否跨多个位置, 如果的确如此,可能要使用主机集合以便能够将多个AZ中的主机划分一个分组中
- 如果需要用户能在发起虚拟机是一直能够选择不同的分类,可能就需要使用AZ
Openstack(F)多Region部署
- 修改keystonerc
必须在每个region中配置/root/keystonerc以便与他们都可以使用第一个region的keystone服务。
步骤:
- 在第一个region的openstack server r1-s-1中编辑/root/keystonerc:
export ADMIN_TOKEN=<RegionOne ADMIN_TOKEN>export OS_USERNAME=adminexport OS_TENANT_NAME=adminexport OS_PASSWORD=<admin’s password>export OS_AUTH_URL=http://<IP address of keystone on RegionOne>:5000/v2.0export OS_NO_CACHE=1export OS_REGION_NAME=RegionOne
- 在第二个OpenStack server r2-s-1 中编辑/root/keystonerc:
export ADMIN_TOKEN=<RegionOne ADMIN_TOKEN>export OS_USERNAME=adminexport OS_TENANT_NAME=adminexport OS_PASSWORD=<admin’s password as in RegionOne>export OS_AUTH_URL=http://<IP address of keystone on RegionOne>:5000/v2.0export OS_NO_CACHE=1export OS_REGION_NAME=RegionTwo
注意:
- OS_AUTH_URL是指第一个region的keystone
- OS_PASSWORD是指第一region的admin密码
- ADMIN_TOKEN是指第一个region的keystone地址
- 第二个独立安装的openstack环境,region指定为RegionTwo。(安装后改一下数据库即可)
- 在第一个region中为第二个region定义endpoints
在第一个region中, 为第二个region定义服终点(endpoints)以便于两个region可以相互通信。
步骤:
- 切换到第一个region中server r1-s-1
- 运行一下命令查看现存的服务信息:
source /root/keystonerckeystone service-listkeystone –os_tenant_name admin –os_username admin –os_password csdb123cnic –os_auth_url http://127.0.0.1:5000/v2.0 service-list+———————————-+————+—————+—————————+| id | name | type | description |+———————————-+————+—————+—————————+| 82bafff7f0174f64aaba89ad27790124 | ceilometer | metering | Ceilometer Service || efe3b832dc434c7e8dc1d17ce5dc9e1d | cinder | volume | Cinder Service || 6db45870a7634597934e221857de7052 | glance | image | Glance Image Service || caa85fd619b045588c98e15930b19f39 | heat | orchestration | Heat Service || 7eea22bba86d4b6d82cdf0a2ff50aeac | keystone | identity | Keystone Identity Service || 71286acb3d2842959c472258484b5d08 | navigator | navigator | Navigator Service || 66140356bcdf45eaac74535fb10037b4 | nova | compute | Nova Compute Service || a387b7d1ce674bd5a890881ec5b90abf | quantum | network | Quantum Service || 6427e302828b4c36a418314743af16cb | savanna | mapreduce | Hadoop Cluster Service || 28b6f1c261a24a158348823d7590baae | swift | object-store | Swift Service |+———————————-+————+—————+—————————+
- 在第一个region的keystone中为第二个region的服务建立endpoints。在以下步骤中,service-id使用keystone service-list返回的对应服务的ID:
l 使用第一个region的keystone服务器r1-s-1的ip地址创建一个endpoint,其中service-id是通过执行keystone service-list命令返回对应keystone的值。
keystone endpoint-create \–region RegionTwo \–service-id 7eea22bba86d4b6d82cdf0a2ff50aeac \–publicurl ‘http://<First box IP on RegionOne>:5000/v2.0′ \–adminurl ‘http://<First box IP on RegionOne>:35357/v2.0′ \–internalurl ‘http://<First box IP on RegionOne>:5000/v2.0′ keystone endpoint-create \–region RegionTwo \–service-id 7eea22bba86d4b6d82cdf0a2ff50aeac \–publicurl ‘http://192.168.64.22:$(public_port)s/v2.0′ \–adminurl ‘http://192.168.64.22:$(admin_port)s/v2.0′ \–internalurl ‘http://192.168.64.22:$(public_port)s/v2.0′ 注意: $(public_port)s=5000;$(admin_port)s = 35357
l 使用第二个region的服务器r2-s-1的ip地址为nova创建一个endpoint,其中service-id是通过执行keystone service-list命令返回对应region的值。
keystone endpoint-create \–region RegionTwo \–service-id b87b368193f64566abcbb80aa51d53f1 \–publicurl ‘http://<First box IP on RegionTwo>:8774/v2/%(tenant_id)s’ \–adminurl ‘http://<First box IP on RegionTwo>:8774/v2/%(tenant_id)s’ \–internalurl ‘http://<First box IP on RegionTwo>:8774/v2/%(tenant_id)s’
keystone endpoint-create \–region RegionTwo \–service-id 66140356bcdf45eaac74535fb10037b4 \–publicurl ‘http://192.168.99.68:$(compute_port)s/v2/$(tenant_id)s’ \–adminurl ‘http://192.168.99.68:$(compute_port)s/v2/$(tenant_id)s’ \–internalurl ‘http://192.168.99.68:$(compute_port)s/v2/$(tenant_id)s’ 注意:$(compute_port)= 8774;$(tenant_id)=默认租户,ip地址是第二region中相应服务所在的地址
l 为 Glance创建终点,使用第二个region对应服务(r2-s-1)的ip,其中service-id是通过执行keystone service-list命令返回对应glance的值。
keystone endpoint-create \–region RegionTwo \–service-id 6db45870a7634597934e221857de7052 \–publicurl ‘http://<First box IP on RegionTwo>:9292′ \–adminurl ‘http://<First box IP on RegionTwo>:9292′ \–internalurl ‘http://<First box IP on RegionTwo>:9292′
keystone endpoint-create \–region RegionTwo \–service-id 6db45870a7634597934e221857de7052 \–publicurl ‘http://192.168.99.68:9292′ \–adminurl ‘http://192.168.99.68:9292′ \–internalurl ‘http://192.168.99.68:9292′
l 为Cinder创建终点,,使用第二个region对应服务(r2-s-1)的ip,其中service-id是通过执行keystone service-list命令返回对应cinder的值。
keystone endpoint-create \–region RegionTwo \–service-id a5e75b99305f48259e0632a917b1a1d2 \–publicurl ‘http://<First box IP on RegionTwo>:8776/v1/%(tenant_id)s’ \–adminurl ‘http://<First box IP on RegionTwo>:8776/v1/%(tenant_id)s’ \–internalurl ‘http://<First box IP on RegionTwo>:8776/v1/%(tenant_id)s’
keystone endpoint-create \–region RegionTwo \–service-idefe3b832dc434c7e8dc1d17ce5dc9e1d \–publicurl ‘http://192.168.99.68:8776/v1/$(tenant_id)’ \–adminurl ‘http://192.168.99.68:8776/v1/$(tenant_id)’ \–internalurl ‘http://192.168.99.68:8776/v1/$(tenant_id)’
l 为swift创建终点,,使用第二个region对应服务(r2-s-1)的ip,其中service-id是通过执行keystone service-list命令返回对应swift的值。
keystone endpoint-create \ –region RegionTwo \ –service_id $SWIFT_SERVICE \ –publicurl “http:// <First box IP on RegionTwo>:8080/v1/AUTH_\$(tenant_id)s” \ –adminurl “http:// <First box IP on RegionTwo>:8080″ \ –internalurl http:// <First box IP on RegionTwo>:8080/v1/AUTH_\$(tenant_id)s
keystone endpoint-create \–region RegionTwo \–service_id 28b6f1c261a24a158348823d7590baae \–publicurl ‘http://192.168.99.68:8080/v1/AUTH_$(tenant_id)s’ \–adminurl ‘http://192.168.99.68:8080′ \–internalurl ‘ http://192.168.99.68:8080/v1/AUTH_$(tenant_id)s ‘
l 为savanna创建终点,使用第二个region对应服务(r2-s-1)的ip,其中service-id是通过执行keystone service-list命令返回对应sahara的值。
keystone endpoint-create \ –region RegionTwo \ –service_id $SAVANNA_SERVICE \ –publicurl “http:// <First box IP on RegionTwo>:8386″ \ –adminurl “http:// <First box IP on RegionTwo>:8386″ \ –internalurl “http:// <First box IP on RegionTwo>:8386″
keystone endpoint-create \ –region RegionTwo \ –service_id 6427e302828b4c36a418314743af16cb \ –publicurl “http:// 192.168.99.68:8386″ \ –adminurl “http:// 192.168.99.68:8386″ \ –internalurl “http:// 192.168.99.68:8386″
l 为ceilometer创建终点,使用第二个region对应服务(r2-s-1)的ip,其中service-id是通过执行keystone service-list命令返回对应ceilometer的值。
keystone endpoint-create \
–region RegionTwo \
–service_id $CEILOMETER_SERVICE \
–publicurl “http:// <First box IP on RegionTwo>:8777″ \
–adminurl “http:// <First box IP on RegionTwo>:8777″ \
–internalurl http:// <First box IP on RegionTwo>:8777
keystone endpoint-create \ –region RegionTwo \ –service_id 82bafff7f0174f64aaba89ad27790124 \ –publicurl “http://192.168.99.68:8777″ \ –adminurl “http://192.168.99.68:8777″ \ –internalurl “http://192.168.99.68:8777″
l 为navigator创建终点,使用第二个region对应服务(r2-s-1)的ip,其中service-id是通过执行keystone service-list命令返回对应navigator的值。
keystone endpoint-create \
–region RegionTwo \
–service_id $NAVIGATOR_SERVICE \
–publicurl “http:// <First box IP on RegionTwo>:8787″ \
–adminurl “http:// <First box IP on RegionTwo>:8787″ \
–internalurl “http:// <First box IP on RegionTwo>:8787″
keystone endpoint-create \ –region RegionTwo \ –service_id 71286acb3d2842959c472258484b5d08 \ –publicurl “http:// 192.168.99.68:8787″ \ –adminurl “http:// 192.168.99.68:8787″ \ –internalurl “http://192.168.99.68:8787″
l 其他服务如trove,heat等采用类似的形式
- 在第二个 region 中修改 a uth_token 使用第一个 region 中的 Keystone 服务
便于第二个region中的一些文件以便于该region的所有服务的认证请求使用第一个region中的keystone服务。
步骤:
- 登录到第二个region服务器
ssh user@ip
- 编辑nova配置文件
Edit /etc/nova/api-paste.ini 和 /etc/nova/nova.conf, 设置为第一个region上对应keystone服务地址, 以及第一个region的admin的token:
auth_host = <First box IP on RegionOne>auth_uri = http://<First box IP on RegionOne>:5000/v2.0/admin_token = <the token used by the first region>
运行:
service openstack-nova-api restart
- 编辑glance配置文件/etc/glance/glance-api.conf 设置相应值为第一个region的服务器 r1-s-l的ip地址
swift_store_auth_address = http://<First box IP on RegionOne>:5000/v2.0
编辑glance配置文件 /etc/glance/glance-cache.conf 设置相应值为第一个region的服务器 r1-s-l的ip地址
auth_url = http://<First box IP on RegionOne>:5000/v2.0/
编辑glance配置文件 /etc/glance/glance-api-paste.ini设置相应值为第一个region的服务器 r1-s-l的ip地址,设置相应值为第一个region的服务器r1-s-l的admin 密码:
auth_host = <First box IP on RegionOne> auth_uri = http://<First box IP on RegionOne>:5000/ admin_password = <admin password>
编辑glance配置文件/etc/glance/glance-registry-paste.ini 设置相应值为第一个region的服务器 r1-s-l的ip地址,设置相应值为第一个region的服务器r1-s-l的admin 密码:
auth_host = <First box IP on RegionOne>
auth_uri = http://<First box IP on RegionOne>:5000/ admin_password = <admin password>
运行:
service openstack-glance-api restartservice openstack-glance-registry restart
- 编辑cinder配置文件/etc/cinder/api-paste.ini设置相应值为第一个region的服务器 r1-s-l的ip地址,设置相应值为第一个region的服务器r1-s-l的admin 密码:
auth_host = <First box IP on RegionOne> admin_password = <admin password>
运行:
service openstack-cinder-api restart
- 编辑swift配置文件/etc/swift/proxy-server.conf设置相应值为第一个region的服务器 r1-s-l的ip地址,设置相应值为第一个region的服务器r1-s-l的admin 密码:
auth_host = <First box IP on RegionOne> admin_password = <admin password>
运行:
service openstack-swift-api restart 6. 修改glance客户端在第二个region中的python-glanceclient中修改shell.py,在其中的main函数增加os_region_nameKwargs = {……,‘os_region_name’: args.os_region_name}修改_get_endpoint(self,client,**kwargs),向url_for函数增加两个参数attr=’region’,filter_value=kwargs.get(‘os_region_name’)
- 验证多 regions 环境配置是否正确
1. 查看各个region中相关服务(nova,keystone,cinder,swift,glance, and so on)是否正常运行
2. 确保keystone已经启用了第二个region中的服务endpoint
root@eccp-manager:/opt/stack/python-keystoneclient/keystoneclient# keystone endpoint-list+———————————-+———–+—————————————————————-+—————————————————————-+—————————————————————-+———————————-+| id | region | publicurl | internalurl | adminurl | service_id |+———————————-+———–+—————————————————————-+—————————————————————-+—————————————————————-+———————————-+| 1afda8007a724aeaa5176cfcc5ee8067 | RegionOne | http://cinder-server.local.com:8776/v1/$(tenant_id)s | http://cinder-server.local.com:8776/v1/$(tenant_id)s | http://cinder-server.local.com:8776/v1/$(tenant_id)s | efe3b832dc434c7e8dc1d17ce5dc9e1d || 1e97605fd3ab44a78dd2274a2390408c | RegionOne | http://nova-server.local.com:$(compute_port)s/v2/$(tenant_id)s | http://nova-server.local.com:$(compute_port)s/v2/$(tenant_id)s | http://nova-server.local.com:$(compute_port)s/v2/$(tenant_id)s | 66140356bcdf45eaac74535fb10037b4 || 2b7b843c47cc417b88698ce04440aa5f | RegionOne | http://navigator-server.local.com:8787 | http://navigator-server.local.com:8787 | http://navigator-server.local.com:8787 | 71286acb3d2842959c472258484b5d08 || 3a4aea24bc194710a17fe97cecc9d275 | RegionTwo | http://192.168.64.22:$(public_port)s/v2.0 | http://192.168.64.22:$(public_port)s/v2.0 | http://192.168.64.22:$(admin_port)s/v2.0 | 7eea22bba86d4b6d82cdf0a2ff50aeac || 3a57c12cb3cf46e683b0a76cfd84717f | RegionTwo | http:// 192.168.99.68:8386 | http:// 192.168.99.68:8386 | http:// 192.168.99.68:8386 | 6427e302828b4c36a418314743af16cb || 3b4070e6dbe546da8e669bd5f6a0f477 | RegionTwo | http://192.168.99.68:8777 | http://192.168.99.68:8777 | http://192.168.99.68:8777 | 82bafff7f0174f64aaba89ad27790124 || 557aa7e164224e08bdfe8fa7008a7cb5 | RegionOne | http://keystone-server.local.com:$(public_port)s/v2.0 | http://keystone-server.local.com:$(public_port)s/v2.0 | http://keystone-server.local.com:$(admin_port)s/v2.0 | 7eea22bba86d4b6d82cdf0a2ff50aeac || 56b2c074ccd24f7897a26c79f31bc261 | RegionTwo | http://192.168.99.68:8080/v1/AUTH_$(tenant_id)s | http://192.168.99.68:8080/v1/AUTH_$(tenant_id)s | http://192.168.99.68:8080 | 28b6f1c261a24a158348823d7590baae || 6a80e0ee55d94611b93d3055e4dbd1fc | RegionOne | http://ceilometer-server.local.com:8777 | http://ceilometer-server.local.com:8777 | http://ceilometer-server.local.com:8777 | 82bafff7f0174f64aaba89ad27790124 || 83e7a65f6a5245e29396bfa97051dd8e | RegionTwo | http://192.168.99.68:9292 | http://192.168.99.68:9292 | http://192.168.99.68:9292 | 6db45870a7634597934e221857de7052 || afc0d9cc19924a8eacedc7412985adc9 | RegionOne | http://savanna-server.local.com:8386 | http://savanna-server.local.com:8386 | http://savanna-server.local.com:8386 | 6427e302828b4c36a418314743af16cb || b52955e0759247b9a9a17efb21c26273 | RegionOne | http://swift-server.local.com:8080/v1/AUTH_$(tenant_id)s | http://swift-server.local.com:8080/v1/AUTH_$(tenant_id)s | http://swift-server.local.com:8080 | 28b6f1c261a24a158348823d7590baae || bd66174dbcd442b6977e4c59067cc19a | RegionOne | http://quantum-server.local.com:9696/ | http://quantum-server.local.com:9696/ | http://quantum-server.local.com:9696/ | a387b7d1ce674bd5a890881ec5b90abf || bea166fb9bca49d3abe591d8a8e47020 | RegionTwo | http://192.168.99.68:8776/v1/$(tenant_id)s | http://192.168.99.68:8776/v1/$(tenant_id)s | http://192.168.99.68:8776/v1/$(tenant_id)s | efe3b832dc434c7e8dc1d17ce5dc9e1d || c884d32cb41b4c34afcf191aa5ad360e | RegionOne | http://heat-server.local.com:/v1 | http://heat-server.local.com:/v1 | http://heat-server.local.com:/v1 | caa85fd619b045588c98e15930b19f39 || cb057bd460b743d89fdbdd0b17949c5d | RegionTwo | http://192.168.99.68:$(compute_port)s/v2/$(tenant_id)s | http://192.168.99.68:$(compute_port)s/v2/$(tenant_id)s | http://192.168.99.68:$(compute_port)s/v2/$(tenant_id)s | 66140356bcdf45eaac74535fb10037b4 || e3ab1cfde9c94c7e95e5ce29a76e424c | RegionOne | http://glance-server.local.com:9292 | http://glance-server.local.com:9292 | http://glance-server.local.com:9292 | 6db45870a7634597934e221857de7052 |+———————————-+———–+—————————————————————-+—————————————————————-+—————————————————————-+———————————-+
3. 验证glance在每一个region中注册一个镜像
(1) 在第一个region中注册镜像
glance image-create –name test_image_r1 –disk-format qcow2 –container-format bare –is-public True < cirros-0.3.0-x86_64-blank.img
root@eccp-manager:/opt/stack/python-keystoneclient/keystoneclient# glance image-list
+————————————–+————————————-+————-+——————+————+——–+| ID | Name | Disk Format | Container Format | Size | Status |+————————————–+————————————-+————-+——————+————+——–+| c6a2be55-ab1d-4a07-bda4-e157134d4d6a | savanna-0.3-vanilla-1.2.1-fedora-19 | qcow2 | bare | 1385496576 | active || fd4acbf2-ec5a-4da0-ba4c-9a8fb4df7f5d | test_image_r1 | qcow2 | bare | 25165824 | active || ff665998-fb6d-4a2b-88f9-639787bba4e3 | cirros-test-image | ami | ami | 25165824 | active |+————————————–+————————————-+————-+——————+————+——–+
(2) 在第二个region中注册镜像glance image-create –name test_image_r2 –disk-format qcow2 –container-format bare –is-public True < cirros-0.3.0-x86_64-blank.img
root@eccp-manager-think:/opt/stack/install_scripts/files# glance image-list
+————————————–+——————-+————-+——————+———-+——–+| ID | Name | Disk Format | Container Format | Size | Status |+————————————–+——————-+————-+——————+———-+——–+| 5967c19c-5664-40a9-a7c3-229abaf0f4f3 | test_image_r2 | qcow2 | bare | 25165824 | active || 5d9cb4bd-bc24-492e-a02d-e9b5690b278b | cirros-test-image | ami | ami | 25165824 | active |+————————————–+——————-+————-+——————+———-+——–+
4. 验证nova(1).在一个region中启动vm
nova boot test-r1 –image fd4acbf2-ec5a-4da0-ba4c-9a8fb4df7f5d –flavor 1
root@eccp-manager:/opt/stack/python-keystoneclient/keystoneclient# nova list
+————————————–+———————–+——–+——————–+| ID | Name | Status | Networks |+————————————–+———————–+——–+——————–+| 9f8414c9-bd66-4a10-87ac-7eebdfa35043 | cluster-1-v-dn-m-001 | ACTIVE | private=10.1.12.8 || ba118b21-26d2-4ee4-8f30-53a32c121943 | cluster-1-v-dn-m-002 | ACTIVE | private=10.1.12.9 || 58ab5812-0904-46d1-8ad9-007d5988a4cc | cluster-1-v-dn-m-003 | ACTIVE | private=10.1.12.10 || 0b702689-0de0-478d-bd59-f1dfc9e5c01c | cluster-1-v-dn-m-004 | ACTIVE | private=10.1.12.13 || 42d10719-2b19-42a9-bcce-09de0f480060 | cluster-1-v-dn-m-005 | ACTIVE | private=10.1.12.14 || 898ae4f7-feb8-46c5-8d73-27b69d902c28 | cluster-1-v-dn-m-006 | ACTIVE | private=10.1.12.15 || 6a008280-8a47-474b-8042-6bd37e29fef2 | cluster-1-v-dn-m-007 | ACTIVE | private=10.1.12.16 || fcd5c4ea-1700-485c-88f2-9be56b029e3f | cluster-1-v-hoo-m-001 | ACTIVE | private=10.1.12.6 || 5723577b-1b98-4b9a-980a-9158611c8149 | cluster-1-v-nn-m-001 | ACTIVE | private=10.1.12.7 || f22fe8af-b4e3-4dbe-b702-a3a41a481742 | test-r1 | ACTIVE | private=10.1.12.2 |+————————————–+———————–+——–+——————–+
root@eccp-manager:/opt/stack/python-keystoneclient/keystoneclient# nova show f22fe8af-b4e3-4dbe-b702-a3a41a481742
+————————————-+———————————————————-+| Property | Value |+————————————-+———————————————————-+| OS-DCF:diskConfig | MANUAL || OS-EXT-SRV-ATTR:host | eccp-manager.local.com || OS-EXT-SRV-ATTR:hypervisor_hostname | eccp-manager.local.com || OS-EXT-SRV-ATTR:instance_name | instance-00000043 || OS-EXT-STS:power_state | 1 || OS-EXT-STS:task_state | None || OS-EXT-STS:vm_state | active || accessIPv4 | || accessIPv6 | || cdrom_active | False || config_drive | || created | 2014-04-29T09:36:33Z || flavor | m1.tiny (1) || hostId | 7ee3a3330a93a9d78c926c6a59c25aa8b84ff7f01c990f473a4d53c9 || id | f22fe8af-b4e3-4dbe-b702-a3a41a481742 || image | test_image_r1 (fd4acbf2-ec5a-4da0-ba4c-9a8fb4df7f5d) || key_name | None || metadata | {} || name | test-r1 || private network | 10.1.12.2 || progress | 0 || security_groups | [{u'name': u'default'}] || status | ACTIVE || tenant_id | 65f984a8dac6457f8d280a796fabea05 || updated | 2014-04-29T09:36:46Z || user_id | 67a204c2a1dd45e68cfce1102c4d3bb9 || vm_mode | None |+————————————-+———————————————————-+
(2).在第二个region启动vm
nova boot test-r2 –image 5967c19c-5664-40a9-a7c3-229abaf0f4f3 –flavor 1
nova list
+————————————–+———+——–+———-+| ID | Name | Status | Networks |+————————————–+———+——–+———-+| 3a95f6e0-2925-4608-a191-e3a02e3cb1d0 | test-r2 | BUILD | |+————————————–+———+——–+———-+ root@eccp-manager-think:~# nova show 3a95f6e0-2925-4608-a191-e3a02e3cb1d0+————————————-+———————————————————-+| Property | Value |+————————————-+———————————————————-+| OS-DCF:diskConfig | MANUAL || OS-EXT-SRV-ATTR:host | eccp-manager-think.localdomain || OS-EXT-SRV-ATTR:hypervisor_hostname | eccp-manager-think.localdomain || OS-EXT-SRV-ATTR:instance_name | instance-00000002 || OS-EXT-STS:power_state | 0 || OS-EXT-STS:task_state | scheduling || OS-EXT-STS:vm_state | building || accessIPv4 | || accessIPv6 | || cdrom_active | False || config_drive | || created | 2014-04-29T10:12:29Z || flavor | m1.tiny (1) || hostId | 80ef3005ba04e6217d22b96fc819411ed13aec5430fa5308795cbd05 || id | 3a95f6e0-2925-4608-a191-e3a02e3cb1d0 || image | test_image_r2 (5967c19c-5664-40a9-a7c3-229abaf0f4f3) || key_name | None || metadata | {} || name | test-r2 || progress | 0 || security_groups | [{u'name': u'default'}] || status | BUILD || tenant_id | 65f984a8dac6457f8d280a796fabea05 || updated | 2014-04-29T10:12:29Z || user_id | 67a204c2a1dd45e68cfce1102c4d3bb9 || vm_mode | None |+————————————-+———————————————————-+
(3).在第一个region中可以看到两个region中所有的vm实例列表
root@eccp-manager:/opt/stack/python-keystoneclient/keystoneclient# nova –os-region RegionOne image-list
+————————————–+————————————-+——–+——–+| ID | Name | Status | Server |+————————————–+————————————-+——–+——–+| ff665998-fb6d-4a2b-88f9-639787bba4e3 | cirros-test-image | ACTIVE | || c6a2be55-ab1d-4a07-bda4-e157134d4d6a | savanna-0.3-vanilla-1.2.1-fedora-19 | ACTIVE | || fd4acbf2-ec5a-4da0-ba4c-9a8fb4df7f5d | test_image_r1 | ACTIVE | |+————————————–+————————————-+——–+——–+ root@eccp-manager:/opt/stack/python-keystoneclient/keystoneclient# nova –os-region RegionTwo image-list+————————————–+——————-+——–+——–+| ID | Name | Status | Server |+————————————–+——————-+——–+——–+| 5d9cb4bd-bc24-492e-a02d-e9b5690b278b | cirros-test-image | ACTIVE | || 5967c19c-5664-40a9-a7c3-229abaf0f4f3 | test_image_r2 | ACTIVE | |+————————————–+——————-+——–+——–+
horizon调整
版本不一需要调整的文件不一,故记录大概的问题在登录时需进行如下调整:
1. 调整配置
启用local_settings.py的region支持,需说明的原本AVAILABLE_REGIONS用于多keystone的方式(可以确定folsom版本如此)
AVAILABLE_REGIONS = [# (‘http://localhost:5000/v2.0′, ‘node’),# (‘http://cluster2.example.com:5000/v2.0′, ‘cluster2′), (‘http://localhost:5000/v2.0′, ‘RegionOne’),(‘http://localhost:5000/v2.0′, ‘RegionTwo’)
,2. 认证登录 在认证登录forms.py增加多region支持,修改默认采用第一个region的做法
3. 查找keystone终点修改horizon的api中 base.py,修改掉默认采用第一region的做法
当然追求完美的话,keysotne的api调用接口,测试用例也自行修改啊!
在登录后增加region切换,需如下调整:
增加view,初始化相应视图
增加form,增加选择处理动作,核心是通过session传递region
urls.py增加: url(r’^regions/$’, UpdateRegionView.as_view(), name=’regions’))
在相应位置增加对view的调用