Openstack installation : Minimal services and Controller – Pre-requisites

Content from “”, listed here with minor changes – just noting down what I did – online notes.

The OpenStack system consists of several key services that are separately installed. These services work together depending on your cloud needs and include the Compute, Identity, Networking, Image, Block Storage, Object Storage, Telemetry, Orchestration, and Database services. You can install any of these projects separately and configure them stand-alone or as connected entities.

For the home lab, will require the following services

On the controller node :

Keystone : Identity Service
Glance : Image services
Nova : Compute services (All except nova-compute)
Neutron : Networking services
Cinder : Block storage (All except cinder-volumes)
Horizon : Dashboard / Management UI

On the compute node :

Nova    : Compute services (nova-compute only)
Neutron : Networking services (linux-bridge-agent only)
Cinder : Block storage (cinder-volumes only)

Note : In view many services, there will be number of passwords to be maintained to be configured for accessing the services. For ease of learning I had preferred to use a single password in all the places – This is fine for learning period. Nevertheless any reference to data surrounded by curly-braces need to be replaced with actual value.

All of the services require a database for managing service entities and end points, and all the services are managed typically by APIs exposed on the controller node and hence a SQL database needs to be installed in controller. For the home lab using MySQL. Install and configure MySQL on controller.

apt install --assume-yes mariadb-server python-pymysql

Create /etc/mysql/mariadb.conf.d/99-openstack.cnf with following contents :

bind-address = {management-ip-address-of-controller-node}
default-storage-engine = innodb
innodb_buffer_pool_size = 1536000000
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8

Had preferred to configure 1.5G of buffer pool size based on the fact that my controller node has 8G only. No specific data points based on sizing 1.5G. Restart MySQL service on controller node and also secure the installation by setting a password for ‘root’ user on MySQL.

# service mysql restart
# mysql_secure_installation

Communication between services happen via message queues. Install Rabbit MQ on controller and create a user ‘openstack’ with password {message-queue-password} and set required (configuration, read, write) permissions – in our case all. Also tag the user account as administrator account.

# apt install --assume-yes rabbitmq-server
# rabbitmqctl add_user openstack {password-for-rabbit-mq}
# rabbitmqctl set_permissions openstack ".*" ".*" ".*"
# rabbitmqctl set_user_tags openstack administrator

Though the following is not mandatory, preferred to enable the Management Plugins (management via browser UI)

#rabbitmq-plugins enable rabbitmq_management

After restart of the node, had observed in logs that mq srever does not come up successfully, since the IP addresses were not assigned to the interface. Reviewing the systemd service (/lib/systemd/system/rabbitmq-server.service) script for MQ server, noticed the dependency “”. Changing the same to “” helped solve the issue. Also had observed that stopping of rabbitmq service will not complete. Searching for known issues, had come across a solution to change the value for ExecStop to “/usr/sbin/rabbitmqctl shutdown” which did work.

The authentication service uses memcached to cache tokens. So need to install memcached on controller node. (Security aspects wrt using memcached not considered at this stage of learning).

#apt --assume-yes install memcached python-memcache

Edit the binding interface in conf (/etc/memcached.conf) file

-l #Ip Address of controller

Restart memcached after configuration change

#service memcached restart

Openstack services may use etcd – install the same

#apt --assume-yes install etcd

Update the etcd configuration file (/etc/default/etcd) (Note the usage of controller node management IP address)


Enable and start etcd

# systemctl enable etcd
# systemctl start etcd

About sandeep

Passionate about sharing information on "how to".
This entry was posted in Installation / How To, Notes and tagged , , , , , , . Bookmark the permalink.