Swift Install Workshop - OpenStack Conference Spring 2012

3,537 views
3,434 views

Published on

OpenStack Swift is a highly-available distributed object storage
system which supports highly concurrent workloads. Swift is the
backbone behind Cloud Files, Rackspace's storage-as-a-service
offering.
In this workshop, which will be hosted by members of SwiftStack, Inc.,
we'll walk you through deployment and use of OpenStack Swift. We'll
begin by showing you how to install Swift from the ground up.
You'll learn:
- what you should know about Swift's architecture
- how to bootstrap a basic Swift installation
After that, we'll cover how to use Swift, including information on:
- creating accounts and users
- adding, removing, and managing data
- building applications on top of Swift
Bring your laptop (with virutalization extensions enabled in the BIOS)
and we will walk through setting up Swift in a virtual machine. We'll
also build an entire application on top of Swift to illustrate how to
use Swift as a storage service. This is a workshop you won't want to
miss!

Published in: Technology
0 Comments
11 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,537
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
247
Comments
0
Likes
11
Embeds 0
No embeds

No notes for slide

Swift Install Workshop - OpenStack Conference Spring 2012

  1. 1. OpenStack Swift WorkshopJoe Arnold Darrell Bishop joe@swiftstack.com darrell@swiftstack.com swiftstack.com @swifterdarrell @joearnold San Francisco, CA April 20, 2012
  2. 2. Getting Ready. . .Creating Virtualbox Environment Virtualbox->File->Import Appliance... Start Swift VB 32bit Demo ssh -p 3333 -l demo localhost Username: demo password: password
  3. 3. Uses of Swift 9 minutesOverview of ArchitectureDeployment Workshop 47 minutes
  4. 4. Uses of Swift 9 minutesOverview of ArchitectureDeployment Workshop 47 minutes
  5. 5. Swi ft is Similar to Amazon S3 HTTP API Data Storage NOT blocks NOT filesystem NOT SAN/NAS/DAS
  6. 6. Swift is laser focused Swift Attributes High Scalable concurrency easy to use Durable
  7. 7. jclouds
  8. 8. SwiftStack Distribution Load Balancing SSL Termination Authentication OpenStack Object Storage OS, Node & Drive Swift Runtime Monitoring Monitoring Operating System + Kernel
  9. 9. SwiftStack Controller Controller
  10. 10. Uses of Swift 9 minutesOverview of ArchitectureDeployment Workshop 47 minutes
  11. 11. Swi ft ArchitectureOverview Proxy The Ring Zones
  12. 12. Proxyhandles incoming requests Scales Horizontally
  13. 13. The Ringmaps data to disk
  14. 14. Storage Zonesisolate physical failures
  15. 15. Quorum Writes
  16. 16. Single-Disk Reads
  17. 17. Replicationprocess runs continuously
  18. 18. Uses of Swift 9 minutesOverview of ArchitectureDeployment Workshop 47 minutes
  19. 19. Workshop Philosophy Learn the Guts step-by-step by typing. (NOT run our magic deployment tool.) Follow along -or- Sit back and watch some typing
  20. 20. Getting Ready. . .Creating Virtualbox Environment Virtualbox->File->Import Appliance... Swift VB 32bit Demo.ova Start Swift VB 32bit Demo VM On host OS, SSH to localhost, port 3333 (port forwards to guest OS) SSH to (host) localhost, port 3333 $ ssh -p 3333 -l demo localhost Username: demo Password: password
  21. 21. Formatting Devices$ sudo su -# mkfs.xfs -f -i size=512 -L d1 /dev/sdb# mkfs.xfs -f -i size=512 -L d2 /dev/sdc# mkfs.xfs -f -i size=512 -L d3 /dev/sdd# mkfs.xfs -f -i size=512 -L d4 /dev/sde H a n d y C o m m a n d sMounted Filesystems# dfFormatted Filesystems# blkid
  22. 22. Mounting Drives# mkdir -p /srv/node/d1# mkdir -p /srv/node/d2# mkdir -p /srv/node/d3# mkdir -p /srv/node/d4# mount -t xfs -L d1 /srv/node/d1# mount -t xfs -L d2 /srv/node/d2# mount -t xfs -L d3 /srv/node/d3# mount -t xfs -L d4 /srv/node/d4 H a n d y C o m m a n d s# for i in 1 2 3 4; do> mkdir -p /srv/node/d$i> mount -t xfs -L d$i /srv/node/d$i> done# chown -R swift:swift /srv/node
  23. 23. Installing Swift# apt-get install curl gcc bzr python-configobj python-coverage python-dev python-nosepython-setuptools python-simplejson python-xattr python-webob python-eventlet python-greenlet debhelper python-sphinx python-all python-openssl python-pastedeploy python-netifaces bzr-builddeb xfsprogs(get and install Swift)# apt-get update ...those should be already installed
  24. 24. Creating the Builder Files swift-ring-builder (account¦container¦object).builder create <part_power> <replicas> <min_part_hours># cd /etc/swift# swift-ring-builder account.builder create 18 3 1# swift-ring-builder container.builder create 18 3 1# swift-ring-builder object.builder create 18 3 1
  25. 25. Creating the Builder Files Containers Accounts Builder files contain a record of all devices in the cluster Objects
  26. 26. Creating the Builder FilesSwift Partitions
  27. 27. Creating the Builder FilesHow many Swift Partitions? How big will you be when you grow up? Rule of thumb: 100 partitions * the number of drives that you think you will ever have, carried up to the nearest power of 2. 24 96 Drives * 100 = 9600 24 2^13 = 8192 24 2^14 = 16384 24
  28. 28. Creating the Builder FilesReplicas Go with 3.
  29. 29. Creating the Builder FilesMini Part HoursEnsures that only one replica is in flight A good default configuration setting is 24 hours.
  30. 30. Creating the Builder Files$ ls /etc/swiftaccount.builder  backups  container.builder  object.builder (+ *.conf) E x t r a C r e d i t# pythonPython 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24)[GCC 4.5.2] on linux2Type "help", "copyright", "credits" or "license" for moreinformation.>>> import pickle>>> print pickle.load(open(object.builder)){_replica2part2dev: None, _last_part_gather_start: 0,min_part_hours: 1, replicas: 3, parts: 1024, part_power:10, devs: [], devs_changed: False, version: 0,_last_part_moves_epoch: None, _last_part_moves: None,_remove_devs: []}
  31. 31. Creating the Rings: Zonesswift-ring-builder (account¦container¦object).builder add z<zone>-<ip>:<port>/<device_name> <weight>
  32. 32. Creating the Rings: Weightsswift-ring-builder (account¦container¦object).builder add z<zone>-<ip>:<port>/<device_name> <weight> Disks Disks 2 2 2 3 3 3 100 150 Partitions Partitions
  33. 33. Creating the Rings: Adding DevicesValidate your rings# swift-ring-builder account.builder# swift-ring-builder container.builder# swift-ring-builder object.builderNote that there are no partitions assigned toany drives yet. We must use rebalance toassign partitions and create the actual ringfiles.
  34. 34. Creating the Rings: Do It (Rebalance)!# cd /etc/swift# swift-ring-builder account.builder rebalance# swift-ring-builder container.builder rebalance# swift-ring-builder object.builder rebalance# ls /etc/swift/*.ring.gzaccount.ring.gz container.ring.gz object.ring.gzValidate your rings# swift-ring-builder account.builder# swift-ring-builder container.builder# swift-ring-builder object.builder
  35. 35. Let’s Start Swift!# swift-init main restart H a n d y C o m m a n d sTail the log file$ tail -f /var/log/swift/all.log
  36. 36. Get a Token!$ curl -v -H X-Auth-User: admin:admin -H X-Auth-Key: admin http://127.0.0.1:8080/auth/v1.0/< HTTP/1.1 200 OK< X-Storage-Url: http://127.0.0.1:8080/v1/AUTH_admin< X-Storage-Token: AUTH_tk265318ae5e7e46f1890a441c08b5247f< X-Auth-Token: AUTH_tk265318ae5e7e46f1890a441c08b5247f< X-Trans-Id: txc75adf112791425e82826d6e3989be4d< Content-Length: 0Extra Credit: Token in memcache?# python>>> import swift.common.memcached as memcached>>> memcache = memcached.MemcacheRing([127.0.0.1:11211])>>> print memcache.get(AUTH_/user/admin:admin)AUTH_tk265318ae5e7e46f1890a441c08b5247f>>> print memcache.get(AUTH_/token/AUTH_tk265318ae5e7e46f1890a441c08b5247f)(1308804765.9103661, admin,admin:admin)>>> (Hit Ctrl-D to exit)
  37. 37. Use a Token!$ curl -v -H X-Auth-Token: <your x-auth-token> <your x-storage-url>< HTTP/1.1 204 No Content< X-Account-Object-Count: 0< X-Account-Bytes-Used: 0< X-Account-Container-Count: 0< Accept-Ranges: bytes< X-Trans-Id: txafe3c83ed76e46d2a9536dd61d9fcf09< Content-Length: 0
  38. 38. Uploading H a n d y C o m m a n dLet s use the command swift from here on out.$ swift -U admin:admin -K admin -A http://127.0.0.1:8080/auth/v1.0/ upload test_container /vmlinuz$ swift -U admin:admin -K admin -A http://127.0.0.1:8080/auth/v1.0/ list test_containerWhere is the object?# cd /srv/node# find . -name *.data# swift-object-info /full/path/to/file.data# swift-get-nodes /etc/swift/object.ring.gz AUTH_admin test_container vmlinuz
  39. 39. ReplicationStart Swift replicator services# swift-init account-replicator start# swift-init container-replicator start# swift-init object-replicator startIs rsync running?$ rsync localhost::$ rsync localhost::account$ rsync localhost::container$ rsync localhost::object
  40. 40. DESTROY!!!!Delete all data in a zone!# cd /srv/node/d1# find .# rm -rf *; find .# sleep 20# find . H a n d y C o m m a n d sTail the log file# tail -f /var/log/swift/all.log# tail -f /var/log/rsyncd.log
  41. 41. 24-36 disk systemsSATA desktop drives24-48 GB RAM
  42. 42. 2 Proxy/LB Servers100 Terabyte 4 Object Stores (36-drive, 3TB) Proxy Proxy Zone Zone Zone Zone
  43. 43. 2 Agg Switches 6 Proxy/LB Servers 1.5 Petabyte 5 ToR Switches 50 Object Stores (36-drive / 3TB ToR ToR ToR ToR ToRAgg Zone Zone Zone Zone ZoneProxy
  44. 44. Thank You!This presentation + VBox Image Swift technical white paper Contact: joe@swiftstack.com joe@swiftstack.com darrell@swiftstack.com

×