From 71228826b9ab31a38b276ddf776c5c93ff985d42 Mon Sep 17 00:00:00 2001 From: Pushpesh Sharma Date: Thu, 26 Jun 2014 16:28:51 +0530 Subject: [PATCH] SwiftOnFile as StoragePolicy of OpenStack Swift Done necessary changes to quick start guide.This guide suggest easy steps to extend swift SAIO setup to use swiftonfile as storage policy. --- doc/markdown/quick_start_guide.md | 194 ++++++++++-------------------- 1 file changed, 64 insertions(+), 130 deletions(-) diff --git a/doc/markdown/quick_start_guide.md b/doc/markdown/quick_start_guide.md index 13c5d31..765ec22 100644 --- a/doc/markdown/quick_start_guide.md +++ b/doc/markdown/quick_start_guide.md @@ -9,183 +9,116 @@ ## Overview -SwiftOnFile allows any POSIX complaint filesystem to be used as the -backend to the object store OpenStack Swift. +SwiftOnFile allows any POSIX complaint filesystem to be used as the backend to the object store OpenStack Swift. -The following guide will get you quickly started with a SwiftOnFile -environment on a Fedora or RHEL/CentOS system. This guide is a -great way to begin using SwiftOnFile, and can be easily deployed on -a single virtual machine. The final result will be a single SwiftOnFile -node. +The following guide assumes you have a running [OpenStack Swift SAIO setup][], and you want to extend this setup to try SwiftOnFile as Storage Policy on a XFS/gluster volume. This will get you quickly started with a SwiftOnFile environment on a Fedora or RHEL/CentOS system. -> NOTE: In SwiftOnFile a swift account is a mounted FS under path mentioned -in configuration parameter.It is assumed you have two xattrr supporting FS mounted -under certain paths.We suggest you to start with two xfs formatted FS then you can -move on to other FS that supports xattr.For setting up gluster volume in particular -you can look here [GlusterFS Quick Start Guide][] +This guide will not go on detail on how to prepare a Swift SAIO setup or how to create a gluster volume (or other FS).This guide assumes you know about these technologies, if you require any help in setting those please refer to the link provided. ## System Setup ### Prerequisites on CentOS/RHEL -On CentOS/RHEL you may need to EPEL repo.Please refer to -[EPEL][] for more information on how to setup the EPEL repo. -SwiftOnfile requires corresponding OpenStack Swift release packages.There are two -possible ways to get OpenStack Swift packages. +1. OpenStack SAIO deployment on Fedora20 onwards +2. One xfs/glusterfs volume - named vol -1. Get & build the OpenStack swift source from github.(This should work for all linux flavors) +>Note: Swift SAIO deployment should contain Storage Policy code changes. Initialy Storage Policy feature was developed seprately in openstack swift feature/ec branch, and it is now merged in master branch. The latest OpenStack Swift2.0 release also contain storage policy code. - a.) Git clone the required branch (assume icehouse) - ~~~ - git clone -b icehouse-stable https://github.com/openstack/swift.git - ~~~ - b.)Install the prerequisite - ~~~ - python-pip install -r requirements.txt - python-pip install -r test-requirements.txt - ~~~ - c.)Install the packages - ~~~ - python setup.py install - ~~~ - d.) Please refer to the OpenStack swift SAIO guide, - if you face any difficulty in doing above. +Each xfs/glusterfs volume will be defined as a separate storage policy. -2. Use the Stable RDO release (Fedora/RHEL/CentOS) +### Install SwiftOnfile +1. Before you begin swiftonfile setup please ensure you have OpenStack Swift SAIO setup up & running. Please refer to the SAIO guide for this. +2. cd ~; git clone https://github.com/swiftonfile/swiftonfile.git +3. cd ~/swiftonfile;python setup.py develop;cd ~ - a.) Please setup corresponding Red Hat RDO release repo (assume icehouse) - ~~~ - yum install -y http://repos.fedorapeople.org/repos/openstack/openstack-icehouse/rdo-release-icehouse-3.noarch.rpm - ~~~ - b.) Install required rpms: - ~~~ - yum install -y openstack-swift-proxy openstack-swift-account openstack-swift-container\ - openstack-swift-object memcached python-swiftclient python-keystoneclient - ~~~ - -### Install SwiftOnFile -1. Install from source - - a.) Git clone the required branch (assume icehouse) - - git clone -b icehouse https://github.com/swiftonfile/swiftonfile.git - - b.)Install the prerequisite - - python-pip install -r requirements.txt - python-pip install -r test-requirements.txt - - c.)Install the packages - - python setup.py install - -2. Using RPMs - - a.) Download the rpms from [Jenkins CI][] - - b.)Install the RPM by executing the following: - yum install -y - -### Enabling Swift Service available accross reboots -~~~ -chkconfig openstack-swift-proxy on -chkconfig openstack-swift-account on -chkconfig openstack-swift-container on -chkconfig openstack-swift-object on -~~~ - -#### Fedora 19 Adjustment -Currently SwiftOnFile 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: +### Configure SwiftOnFile as Storage Policy +1. A SAIO setup mimic a four node swift setup and should have four object server running.Add another object server for SwiftOnFile by setting the following configurations in the file /etc/swift/object-server/5.conf: ~~~ -systemctl --system daemon-reload +[DEFAULT] +devices = /mnt/xfsvols/ +mount_check = false +bind_port = 6050 +max_clients = 1024 +workers = 1 +disable_fallocate = true + +[pipeline:main] +pipeline = object-server + +[app:object-server] +use = egg:gluster_swift#object +user = root +log_facility = LOG_LOCAL2 +log_level = DEBUG +log_requests = on +disk_chunk_size = 65536 ~~~ -### Configuration -As with OpenStack Swift, SwiftOnFile 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 RPM based -installations, the simplest way is to copy the `*.conf-gluster` -files to `*.conf` files as follows: +>Note: The parameter 'devices' tells about the path where your xfs/glusterfs volume is mounted. The sub directory under which your volume is mounted will be called volume name. For ex: You have a xfs formated partition /dev/sdb1, and you mounted it under /mnt/xfsvols/vol, then your volume name would be 'vol'& and the parameter 'devices' would contain value '/mnt/xfsvols'. + +2. Edit /etc/swift.conf to add swiftonfile as a storage policy: ~~~ -cd /etc/swift -for tmpl in *.conf-gluster ; do cp ${tmpl} ${tmpl%.*}.conf; done +[storage-policy:0] +name = swift + +[storage-policy:1] +name = swiftonfile-test +default = yes ~~~ -Else you can base your config files on [test code ][]. - -#### Generate Ring Files -You now need to generate the ring files, which inform SwiftOnFile -which FS volumes are accessible over the object storage interface. -This is a borrowed legacy from gluster-swift and it will soon change. -This script uses OpenStack Swift ring builder with the fundamental -assumption that the replication/sync/HA/etc are provided by underlying FS -(gluster in this case).The format is +3. Edit the remakerings script to prepare rings for this new storage policy: ~~~ -gluster-swift-gen-builders [mount-point-name] [mount-point-name...] +swift-ring-builder object-1.builder create 1 1 1 +swift-ring-builder object-1.builder add r1z1-127.0.0.1:6050/vol 1 +swift-ring-builder object-1.builder rebalance ~~~ -Where *mount-point-name* is the name of the a directory in the path mentioned in -/etc/swift{account,object,container}.conf under the section [DEFAULT] -for parameter 'devices'.For ex: If 'device' parameter has the value '/mnt/FS-objects' -and you mounted two gluster/xfs volumes on /mnt/FS-objects/gfs-vol1 & -/mnt/FS-objects/gfs-vol2 then the command would look like this: -~~~ -gluster-swift-gen-builders gfs-vol1 gfs-vol2 -~~~ - -### Start swift services using the following commands: +4. Restart swift services to reflect new changes: ~~~ -service openstack-swift-object start -service openstack-swift-container start -service openstack-swift-account start -service openstack-swift-proxy start +swift-init all restart ~~~ -Or using -~~~ -swift-init main start -~~~ + +5. Running functional tests: TBD + ## Using SwiftOnFile +It is assumed that you are still using 'tempauth' as authnetication method, which is default in SAIO deployment. + +### Get the token +~~~ +curl -v -H 'X-Auth-User: test:tester' -H "X-Auth-key: testing" -k http://localhost:8080/auth/v1.0 +~~~ +Use 'X-Auth-Token' & 'X-Storage-Url' returned in above request for all sucequent request. ### Create a container Create a container using the following command: ~~~ -curl -v -X PUT http://localhost:8080/v1/AUTH_gfs-vol1/mycontainer +curl -v -X PUT -H 'X-Auth-Token: AUTH_XXXX' http://localhost:8080/v1/AUTH_test/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 FS: - -~~~ -ls /mnt/FS-object/gfs-vol1 -~~~ +It should return `HTTP/1.1 201 Created` on a successful creation. #### Create an object -You can now place an object in the container you have just created: +You can now place an object in the container you have just dreated: ~~~ echo "Hello World" > mytestfile -curl -v -X PUT -T mytestfile http://localhost:8080/v1/AUTH_gfs-vol1/mycontainer/mytestfile +curl -v -X PUT -T mytestfile 'X-Auth-Token: AUTH_XXXX' http://localhost:8080/v1/AUTH_test/mycontainer/mytestfile ~~~ To confirm that the object has been written correctly, you can compare the test file with the object you created: ~~~ -cat /mnt/FS-object/gfs-vol1/mycontainer/mytestfile +cat /mnt/xfsvols/vol/test/mycontainer/mytestfile ~~~ #### Request the object @@ -193,7 +126,7 @@ 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_gfs-vol1/mycontainer/mytestfile +curl -v -X GET -o newfile http://localhost:8080/v1/AUTH_test/mycontainer/mytestfile cat newfile ~~~ @@ -214,4 +147,5 @@ For more information, please visit the following links: [Authentication Services Start Guide]: auth_guide.md [EPEL]: https://fedoraproject.org/wiki/EPEL [Jenkins CI]: http://build.gluster.org/job/swiftonfile-builds/lastSuccessfulBuild/artifact/build/ -[test code] : https://github.com/swiftonfile/swiftonfile/tree/master/test/functional_auth/tempauth/conf/ +[test code]: https://github.com/swiftonfile/swiftonfile/tree/master/test/functional_auth/tempauth/conf/ +[OpenStack Swift SAIO setup]: http://docs.openstack.org/developer/swift/development_saio.html