Openstack – Configure the Object Storage – Controller Node – Part 14

Openstack Object storage solution has been  developed under the project called “swift”. It’s a multi-tenant object storage system and highly scalable one. It can manage large amounts of unstructured data at low cost through a RESTful HTTP API.  swift-proxy-server service accepts OpenStack Object Storage API and raw HTTP requests to upload files, modify metadata, and create containers. It also serves file or container listings to web browsers. swift-account-server  service manage accounts  defined with Object Storage. swift-container-server service manages the mapping of containers /folders, within Object Storage. swift-object-server service manages actual objects,such as files, on the storage nodes.

For tutorial simplicity , we will configure the swift proxy service on Openstack controller node. For your information , you can run swift proxy on any node which are in storage node network. To improve the object storage performance , you should have multiple proxy nodes.


Configure Controller node for Object Storage:


1.Login to the Openstack Controller node.

2.Create the swift user for identity.

root@OSCTRL-UA:~# keystone user-create --name swift --pass swift123
| Property |              Value               |
|  email   |                                  |
| enabled  |               True               |
|    id    | 47f4941be9fd421faa1cd72fb7abbb78 |
|   name   |              swift               |
| username |              swift               |


3.Add the admin role to the swift user.

root@OSCTRL-UA:~# keystone user-role-add --user swift --tenant service --role admin


4.Create the service entity.

root@OSCTRL-UA:~# keystone service-create --name swift --type object-store --description "OpenStack Object Storage"
|   Property  |              Value               |
| description |     OpenStack Object Storage     |
|   enabled   |               True               |
|      id     | 233aa2e309a142e188424ecbb41d1e07 |
|     name    |              swift               |
|     type    |           object-store           |


5. Create the Object Storage service API endpoints.

root@OSCTRL-UA:~# keystone endpoint-create --service-id $(keystone service-list | awk '/ object-store / {print $2}') --publicurl 'http://OSCTRL-UA:8080/v1/AUTH_%(tenant_id)s' --internalurl 'http://OSCTRL-UA:8080/v1/AUTH_%(tenant_id)s' --adminurl http://OSCTRL-UA:8080 --region regionOne
|   Property  |                    Value                    |
|   adminurl  |            http://OSCTRL-UA:8080            |
|      id     |       7f9042c48a5f401c8dd734e4047ced96      |
| internalurl | http://OSCTRL-UA:8080/v1/AUTH_%(tenant_id)s |
|  publicurl  | http://OSCTRL-UA:8080/v1/AUTH_%(tenant_id)s |
|    region   |                  regionOne                  |
|  service_id |       233aa2e309a142e188424ecbb41d1e07      |


6. Install the swift Controller node  components and swift proxy.

root@OSCTRL-UA:~# apt-get install swift swift-proxy python-swiftclient python-keystoneclient python-keystonemiddleware memcached
Reading package lists... Done
Building dependency tree
Reading state information... Done
memcached is already the newest version.
python-swiftclient is already the newest version.
python-swiftclient set to manually installed.
The following extra packages will be installed:
  python-dnspython python-netifaces python-swift python-xattr
Suggested packages:
The following NEW packages will be installed:
  python-dnspython python-netifaces python-swift python-xattr swift
The following packages will be upgraded:
  python-keystoneclient python-keystonemiddleware
