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 openstack-utils openstack-selinux # zypper install openstack-cinder-api openstack-cinder-scheduler Respond to the prompts for database management, [keystone_authtoken] settings, RabbitMQ credentials and API endpoint registration. The Block Storage Service stores volume information in a database. The examples in this section use the MySQL database that is used by other OpenStack services. Configure the Block Storage Service to use the database. Replace CINDER_DBPASS with a password of your choice. # openstack-config --set /etc/cinder/cinder.conf \ database connection mysql://cinder:CINDER_DBPASS@controller/cinder Edit /etc/cinder/cinder.conf and change the [DEFAULT] section. [database] ... # The SQLAlchemy connection string used to connect to the # database (string value) sql_connection = mysql://cinder:CINDER_DBPASS@localhost/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 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="Cinder Volume Service" Note the id property returned and use it to create the endpoint. # keystone endpoint-create \ --service-id=the_service_id_above \ --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="Cinder Volume Service V2" Note the id property returned and use it to create the endpoint. # keystone endpoint-create \ --service-id=the_service_id_above \ --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