版權聲明:本文為原創文章,轉載請注明出處。
概念介紹
所謂openstack多region,就是多套openstack共享一個keystone和horizon。每個區域一套openstack環境,可以分布在不同的地理位置,只要網絡可達就行。個人認為目的就是為了提供環境隔離的功能,選擇啟虛擬機的時候可以根據自己所處的位置就近選擇。
既然提到region了,那不如就此總結下openstack中其他的至上而下的不同的區域概念。
Region
每個region都有個完整的Openstack部署環境, 有自己的一套服務的endpoint(服務入口)。
不同的region共享一套keystone和horizon來提供訪問控制與web操作,regions之間完全隔離,但是多個regions之間共享同一個keystone和dashboard。
Cells
cell英譯細胞,主要解決openstack的擴展性和規模瓶頸(rabbitmq和database組件),通過每個cell引進自己獨立的rabbitmq和db來解決。
cell被實現為樹形的分級調度,在每個cell中引入cell的概念:
(1)Messages的路由,即父cell通過nova-cell將Messages路由到子cell的AMQP模塊。
(2)分級調度功能,即調度某個instances的時候先要進行cell的選擇,根據調度策略。
(3)資源統計,子cell定時的將自己的資源信息上報給父cell,用來給分級調度策略提供決策數據和基於cell的資源監控。
(4)cell之間的通信(通過rpc完成)
最后,所有的子cell公用底層cell的nova-api,子cell包含除了nova-api之外的其他nova服務,當然所有的cell都共用keystone服務。
(注:nova-*是指除了nova-api之外的其他nova服務,子cell + 父cell才構成了完整的nova服務)
小結一下:我的理解就是在原來的nova-api訪其他服務之前加了一層,先選擇哪個子cell來提供計算服務。父cell才有nova api服務,子cell提供nova的其他服務,cell之間通過nova-cell把消息傳遞到子cell的rabbitmq(AMQP)。
AZ(Availability Zones)
region中的計算結點可以被邏輯上划分為不同的availability zones,具有獨立的電力供應設備,如下圖。用戶可見,在啟動虛擬機時,可以指定特定的AZ來啟動該虛擬機實例,通常你看到的就是默認nova。
修改availability zone,直接修改 nova.conf中的 字段node_availability_zone即可。
機器之間是否有明確的物理隔離,或者是考慮冗余。 如果的確有,則可考慮AZ。
Host Aggregate
除了AZ,計算結點也可以被邏輯上划分為主機集合,具有相同特性的集群,比如使用一個帶有SSD磁盤的主機集合,或一個裝有萬兆網卡的主機集合。Host Aggregates是用戶不可見的概念。
小結一下:AZ用於讓用戶指定從哪個特定的服務器組合里發起虛擬機,主機集合主要用來為具有特定性能的主機分組以此讓調度器根據某種特性在特定的集合中發起虛擬機。
是否有基於硬件能力的隔離, 如果有很可能要使用HA。
以上是一些openstack的區域分級的概念,當然keystone里面還有分domain,project,Telnet,user,role等的概念后面另外再介紹。
多region的實踐
openstack多region,就是多套openstack共享一個keystone和horizon,那么很容易想到,在一套openstack的keystone的服務實例中創建另外一個區域的服務入口點,只不過認證的服務endpoint一樣罷了,horizon自動識別region。
環境介紹
以我自己的例子,先搭建了兩套openstack環境,因為是為了實踐,所以我簡單的搞了兩套allinone的。
A主機是10.133.47.95 ,定義成我的region one;
B主機是10.133.47.20,定義成我的region two。
配置
1.在A主機上創建nova、glance、cinder服務入口endpoint,定義為region two。
[root@zmg ~(keystone_admin)]# keystone endpoint-create --service-id $(keystone service-list | awk '/ compute / {print $2}') --publicurl http://10.133.47.95:5000/v2.0 --internalurl http://10.133.47.95:5000/v2.0 --adminurl http://10.133.47.95:35357/v2.0 --region RegionTwo
[root@zmg ~(keystone_admin)]# keystone endpoint-list|grep
RegionTwo
注意:1.這里的endpoint地址都是主機B上的openstack環境中的服務endpoint。
2.glance,cinder以及其他服務,一樣操作。
2.在主機B上對相應的服務配置修改
①編輯nova配置文件,在/etc/nova/nova.conf
auth_uri=http://10.133.47.95:5000/v2.0
identity_uri=http://10.133.47.95:35357
admin_token = 3a64046c0c9a4ef4af3d13819a451461
admin_user=nova
admin_password=cd2b0a687cd14376
admin_tenant_name=services
注:1.原來uri這里是47.20,因為我們要和regionone共享keystone,所以認證url改為主機A上的keystone。
2.admin_token需要增加,也是主機Akeystone配置文件中的,必須要加不然認證沒法通過,user和password要和A的文件中的一致。
[neutron]
url=http://10.133.47.20:9696
admin_username=neutron
admin_password=072bdefd676644ca
admin_tenant_name=services
admin_auth_url=http://10.133.47.95:5000/v2.0
2.修改cinder.conf文件
[keystone_authtoken]
auth_uri = http://10.133.47.95:5000/v2.0
region_name = RegionTwo
identity_uri = http://10.133.47.95:35357
admin_user = cinder
admin_password = e3cdaaf26e774509
admin_token = 3a64046c0c9a4ef4af3d13819a451461
admin_tenant_name = services
3.glance配置修改和nova cinder類似,只不過要改api.conf和register.conf。
[keystone_authtoken]
auth_uri=http://10.133.47.95:5000/v2.0
identity_uri=http://10.133.47.95:35357
admin_user=glance
admin_password=bdda12a1e36e4d70
admin_tenant_name=services
admin_token = 3a64046c0c9a4ef4af3d13819a451461
[keystone_authtoken]
auth_uri=http://10.133.47.95:5000/v2.0
identity_uri=http://10.133.47.95:35357
admin_user=glance
admin_password=bdda12a1e36e4d70
admin_token = 3a64046c0c9a4ef4af3d13819a451461
admin_tenant_name=services
總結:要將B機器上所有的驗證url都改成A的驗證url,另外注意將B中各種配置文件中的token改成A中的admin_token。還有注意兩台機器的時間一定要接近,不然還是會出現未授權的錯誤。
驗證:
修改好之后就可以登錄到horizon上去看了,horizon不需要修改,它可以自己識別多region。
Region one
Region two
至此,我們就可以通過一個horizon界面去操作不同環境的openstack去創建虛擬機,資源是完全隔離的,是不是很方便了。
以上,是我在完成后再寫的步驟,細節的地方可能會有紕漏,但是思路基本就是這樣。
另外,cell的實驗會在后續介紹。