2 upgraded, 6 newly installed, 0 to remove and 41 not upgraded.
Need to get 665 kB of archives.
After this operation, 2,666 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 trusty-updates/juno/main python-keystoneclient all 1:0.10.1-0ubuntu1.2~cloud0 [182 kB]
Get:2 trusty/main python-dnspython all 1.11.1-1build1 [83.1 kB]
Get:3 trusty-updates/juno/main python-keystonemiddleware all 1.0.0-1ubuntu0.14.10.3~cloud0 [52.3 kB]
Get:4 trusty-updates/juno/main python-swift all 2.2.0-0ubuntu1.1~cloud0 [280 kB]
Get:5 trusty-updates/juno/main swift all 2.2.0-0ubuntu1.1~cloud0 [25.7 kB]
Get:6 trusty-updates/juno/main swift-proxy all 2.2.0-0ubuntu1.1~cloud0 [18.6 kB]
Get:7 trusty/main python-netifaces amd64 0.8-3build1 [11.3 kB]
Get:8 trusty/main python-xattr amd64 0.6.4-2build1 [12.5 kB]
Fetched 665 kB in 7s (88.2 kB/s)
(Reading database ... 113822 files and directories currently installed.)
Preparing to unpack .../python-keystoneclient_1%3a0.10.1-0ubuntu1.2~cloud0_all.deb ...
Unpacking python-keystoneclient (1:0.10.1-0ubuntu1.2~cloud0) over (1:0.10.1-0ubuntu1.1~cloud0) ...
Preparing to unpack .../python-keystonemiddleware_1.0.0-1ubuntu0.14.10.3~cloud0_all.deb ...
Unpacking python-keystonemiddleware (1.0.0-1ubuntu0.14.10.3~cloud0) over (1.0.0-1ubuntu0.14.10.2~cloud0) ...
Selecting previously unselected package python-dnspython.
Preparing to unpack .../python-dnspython_1.11.1-1build1_all.deb ...
Unpacking python-dnspython (1.11.1-1build1) ...
Selecting previously unselected package python-netifaces.
Preparing to unpack .../python-netifaces_0.8-3build1_amd64.deb ...
Unpacking python-netifaces (0.8-3build1) ...
Selecting previously unselected package python-xattr.
Preparing to unpack .../python-xattr_0.6.4-2build1_amd64.deb ...
Unpacking python-xattr (0.6.4-2build1) ...
Selecting previously unselected package python-swift.
Preparing to unpack .../python-swift_2.2.0-0ubuntu1.1~cloud0_all.deb ...
Unpacking python-swift (2.2.0-0ubuntu1.1~cloud0) ...
Selecting previously unselected package swift.
Preparing to unpack .../swift_2.2.0-0ubuntu1.1~cloud0_all.deb ...
Unpacking swift (2.2.0-0ubuntu1.1~cloud0) ...
Selecting previously unselected package swift-proxy.
Preparing to unpack .../swift-proxy_2.2.0-0ubuntu1.1~cloud0_all.deb ...
Unpacking swift-proxy (2.2.0-0ubuntu1.1~cloud0) ...
Processing triggers for man-db ( ...
Processing triggers for ureadahead (0.100.0-16) ...
ureadahead will be reprofiled on next reboot
Setting up python-keystoneclient (1:0.10.1-0ubuntu1.2~cloud0) ...
Setting up python-keystonemiddleware (1.0.0-1ubuntu0.14.10.3~cloud0) ...
Setting up python-dnspython (1.11.1-1build1) ...
Setting up python-netifaces (0.8-3build1) ...
Setting up python-xattr (0.6.4-2build1) ...
Setting up python-swift (2.2.0-0ubuntu1.1~cloud0) ...
Setting up swift (2.2.0-0ubuntu1.1~cloud0) ...
Setting up swift-proxy (2.2.0-0ubuntu1.1~cloud0) ...
Processing triggers for ureadahead (0.100.0-16) ...


7.Create the /etc/swift directory and download the swift proxy sample configuration from repository.

root@OSCTRL-UA:~# mkdir -p /etc/swift
root@OSCTRL-UA:~# cd /etc/swift
root@OSCTRL-UA:/etc/swift# curl -o /etc/swift/proxy-server.conf
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 24714  100 24714    0     0   6573      0  0:00:03  0:00:03 --:--:--  6586


8.Edit the “/etc/swift/proxy-server.conf” file on the below sections.

In the default section,

bind_port = 8080
user = swift
swift_dir = /etc/swift


In the “pipeline:main” section.

pipeline = authtoken cache healthcheck keystoneauth proxy-logging proxy-server


In “app:proxy-server” section,

allow_account_management = true
account_autocreate = true
use = egg:swift#proxy


In “filter:keystoneauth” section,

use = egg:swift#keystoneauth
operator_roles = admin,_member_


In “filter:authtoken” section,

paste.filter_factory = keystonemiddleware.auth_token:filter_factory
auth_uri = http://OSCTRL-UA:5000/v2.0
identity_uri = http://OSCTRL-UA:35357
admin_tenant_name = service
admin_user = swift
admin_password = swift123
delay_auth_decision = 1


In “filter:cache” section,

use = egg:swift#memcache
memcache_servers =


We have successfully configured the Object service for controller node. In the next article, we will see that how to configure the swift storage server.