Create Nova Service & Endpoint
[root@controller1 ~]# openstack service create --name nova --description "OpenStack Compute" compute
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack Compute |
| enabled | True |
| id | 365c1378f8c641ba81f48efa7c62cd29 |
| name | nova |
| type | compute |
+-------------+----------------------------------+
[root@controller1 ~]# openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 2afb267d1bd34f9388f9568321313167 |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 365c1378f8c641ba81f48efa7c62cd29 |
| service_name | nova |
| service_type | compute |
| url | http://controller:8774/v2.1 |
+--------------+----------------------------------+
[root@controller1 ~]# openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 92de622e904546cc9bd1ca4087529e98 |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 365c1378f8c641ba81f48efa7c62cd29 |
| service_name | nova |
| service_type | compute |
| url | http://controller:8774/v2.1 |
+--------------+----------------------------------+
[root@controller1 ~]# openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 9295b974edec4e06842ee4db2e2d2458 |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 365c1378f8c641ba81f48efa7c62cd29 |
| service_name | nova |
| service_type | compute |
| url | http://controller:8774/v2.1 |
+--------------+----------------------------------+
Create Placement & Endpoint
[root@controller1 ~]# openstack user create --domain default --password=placement placement
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | c18a3e3bf63c4114924fb6b31b3305fd |
| name | placement |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
[root@controller1 ~]# openstack role add --project service --user placement admin
[root@controller1 ~]# openstack service create --name placement --description "Placement API" placement
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Placement API |
| enabled | True |
| id | 99a48fd2c3bf496287fa1fcf82376c02 |
| name | placement |
| type | placement |
+-------------+----------------------------------+
[root@controller1 ~]# openstack endpoint create --region RegionOne placement public http://controller:8778
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | c271472e882f49c3a77c518296d4045c |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 99a48fd2c3bf496287fa1fcf82376c02 |
| service_name | placement |
| service_type | placement |
| url | http://controller:8778 |
+--------------+----------------------------------+
[root@controller1 ~]# openstack endpoint create --region RegionOne placement internal http://controller:8778
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | b04f59956eca4d8cab4b3a41a071fc6b |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 99a48fd2c3bf496287fa1fcf82376c02 |
| service_name | placement |
| service_type | placement |
| url | http://controller:8778 |
+--------------+----------------------------------+
[root@controller1 ~]# openstack endpoint create --region RegionOne placement admin http://controller:8778
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 582bf2a041734838adbf92d7dd4b602e |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 99a48fd2c3bf496287fa1fcf82376c02 |
| service_name | placement |
| service_type | placement |
| url | http://controller:8778 |
+--------------+----------------------------------+
Install Nova
[root@controller ~]# yum install openstack-nova-api openstack-nova-conductor openstack-nova-cert openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler openstack-nova-placement-api -y
Configure Nova
[root@controller1 ~]# cp /etc/nova/nova.conf{,.bak}
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf DEFAULT my_ip controller1
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf DEFAULT use_neutron True
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf DEFAULT osapi_compute_listen controller1
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf DEFAULT osapi_compute_listen_port 8774
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf DEFAULT metadata_listen controller1
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf DEFAULT metadata_listen_port 8775
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf DEFAULT enabled_apis osapi_compute,metadata
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf DEFAULT transport_url rabbit://openstack:[email protected]:5673
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf database connection mysql+pymysql://nova:[email protected]/nova
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf api_database connection mysql+pymysql://nova:[email protected]/nova_api
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf api auth_strategy keystone
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_uri http://controller:5000
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_url http://controller:35357
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf keystone_authtoken memcached_servers controller1:11211,controller2:11211,controller3:11211
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_type password
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf keystone_authtoken project_domain_name default
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf keystone_authtoken user_domain_name default
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf keystone_authtoken project_name service
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf keystone_authtoken username nova
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf keystone_authtoken password nova
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf vnc enabled true
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf vnc vncserver_listen controller1
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf vnc vncserver_proxyclient_address controller1
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf vnc novncproxy_host controller1
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf vnc novncproxy_port 6080
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf glance api_servers http://controller:9292
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf placement os_region_name RegionOne
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf placement project_domain_name Default
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf placement project_name service
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf placement auth_type password
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf placement user_domain_name Default
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf placement auth_url http://controller:35357/v3
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf placement username placement
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf placement password placement
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf scheduler discover_hosts_in_cells_interval 300
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf cache enabled true
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf cache backend oslo_cache.memcache_pool
[root@controller1 ~]# openstack-config --set /etc/nova/nova.conf cache memcache_servers controller1:11211,controller2:11211,controller3:11211
Configure Nova-Placement
Refer to “CLOUD COMPUTING —> OpenStack Pike Installation —> 7.Nova”
[root@controller1 ~]# echo "
> #Placement API
> <Directory /usr/bin>
> <IfVersion >= 2.4>
> Require all granted
> </IfVersion>
> <IfVersion < 2.4>
> Order allow,deny
> Allow from all
> </IfVersion>
> </Directory>
> ">>/etc/httpd/conf.d/00-nova-placement-api.conf
[[email protected] ~]# "
[root@controller1 ~]# systemctl restart httpd
Synchronize Database
[root@controller1 ~]# su -s /bin/sh -c "nova-manage api_db sync" nova
[root@controller1 ~]# su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
[root@controller1 ~]# su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
[root@controller1 ~]# su -s /bin/sh -c "nova-manage db sync" nova
List Nova Cell
[root@controller1 ~]# nova-manage cell_v2 list_cells
+-------+--------------------------------------+-----------------------------------------+-------------------------------------------------+
| Name | UUID | Transport URL | Database Connection |
+-------+--------------------------------------+-----------------------------------------+-------------------------------------------------+
| cell0 | 00000000-0000-0000-0000-000000000000 | none:/ | mysql+pymysql://nova:****@controller/nova_cell0 |
| cell1 | b55310bc-6d58-4c8d-9b7c-014b77cd48ac | rabbit://openstack:****@controller:5673 | mysql+pymysql://nova:****@controller/nova |
+-------+--------------------------------------+-----------------------------------------+-------------------------------------------------+
Replace Default IP
[root@controller1 ~]# sed -i 's/8778/9778/' /etc/httpd/conf.d/00-nova-placement-api.conf
[root@controller1 ~]# systemctl restart httpd
Configure HA With HAProxy
[root@controller1 ~]# echo '
> ##nova_compute
> listen nova_compute_api_cluster
> bind controller:8774
> balance source
> option tcpka
> option httpchk
> option tcplog
> server controller1 controller1:8774 check inter 2000 rise 2 fall 5
> server controller2 controller2:8774 check inter 2000 rise 2 fall 5
> server controller3 controller3:8774 check inter 2000 rise 2 fall 5
> #Nova-api-metadata
> listen Nova-api-metadata_cluster
> bind controller:8775
> balance source
> option tcpka
> option httpchk
> option tcplog
> server controller1 controller1:8775 check inter 2000 rise 2 fall 5
> server controller2 controller2:8775 check inter 2000 rise 2 fall 5
> server controller3 controller3:8775 check inter 2000 rise 2 fall 5
> #nova_placement
> listen nova_placement_cluster
> bind controller:8778
> balance source
> option tcpka
> option tcplog
> server controller1 controller1:9778 check inter 2000 rise 2 fall 5
> server controller2 controller2:9778 check inter 2000 rise 2 fall 5
> server controller3 controller3:9778 check inter 2000 rise 2 fall 5
> '>>/etc/haproxy/haproxy.cfg
[[email protected] ~]# '
[root@controller1 ~]# systemctl restart haproxy.service
netstat -antp|grep haproxy
netstat -antp|egrep '8774|8775|8778|6080'
Start Nova Service
[root@controller ~]# systemctl enable openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
[root@controller ~]# systemctl restart openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
[root@controller ~]# systemctl status openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
List Nova Status
[root@controller1 ~]# openstack catalog list
+-----------+-----------+-----------------------------------------+
| Name | Type | Endpoints |
+-----------+-----------+-----------------------------------------+
| glance | image | RegionOne |
| | | internal: http://controller:9292 |
| | | RegionOne |
| | | admin: http://controller:9292 |
| | | RegionOne |
| | | public: http://controller:9292 |
| | | |
| nova | compute | RegionOne |
| | | public: http://controller:8774/v2.1 |
| | | RegionOne |
| | | admin: http://controller:8774/v2.1 |
| | | RegionOne |
| | | internal: http://controller:8774/v2.1 |
| | | |
| placement | placement | RegionOne |
| | | admin: http://controller:8778 |
| | | RegionOne |
| | | internal: http://controller:8778 |
| | | RegionOne |
| | | public: http://controller:8778 |
| | | |
| neutron | network | RegionOne |
| | | admin: http://controller:9696 |
| | | RegionOne |
| | | public: http://controller:9696 |
| | | RegionOne |
| | | internal: http://controller:9696 |
| | | |
| keystone | identity | RegionOne |
| | | admin: http://controller:35357/v3/ |
| | | RegionOne |
| | | internal: http://controller:5000/v3/ |
| | | RegionOne |
| | | public: http://controller:5000/v3/ |
| | | |
+-----------+-----------+-----------------------------------------+
[root@controller1 ~]# nova-status upgrade check
+--------------------------------------------------------------------+
| Upgrade Check Results |
+--------------------------------------------------------------------+
| Check: Cells v2 |
| Result: Success |
| Details: No host mappings or compute nodes were found. Remember to |
| run command 'nova-manage cell_v2 discover_hosts' when new |
| compute hosts are deployed. |
+--------------------------------------------------------------------+
| Check: Placement API |
| Result: Success |
| Details: None |
+--------------------------------------------------------------------+
| Check: Resource Providers |
| Result: Success |
| Details: There are no compute resource providers in the Placement |
| service nor are there compute nodes in the database. |
| Remember to configure new compute nodes to report into the |
| Placement service. See |
| http://docs.openstack.org/developer/nova/placement.html |
| for more details. |
+--------------------------------------------------------------------+
[root@controller1 ~]# openstack compute service list
+----+------------------+-------------+----------+---------+-------+----------------------------+
| ID | Binary | Host | Zone | Status | State | Updated At |
+----+------------------+-------------+----------+---------+-------+----------------------------+
| 15 | nova-conductor | controller1 | internal | enabled | up | 2017-12-19T09:02:58.000000 |
| 18 | nova-scheduler | controller1 | internal | enabled | up | 2017-12-19T09:02:56.000000 |
| 21 | nova-consoleauth | controller1 | internal | enabled | up | 2017-12-19T09:02:59.000000 |
| 27 | nova-consoleauth | controller2 | internal | enabled | up | 2017-12-19T09:03:04.000000 |
| 30 | nova-conductor | controller2 | internal | enabled | up | 2017-12-19T09:03:03.000000 |
| 39 | nova-scheduler | controller2 | internal | enabled | up | 2017-12-19T09:02:57.000000 |
| 42 | nova-consoleauth | controller3 | internal | enabled | up | 2017-12-19T09:03:04.000000 |
| 45 | nova-conductor | controller3 | internal | enabled | up | 2017-12-19T09:03:05.000000 |
| 54 | nova-scheduler | controller3 | internal | enabled | up | 2017-12-19T09:02:59.000000 |
| 57 | nova-compute | compute01 | nova | enabled | up | 2017-12-19T09:02:59.000000 |
+----+------------------+-------------+----------+---------+-------+----------------------------+
Install On Other Controller Nodes
[root@controller2 ~]# yum install openstack-nova-api openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler openstack-nova-placement-api -y
[root@controller2 ~]# rsync -avzP -e 'ssh -p 22' controller1:/etc/nova/* /etc/nova/
[root@controller2 ~]# rsync -avzP -e 'ssh -p 22' controller1:/etc/httpd/conf.d/00-nova-placement-api.conf /etc/httpd/conf.d/
[root@controller2 ~]# rsync -avzP -e 'ssh -p 22' controller1:/etc/haproxy/* /etc/haproxy/
[root@controller2 ~]# sed -i '1,9s/controller1/controller2/' /etc/nova/nova.conf
[root@controller3 ~]# sed -i '1,9s/controller1/controller3/' /etc/nova/nova.conf
[root@controller2 ~]# systemctl enable openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
[root@controller2 ~]# systemctl restart openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
[root@controller2 ~]# systemctl status openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
[root@controller2 ~]# systemctl restart httpd haproxy
Discover New Compute Node
[root@controller1 ~]# su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
Found 2 cell mappings.
Skipping cell0 since it does not contain hosts.
Getting compute nodes from cell 'cell1': b55310bc-6d58-4c8d-9b7c-014b77cd48ac
Found 0 unmapped computes in cell: b55310bc-6d58-4c8d-9b7c-014b77cd48ac
[root@controller1 ~]# openstack compute service list
+----+------------------+-------------+----------+---------+-------+----------------------------+
| ID | Binary | Host | Zone | Status | State | Updated At |
+----+------------------+-------------+----------+---------+-------+----------------------------+
| 15 | nova-conductor | controller1 | internal | enabled | up | 2017-12-19T09:28:08.000000 |
| 18 | nova-scheduler | controller1 | internal | enabled | up | 2017-12-19T09:28:16.000000 |
| 21 | nova-consoleauth | controller1 | internal | enabled | up | 2017-12-19T09:28:10.000000 |
| 27 | nova-consoleauth | controller2 | internal | enabled | up | 2017-12-19T09:28:15.000000 |
| 30 | nova-conductor | controller2 | internal | enabled | up | 2017-12-19T09:28:13.000000 |
| 39 | nova-scheduler | controller2 | internal | enabled | up | 2017-12-19T09:28:17.000000 |
| 42 | nova-consoleauth | controller3 | internal | enabled | up | 2017-12-19T09:28:15.000000 |
| 45 | nova-conductor | controller3 | internal | enabled | up | 2017-12-19T09:28:15.000000 |
| 54 | nova-scheduler | controller3 | internal | enabled | up | 2017-12-19T09:28:09.000000 |
| 57 | nova-compute | compute01 | nova | enabled | up | 2017-12-19T09:28:10.000000 |
| 60 | nova-compute | compute02 | nova | enabled | up | 2017-12-19T09:28:16.000000 |
+----+------------------+-------------+----------+---------+-------+----------------------------+