{"id":7064,"date":"2015-01-27T16:50:18","date_gmt":"2015-01-27T14:50:18","guid":{"rendered":"http:\/\/blog.zhaw.ch\/icclab\/?p=7064"},"modified":"2015-04-29T15:24:21","modified_gmt":"2015-04-29T13:24:21","slug":"how-to-install-a-multi-region-devstack-part-1","status":"publish","type":"post","link":"https:\/\/blog.zhaw.ch\/icclab\/how-to-install-a-multi-region-devstack-part-1\/","title":{"rendered":"How to install a multi region devstack Part-1"},"content":{"rendered":"<p><strong>Introduction<\/strong><br \/>\nI have introduced Disaster Recovery (DR) services in the tutorial of last ICCLAB\u00a0 <a href=\"http:\/\/blog.zhaw.ch\/icclab\/icclab-news-nov-2014-issue-no-3\/\">newsletter<\/a> which also made an overview of possible OpenStack configurations. Several configuration options could be considered. In particular, in case of a stakeholder having both the role of Cloud provider and DR service provider, a suitable safe configuration consists in distributing the infrastructures in different geographic locations. OpenStack gives the possibility to organise the controllers in different Regions which are sharing the same keystone. <a href=\"https:\/\/wiki.openstack.org\/wiki\/Heat\/Blueprints\/Multi_Region_Support_for_Heat\">Here<\/a> you will find the an overall specification using heat, I will simulate same configurations using devstack on <a href=\"https:\/\/www.virtualbox.org\/\">Virtual BoX<\/a> environments. One of the scope of this blog post is to support\u00a0 the students who are using Juno devstack.<\/p>\n<p>There will be a second part of this tutorial to show a possible implementation of\u00a0 DR services lifecycle between two regions.<\/p>\n<p><!--more--><\/p>\n<p><strong>Goals<\/strong><br \/>\nThis post provides devstack (Juno release) support to intall OpenStack on two controllers in two separate regions. The second region, for example,\u00a0 might be used as a replica and backup infrastructure for DR services. A single keystone will be shared between the two controllers.\u00a0 In particular, following other <a href=\"https:\/\/www.youtube.com\/watch?v=zoi8WpGwrXM&amp;feature=youtu.be\">tutorials<\/a>, I will use Virtual Box hosting the\u00a0 two VMs of the two controllers.<\/p>\n<p>It will be needed then to create endpoints in keystone with two different regions (RegionOne and RegionTwo). RegionTwo will always pass through the keystone of RegionOne. The\u00a0 Horizon dashboard will be only serving in RegionOne.<\/p>\n<p>I will split the tutorial in two parts, this first part will be dedicated to the two controllers.<\/p>\n<p><strong>RegionOne controller<\/strong><br \/>\nLet&#8217;s install and configure the first controller in RegionOne using Virtual Box. Therefore please install Virtual Box on your host system and Install Ubuntu Linux from www.Ubuntu.com\/download\/desktop on a Virtual Machine (VM)\u00a0 (storage 40GB and RAM 3GB (minimum). Call this VM &#8220;RegioneOne&#8221;.<\/p>\n<p>Install Guest additions for Linux.<\/p>\n<p>I suggest to start with a VM having initially a NAT Network attached to the Adapter 1 which allows to download all packages from the internet.<\/p>\n<p>Any line below starting with $ is a command line on the Ubuntu controller node all the others are comments to the following commands.<\/p>\n<p>Make all the updates and upgrades of Ubuntu then reboot:<\/p>\n<pre>$sudo apt-get update\r\n$sudo apt-get upgrade\r\n$sudo apt-get dist-upgrade\r\n$sudo apt-get install virtualbox-guest-dkms\r\n$sudo apt-get install vim\r\n$sudo reboot<\/pre>\n<p>Virtual Box configuration (Figure -1) .<\/p>\n<p>The intention is to have two Virtual Machines having internal addresses 20.10.0.1 and 20.10.0.2. Therefore at Virtual Box settings\u00a0 (Control-G) configuration, Network tab: Create a Host-Only Ethernet Adapter #1 with IPv4 address 20.10.0.3 and IPv4 Network Mask\u00a0 255.255.255.0<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/adapter-1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone  wp-image-7469\" src=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/adapter-1.jpg\" alt=\"antonio cimmino\" width=\"332\" height=\"264\" \/><\/a><\/p>\n<p style=\"text-align: center\">Figure-1<\/p>\n<p>Then configure the interfaces of the Virtual Machine as follows:<\/p>\n<p>eth0: Host-only Adapter #1<br \/>\nIPv4=20.10.0.1 and IPv4 Network Mask\u00a0 255.255.255.0<br \/>\neth1: NAT<\/p>\n<p>Install git to allow cloning of the devstack from the repository<\/p>\n<pre>$sudo apt-get install git<\/pre>\n<p>Retrieve devstack source (juno master branch):<\/p>\n<pre>$git clone -b stable\/juno https:\/\/github.com\/openstack-dev\/devstack.git\r\n$cd devstack<\/pre>\n<p>I will use the configuration of devstack through the localrc file.<\/p>\n<p>I have found a very good tutorial made by best friend of mine Ian <a href=\"https:\/\/www.youtube.com\/watch?v=zoi8WpGwrXM&amp;feature=youtu.be\">Y. Choi<\/a>\u00a0 who proposed a good localrc file stored on http:\/\/goo.gl\/OeOGqL and another\u00a0 on <a href=\"https:\/\/ask.openstack.org\/en\/question\/51440\/authentication-failed-when-setting-up-two-region-openstack-deployment-using-devstack\/\">here<\/a><\/p>\n<p>The localrc file is read during the stack.sh phase of devstack installation.<\/p>\n<p>Please, play the <a href=\"https:\/\/www.youtube.com\/watch?v=zoi8WpGwrXM&amp;feature=youtu.be\">video tutorials<\/a> of Ian to understand some of the syntax of localrc file and all the Ubuntu installation commands. I have used instead the Juno master branch which handles correctly the regions and keystone service host.<\/p>\n<p>The localrc file that i suggest to use is following (to be created with vim):<\/p>\n<p>REGION_NAME=<strong>RegioneOne<\/strong><br \/>\nOFFLINE=False<br \/>\nGIT_BASE=https:\/\/github.com<br \/>\nHOST_IP=20.10.0.1<br \/>\n# Logging<br \/>\nLOGDAYS=1<br \/>\nLOGFILE=$DEST\/logs\/stack.sh.log<br \/>\nSCREEN_LOGDIR=$DEST\/logs\/screen<br \/>\nVERBOSE=TRUE<br \/>\n# Credentials<br \/>\nDATABASE_PASSWORD=password<br \/>\nADMIN_PASSWORD=password<br \/>\nSERVICE_PASSWORD=password<br \/>\nSERVICE_TOKEN=password<br \/>\nRABBIT_PASSWORD=password<br \/>\nRECLONE=yes<br \/>\n# Services<br \/>\nENABLED_SERVICES=rabbit,mysql,key<br \/>\nENABLED_SERVICES+=,n-api,n-crt,n-obj,n-cpu,n-cond,n-sch,n-novnc,n-cauth<br \/>\nENABLED_SERVICES+=,neutron,q-svc,q-agt,q-dhcp,q-l3,q-meta<br \/>\nENABLED_SERVICES+=,g-api,g-reg<br \/>\nENABLED_SERVICES+=,cinder,c-api,c-vol,c-sch,c-bak<br \/>\nENABLED_SERVICES+=,horizon<br \/>\nenable_service ceilometer-acompute ceilometer-acentral ceilometer-anotification ceilometer-collector<br \/>\nenable_service ceilometer-alarm-evaluator,ceilometer-alarm-notifier<br \/>\nenable_service ceilometer-api<br \/>\nenable_service heat h-api h-api-cfn h-api-cw h-eng<\/p>\n<p><strong>In icehouse release keystone will not read the REGION_NAME=RegioneOne. It is hardcoded to RegionOne.<\/strong><\/p>\n<p>Let&#8217;s start stacking in RegioneOne. (We have used RegioneOne instead of the default RegionOne )<\/p>\n<pre>$.\/stack.sh<\/pre>\n<p>After about 5 min on my I7 machine!, the stack displays:<\/p>\n<pre>$Horizon is now available at http:\/\/20.10.0.1\/\r\n$Keystone is serving at http:\/\/20.10.0.1:5000\/v2.0\/\r\n$Examples on using novaclient command line is in exercise.sh\r\n$The default users are: admin and demo\r\n$The password: password\r\n$This is your host ip: 20.10.0.1<\/pre>\n<p>Let&#8217;s source the environment with openrc file as descibed in the readme.<\/p>\n<pre>$source openrc admin\r\n$env | grep OS_<\/pre>\n<p>The results are:<\/p>\n<pre><span style=\"color: #ff0000\"><strong>OS_<\/strong><\/span>REGION_NAME=RegioneOne\r\n<span style=\"color: #ff0000\"><strong>OS_<\/strong><\/span>IDENTITY_API_VERSION=2.0\r\n<span style=\"color: #ff0000\"><strong>OS_<\/strong><\/span>PASSWORD=password\r\n<span style=\"color: #ff0000\"><strong>OS_<\/strong><\/span>AUTH_URL=http:\/\/20.10.0.1:5000\/v2.0\r\n<span style=\"color: #ff0000\"><strong>OS_<\/strong><\/span>USERNAME=admin\r\n<span style=\"color: #ff0000\"><strong>OS_<\/strong><\/span>TENANT_NAME=demo\r\n<span style=\"color: #ff0000\"><strong>OS_<\/strong><\/span>VOLUME_API_VERSION=2\r\n<span style=\"color: #ff0000\"><strong>OS_<\/strong><\/span>CACERT=\/opt\/stack\/data\/CA\/int-ca\/ca-chain.pem\r\n<span style=\"color: #ff0000\"><strong>OS_<\/strong><\/span>NO_CACHE=1<\/pre>\n<p>Try now to Get the current endpoints from keystone:<\/p>\n<pre>$keystone endpoint-list<\/pre>\n<p><a href=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/endpointsJPG.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"  wp-image-7421 aligncenter\" src=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/endpointsJPG.jpg\" alt=\"antonio cimmino\" width=\"661\" height=\"157\" \/><\/a>You should\u00a0 get all the endpoints in RegioneOne on the IP: 20.10.0.1 controller one.<\/p>\n<p>The Horizon is also working fine on 20.10.0.1 (Figure-2)<\/p>\n<p><a href=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/hor.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-7422\" src=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/hor.jpg\" alt=\"hor\" width=\"1535\" height=\"775\" srcset=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/hor.jpg 1535w, https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/hor-300x151.jpg 300w, https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/hor-1024x517.jpg 1024w, https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/hor-500x252.jpg 500w\" sizes=\"auto, (max-width: 1535px) 100vw, 1535px\" \/><\/a><\/p>\n<p style=\"text-align: center\">Figure-2<\/p>\n<p><strong>RegionTwo controller<\/strong><br \/>\nLet&#8217;s install and configure the second controller in RegionTwo using Virtual Box as well. Install Virtual Box on your host system and Install Ubuntu Linux from www.Ubuntu.com\/download\/desktop on a VM (called &#8220;RegionTwo&#8221;) in Virtual Box (storage 40GB and RAM 3GB (minimum). Install Guest additions for Linux.<\/p>\n<p>Start with a VM having initially a NAT Network attached to the Adapter 1 which allows to download all packages from the internet.<\/p>\n<p>Make all the updates and upgrades of Ubuntu then reboot.<\/p>\n<pre>$sudo apt-get update\r\n$sudo apt-get upgrade\r\n$sudo apt-get dist-upgrade\r\n$sudo apt-get install virtualbox-guest-dkms\r\n$sudo apt-get install vim\r\n$sudo reboot<\/pre>\n<p>Then configure the interfaces of this second Machine as follows:<br \/>\neth0: Host-only Adapter #1<br \/>\nIPv4=20.10.0.2 and IPv4 Network Mask\u00a0 255.255.255.0<br \/>\neth1: NAT<\/p>\n<p>Install git to allow cloning of the devstack from the repository<\/p>\n<pre>$sudo apt-get install git<\/pre>\n<p>Retrieve devstack source (juno master branch)<\/p>\n<pre>$git clone -b stable\/juno https:\/\/github.com\/openstack-dev\/devstack.git\r\n$cd devstack<\/pre>\n<p>Use again the configuration of devstack through the localrc file, create it with vim.<\/p>\n<p>#Keystone service on controller 1<br \/>\nKEYSTONE_SERVICE_HOST=20.10.0.1<br \/>\nKEYSTONE_AUTH_HOST=20.10.0.1<br \/>\nREGION_NAME=<strong>RegionTwo<\/strong><br \/>\nOFFLINE=False<br \/>\nGIT_BASE=https:\/\/github.com<br \/>\nHOST_IP=20.10.0.2<br \/>\n# Logging<br \/>\nLOGDAYS=1<br \/>\nLOGFILE=$DEST\/logs\/stack.sh.log<br \/>\nSCREEN_LOGDIR=$DEST\/logs\/screen<br \/>\nVERBOSE=TRUE<br \/>\n# Credentials<br \/>\nDATABASE_PASSWORD=password<br \/>\nADMIN_PASSWORD=password<br \/>\nSERVICE_PASSWORD=password<br \/>\nSERVICE_TOKEN=password<br \/>\nRABBIT_PASSWORD=password<br \/>\nRECLONE=yes<br \/>\n# Services<br \/>\nENABLED_SERVICES=rabbit,mysql,key<br \/>\nENABLED_SERVICES+=,n-api,n-crt,n-obj,n-cpu,n-cond,n-sch,n-novnc,n-cauth<br \/>\nENABLED_SERVICES+=,neutron,q-svc,q-agt,q-dhcp,q-l3,q-meta<br \/>\nENABLED_SERVICES+=,g-api,g-reg<br \/>\nENABLED_SERVICES+=,cinder,c-api,c-vol,c-sch,c-bak<br \/>\nenable_service heat h-api h-api-cfn h-api-cw h-eng<\/p>\n<p>Now stack it:<\/p>\n<pre>$.\/stack.sh<\/pre>\n<p>We have almost the same results of the controller one:<\/p>\n<pre>$Keystone is serving at http:\/\/20.10.0.1:5000\/v2.0\/\r\n$Examples on using novaclient command line is in exercise.sh\r\n$The default users are: admin and demo\r\n$The password: password\r\n$This is your host ip: 20.10.0.2<\/pre>\n<p>Let&#8217;s show the environment\u00a0 on RegionTwo:<\/p>\n<pre>$source openrc admin\r\n$env | grep OS_<\/pre>\n<p>The results are now:<\/p>\n<pre><span style=\"color: #ff0000\"><strong>OS_<\/strong><\/span>REGION_NAME=<strong>RegionTwo<\/strong>\r\n<span style=\"color: #ff0000\"><strong>OS_<\/strong><\/span>IDENTITY_API_VERSION=2.0\r\n<span style=\"color: #ff0000\"><strong>OS_<\/strong><\/span>PASSWORD=password\r\n<span style=\"color: #ff0000\"><strong>OS_<\/strong><\/span>AUTH_URL=http:\/\/20.10.0.1:5000\/v2.0\r\n<span style=\"color: #ff0000\"><strong>OS_<\/strong><\/span>USERNAME=admin\r\n<span style=\"color: #ff0000\"><strong>OS_<\/strong><\/span>TENANT_NAME=demo\r\n<span style=\"color: #ff0000\"><strong>OS_<\/strong><\/span>VOLUME_API_VERSION=2\r\n<span style=\"color: #ff0000\"><strong>OS_<\/strong><\/span>CACERT=\/opt\/stack\/data\/CA\/int-ca\/ca-chain.pem\r\n<span style=\"color: #ff0000\"><strong>OS_<\/strong><\/span>NO_CACHE=1<\/pre>\n<p>Let&#8217;s test the keystone now:<\/p>\n<p>$Keystone endpoint-list<a href=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/endpoint-two.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone  wp-image-7424\" src=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/endpoint-two.jpg\" alt=\"endpoint two\" width=\"669\" height=\"235\" \/><\/a><\/p>\n<p>Fantastic!, keystone has been populated with all the endpoints of RegionTwo. This was done during the <strong>.\/stack.sh<\/strong> in RegionTwo.<\/p>\n<p>Let&#8217;s also utilise Horizon (Figure-3) from the web browser of the controller two: http:\/\/20.10.0.1\/<\/p>\n<p><a href=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/horizon-two-regions.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-7427\" src=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/horizon-two-regions.jpg\" alt=\"horizon two regions\" width=\"1082\" height=\"627\" srcset=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/horizon-two-regions.jpg 1082w, https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/horizon-two-regions-300x174.jpg 300w, https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/horizon-two-regions-1024x593.jpg 1024w, https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/horizon-two-regions-500x290.jpg 500w\" sizes=\"auto, (max-width: 1082px) 100vw, 1082px\" \/><\/a><\/p>\n<p style=\"text-align: center\">Figure-3<\/p>\n<p>Now the dashboard offers on the admin tab, on the left top corner, the possibility to select RegioneOne or RegionTwo. The second part of this tutorial will also make some use cases of the dashboard.<\/p>\n<p>Let&#8217;s now check the nova services with these commands, from Regiontwo CLI.<\/p>\n<pre>$nova service-list\r\n$nova --os-region-name RegionTwo service-list<\/pre>\n<p>You can verify that all nova services are running on the two Hosts of\u00a0 RegionTwo and RegioneOne. TheHhost names being displayed are the Virtual Box VM names.<\/p>\n<p><a href=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/nova-serv-2-.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-7435\" src=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/nova-serv-2-.jpg\" alt=\"antonio cimmino\" width=\"523\" height=\"297\" srcset=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/nova-serv-2-.jpg 523w, https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/nova-serv-2--300x170.jpg 300w, https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/nova-serv-2--500x284.jpg 500w\" sizes=\"auto, (max-width: 523px) 100vw, 523px\" \/><\/a><\/p>\n<p>Let&#8217;s conclude this post with an example on how to boot VMs (OpenStack), from RegioneOne on RegionTwo and RegioneOne.<\/p>\n<p>Controller One:<\/p>\n<pre>$nova image-list<\/pre>\n<p><a href=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/nova-image-list.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-7437\" src=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/nova-image-list.jpg\" alt=\"antonio cimmino\" width=\"494\" height=\"135\" srcset=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/nova-image-list.jpg 494w, https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/nova-image-list-300x82.jpg 300w\" sizes=\"auto, (max-width: 494px) 100vw, 494px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<pre>$ nova --os-regione-name RegioneOne boot VMOne --flavor=m1.tiny --image c20bff4c-c874-4261-b954-c5aea90a603c<\/pre>\n<pre>$nova list<\/pre>\n<p><a href=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/nova-list-one.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-7438\" src=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/nova-list-one.jpg\" alt=\"nova list one\" width=\"529\" height=\"87\" srcset=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/nova-list-one.jpg 529w, https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/nova-list-one-300x49.jpg 300w, https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/nova-list-one-500x82.jpg 500w\" sizes=\"auto, (max-width: 529px) 100vw, 529px\" \/><\/a><\/p>\n<p>The VM: VMOne is in Build status on RegioneOne. Let&#8217;s try to make the same command to boot an image on RegionTwo. In this case image id needs to be taken from the RegionTwo:<\/p>\n<p>Controller Two:<\/p>\n<pre>$nova image-list<\/pre>\n<p><a href=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/image-list-reg-2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-7439\" src=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/image-list-reg-2.jpg\" alt=\"image list reg 2\" width=\"501\" height=\"167\" srcset=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/image-list-reg-2.jpg 501w, https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/image-list-reg-2-300x100.jpg 300w, https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/image-list-reg-2-500x167.jpg 500w\" sizes=\"auto, (max-width: 501px) 100vw, 501px\" \/><\/a><\/p>\n<p>If you make a $nova list on this secons controller, there will be no running VMs. You can verify this.<\/p>\n<p>Let&#8217;s boot from Controller One a VM called VMTwo (cirros-0.3.2-x86_64-uec) on controller two:<\/p>\n<pre>$ nova --os-region-name RegionTwo boot VMTwo --flavor=m1.tiny --image d77dd539-f76f-4f50-b7a5-f62f657b0e25<\/pre>\n<pre>$nova --os-region-name RegionTwo list\r\n$nova --os-region-name RegioneOne list<\/pre>\n<p><a href=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/nova-list-2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-7440\" src=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/nova-list-2.jpg\" alt=\"nova list 2\" width=\"523\" height=\"80\" srcset=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/nova-list-2.jpg 523w, https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/nova-list-2-300x46.jpg 300w, https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/nova-list-2-500x76.jpg 500w\" sizes=\"auto, (max-width: 523px) 100vw, 523px\" \/><\/a><\/p>\n<p><a href=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/nova-list-one.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-7438\" src=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/nova-list-one.jpg\" alt=\"nova list one\" width=\"529\" height=\"87\" srcset=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/nova-list-one.jpg 529w, https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/nova-list-one-300x49.jpg 300w, https:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/nova-list-one-500x82.jpg 500w\" sizes=\"auto, (max-width: 529px) 100vw, 529px\" \/><\/a><\/p>\n<p>As you can verify we have two VMs (VMTwo, VMOne) running on RegionTwo and RegioneOne respectively.<\/p>\n<p><strong>Conclusions<\/strong><br \/>\nWe have seen how to install two controllers in two different OpenStack regions having the same keystone which is populated during the stacking phases. We have also made some example of booting servers on the two separate regions. The horizon dasboard is also centralised and allows to manage from a web interface the infrastructures by selecting a specific region. Make yourself further tests between the two controllers. The second part of this post will be again utilising the two regions\u00a0 together with a middleware that will be acting as a survaivibility manager implementing a simple Disaster Recovery lifecycle according last <a href=\"http:\/\/blog.zhaw.ch\/icclab\/icclab-news-nov-2014-issue-no-3\/\">ICCLab newsletter<\/a>.<\/p>\n<p>Some improvemens of the network configurations will be needed, this will be also part of the next blog. Stay tuned.<\/p>\n<p><a hcb-fetch-image-from=\"https:\/\/twitter.com\/ancibug\" class=\"twitter-timeline\" data-width=\"640\" data-height=\"960\" data-dnt=\"true\" href=\"https:\/\/twitter.com\/ancibug?ref_src=twsrc%5Etfw\">Tweets by ancibug<\/a><script async src=\"https:\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script><\/p>\n<p>Many thanks to <a href=\"https:\/\/www.youtube.com\/watch?v=zoi8WpGwrXM&amp;feature=youtu.be\">Y. Choi<\/a>\u00a0 and devstack community<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction I have introduced Disaster Recovery (DR) services in the tutorial of last ICCLAB\u00a0 newsletter which also made an overview of possible OpenStack configurations. Several configuration options could be considered. In particular, in case of a stakeholder having both the role of Cloud provider and DR service provider, a suitable safe configuration consists in distributing [&hellip;]<\/p>\n","protected":false},"author":86,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[1,5,12,15,21],"tags":[],"features":[],"class_list":["post-7064","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-articles","category-education","category-howtos","category-openstack-2"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>How to install a multi region devstack Part-1 - Service Engineering (ICCLab &amp; SPLab)<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.zhaw.ch\/icclab\/how-to-install-a-multi-region-devstack-part-1\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to install a multi region devstack Part-1\" \/>\n<meta property=\"og:description\" content=\"Introduction I have introduced Disaster Recovery (DR) services in the tutorial of last ICCLAB\u00a0 newsletter which also made an overview of possible OpenStack configurations. Several configuration options could be considered. In particular, in case of a stakeholder having both the role of Cloud provider and DR service provider, a suitable safe configuration consists in distributing [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.zhaw.ch\/icclab\/how-to-install-a-multi-region-devstack-part-1\/\" \/>\n<meta property=\"og:site_name\" content=\"Service Engineering (ICCLab &amp; SPLab)\" \/>\n<meta property=\"article:published_time\" content=\"2015-01-27T14:50:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2015-04-29T13:24:21+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/adapter-1.jpg\" \/>\n<meta name=\"author\" content=\"Antonio Cimmino\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Antonio Cimmino\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/how-to-install-a-multi-region-devstack-part-1\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/how-to-install-a-multi-region-devstack-part-1\/\"},\"author\":{\"name\":\"Antonio Cimmino\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/3bf84b7ebed48ca8fdd7b41ab98a8adc\"},\"headline\":\"How to install a multi region devstack Part-1\",\"datePublished\":\"2015-01-27T14:50:18+00:00\",\"dateModified\":\"2015-04-29T13:24:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/how-to-install-a-multi-region-devstack-part-1\/\"},\"wordCount\":1374,\"commentCount\":6,\"image\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/how-to-install-a-multi-region-devstack-part-1\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/adapter-1.jpg\",\"articleSection\":[\"*.*\",\"Articles\",\"Education\",\"HowTos\",\"OpenStack\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.zhaw.ch\/icclab\/how-to-install-a-multi-region-devstack-part-1\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/how-to-install-a-multi-region-devstack-part-1\/\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/how-to-install-a-multi-region-devstack-part-1\/\",\"name\":\"How to install a multi region devstack Part-1 - Service Engineering (ICCLab &amp; SPLab)\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/how-to-install-a-multi-region-devstack-part-1\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/how-to-install-a-multi-region-devstack-part-1\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/adapter-1.jpg\",\"datePublished\":\"2015-01-27T14:50:18+00:00\",\"dateModified\":\"2015-04-29T13:24:21+00:00\",\"author\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/3bf84b7ebed48ca8fdd7b41ab98a8adc\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/how-to-install-a-multi-region-devstack-part-1\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.zhaw.ch\/icclab\/how-to-install-a-multi-region-devstack-part-1\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/how-to-install-a-multi-region-devstack-part-1\/#primaryimage\",\"url\":\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/adapter-1.jpg\",\"contentUrl\":\"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/adapter-1.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/how-to-install-a-multi-region-devstack-part-1\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/blog.zhaw.ch\/icclab\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to install a multi region devstack Part-1\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#website\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/\",\"name\":\"Service Engineering (ICCLab &amp; SPLab)\",\"description\":\"A Blog of the ZHAW Zurich University of Applied Sciences\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.zhaw.ch\/icclab\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/3bf84b7ebed48ca8fdd7b41ab98a8adc\",\"name\":\"Antonio Cimmino\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/a4495a5cad56752ceda304ce224d6d503ac868e86d085bdffddd06eb1195253c?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a4495a5cad56752ceda304ce224d6d503ac868e86d085bdffddd06eb1195253c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a4495a5cad56752ceda304ce224d6d503ac868e86d085bdffddd06eb1195253c?s=96&d=mm&r=g\",\"caption\":\"Antonio Cimmino\"},\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/author\/cimm\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How to install a multi region devstack Part-1 - Service Engineering (ICCLab &amp; SPLab)","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.zhaw.ch\/icclab\/how-to-install-a-multi-region-devstack-part-1\/","og_locale":"en_US","og_type":"article","og_title":"How to install a multi region devstack Part-1","og_description":"Introduction I have introduced Disaster Recovery (DR) services in the tutorial of last ICCLAB\u00a0 newsletter which also made an overview of possible OpenStack configurations. Several configuration options could be considered. In particular, in case of a stakeholder having both the role of Cloud provider and DR service provider, a suitable safe configuration consists in distributing [&hellip;]","og_url":"https:\/\/blog.zhaw.ch\/icclab\/how-to-install-a-multi-region-devstack-part-1\/","og_site_name":"Service Engineering (ICCLab &amp; SPLab)","article_published_time":"2015-01-27T14:50:18+00:00","article_modified_time":"2015-04-29T13:24:21+00:00","og_image":[{"url":"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/adapter-1.jpg","type":"","width":"","height":""}],"author":"Antonio Cimmino","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Antonio Cimmino","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.zhaw.ch\/icclab\/how-to-install-a-multi-region-devstack-part-1\/#article","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/how-to-install-a-multi-region-devstack-part-1\/"},"author":{"name":"Antonio Cimmino","@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/3bf84b7ebed48ca8fdd7b41ab98a8adc"},"headline":"How to install a multi region devstack Part-1","datePublished":"2015-01-27T14:50:18+00:00","dateModified":"2015-04-29T13:24:21+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/how-to-install-a-multi-region-devstack-part-1\/"},"wordCount":1374,"commentCount":6,"image":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/how-to-install-a-multi-region-devstack-part-1\/#primaryimage"},"thumbnailUrl":"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/adapter-1.jpg","articleSection":["*.*","Articles","Education","HowTos","OpenStack"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.zhaw.ch\/icclab\/how-to-install-a-multi-region-devstack-part-1\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.zhaw.ch\/icclab\/how-to-install-a-multi-region-devstack-part-1\/","url":"https:\/\/blog.zhaw.ch\/icclab\/how-to-install-a-multi-region-devstack-part-1\/","name":"How to install a multi region devstack Part-1 - Service Engineering (ICCLab &amp; SPLab)","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/how-to-install-a-multi-region-devstack-part-1\/#primaryimage"},"image":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/how-to-install-a-multi-region-devstack-part-1\/#primaryimage"},"thumbnailUrl":"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/adapter-1.jpg","datePublished":"2015-01-27T14:50:18+00:00","dateModified":"2015-04-29T13:24:21+00:00","author":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/3bf84b7ebed48ca8fdd7b41ab98a8adc"},"breadcrumb":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/how-to-install-a-multi-region-devstack-part-1\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.zhaw.ch\/icclab\/how-to-install-a-multi-region-devstack-part-1\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.zhaw.ch\/icclab\/how-to-install-a-multi-region-devstack-part-1\/#primaryimage","url":"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/adapter-1.jpg","contentUrl":"http:\/\/blog.zhaw.ch\/icclab\/files\/2015\/01\/adapter-1.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.zhaw.ch\/icclab\/how-to-install-a-multi-region-devstack-part-1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/blog.zhaw.ch\/icclab\/"},{"@type":"ListItem","position":2,"name":"How to install a multi region devstack Part-1"}]},{"@type":"WebSite","@id":"https:\/\/blog.zhaw.ch\/icclab\/#website","url":"https:\/\/blog.zhaw.ch\/icclab\/","name":"Service Engineering (ICCLab &amp; SPLab)","description":"A Blog of the ZHAW Zurich University of Applied Sciences","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.zhaw.ch\/icclab\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/3bf84b7ebed48ca8fdd7b41ab98a8adc","name":"Antonio Cimmino","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/a4495a5cad56752ceda304ce224d6d503ac868e86d085bdffddd06eb1195253c?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/a4495a5cad56752ceda304ce224d6d503ac868e86d085bdffddd06eb1195253c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a4495a5cad56752ceda304ce224d6d503ac868e86d085bdffddd06eb1195253c?s=96&d=mm&r=g","caption":"Antonio Cimmino"},"url":"https:\/\/blog.zhaw.ch\/icclab\/author\/cimm\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/7064","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/users\/86"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/comments?post=7064"}],"version-history":[{"count":47,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/7064\/revisions"}],"predecessor-version":[{"id":8088,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/7064\/revisions\/8088"}],"wp:attachment":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/media?parent=7064"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/categories?post=7064"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/tags?post=7064"},{"taxonomy":"features","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/features?post=7064"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}