# Quick Start Guide ## Contents * [Overview](#overview) * [System Setup](#system_setup) * [Gluster For Swift Setup](#swift_setup) * [Using Gluster for Swift](#using_swift) * [What now?](#what_now) ## Overview The following guide will get you started quickly with a Gluster for Swift environment on a Fedora or RHEL/CentOS system. This guide is a great way to begin using Gluster for Swift, and can be easily deployed on a single virtual machine. The final result will be a single Gluster for Swift node running Grizzly-based OpenStack Swift. > NOTE: In Gluster for Swift, accounts are GlusterFS volumes. ## System Setup ### Prerequisites on CentOS/RHEL On CentOS/RHEL you may need to setup yum to access [EPEL][] repository by running the following command: * CentOS ~~~ wget -O /etc/yum.repos.d/glusterfs-epel.repo \ http://download.gluster.org/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-epel.repo ~~~ * RHEL ~~~ wget -O /etc/yum.repos.d/glusterfs-epel.repo \ http://download.gluster.org/pub/gluster/glusterfs/LATEST/RHEL/glusterfs-epel.repo ~~~ ### Required Package Installation Install and start the required packages on your system to create a GlusterFS volume. ~~~ yum install glusterfs glusterfs-server glusterfs-fuse memcached xfsprogs ~~~ #### Start services * RHEL and Fedora 19 ~~~ service glusterd start service memcached start ~~~ * CentOS 6+ ~~~ /etc/init.d/glusterd start /etc/init.d/memcached start ~~~ Type the following to start the services automatically on system startup: ~~~ chkconfig memcached on chkconfig glusterd on ~~~ ### Gluster Volume Setup Now you to need determine whether you are going to use a partition or a loopback device for storage. #### Partition Storage Setup If you are using a separate disk partition, please execute the following instructions to create a GlusterFS brick: ~~~ mkfs.xfs -i size=512 /dev/ mkdir -p /export/brick ~~~ Add the following line to `/etc/fstab` to mount the storage automatically on system startup: ~~~ /dev/ /export/brick xfs inode64,noatime,nodiratime 0 0 ~~~ Now type the following to mount the storage: ~~~ mount -a ~~~ #### Loopback Storage Setup If you do not have a separate partition, please execute the following instructions to create a disk image as a file: ~~~ truncate -s 5GB /srv/swift-disk mkfs.xfs -i size=512 /srv/swift-disk mkdir -p /export/brick ~~~ Add the following line to `/etc/fstab` to mount the storage automatically on system startup: ~~~ /srv/swift-disk /export/brick xfs loop,inode64,noatime,nodiratime 0 0 ~~~ Now type the following to mount the storage: ~~~ mount -a ~~~ ### Create a GlusterFS Volume You now need to create a GlusterFS volume ~~~ mkdir /export/brick/myvolume gluster volume create myvolume `hostname`:/export/brick/myvolume gluster volume start myvolume ~~~ ## Gluster for Swift Setup ### Repository Setup on RHEL/CentOS Gluster for Swift requires OpenStack Swift's latest stable release, which may not be available on some older operating systems. For RHEL/CentOS systems, please setup Red Hat RDO's repo by executing the following command: ~~~ yum install -y http://rdo.fedorapeople.org/openstack/openstack-grizzly/rdo-release-grizzly.rpm ~~~ ### Download Gluster for Swift uses [Jenkins][] for continuous integration and creation of distribution builds. Download the latest RPM builds from one of the links below: * CentOS/RHEL 6: [Download](http://build.gluster.org/job/gluster-swift-builds-rhel6-grizzly/lastSuccessfulBuild/artifact/build/) * Fedora 19: [Download](http://build.gluster.org/job/gluster-swift-builds-f19-grizzly/lastSuccessfulBuild/artifact/build/) ### Install Install the RPM by executing the following: ~~~ yum install -y ~~~ ### Enabling gluster-swift accross reboots Type the following to make sure Gluster for Swift is enabled at system startup: ~~~ chkconfig openstack-swift-proxy on chkconfig openstack-swift-account on chkconfig openstack-swift-container on chkconfig openstack-swift-object on ~~~ #### Fedora 19 Adjustment Currently gluster-swift requires its processes to be run as `root`. You need to edit the `openstack-swift-*.service` files in `/etc/systemd/system/multi-user.target.wants` and change the `User` entry value to `root`. Then run the following command to reload the configuration: ~~~ systemctl --system daemon-reload ~~~ ### Configuration As with OpenStack Swift, Gluster for Swift uses `/etc/swift` as the directory containing the configuration files. You will need to base the configuration files on the template files provided. On new installations, the simplest way is to copy the `*.conf-gluster` files to `*.conf` files as follows: ~~~ cd /etc/swift for tmpl in *.conf-gluster ; do cp ${tmpl} ${tmpl%.*}.conf; done ~~~ #### Generate Ring Files You now need to generate the ring files, which inform Gluster for Swift which GlusterFS volumes are accessible over the object storage interface. The format is ~~~ gluster-swift-gen-builders [VOLUME] [VOLUME...] ~~~ Where *VOLUME* is the name of the GlusterFS volume which you would like to access over Gluster for Swift. Expose the GlusterFS volume called `myvolume` you created above by executing the following command: ~~~ cd /etc/swift /usr/bin/gluster-swift-gen-builders myvolume ~~~ ### Start gluster-swift Use the following commands to start Gluster for Swift: * RHEL and Fedora 19 ~~~ service openstack-swift-object start service openstack-swift-container start service openstack-swift-account start service openstack-swift-proxy start ~~~ * CentOS 6+ ~~~ /etc/init.d/openstack-swift-object start /etc/init.d/openstack-swift-container start /etc/init.d/openstack-swift-account start /etc/init.d/openstack-swift-proxy start ~~~ ## Using Gluster for Swift ### Create a container Create a container using the following command: ~~~ curl -v -X PUT http://localhost:8080/v1/AUTH_myvolume/mycontainer ~~~ It should return `HTTP/1.1 201 Created` on a successful creation. You can also confirm that the container has been created by inspecting the GlusterFS volume: ~~~ ls /mnt/gluster-object/myvolume ~~~ #### Create an object You can now place an object in the container you have just created: ~~~ echo "Hello World" > mytestfile curl -v -X PUT -T mytestfile http://localhost:8080/v1/AUTH_myvolume/mycontainer/mytestfile ~~~ To confirm that the object has been written correctly, you can compare the test file with the object you created: ~~~ cat /mnt/gluster-object/myvolume/mycontainer/mytestfile ~~~ #### Request the object Now you can retreive the object and inspect its contents using the following commands: ~~~ curl -v -X GET -o newfile http://localhost:8080/v1/AUTH_myvolume/mycontainer/mytestfile cat newfile ~~~ ## What now? For more information, please visit the following links: * [GlusterFS Quick Start Guide][] * [OpenStack Swift API][] [EPEL]: http://fedoraproject.org/wiki/EPEL [GlusterFS Quick Start Guide]: http://www.gluster.org/community/documentation/index.php/QuickStart [OpenStack Swift API]: http://docs.openstack.org/api/openstack-object-storage/1.0/content/ [Jenkins]: http://jenkins-ci.org