Configure a Block Storage service controller This section describes how to configure OpenStack Block Storage services on the Controller node and assumes that a second node provides storage through the cinder-volume service. For instructions on how to configure the second node, see . You can configure OpenStack to use various storage systems. The examples in this guide show you how to configure LVM. Install the appropriate packages for the Block Storage service: # apt-get install cinder-api cinder-scheduler # yum install openstack-cinder # zypper install openstack-cinder-api openstack-cinder-scheduler Respond to the prompts for database management, [keystone_authtoken] settings, RabbitMQ credentials and API endpoint registration. Configure Block Storage to use your MySQL database. Edit the /etc/cinder/cinder.conf file and add the following key under the [database] section. Replace CINDER_DBPASS with the password for the Block Storage database that you will create in a later step. The /etc/cinder/cinder.conf file packaged with some distributions does not include the [database] section header. You must add this section header to the end of the file before proceeding further. # openstack-config --set /etc/cinder/cinder.conf \ database connection mysql://cinder:CINDER_DBPASS@controller/cinder [database] ... connection = mysql://cinder:CINDER_DBPASS@controller/cinder To create the Block Storage service database and tables and a cinder database user, run the openstack-db command. # openstack-db --init --service cinder --password CINDER_DBPASS Use the password that you set to log in as root to create a cinder database. $ mysql -u root -p mysql> CREATE DATABASE cinder; mysql> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' \ IDENTIFIED BY 'CINDER_DBPASS'; mysql> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' \ IDENTIFIED BY 'CINDER_DBPASS'; Create the database tables for the Block Storage service. # cinder-manage db sync Create a cinder user. The Block Storage service uses this user to authenticate with the Identity service. Use the service tenant and give the user the admin role. $ keystone user-create --name=cinder --pass=CINDER_PASS --email=cinder@example.com $ keystone user-role-add --user=cinder --tenant=service --role=admin Add the credentials to the file /etc/cinder/api-paste.ini. Open the file in a text editor and locate the section [filter:authtoken]. Set the following options: [filter:authtoken] paste.filter_factory=keystoneclient.middleware.auth_token:filter_factory auth_host=controller auth_port = 35357 auth_protocol = http auth_uri = http://controller:5000 admin_tenant_name=service admin_user=cinder admin_password=CINDER_PASS Configure Block Storage to use the RabbitMQ message broker by setting these configuration keys in the [DEFAULT] configuration group of the /etc/cinder/cinder.conf file. Replace RABBIT_PASS with the password you chose for RabbitMQ. [DEFAULT] ... rpc_backend = cinder.openstack.common.rpc.impl_kombu rabbit_host = controller rabbit_port = 5672 rabbit_userid = guest rabbit_password = RABBIT_PASS Configure Block Storage to use the Qpid message broker. # openstack-config --set /etc/cinder/cinder.conf \ DEFAULT rpc_backend cinder.openstack.common.rpc.impl_qpid # openstack-config --set /etc/cinder/cinder.conf \ DEFAULT qpid_hostname controller Configure Block Storage to use the RabbitMQ message broker. Replace RABBIT_PASS with the password you chose for RabbitMQ. # openstack-config --set /etc/cinder/cinder.conf \ DEFAULT rpc_backend cinder.openstack.common.rpc.impl_kombu # openstack-config --set /etc/cinder/cinder.conf \ DEFAULT rabbit_host controller # openstack-config --set /etc/cinder/cinder.conf \ DEFAULT rabbit_port 5672 # openstack-config --set /etc/cinder/cinder.conf \ DEFAULT rabbit_password RABBIT_PASS Register the Block Storage service with the Identity Service so that other OpenStack services can locate it. Register the service and specify the endpoint using the keystone command. $ keystone service-create --name=cinder --type=volume \ --description="OpenStack Block Storage" $ keystone endpoint-create \ --service-id=$(keystone service-list | awk '/ volume / {print $2}') \ --publicurl=http://controller:8776/v1/%\(tenant_id\)s \ --internalurl=http://controller:8776/v1/%\(tenant_id\)s \ --adminurl=http://controller:8776/v1/%\(tenant_id\)s Also register a service and endpoint for version 2 of the Block Storage service API. # keystone service-create --name=cinderv2 --type=volumev2 \ --description="OpenStack Block Storage v2" $ keystone endpoint-create \ --service-id=$(keystone service-list | awk '/ volumev2 / {print $2}') \ --publicurl=http://controller:8776/v2/%\(tenant_id\)s \ --internalurl=http://controller:8776/v2/%\(tenant_id\)s \ --adminurl=http://controller:8776/v2/%\(tenant_id\)s Restart the cinder service with its new settings: # service cinder-scheduler restart # service cinder-api restart Start the cinder services and configure them to start when the system boots. # service openstack-cinder-api start # service openstack-cinder-scheduler start # chkconfig openstack-cinder-api on # chkconfig openstack-cinder-scheduler on