<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-9120206829210052209</id><updated>2012-03-02T07:31:39.256-08:00</updated><category term='swift'/><category term='openstack'/><category term='ldap'/><category term='shared storage'/><category term='nova'/><category term='keystone'/><category term='guest'/><category term='fedora'/><category term='middleware'/><category term='vcider'/><category term='open source'/><category term='cloud'/><category term='drbd'/><category term='rpm'/><category term='kickstart'/><category term='agent'/><category term='infrastructure computing'/><title type='text'>Mirantis Official Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mirantis.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://mirantis.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Kirill Ishanov</name><uri>http://www.blogger.com/profile/02640326546832857786</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>20</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9120206829210052209.post-586411689723212392</id><published>2012-02-14T05:51:00.000-08:00</published><updated>2012-02-16T12:25:07.458-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openstack'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='swift'/><title type='text'>Under the hood of Swift. The Ring</title><content type='html'>This is the first post in series that summarizes our analysis of Swift architecture. We've tried to highlight some points that are not clear enough in the official documentation. Our primary base was an in-depth look into the source code. The Ring is the vital part of Swift architecture. This half database, half configuration file keeps track of where all data resides in the cluster. For each possible path to any stored entity in the cluster, the Ring points to the particular device on the particular physical node.&lt;br /&gt;&lt;br /&gt;There are three types of entities that Swift recognizes: accounts, containers and objects. Each type has the ring of its own, but all three rings are put up the same way. Swift services use the same source code to create and query all three rings. Two Swift classes are responsible for this tasks: &lt;tt&gt;RingBuilder&lt;/tt&gt; and &lt;tt&gt;Ring&lt;/tt&gt; respectively.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Ring data structure&lt;/h3&gt;Every Ring of three in Swift is the structure that consists of 3 elements:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;a list of devices in the cluster, also known as &lt;tt&gt;devs&lt;/tt&gt; in the &lt;tt&gt;Ring&lt;/tt&gt; class;&lt;/li&gt;&lt;li&gt;a list of lists of devices ids indicating partition to data assignments, stored in variable named &lt;tt&gt;_replica2part2dev_id&lt;/tt&gt;;&lt;/li&gt;&lt;li&gt;an integer number of bits to shift an MD5-hashed path to the account/container/object to calculate the partition index for the hash (partition shift value, &lt;tt&gt;part_shift&lt;/tt&gt;).&lt;/li&gt;&lt;/ul&gt;&lt;h5&gt;List of devices&lt;/h5&gt;A list of devices includes all storage devices (disks) known to the ring. Each element of this list is a dictionary of the following structure:&lt;br /&gt;&lt;table cellpadding="1" cellspacing="1" border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th width="15%"&gt;Key&lt;/th&gt;&lt;th width="15%"&gt;Type&lt;/th&gt;&lt;th&gt;Value&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;id&lt;/td&gt;&lt;td&gt;integer&lt;/td&gt;&lt;td&gt;Index of the devices list&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;zone&lt;/td&gt;&lt;td&gt;integer&lt;/td&gt;&lt;td&gt;Zone the device resides in&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;weight&lt;/td&gt;&lt;td&gt;float&lt;/td&gt;&lt;td&gt;The relative weight of the device to the other devices in the ring&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ip&lt;/td&gt;&lt;td&gt;string&lt;/td&gt;&lt;td&gt;IP address of server containing the device&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;port&lt;/td&gt;&lt;td&gt;integer&lt;/td&gt;&lt;td&gt;TCP port the server uses to serve requests for the device&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;device&lt;/td&gt;&lt;td&gt;string&lt;/td&gt;&lt;td&gt;Disk name of the device in the host system, e.g. &lt;tt&gt;sda1&lt;/tt&gt;. It is used to identify disk mount point under &lt;tt&gt;/srv/node&lt;/tt&gt; on the host system&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;meta&lt;/td&gt;&lt;td&gt;string&lt;/td&gt;&lt;td&gt;General-use field for storing arbitrary information about the device. Not used by servers directly&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Some device management can be performed using values in the list. First, for the removed devices, the &lt;tt&gt;'id'&lt;/tt&gt; value is set to &lt;tt&gt;'None'&lt;/tt&gt;. Device IDs are generally not reused. Second, setting &lt;tt&gt;'weight'&lt;/tt&gt; to 0.0 disables the device temporarily, as no partitions will be assigned to that device.&lt;br /&gt;&lt;h5&gt;Partitions assignment list&lt;/h5&gt;This data structure is a list of N elements, where N is the replica count for the cluster. The default replica count is 3. Each element of partitions assignment list is an &lt;tt&gt;array('H')&lt;/tt&gt;, or Python compact efficient array of short unsigned integer values. These values are actually index into a list of devices (see previous section). So, each &lt;tt&gt;array('H')&lt;/tt&gt; in the partitions assignment list represents mapping partitions to devices ID.&lt;br /&gt;&lt;br /&gt;The ring takes a configurable number of bits from a path's MD5 hash and converts it to the long integer number. This number is used as an index into the &lt;tt&gt;array('H')&lt;/tt&gt;. This index points to the array element that designates an ID of the device to which the partition is mapped. Number of bits kept from the hash is known as the partition power, and 2 to the partition power indicates the partition count.&lt;br /&gt;&lt;br /&gt;For a given partition number, each replica's device will not be in the same zone as any other replica's device. Zones can be used to group devices based on physical locations, power separations, network separations, or any other attribute that could make multiple replicas unavailable at the same time.&lt;br /&gt;&lt;h5&gt;Partition Shift Value&lt;/h5&gt;This is the number of bits taken from MD5 hash of &lt;tt&gt;'/account/[container/[object]]'&lt;/tt&gt; path to calculate partition index for the path. Partition index is calculated by translating binary portion of hash into integer number.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Ring operation&lt;/h3&gt;The structure described above is stored as pickled (see &lt;a href="http://docs.python.org/library/pickle.html"&gt;Python &lt;tt&gt;pickle&lt;/tt&gt;&lt;/a&gt;) and gzipped (see &lt;a href="http://docs.python.org/library/gzip.html#gzip.GzipFile"&gt;Python &lt;tt&gt;gzip.GzipFile&lt;/tt&gt;&lt;/a&gt;) file. There are three files, one per ring, and usually their names are:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;account.ring.gz&lt;br /&gt;container.ring.gz&lt;br /&gt;object.ring.gz&lt;/code&gt;&lt;/pre&gt;These files must exist in &lt;tt&gt;/etc/swift&lt;/tt&gt; directory on every Swift cluster node, both Proxy and Storage, as services on all these nodes use it to locate entities in cluster. Moreover, ring files on all nodes in the cluster must have the same contents, so cluster can function properly.&lt;br /&gt;&lt;br /&gt;There are no internal Swift mechanisms that can guarantee that the ring is consistent, i.e. gzip file is not corrupt and can be read. Swift services have no way to tell if all nodes have the same version of rings. Maintenance of ring files is administrator's responsibility. These tasks can be automated by means external to the Swift itself, of course.&lt;br /&gt;&lt;br /&gt;The Ring allows any Swift service to identify which Storage node to query for the particular storage entity. Method Ring.get_nodes(account, container=None, obj=None) is used for identification of target Storage node for the given path (&lt;tt&gt;/account[/container[/object]]&lt;/tt&gt;). It returns the tuple of partition and dictionary of nodes. The partition is used for constructing the local path to object file or account/container database. Nodes dictionary elements have the same structure as the devices in list of devices (see above).&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Ring management&lt;/h3&gt;Swift services can not change the Ring. Ring is managed by swift-ring-builder script. When new Ring is created, first administrator should specify builder file and main parameter of the Ring: partition power (or partition shift value), number of replicas of each partition in cluster, and the time in hours before a specific partition can be moved in succession:&lt;br /&gt;&lt;br /&gt;&lt;textarea cols="60" rows="2"&gt;swift-ring-builder &amp;lt;builder_file&amp;gt; create &amp;lt;part_power&amp;gt; &amp;lt;replicas&amp;gt; &amp;lt;min_part_hours&amp;gt;&lt;/textarea&gt;&lt;br /&gt;When the temporary builder file structure is created, administrator should add devices to the Ring. For each device, required values are zone number, IP address of the Storage node, port on which server is listening, device name (e.g. &lt;tt&gt;sdb1&lt;/tt&gt;), optional device meta-data (e.g., model name, installation date or anything else) and device weight:&lt;br /&gt;&lt;br /&gt;&lt;textarea cols="60" rows="2"&gt;swift-ring-builder &amp;lt;builder_file&amp;gt; add z&amp;lt;zone&amp;gt;-&amp;lt;ip&amp;gt;:&amp;lt;port&amp;gt;/&amp;lt;device_name&amp;gt;_&amp;lt;meta&amp;gt; &amp;lt;weight&amp;gt;&lt;/textarea&gt;&lt;br /&gt;Device weight is used to distribute partitions between the devices. More the device weight, more partitions are going to be assigned to that device. Recommended initial approach is to use the same size devices across the cluster and set weight 100.0 to each device. For devices added later, weight should be proportional to the capacity. At this point, all devices that will initially be in the cluster, should be added to the Ring. Consistency of the builder file can be verified before creating actual Ring file:&lt;br /&gt;&lt;br /&gt;&lt;textarea cols="60" rows="2"&gt;swift-ring-builder &amp;lt;builder_file&amp;gt;&lt;/textarea&gt;&lt;br /&gt;In case of successful verification, the next step is to distribute partitions between devices and create actual Ring file. It is called 'rebalance' the Ring. This process is designed to move as few partitions as possible to minimize the data exchange between nodes, so it is important that all necessary changes to the Ring are made before rebalancing it:&lt;br /&gt;&lt;br /&gt;&lt;textarea cols="60" rows="2"&gt;swift-ring-builder &amp;lt;builder_file&amp;gt; rebalance&lt;/textarea&gt;&lt;br /&gt;The whole procedure must be repeated for all three rings: account, container and object. The resulting &lt;tt&gt;.ring.gz&lt;/tt&gt; files should be pushed to all nodes in cluster. Builder files are also needed for the future changes to rings, so they should be backed up and kept in safe place. One of approaches is to put them to the Swift storage as ordinary objects.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Physical disk usage&lt;/h3&gt;Partition is essentially the block of data stored in the cluster. This does not mean, however, that disk usage is constant for all partitions. Distribution of objects between the partitions is based on the object path hash, not the object size or other parameters. Objects are not partitioned, which means that an object is kept as a single file in storage node file system (except very large objects, greater than 5Gb, which can be uploaded in segments - see &lt;a href="http://docs.openstack.org/trunk/openstack-object-storage/admin/content/using-swift-to-manage-segmented-objects.html"&gt;the Swift documentation&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;The partition mapped to the storage device is actually a directory in structure under &lt;tt&gt;/srv/node/&amp;lt;dev_name&amp;gt;&lt;/tt&gt;. The disk space used by this directory may vary from partition to partition, depending on size of objects that have been placed to this partition by mapping hash of object path to the Ring.&lt;br /&gt;&lt;br /&gt;In conclusion it should be said that the Swift Ring is a beautiful structure, though it lacks a degree of automation and synchronization between nodes. I'm going to write about how to solve these problems in one of the following posts.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;More information&lt;/h3&gt;More information about Swift Ring can be found in following sources:&lt;br /&gt;&lt;a href="http://swift.openstack.org/overview_ring.html"&gt;Official Swift documentation&lt;/a&gt; - base source for description of data structure&lt;br /&gt;&lt;a href="https://github.com/openstack/swift/tree/master/swift/common/ring"&gt;Swift Ring source code on Github&lt;/a&gt; - code base of &lt;tt&gt;Ring&lt;/tt&gt; and &lt;tt&gt;RingBuilder&lt;/tt&gt; Swift classes.&lt;br /&gt;&lt;a href="http://blog.chmouel.com/"&gt;Blog of Chmouel Boudjnah&lt;/a&gt; - contains useful Swift hints&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9120206829210052209-586411689723212392?l=mirantis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mirantis.blogspot.com/feeds/586411689723212392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mirantis.blogspot.com/2012/02/under-hood-of-swift-ring.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/586411689723212392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/586411689723212392'/><link rel='alternate' type='text/html' href='http://mirantis.blogspot.com/2012/02/under-hood-of-swift-ring.html' title='Under the hood of Swift. The Ring'/><author><name>Oleg</name><uri>http://www.blogger.com/profile/07084186172610456681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120206829210052209.post-2430310858834386854</id><published>2012-01-30T05:28:00.000-08:00</published><updated>2012-01-30T06:34:53.866-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openstack'/><category scheme='http://www.blogger.com/atom/ns#' term='guest'/><category scheme='http://www.blogger.com/atom/ns#' term='agent'/><title type='text'>Introducing OpenStackAgent for Xen-based Clouds. What?</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;h2&gt;What it is all about&lt;/h2&gt;Not long ago we’ve been working on deployment of OpenStack Cactus-based public cloud using Xen as an underlying hypervisor. One of the problems we’ve faced were Windows guest instances failing to set up their administrator password to those generated by nova on instance creation. As it turned out the overall process of compute-guest instance communication in OpenStack-Xen environment is rather tricky (see the illustration). One of the core components of the process is so called guest agent - a special user space service which runs within a guest OS and executes commands provided from outside. Originally we’ve used the guest agent implementation provided by Rackspace. One can find the source code both for *nix and Windows OS on the &lt;a href="https://launchpad.net/openstack-guest-agents" target="_blank"&gt;Launchpad page&lt;/a&gt;. Although the project seemed to be quite stable at the moment the service built from C# code and combined with Cactus version of nova plugin for Xen was unable to set the password for the Windows instances. Deep log analysis revealed the problem at the stage of cryptography engine initialization. It should be noted that the procedure of resetting administrator’s password itself is complex. It first includes Diffie-Hellman key exchange between compute and guest agent. Next the password is encrypted for the sake of security and sent via the public channel i.e. Xen Store to the agent. For the deadline was coming in several hours we had no time to set up a proper environment for debugging and therefore we decided to perform a rather immature step which turned out to be a success afterwards. Hastily we implemented our own guest agent service using pywin32 library. Later on, it acquired several additional features including MSI installer and grew up into a separate project named OpenStackAgent. And now we would like to introduce it to the community.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;a href="http://2.bp.blogspot.com/-I9pPJISIoQQ/TyaUpch9ajI/AAAAAAAAAAM/q0PlspKQENs/s1600/openstackagent.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="335" src="http://2.bp.blogspot.com/-I9pPJISIoQQ/TyaUpch9ajI/AAAAAAAAAAM/q0PlspKQENs/s400/openstackagent.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;h2&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2&gt;What it is currently capable of&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;Instance spawn time and run time password changing.&lt;/li&gt;&lt;li&gt;Updating itself from network on “update” command retrieval.&lt;/li&gt;&lt;li&gt;Running and logging :)&lt;/li&gt;&lt;/ul&gt;The capabilities look quite limited, don’t they? However it is yet of version 0.0.5 and the development is on the way. Thus visit the &lt;a href="http://github.com/Mirantis/osagent/wiki" target="_blank"&gt;project homepage&lt;/a&gt; soon to find the new features.&lt;br /&gt;&lt;h2&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2&gt;What else is going to be implemented&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;Support *nix OS as well. We’re planning to share the same code base for all the types of guest OSes.&lt;/li&gt;&lt;li&gt;Switch to pyInstaller extension for distribution package creation. Get rid of py2exe to make building really cross-platform.&lt;/li&gt;&lt;li&gt;Support guest network adapter configuration commands and file injection as well.&lt;/li&gt;&lt;li&gt;Tests, tests and once again tests.&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2&gt;What does one need to use it&lt;/h2&gt;&lt;b&gt;Building&lt;/b&gt;&lt;br /&gt;In order to build the agent one will need the following software to be installed&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Python interpreter of version 2.7 or higher&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.voidspace.org.uk/python/modules.shtml#pycrypto" target="_blank"&gt;PyCrypto version 2.x. Pre-compiled binary distribution for Windows&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://sourceforge.net/projects/py2exe/files/" target="_blank"&gt;py2exe extension for Python&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://pypi.python.org/pypi/py2exe2msi" target="_blank"&gt;py2exe2msi extension&lt;/a&gt;. Easily installable from PyPi. with &lt;i&gt;easy_install py2exe2msi&lt;/i&gt; command&lt;/li&gt;&lt;/ul&gt;After everything is ready to build run &lt;i&gt;python guest_agent/setup.py py2exe2msi&lt;/i&gt; and find the compiled MSI package in the current working directory.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Running&lt;/b&gt;&lt;br /&gt;In order to run the compiled service the following requirements has to be satisfied on the target machine&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.blogger.com/%5Bhttp://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=29" target="_blank"&gt;Microsoft Visual C 2008 SP1 Runtime&lt;/a&gt;. &lt;/li&gt;&lt;li&gt;The latest version of Xen Guest Utilities installed&lt;/li&gt;&lt;/ul&gt;Just install the MSI package from "Building" step and the service will be started automatically. In order to troubleshoot look up the system application event log or log file located at &lt;i&gt;%WINDIR%\Logs\OpenStackAgent.log&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Updating&lt;/b&gt;&lt;br /&gt;Just install the MSI package of a newer version into the system. It will automatically replace all the required components and restart services.&lt;br /&gt;&lt;h2&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2&gt;&amp;nbsp;What should one do to contribute&lt;/h2&gt;Fork it, update it, merge it using the &lt;a href="http://github.com/Mirantis/osagent" target="_blank"&gt;GitHub repository&lt;/a&gt; but make sure you follow the Apache 2.0 license.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9120206829210052209-2430310858834386854?l=mirantis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mirantis.blogspot.com/feeds/2430310858834386854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mirantis.blogspot.com/2012/01/introducing-openstackagent-for-xen.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/2430310858834386854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/2430310858834386854'/><link rel='alternate' type='text/html' href='http://mirantis.blogspot.com/2012/01/introducing-openstackagent-for-xen.html' title='Introducing OpenStackAgent for Xen-based Clouds. What?'/><author><name>Artem Andreev</name><uri>http://www.blogger.com/profile/02872709165936773918</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-I9pPJISIoQQ/TyaUpch9ajI/AAAAAAAAAAM/q0PlspKQENs/s72-c/openstackagent.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120206829210052209.post-5705727537976097007</id><published>2011-12-29T03:41:00.000-08:00</published><updated>2012-01-09T22:34:10.040-08:00</updated><title type='text'>Diablo RPM repository</title><content type='html'>Recently we've deployed OpenStack Diablo release for one of our customers. The target operating system happened to be CentOS 6.0. During deployment testing we've stumbled upon a number of bugs in OpenStack RPMs that we've tried to use.&lt;br /&gt;&lt;br /&gt;All existing RPMs of OpenStack that we've found contained problems that prevented components from operating correctly with each other:&lt;br /&gt;1. Incompatible protocol in packaged version of Keystone (already fixed): &lt;a href=https://lists.launchpad.net/openstack/msg04876.html&gt;https://lists.launchpad.net/openstack/msg04876.html&lt;/a&gt;&lt;br /&gt;2. Json template bug (already fixed): &lt;a href=https://bugs.launchpad.net/keystone/+bug/865448/&gt;https://bugs.launchpad.net/keystone/+bug/865448/&lt;/a&gt;&lt;br /&gt;3. ISCSI target management troubles: &lt;a href=https://bugzilla.redhat.com/show_bug.cgi?id=737046&gt;https://bugzilla.redhat.com/show_bug.cgi?id=737046&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In addition, there was no packaged &lt;b&gt;nova-vnc&lt;/b&gt; in CentOS repositories.&lt;br /&gt;So we've fixed these bugs and established our own repository for OpenStack Diablo. Packages added there have been tested in a real-world deployment.&lt;br /&gt;&lt;br /&gt;You can easily install the repository on your CentOS system using wget:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ sudo wget -O /etc/yum.repos.d/epel-mirantis.repo http://download.mirantis.com/epel-el6-mirantis/epel-mirantis.repo&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;You can browse the repository here: &lt;a href=http://download.mirantis.com/epel-el6-mirantis/&gt;Mirantis OpenStack Diablo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9120206829210052209-5705727537976097007?l=mirantis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mirantis.blogspot.com/feeds/5705727537976097007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mirantis.blogspot.com/2011/12/diablo-rpm-repository.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/5705727537976097007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/5705727537976097007'/><link rel='alternate' type='text/html' href='http://mirantis.blogspot.com/2011/12/diablo-rpm-repository.html' title='Diablo RPM repository'/><author><name>Oleg</name><uri>http://www.blogger.com/profile/07084186172610456681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120206829210052209.post-4656176923172319806</id><published>2011-12-20T15:06:00.001-08:00</published><updated>2011-12-21T17:36:06.369-08:00</updated><title type='text'>Meet &amp; Drink: OpenStack in Production – Event Highlights</title><content type='html'>&lt;font style="font-family:arial"; size="2"&gt;As a matter of tradition at this point, we offer a photo report, covering OpenStack Meetup event series hosted by Mirantis and Silicon Valley Cloud Center. Our December 14th event focused on sharing experience around running OpenStack in production. I moderated a panel consisting of Ken Pepple – director of cloud development at Internap, Ray O’Brian – CTO of IT at NASA and Rodrigo Benzaquen – R&amp;D director at MercadoLibre.&lt;br /&gt;&lt;br /&gt;This time we went all out and even recorded the video of the event:&lt;/font&gt; &lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://player.vimeo.com/video/33982906?title=0&amp;amp;byline=0&amp;amp;portrait=0" width="400" height="225" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;font style="font-family:arial"; size="2"&gt;For those that are not in the mood to watch this 50 minute panel video, here is a quick photo report:&lt;/font&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-qW9GtzK79cM/TvEaRAgzWzI/AAAAAAAAAI4/RW7zBKxEc4I/s1600/1_small.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://3.bp.blogspot.com/-qW9GtzK79cM/TvEaRAgzWzI/AAAAAAAAAI4/RW7zBKxEc4I/s400/1_small.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5688356683843328818" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;font style="font-family:arial"; size="2"&gt;We served wine and beer with pizza, salad and deserts...&lt;/font&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-TuZXU4JlR64/TvEZJAPE4fI/AAAAAAAAAIs/Nkktb5uTgWE/s1600/2_small.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://4.bp.blogspot.com/-TuZXU4JlR64/TvEZJAPE4fI/AAAAAAAAAIs/Nkktb5uTgWE/s400/2_small.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5688355446818398706" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;font style="font-family:arial"; size="2"&gt;...While people ate, drank, and mingled...&lt;/font&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-YeEvqfQQYn0/TvEaeG0bdlI/AAAAAAAAAJE/wT88LX_Oim4/s1600/3_small.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://3.bp.blogspot.com/-YeEvqfQQYn0/TvEaeG0bdlI/AAAAAAAAAJE/wT88LX_Oim4/s400/3_small.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5688356908874561106" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;font style="font-family:arial"; size="2"&gt;…and then they drank some more…&lt;/font&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-RP1VDFpFyuc/TvEaiV6uCLI/AAAAAAAAAJQ/rYOdO5kYkEg/s1600/4_small.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://3.bp.blogspot.com/-RP1VDFpFyuc/TvEaiV6uCLI/AAAAAAAAAJQ/rYOdO5kYkEg/s400/4_small.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5688356981646952626" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;font style="font-family:arial"; size="2"&gt;We started the panel with myself saying smart stuff about OpenStack. After the intro we kicked off with questions to the panel.&lt;/font&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-HOQQqNw7y50/TvEamRznWhI/AAAAAAAAAJc/4tBzKSbU2oc/s1600/5_small.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 267px; height: 400px;" src="http://4.bp.blogspot.com/-HOQQqNw7y50/TvEamRznWhI/AAAAAAAAAJc/4tBzKSbU2oc/s400/5_small.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5688357049262889490" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;font style="font-family:arial"; size="2"&gt;The panelists talked...&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-T3_hX5-Ly_E/TvEap_Aed0I/AAAAAAAAAJo/DS6L1C7vRZs/s1600/6_small.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://1.bp.blogspot.com/-T3_hX5-Ly_E/TvEap_Aed0I/AAAAAAAAAJo/DS6L1C7vRZs/s400/6_small.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5688357112936036162" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;font style="font-family:arial"; size="2"&gt;...and talked...&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-q9xv16MmRZ4/TvEatqqlsPI/AAAAAAAAAJ0/8j19bboFx9k/s1600/7_small.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://3.bp.blogspot.com/-q9xv16MmRZ4/TvEatqqlsPI/AAAAAAAAAJ0/8j19bboFx9k/s400/7_small.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5688357176195002610" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;font style="font-family:arial"; size="2"&gt;...and then talked some more.&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-2gqtZIPU5vI/TvEawNqu2XI/AAAAAAAAAKA/wGUkiSnQ2Cg/s1600/8_small.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://2.bp.blogspot.com/-2gqtZIPU5vI/TvEawNqu2XI/AAAAAAAAAKA/wGUkiSnQ2Cg/s400/8_small.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5688357219950582130" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;font style="font-family:arial"; size="2"&gt;Meanwhile, the audience listened...&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-p6MUXd5F034/TvEazFkyjNI/AAAAAAAAAKM/kZ-BSlwb_1U/s1600/9_small.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://2.bp.blogspot.com/-p6MUXd5F034/TvEazFkyjNI/AAAAAAAAAKM/kZ-BSlwb_1U/s400/9_small.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5688357269317782738" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;font style="font-family:arial"; size="2"&gt;...and listened.&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-PUm_vc75aDk/TvEa2f4eQ7I/AAAAAAAAAKY/kB0WBa_LOJA/s1600/10_small.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://3.bp.blogspot.com/-PUm_vc75aDk/TvEa2f4eQ7I/AAAAAAAAAKY/kB0WBa_LOJA/s400/10_small.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5688357327919268786" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;font style="font-family:arial"; size="2"&gt;Everyone in our US team was sporting these OpenStack shirts.&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-4EQ93P2yIAk/TvEa5sVkCvI/AAAAAAAAAKk/LcIh0Dfn33U/s1600/11_small.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://2.bp.blogspot.com/-4EQ93P2yIAk/TvEa5sVkCvI/AAAAAAAAAKk/LcIh0Dfn33U/s400/11_small.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5688357382802115314" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;font style="font-family:arial"; size="2"&gt;At the end we gave out 5 signed copies of "Deploying OpenStack" books, written by one of our panelists - Ken Pepple. Roman (pictured above) did not get a copy.&lt;/font&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9120206829210052209-4656176923172319806?l=mirantis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mirantis.blogspot.com/feeds/4656176923172319806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mirantis.blogspot.com/2011/12/meet-drink-openstack-in-production.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/4656176923172319806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/4656176923172319806'/><link rel='alternate' type='text/html' href='http://mirantis.blogspot.com/2011/12/meet-drink-openstack-in-production.html' title='Meet &amp; Drink: OpenStack in Production – Event Highlights'/><author><name>Boris Renski</name><uri>http://www.blogger.com/profile/06261736815703853427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/-3oyjX4522x8/TdGoLDzMz-I/AAAAAAAAAAU/diZV9L6SJe0/s220/facebook.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-qW9GtzK79cM/TvEaRAgzWzI/AAAAAAAAAI4/RW7zBKxEc4I/s72-c/1_small.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120206829210052209.post-4810878967254480252</id><published>2011-11-24T15:10:00.000-08:00</published><updated>2011-11-24T15:17:12.758-08:00</updated><title type='text'>Converging OpenStack with Nexenta</title><content type='html'>For those folks that have missed our webcast on using OpenStack Compute with NexentaStor for managing VM volumes, recording is below. &lt;br /&gt;&lt;br /&gt;Please note, you can download the NexentaStor driver for OpenStack here: &lt;a href="http://www.nexentastor.org/projects/osvd/files"&gt;http://www.nexentastor.org/projects/osvd/files&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;You can also read additional information about this project here: &lt;a href="http://wiki.openstack.org/NexentaVolumeDriver"&gt;http://wiki.openstack.org/NexentaVolumeDriver&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://player.vimeo.com/video/32498061?title=0&amp;amp;byline=0&amp;amp;portrait=0" width="400" height="320" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;If you need help installing / troubleshooting the Nexenta driver for OpenStack, please do &lt;a href="mailto: info@mirantis.com"&gt;contact us. &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9120206829210052209-4810878967254480252?l=mirantis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mirantis.blogspot.com/feeds/4810878967254480252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mirantis.blogspot.com/2011/11/converging-openstack-with-nexenta.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/4810878967254480252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/4810878967254480252'/><link rel='alternate' type='text/html' href='http://mirantis.blogspot.com/2011/11/converging-openstack-with-nexenta.html' title='Converging OpenStack with Nexenta'/><author><name>Boris Renski</name><uri>http://www.blogger.com/profile/06261736815703853427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/-3oyjX4522x8/TdGoLDzMz-I/AAAAAAAAAAU/diZV9L6SJe0/s220/facebook.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120206829210052209.post-2201451069509093140</id><published>2011-09-29T15:01:00.000-07:00</published><updated>2011-09-29T15:38:00.777-07:00</updated><title type='text'>OpenStack Meet &amp; Drink: Toast to Diablo – Event Highlights</title><content type='html'>&lt;span style="font-family:arial;"&gt;As usual, here are the highlights from the last Bay Area OpenStack Meet &amp;amp; Drink: Toast to Diablo – September 28th, 2011. Thanks to WireRE for hosting us, Dave Nielsen – for helping to organize, and all the attendees – for coming. Once again, this was the biggest MeetUp thus far with 150 in attendance. For those of you that didn’t come – here is what you missed:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-I92M3a_WGnM/ToTufnZ2dRI/AAAAAAAAAGg/NF4kNiYuYmc/s1600/01.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 268px; height: 400px;" src="http://3.bp.blogspot.com/-I92M3a_WGnM/ToTufnZ2dRI/AAAAAAAAAGg/NF4kNiYuYmc/s400/01.JPG" alt="" id="BLOGGER_PHOTO_ID_5657909258804950290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;We started our Diablo release celebration with wine, beer and pizza. Fun mingling with fellow stackers. As people kept arriving it got almost too crowded.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-rtl5KFWJ-NA/ToTuiqN14PI/AAAAAAAAAGo/2jyFKOzEj0M/s1600/02.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 268px;" src="http://2.bp.blogspot.com/-rtl5KFWJ-NA/ToTuiqN14PI/AAAAAAAAAGo/2jyFKOzEj0M/s400/02.JPG" alt="" id="BLOGGER_PHOTO_ID_5657909311099494642" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Mirantis founder – Alex Freedland – passionately explaining something to David Allen.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-D1wI1vKOja8/ToTul0z3cJI/AAAAAAAAAGw/7QatRBv2ltY/s1600/03.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 268px;" src="http://1.bp.blogspot.com/-D1wI1vKOja8/ToTul0z3cJI/AAAAAAAAAGw/7QatRBv2ltY/s400/03.JPG" alt="" id="BLOGGER_PHOTO_ID_5657909365482942610" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Mike Scherbakov from Mirantis, Josh McKenty from Pison and Eric from CloudScaling debating OpenStack with noticeable vigor.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-zd60OcrCgd0/ToTuory4GPI/AAAAAAAAAG4/w2WQ0_aBXJ0/s1600/04.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 268px;" src="http://1.bp.blogspot.com/-zd60OcrCgd0/ToTuory4GPI/AAAAAAAAAG4/w2WQ0_aBXJ0/s400/04.JPG" alt="" id="BLOGGER_PHOTO_ID_5657909414602479858" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Eric Windisch proudly sporting his uber cool CloudScaling shirt, listing to Mike Scherbakov from Mirantis.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-syCwsU6sXQ8/ToTus1_dSmI/AAAAAAAAAHA/Nl5tqg4CkcU/s1600/05.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 267px; height: 400px;" src="http://3.bp.blogspot.com/-syCwsU6sXQ8/ToTus1_dSmI/AAAAAAAAAHA/Nl5tqg4CkcU/s400/05.JPG" alt="" id="BLOGGER_PHOTO_ID_5657909486059080290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;While the crowd was mingling, Dave Nielsen took people on datacenter tours. The datacenter basically looked like this.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-olVO3oR8Mck/ToTvAV_J89I/AAAAAAAAAHQ/4LWz2RKF3po/s1600/06.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 268px;" src="http://1.bp.blogspot.com/-olVO3oR8Mck/ToTvAV_J89I/AAAAAAAAAHQ/4LWz2RKF3po/s400/06.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5657909821065262034" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;As usual, I opened with some thank you's and acknowledgements to our sponsors and organizers. Marc Padovani of HP Cloud Services – clapping and anxiously waiting his turn to tell the crowd about OpenStack based hpcloud.com.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-NIbljwSH5EQ/ToTvDomLnJI/AAAAAAAAAHY/p6CslYYfZwI/s1600/07.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://4.bp.blogspot.com/-NIbljwSH5EQ/ToTvDomLnJI/AAAAAAAAAHY/p6CslYYfZwI/s400/07.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5657909877600394386" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;With 150 stackers in attendance, we didn’t have quite enough chairs to accommodate everyone.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-WTOcv855j7A/ToTvGRZTJII/AAAAAAAAAHg/YFNl0h-8ctw/s1600/08.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 268px;" src="http://3.bp.blogspot.com/-WTOcv855j7A/ToTvGRZTJII/AAAAAAAAAHg/YFNl0h-8ctw/s400/08.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5657909922911954050" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Dave Nielsen talking about our venue host – WiredRE.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-yuPM9JqrLE8/ToTvJsrxgJI/AAAAAAAAAHo/aEJDVD5yN5E/s1600/09.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://2.bp.blogspot.com/-yuPM9JqrLE8/ToTvJsrxgJI/AAAAAAAAAHo/aEJDVD5yN5E/s400/09.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5657909981776806034" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Chris Kemp – CEO and Founder of Nebula announced the OpenStack Silicon Valley LinkedIn group that Nebula recently started.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-VgwAoq0IjQA/ToTvMG87IYI/AAAAAAAAAHw/t6BN2uJtDhM/s1600/10.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 268px;" src="http://2.bp.blogspot.com/-VgwAoq0IjQA/ToTvMG87IYI/AAAAAAAAAHw/t6BN2uJtDhM/s400/10.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5657910023187800450" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;…meanwhile, Josh McKenty was waiting for his turn to speak…&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-Jjr4ZTALNm0/ToTvPEozB4I/AAAAAAAAAH4/6D9wRcMG674/s1600/11.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://2.bp.blogspot.com/-Jjr4ZTALNm0/ToTvPEozB4I/AAAAAAAAAH4/6D9wRcMG674/s400/11.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5657910074106120066" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Don’t remember why, but for some reason Josh’s presentation involved talking about O-Ren Ishi from Kill Bill. Whatever it was, Chris Kemp got a kick out of it.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-WqZMm0zefqM/ToTvRVjMB3I/AAAAAAAAAIA/kbd_tVxEPEQ/s1600/12.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 268px;" src="http://4.bp.blogspot.com/-WqZMm0zefqM/ToTvRVjMB3I/AAAAAAAAAIA/kbd_tVxEPEQ/s400/12.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5657910113005733746" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Everybody likes Kill Bill, so the crowd was cheering.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-_R0MP5C9cH0/ToTvTqsKZuI/AAAAAAAAAII/pQ2PlYwOv3A/s1600/13.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://3.bp.blogspot.com/-_R0MP5C9cH0/ToTvTqsKZuI/AAAAAAAAAII/pQ2PlYwOv3A/s400/13.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5657910153040258786" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Geva Perry shared his perspective on why OpenStack’s strength is in its ecosystem of developers and partners.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-9lq_HpK7VBQ/ToTvV7z-U2I/AAAAAAAAAIQ/MGTEdhVtMRc/s1600/14.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 268px;" src="http://4.bp.blogspot.com/-9lq_HpK7VBQ/ToTvV7z-U2I/AAAAAAAAAIQ/MGTEdhVtMRc/s400/14.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5657910191996162914" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Jason Venner of X.com talked about OpenStack and CloudFoundry. He was careful not to reveal anything with respect to the upcoming “October 13th” announcement of X.commerce platform.&lt;br /&gt;&lt;br /&gt;In closing we had Marc Padovani from HP talk about hpcloud and HP’s commitment to OpenStack. The presentation quickly turned into a Q&amp;amp;A grilling session, with stackers expressing their suspicions over hpcloud.com being a smoke screen, rather than real offering. Marc did his best to address the questions without incriminating his big corporation…  My wife got too tired of taking pictures at that point, so there are none of Marc… sorry Marc.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-8fZTGWueG9E/ToTvYTCginI/AAAAAAAAAIY/mtGiq_IeRcY/s1600/15.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 268px; height: 400px;" src="http://4.bp.blogspot.com/-8fZTGWueG9E/ToTvYTCginI/AAAAAAAAAIY/mtGiq_IeRcY/s400/15.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5657910232590879346" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Hungry stackers drank most of the wine and ate most of the food. Whatever was left over, people took home. We kept one last bottle of Cloud Wine. I intend to give it as a gift to our 500th MeetUp member – Ilan Rabinovich. Ilan – if you read this, ping me on twitter @zer0tweets to claim your prize!&lt;br /&gt;&lt;br /&gt;Thank you to everyone and we’ll do it again in 3 months.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9120206829210052209-2201451069509093140?l=mirantis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mirantis.blogspot.com/feeds/2201451069509093140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mirantis.blogspot.com/2011/09/openstack-meet-drink-toast-to-diablo.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/2201451069509093140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/2201451069509093140'/><link rel='alternate' type='text/html' href='http://mirantis.blogspot.com/2011/09/openstack-meet-drink-toast-to-diablo.html' title='OpenStack Meet &amp; Drink: Toast to Diablo – Event Highlights'/><author><name>Boris Renski</name><uri>http://www.blogger.com/profile/06261736815703853427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/-3oyjX4522x8/TdGoLDzMz-I/AAAAAAAAAAU/diZV9L6SJe0/s220/facebook.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-I92M3a_WGnM/ToTufnZ2dRI/AAAAAAAAAGg/NF4kNiYuYmc/s72-c/01.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120206829210052209.post-6480425289445476153</id><published>2011-09-23T01:16:00.000-07:00</published><updated>2011-09-23T01:24:10.534-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openstack'/><category scheme='http://www.blogger.com/atom/ns#' term='keystone'/><title type='text'>What is this Keystone anyway?</title><content type='html'>&lt;p&gt;The simplest way to authenticate a user is to ask for credentials (login+password, login+keys, etc.) and check them over some database. But when it comes to lots of separate services as it is in the &lt;a href="http://openstack.org/"&gt;OpenStack&lt;/a&gt; world, we have to rethink that. The main problem is an inability to use one user entity to be authorized everywhere. For example, a user expects &lt;a href="http://nova.openstack.org/"&gt;Nova&lt;/a&gt; to get one's credentials and create or fetch some images in &lt;a href="https://launchpad.net/glance"&gt;Glance&lt;/a&gt; or set up networks in &lt;a href="http://wiki.openstack.org/Quantum"&gt;Quantum&lt;/a&gt;. This cannot be done without a central authentication and authorization system.&lt;/p&gt;&lt;p&gt;So now we have one more OpenStack project - &lt;a href="http://wiki.openstack.org/keystone"&gt;Keystone&lt;/a&gt;. It is intended to incorporate all common information about users and their capabilities across other services, along with a list of these services themselves. We have spent some time explaining to our friends what, why, and how it is and now we decided to blog about it. What follows is an explanation of every entity that drives Keystone’s life. Of course, this explanation can become outdated in no time since the Keystone project is very young and it has developed very fast.&lt;/p&gt;&lt;p&gt;The first basis is the user. Users are users; they represent someone or something that can gain access through Keystone. Users come with credentials that can be checked like passwords or API keys.&lt;/p&gt;&lt;p&gt;The second one is tenant. It represents what is called the project in Nova, meaning something that aggregates the number of resources in each service. For example, a tenant can have some machines in Nova, a number of images in Swift/Glance, and couple of networks in Quantum. Users are always bound to some tenant by default.&lt;/p&gt;&lt;p&gt;The third and last authorization-related kinds of objects are roles. They represent a group of users that is assumed to have some access to resources, e.g. some VMs in Nova and a number of images in Glance. Users can be added to any role either globally or in a tenant. In the first case, the user gains access implied by the role to the resources in all tenants; in the second case, one's access is limited to resources of the corresponding tenant. For example, the user can be an operator of all tenants and an admin of his own playground.&lt;/p&gt;&lt;p&gt;Now let’s talk about service discovery capabilities. With the first three primitives, any service (Nova, Glance, Swift) can check whether or not the user has access to resources. But to try to access some service in the tenant, the user has to know that the service exists and to find a way to access it. So the basic objects here are services. They are actually just some distinguished names. The roles we've talked about recently can be not only general but also bound to a service. For example, when Swift requires administrator access to create some object, it should not require the user to have administrator access to Nova too. To achieve that, we should create two separate Admin roles - one bound to Swift and another bound to Nova. After that admin access to Swift can be given to user with no impact on Nova and vice versa.&lt;/p&gt;&lt;p&gt;To access a service, we have to know its endpoint. So there are endpoint templates in Keystone that provide information about all existing endpoints of all existing services. One endpoint template provides a list of URLs to access an instance of service. These URLs are public, private and admin ones. The public one is intended to be accessible from the global world (like http://compute.example.com), the private one can be used to access from a local network (like http://compute.example.local), and the admin one is used in case admin access to service is separated from the common access (like it is in Keystone).&lt;/p&gt;&lt;p&gt;Now we have the global list of services that exist in our farm and we can bind tenants to them. Every tenant can have its own list of service instances and this binding entity is named the endpoint, which “plugs” the tenant to one service instance. It makes it possible, for example, to have two tenants that share a common image store but use distinct compute servers.&lt;/p&gt;&lt;p&gt;This is a long list of entities that are involved in the process but how does it actually work?&lt;/p&gt;&lt;ol&gt;&lt;li&gt;To access some service, users provide their credentials to Keystone and receive a token. The token is just a string that is connected to the user and tenant internally by Keystone. This token travels between services with every user request or requests generated by a service to another service to process the user's request.&lt;/li&gt;&lt;li&gt;The users find a URL of a service that they need. If the user, for example, wants to spawn a new VM instance in Nova, one can find an URL to Nova in the list of endpoints provided by Keystone and send an appropriate request.&lt;/li&gt;&lt;li&gt;After that, Nova verifies the validity of the token in Keystone and should create an instance from some image by the provided image ID and plug it into some network. &lt;ul&gt;&lt;li&gt;At first Nova passes this token to Glance to get the image stored somewhere in there. &lt;/li&gt;&lt;li&gt;After that, it asks Quantum to plug this new instance into a network; Quantum verifies whether the user has access to the network in its own database and to the interface of VM by requesting info in Nova.&lt;/li&gt;&lt;/ul&gt;All the way this token travels between services so that they can ask Keystone or each other for additional information or some actions.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Here is a rough diagram of this process:&lt;a href="https://docs.google.com/drawings/d/12xmhLS3Jwqr3IbDkXj9Ta223fH49vRcZSLl23rjtL8A/edit?hl=en_US"&gt;&lt;img src="https://docs.google.com/drawings/pub?id=12xmhLS3Jwqr3IbDkXj9Ta223fH49vRcZSLl23rjtL8A&amp;amp;w=716&amp;amp;h=554" width="100%" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9120206829210052209-6480425289445476153?l=mirantis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mirantis.blogspot.com/feeds/6480425289445476153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mirantis.blogspot.com/2011/09/what-is-this-keystone-anyway.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/6480425289445476153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/6480425289445476153'/><link rel='alternate' type='text/html' href='http://mirantis.blogspot.com/2011/09/what-is-this-keystone-anyway.html' title='What is this Keystone anyway?'/><author><name>Yury Taraday</name><uri>http://www.blogger.com/profile/09712172575827552469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120206829210052209.post-8424459182875086215</id><published>2011-09-16T12:06:00.000-07:00</published><updated>2011-09-16T12:06:35.680-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openstack'/><category scheme='http://www.blogger.com/atom/ns#' term='kickstart'/><title type='text'>Cloudpipe Image Creation Automation</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;&lt;/div&gt;Cloudpipe is used in OpenStack to provide access to project’s instances when using VLAN networking mode. It is just a custom Virtual Machine (VM) prepared in a special way, i.e. coming with an accordingly configuredopenvpn and startup scripts. More details on what cloudpipe is and why it is needed are available in &lt;a href="http://docs.openstack.org/cactus/openstack-compute/admin/content/cloudpipe-per-project-vpns.html"&gt;OpenStack documentation&lt;/a&gt;.&lt;br /&gt;The process of creating an image involves &lt;a href="http://nova.openstack.org/devref/cloudpipe.html"&gt;a lot of manual steps&lt;/a&gt; which crave to be automated.To simplify these steps, I wrote a simple script that uses some libvirt features to provide fully automated solution, in a way that you don't even have to bother with preparing base VM manually.&lt;br /&gt;The solution can be found &lt;a href="https://github.com/Mirantis/cloudpipe-image-auto-creation"&gt;on a github&lt;/a&gt; and consists of 3 parts:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The first &lt;span style="font-family: monospace;"&gt;ubuntukickstart.sh&lt;/span&gt; is the main part. Only this part should be executed.When you run it, it will configure the virtual network and PXE.Then it will start a new VM to install a minimal server Ubuntu bykickstart, so the installation is fully automated and unattended.&lt;/li&gt;&lt;li&gt;The second &lt;span style="font-family: monospace;"&gt;cloudpipeconf.sh&lt;/span&gt; is used to turn minimal server Ubuntu to cloudpipe. It is being executed when the VM is ready to make this turning.&lt;/li&gt;&lt;li&gt;The last &lt;span style="font-family: monospace;"&gt;ssh.fs&lt;/span&gt; is used to ssh into the VM and shutdown it.&lt;/li&gt;&lt;/ul&gt;So, if you need the cloudpipe image, just run &lt;span style="font-family: monospace;"&gt;ubuntukickstart.sh&lt;/span&gt; andwait. You'll get the cloudpipe image without any mouse clickings andkeyboard pressings!&lt;br /&gt;More detailed information about how it works can be found in &lt;a href="https://github.com/Mirantis/cloudpipe-image-auto-creation/blob/master/README.markdown"&gt;README&lt;/a&gt; file.&lt;br /&gt;Don’t hesitate to leave a comment If you have any questions or concerns.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9120206829210052209-8424459182875086215?l=mirantis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mirantis.blogspot.com/feeds/8424459182875086215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mirantis.blogspot.com/2011/09/cloudpipe-image-creation-automation.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/8424459182875086215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/8424459182875086215'/><link rel='alternate' type='text/html' href='http://mirantis.blogspot.com/2011/09/cloudpipe-image-creation-automation.html' title='Cloudpipe Image Creation Automation'/><author><name>Alexander Gordeev</name><uri>http://www.blogger.com/profile/11905307322040715137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120206829210052209.post-3399079206384885158</id><published>2011-09-08T16:05:00.001-07:00</published><updated>2011-09-08T16:20:32.565-07:00</updated><title type='text'>Cloud Accelerates Open Source Adoption</title><content type='html'>&lt;span style="font-family:arial;"&gt;Historically, commercial software provided enterprises with reliability and scalability, especially for mission-critical tasks. No one wanted to risk failure in finance, operations, or any essential or enterprise-wide areas. So, enterprises considered open source technology only for less important, more tactical purposes.&lt;br /&gt;&lt;br /&gt;Recently, however, many large IT organizations have developed  significant open source strategies. Cisco, Dell, NASA, and Rackspace came together to give birth to OpenStack. VMWare acquired SpringSource and shortly thereafter, announced Cloud Foundry, their open source PaaS. Amazon, salesforce.com, and others built solutions entirely on an open source stack. Whole categories of technologies, such as noSQL databases, made their way to mass adoption shortly after being open sourced by Google and Facebook. There has been more activity in open source during the last two years than in the preceding decade. So what’s going on here?&lt;br /&gt;&lt;br /&gt;Without a doubt, cloud is the IT topic that’s been grabbing headlines and investment dollars in the past few years. The recent high level of  activity in open source noticeably correlates with the cloud movement, because there is a deep, synergetic relationship between the two. In fact, cloud is the primary driver for the increased adoption of open source.&lt;br /&gt;&lt;br /&gt;In general, open source projects typically require two components to get community uptake. First, the nature of the project itself has to be technologically challenging. Successful open source projects are largely about solving a set of complex technological tasks vs. just writing a lot of code to support complex business process, such as the case with building enterprise software. Linux, MySQL and BitTorrent are all good examples here. Second, it requires a high rate of end user adoption. The more people and organizations that start using the open source technology at hand, the more mature the community and the technology itself becomes.&lt;br /&gt;&lt;br /&gt;Cloud has created an enormous amount of technologically challenging fodder for the open source community. The adoption of cloud translates to greater scale at the application infrastructure layer. Consequently, all cloud vendors, from infrastructure to application, are forced to innovate and build proprietary application infrastructure solutions aimed at tackling scale-driven complexity.  Facebook’s Cassandra and Google’s Google File System/Hadoop/BigTable stack are prime examples of this innovation.&lt;br /&gt;&lt;br /&gt;However, it is important to note that neither Facebook, nor Google are in the business of selling middleware. Both make money on advertising. Their middleware stack may be a competitive advantage, but it is by no means THE competitive advantage. Because companies want to keep IT investments as low as possible, a the natural way to drive down costs associated with scale-driven complexity is to have the open developer community help address at least some of the issues to support and growing the stack. The result? Instances like Facebook’s open sourcing of Cassandra and Rackspace contributing its object storage code to OpenStack. Ultimately, cloud drives complexity while cloud vendors channel that complexity down to the open developer community.&lt;br /&gt;&lt;br /&gt;What about end user adoption? Historically, enterprises were slow to adopt open source. Decades of lobbying by vendors of proprietary software have drilled the idea of commercial software superiority deep into the bureaucracy of enterprise IT. Until recently, the biggest selling point for commercial enterprise software was reliability and scalability for mission-critical tasks; open source was “OK” for less important, more tactical purposes. Today, after leading cloud vendors like Amazon, Rackspace, and Google built solutions on top of an open source stack, the case against open source for mission-critical operations or incapable of supporting the required scale is no longer valid.&lt;br /&gt;&lt;br /&gt;But the wave of open source adoption is not just about the credibility boost it received in recent years. It is largely about the consumption model. Cloud essentially refers to the new paradigm for delivery of IT services. It is an economic model that revolves around “pay for what you get, when you get it.” Surprisingly, it took enterprises a very long time to accept this approach, but last year was pivotal in showing that it is tracking and is the way of the future. Open source historically has been monetized leveraging a model that is much closer to “cloud” than that of commercial software. In the case of commercial software, you buy the license and pay for implementation upfront. If you are lucky to implement, you continue to pay for a subscription that is sold in various forms – support, service assurance, etc. With open source, you are free to implement first, and if it works, you may (or may not) buy commercial support, which is also frequently sold as a subscription to a particular SLA. The cloud hype has helped initiate the shift in the standard for the IT services consumption model. As enterprises wrap their minds around cloud, they shy further away from the traditional commercial software model and move closer to the open source / services-focused model.&lt;br /&gt;&lt;br /&gt;It is also important to note that the consumption model issue is not simply a matter of perception. There are concrete, tactical drivers behind it. As the world embraces the services model, it is becoming increasingly dominated by service-level agreements (SLAs). People are no longer interested in licensing software products that are just a means to an end. Today, they look for meaningful guarantees where vendors (external providers or internal IT) assure a promised end result. This shift away from end user licensing agreements (EULAs) and toward SLAs is important. If you are a cloud vendor such as Salesforce.com, you are in the business of selling SLA-backed subscription services to your customer. If, at the same time, you rely on a third party vendor for a component of your stack, the SLA of your vendor has to provide the same or better guarantees that you pass on to your client. If your vendor doesn’t offer an SLA or only offers an end user license agreement, you end up having to bridge the gap. These gaps that an organization is forced to bridge ultimately affects its enterprise value. As we move away from the EULA-driven economy and more towards SLAs, open source stands to benefit.&lt;br /&gt;&lt;br /&gt;Ultimately, as cloud continues to mature, we will continue to see more and faster growth in open source. While the largest impact so far has been in the   infrastructure space,  open source popularity will eventually start spreading up the stack towards the application layer.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9120206829210052209-3399079206384885158?l=mirantis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mirantis.blogspot.com/feeds/3399079206384885158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mirantis.blogspot.com/2011/09/cloud-accelerates-open-source-adoption.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/3399079206384885158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/3399079206384885158'/><link rel='alternate' type='text/html' href='http://mirantis.blogspot.com/2011/09/cloud-accelerates-open-source-adoption.html' title='Cloud Accelerates Open Source Adoption'/><author><name>Boris Renski</name><uri>http://www.blogger.com/profile/06261736815703853427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/-3oyjX4522x8/TdGoLDzMz-I/AAAAAAAAAAU/diZV9L6SJe0/s220/facebook.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120206829210052209.post-7418346077435326008</id><published>2011-08-25T14:13:00.000-07:00</published><updated>2011-08-25T14:29:54.779-07:00</updated><title type='text'>Tracing the IT Evolution from the Big Bang to the Big Crunch</title><content type='html'>&lt;i&gt;How enterprises are progressing from overgrown, difficult-to-manage IT systems to high performance open source infrastructure&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Over the history of computing, we can trace a pattern of continuous decomposition, from a single system into disparate components. Early on, these individual parts made it easier to design, program and maintain systems, and meet the fast-growing demand for more power and more capacity.&lt;br /&gt;&lt;br /&gt;The industry began with the mainframe, where the entire stack from hardware to application logic was contained in a single box. The next phase was the move from mainframe to client-server. This was followed by SOA (service-oriented architecture). This process of decomposition is a natural byproduct of growth in scale. As we consume increasingly more computing and storage, efficiency gains are achieved through specialization.&lt;br /&gt;&lt;br /&gt;Such continuous decomposition is a typical pattern of many industries. Several centuries ago, the model was subsistence farming, where every family as a single unit grew all of their own crops. Today, food production has decomposed into a collection of highly specialized industries.&lt;br /&gt;&lt;br /&gt;However, this process of decomposition in IT injects complexity. At a certain scale, highly decomposed systems become extremely challenging to manage. This then drives a pressing need to abstract away from some of the individual components to a higher level. This is largely what we are observing today with infrastructure computing. The complex mammoth of enterprise IT, today comprised of a spaghetti mix of application servers, relational and noSQL databases, messaging queues, caching and search services, etc., is no longer manageable.&lt;br /&gt;&lt;br /&gt;Gartner labeled 2011 as the year of cloud platforms or PaaS. Thinking of PaaS, we intuitively think Heroku, Force.com, and Google App Engine, all off-premise cloud platforms. But the cloud movement is not just about on-premise versus off-premise. It's about creating an effective means to abstract away from application infrastructure complexity. As mainframes exploded into myriad sub-components, we experienced sort of a Big Bang in enterprise IT. What we are starting to observe now is the Big Crunch, turning application infrastructure back into a more unified, manageable artifact.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;OpenStack&lt;/h3&gt;OpenStack is one of the most interesting initiatives topping the headlines during the last several months, and it's directly related to the Big Crunch. An open source project with the promise to help consolidate the many disparate components of application infrastructure, OpenStack is only a year old and is far from fulfilling this promise today. However, I believe that OpenStack for application infrastructure will eventually become what Linux became to application logic many years ago - a single interface unifying all application infrastructure components and exposing a standardized set of APIs to applications running on top of it.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Open Source Cloud Projects and How They Differ&lt;/h3&gt;OpenStack is not the first open source cloud project. Eucalyptus, OpenNebula, and Cloud.com all emerged before OpenStack and all of them are still very much alive. However, OpenStack is different from these others because it's the only one that has gained enough critical mass to get on a steady course to mass adoption.&lt;br /&gt;&lt;br /&gt;What enabled OpenStack to reach this point was not an accident, but a clever strategy by RackSpace and other founding members. Rather than following a more common, vendor-centric approach to building an open source community, like Eucalyptus and Cloud.com did, RackSpace quickly figured out that getting a "cloud operating system" to mass adoption would require more marketing muscle then any single vendor has. So it positioned OpenStack as a decentralized, community-driven project from the very beginning and set out to get the support of big players in the application infrastructure space, namely Dell, Cisco, and Citrix. It didn't go after just any infrastructure player, but specifically focused on those who were arguably late to the cloud game and aching to make up the distance they lost to the likes of VMware and IBM. Ultimately, OpenStack's blitz to success is a result of unleashing an enormous amount of marketing energy in a short period of time, carefully coordinated between a number of application infrastructure power houses.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Following Amazon to Open Source Infrastructure&lt;/h3&gt;Today, OpenStack is focused on low level infrastructure services - compute, storage, image service, etc., and much work still remains to be done by the community in that area. However, we know the trend and have already seen it with Amazon Web Services (AWS). AWS initially started as Infrastructure as a Service (IaaS) with EC2 and S3 offerings; it then evolved into a fully blown Platform as a Service (PaaS). The value in solving application infrastructure complexity in a broader sense, by embedding higher level services like automated deployment, message queues, map reduce, and monitoring, is simply too compelling. At some point, we expect to see OpenStack creeping into the PaaS space, the same way AWS is doing today.&lt;br /&gt;&lt;br /&gt;This gradual transition from simply being a compute and storage infrastructure orchestrator into a complete cloud operating system will happen naturally for OpenStack. It will be driven by infrastructure vendors of all sizes that are looking to plug their solutions into the OpenStack ecosystem. With more than  100 member companies on board already today, we see various announcements to this effect right and left: Gluster contributes its file system, Dell builds a deployment services, CloudCruiser builds a cost management solution, etc.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;What's Ahead for OpenStack&lt;/h3&gt;The openness and decentralized nature of OpenStack is central to the realization of its vision of the cloud operating system. Instead of trying to solve all application infrastructure complexity inside one monolithic system, such as with the VMware stack, OpenStack harnesses the naturally occurring decomposition in the infrastructure space. This is the Big Bang in infrastructure we've all experienced. Individual vendors with competence in one particular area of application infrastructure can plug their solutions (storage, caching, monitoring, etc.) into OpenStack. As OpenStack continues to gain adoption, it will become a channel for infrastructure vendors to sell their offerings in the same way that the Apple app store is a channel for mobile app developers. At the same time, OpenStack will help abstract end users and resident applications away from the complexity of disparate infrastructure solutions.&lt;br /&gt;&lt;br /&gt;Today we are still in the early days of OpenStack. It's far from being the ultimate platform. It may also be less feature-rich than competing offerings from Microsoft or VMware. However, this is unimportant today. What's important is that the need for the Big Crunch that will decrease application infrastructure complexity is obvious. The magnitude of effort required to make this happen is not something any single vendor could credibly pull off. Ultimately, it's not OpenStack features that matter, but the "idea" behind this project and the degree of uptake it has already received in the community. When many people come together to realize a sensible vision, that vision inevitably becomes a reality.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9120206829210052209-7418346077435326008?l=mirantis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mirantis.blogspot.com/feeds/7418346077435326008/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mirantis.blogspot.com/2011/08/tracing-it-evolution-from-big-bang-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/7418346077435326008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/7418346077435326008'/><link rel='alternate' type='text/html' href='http://mirantis.blogspot.com/2011/08/tracing-it-evolution-from-big-bang-to.html' title='Tracing the IT Evolution from the Big Bang to the Big Crunch'/><author><name>Boris Renski</name><uri>http://www.blogger.com/profile/06261736815703853427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/-3oyjX4522x8/TdGoLDzMz-I/AAAAAAAAAAU/diZV9L6SJe0/s220/facebook.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120206829210052209.post-6039941091128337695</id><published>2011-08-16T16:15:00.000-07:00</published><updated>2011-08-16T16:43:18.361-07:00</updated><title type='text'>Our Contribution to the Vegas Economy</title><content type='html'>&lt;span style="font-family:arial;"&gt;Here are the highlights on our corporate team-building in Vegas last week. Special thanks to Rachel and Athena for making this party happen. Thank you to all who participated and helped make it fun.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-1hrgKbUMShI/Tkr8SrMS8bI/AAAAAAAAAEU/gOpwLuIZbgg/s1600/1.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 300px; height: 400px;" src="http://1.bp.blogspot.com/-1hrgKbUMShI/Tkr8SrMS8bI/AAAAAAAAAEU/gOpwLuIZbgg/s400/1.JPG" alt="" id="BLOGGER_PHOTO_ID_5641598880997110194" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;We started by warming up with some drinks in the airport bar on the way over to Vegas.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-d2lvHt7EDP4/Tkr8hd7G5uI/AAAAAAAAAEc/IzYzehInIfw/s1600/2.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/-d2lvHt7EDP4/Tkr8hd7G5uI/AAAAAAAAAEc/IzYzehInIfw/s400/2.JPG" alt="" id="BLOGGER_PHOTO_ID_5641599135133394658" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;The luggage belt broke upon our arrival and it took over an hour to get our luggage. By then, the buzz from the airport bar session started to wear off… =(.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-9nii8HrPsLE/Tkr8n_SVGFI/AAAAAAAAAEk/4aPS2ka9u0Y/s1600/3.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/-9nii8HrPsLE/Tkr8n_SVGFI/AAAAAAAAAEk/4aPS2ka9u0Y/s400/3.JPG" alt="" id="BLOGGER_PHOTO_ID_5641599247168378962" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;The taxi line outside the airport was loooong… so we decided to embellish our Vegas experience immediately by taking a limo to the hotel.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-uoVZYublMI0/Tkr8svKyzzI/AAAAAAAAAEs/OkN24_ohcUo/s1600/4.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/-uoVZYublMI0/Tkr8svKyzzI/AAAAAAAAAEs/OkN24_ohcUo/s400/4.JPG" alt="" id="BLOGGER_PHOTO_ID_5641599328741150514" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Finally arrived; herding around the Aria hotel entrance.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;After a brief bite to eat in Vettro café in Aria (which, by the way, is a horrible restaurant… don’t go there), we split up into two groups - the strong and the weak. The weak went to sleep or gamble. The strong went clubbing. Came back to the hotel room only at 4am.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-r1DrGuStlOo/Tkr8weiTrtI/AAAAAAAAAE0/m2ExlK9YbwE/s1600/5.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/-r1DrGuStlOo/Tkr8weiTrtI/AAAAAAAAAE0/m2ExlK9YbwE/s400/5.JPG" alt="" id="BLOGGER_PHOTO_ID_5641599392995847890" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;The next morning, we woke up to this view;  51st floor in Aria. Don’t get too excited – as with many Vegas hotels, they don’t have floors 40-50 in Aria.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-l-41KSsiumM/Tkr8_5Wf-8I/AAAAAAAAAE8/rVDHgCUbyUQ/s1600/6.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/-l-41KSsiumM/Tkr8_5Wf-8I/AAAAAAAAAE8/rVDHgCUbyUQ/s400/6.JPG" alt="" id="BLOGGER_PHOTO_ID_5641599657892117442" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Breakfast… some people slept in late, so our ranks were slim at breakfast.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/--9tHy0wF1qQ/Tkr9FLGeJdI/AAAAAAAAAFE/berMYTmSX4E/s1600/7.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 300px; height: 400px;" src="http://3.bp.blogspot.com/--9tHy0wF1qQ/Tkr9FLGeJdI/AAAAAAAAAFE/berMYTmSX4E/s400/7.JPG" alt="" id="BLOGGER_PHOTO_ID_5641599748556072402" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Ilya enjoyed his fries enormously!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-O2NmXR-17-Q/Tkr9JiVIrPI/AAAAAAAAAFM/P2n8qz0KTps/s1600/8.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/-O2NmXR-17-Q/Tkr9JiVIrPI/AAAAAAAAAFM/P2n8qz0KTps/s400/8.JPG" alt="" id="BLOGGER_PHOTO_ID_5641599823511071986" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Next stop – quintessential Vegas pool party at Liquid Lounge. $5 to anyone who can spot Mike Scherbakov and Julia Varigina in the crowd.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-3g1PU3KGUCw/Tkr9PYiN3dI/AAAAAAAAAFU/Fqsrz-4KO6E/s1600/9.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/-3g1PU3KGUCw/Tkr9PYiN3dI/AAAAAAAAAFU/Fqsrz-4KO6E/s400/9.JPG" alt="" id="BLOGGER_PHOTO_ID_5641599923960798674" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Why would anyone herd in the pool with 100 people in it, music blasting and no seating space, when you can quietly lounge next to one of 10 other pools in the hotel? The point of the pool party only comes to you after a few drinks… as you can see from the stampede by the bar, we were not the only ones to feel that way.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-I1UC12eOnjs/Tkr9ZrDS2BI/AAAAAAAAAFk/MRccIrydWI4/s1600/10.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 300px; height: 400px;" src="http://1.bp.blogspot.com/-I1UC12eOnjs/Tkr9ZrDS2BI/AAAAAAAAAFk/MRccIrydWI4/s400/10.JPG" alt="" id="BLOGGER_PHOTO_ID_5641600100730066962" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Once you get a drink in your hand – it’s BLAST OFF!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-BCjmcEgL1yg/Tkr9eXJMETI/AAAAAAAAAFs/A5eKXVe-JlE/s1600/11.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://2.bp.blogspot.com/-BCjmcEgL1yg/Tkr9eXJMETI/AAAAAAAAAFs/A5eKXVe-JlE/s400/11.JPG" alt="" id="BLOGGER_PHOTO_ID_5641600181285425458" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;No comment.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-xSS1yMpoyUs/Tkr9lBVXs_I/AAAAAAAAAF0/Lae_Js4xOmo/s1600/12.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/-xSS1yMpoyUs/Tkr9lBVXs_I/AAAAAAAAAF0/Lae_Js4xOmo/s400/12.JPG" alt="" id="BLOGGER_PHOTO_ID_5641600295690023922" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Winding down at the pool… next stop: corporate dinner.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-rhnvGhY_ttw/Tkr9q4K4GSI/AAAAAAAAAF8/lx6tJftCkkE/s1600/13.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 300px; height: 400px;" src="http://4.bp.blogspot.com/-rhnvGhY_ttw/Tkr9q4K4GSI/AAAAAAAAAF8/lx6tJftCkkE/s400/13.JPG" alt="" id="BLOGGER_PHOTO_ID_5641600396309305634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;It was dark and all we had was a point and shoot… so not so many pictures at the dinner. But basically this is what it looked like.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-tV2FyRMSFus/Tkr9vw6SL7I/AAAAAAAAAGE/_hCD18_arJo/s1600/14.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://2.bp.blogspot.com/-tV2FyRMSFus/Tkr9vw6SL7I/AAAAAAAAAGE/_hCD18_arJo/s400/14.JPG" alt="" id="BLOGGER_PHOTO_ID_5641600480260009906" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;After the dinner we went to watch a show – Absinthe. This group picture was taken immediately after.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;11:48pm – time to split up again into gamblers and partiers. Since I belonged to the party group, you don’t get to see the pictures of the gamblers… sorry.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-APphFJyFmAs/Tkr-VTq7B2I/AAAAAAAAAGM/1DtVxPAPMwc/s1600/15.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/-APphFJyFmAs/Tkr-VTq7B2I/AAAAAAAAAGM/1DtVxPAPMwc/s400/15.JPG" alt="" id="BLOGGER_PHOTO_ID_5641601125245978466" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Second night of clubbing looked like this. 1:45am and Mike is asleep on a couch at Tryst. This is called a SHUT DOWN!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-E40Iuz-3ZAI/Tkr-eUw-xaI/AAAAAAAAAGU/7rWW4K6qDkc/s1600/16.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/-E40Iuz-3ZAI/Tkr-eUw-xaI/AAAAAAAAAGU/7rWW4K6qDkc/s400/16.JPG" alt="" id="BLOGGER_PHOTO_ID_5641601280158647714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;And my SHUT DOWN happened in the airport on the way back.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9120206829210052209-6039941091128337695?l=mirantis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mirantis.blogspot.com/feeds/6039941091128337695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mirantis.blogspot.com/2011/08/our-contribution-to-vegas-economy.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/6039941091128337695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/6039941091128337695'/><link rel='alternate' type='text/html' href='http://mirantis.blogspot.com/2011/08/our-contribution-to-vegas-economy.html' title='Our Contribution to the Vegas Economy'/><author><name>Boris Renski</name><uri>http://www.blogger.com/profile/06261736815703853427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/-3oyjX4522x8/TdGoLDzMz-I/AAAAAAAAAAU/diZV9L6SJe0/s220/facebook.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-1hrgKbUMShI/Tkr8SrMS8bI/AAAAAAAAAEU/gOpwLuIZbgg/s72-c/1.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120206829210052209.post-3384887993776333959</id><published>2011-08-12T06:19:00.000-07:00</published><updated>2011-08-15T11:54:08.692-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openstack'/><category scheme='http://www.blogger.com/atom/ns#' term='nova'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='keystone'/><category scheme='http://www.blogger.com/atom/ns#' term='ldap'/><title type='text'>LDAP identity store for OpenStack Keystone</title><content type='html'>After some time working with &lt;a href="http://openstack.org"&gt;OpenStack&lt;/a&gt; installation using existing LDAP installation for authentication, we encountered one big problem. The latest &lt;a href="http://wiki.openstack.org/Projects/IncubatorApplication/OpenStackDashboard"&gt;Dashboard&lt;/a&gt; code dropped support of old bare authentication in favor of &lt;a href="http://wiki.openstack.org/Projects/IncubatorApplication/Keystone"&gt;Keystone&lt;/a&gt;-based one. That time Keystone had no support for multiple authentication backends, so we had to develop this feature.&lt;br /&gt;Now we have a basic support of LDAP authentication in Keystone which provides subset of functionality that was present in &lt;a href="http://nova.openstack.org/"&gt;Nova&lt;/a&gt;. Currently, the main limitation is inability to actually integrate with the existing LDAP tree due to limitations in backend, but it works fine in isolated corner of LDAP.&lt;br /&gt;So, after a long time of coding and fighting with new upstream workflows, we can give you a chance to try it out.&lt;br /&gt;To do it, one should:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Make sure that all necessary components are installed. They are Nova, Glance, Keystone and Dashboard.&lt;br /&gt;&lt;br /&gt;Since the latter pair is still in incubator, you’ll have to download them from the source repository:&lt;br /&gt;&lt;script src="https://gist.github.com/1142034.js"&gt; &lt;/script&gt;&lt;/li&gt;&lt;li&gt;Set up Nova to authorize requests in Keystone:&lt;br /&gt;&lt;script src="https://gist.github.com/1142037.js"&gt; &lt;/script&gt;&lt;br /&gt;It assumes that you’re in the same dir where you’ve downloaded Keystone sources. Replace nova.conf path if it differs in your Nova installation.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Add schema information to your LDAP installation.&lt;br /&gt;&lt;br /&gt;It heavily depends on your LDAP server. There is a common .schema file and .ldif for the latest version of OpenLDAP in keystone/keystone/backends/ldap/ dir. For local OpenLDAP installation, this will do the trick (if you haven’t change the dir after previous steps):&lt;br /&gt;&lt;script src="https://gist.github.com/1142040.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Modify Keystone configuration at &lt;tt&gt;keystone/etc/keystone.conf&lt;/tt&gt; to use ldap backend:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;add &lt;tt&gt;keystone.backends.ldap&lt;/tt&gt; to the &lt;tt&gt;backends&lt;/tt&gt; list in &lt;tt&gt;[DEFAULT]&lt;/tt&gt; section;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;remove &lt;tt&gt;Tenant&lt;/tt&gt;, &lt;tt&gt;User&lt;/tt&gt;, &lt;tt&gt;UserRoleAssociation&lt;/tt&gt; and &lt;tt&gt;Token&lt;/tt&gt; from the &lt;tt&gt;backend_entities&lt;/tt&gt; list in &lt;tt&gt;[keystone.backends.sqlalchemy]&lt;/tt&gt; section;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;add new section (don’t forget to change URL, user and password to match your installation):&lt;br /&gt;&lt;script src="https://gist.github.com/1142041.js"&gt; &lt;/script&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Make sure that &lt;tt&gt;ou=Groups,dc=example,dc=com&lt;/tt&gt; and &lt;tt&gt;ou=Users,dc=example,dc=com&lt;/tt&gt; subtree exists or set LDAP backend to use any other ones by adding &lt;tt&gt;tenant_tree_dn&lt;/tt&gt;, &lt;tt&gt;role_tree_dn&lt;/tt&gt; and &lt;tt&gt;user_tree_dn&lt;/tt&gt; parameters into &lt;tt&gt;[keystone.backends.ldap]&lt;/tt&gt; section in config file.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Run Nova, Keystone and Dashboard as usual.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Create some users, tenants, endpoints, etc. in Keystone by using keystone/bin/keystone-manage command or just run keystone/bin/sample-data.sh to add the test ones.&lt;/li&gt;&lt;br /&gt;Now you can authenticate in Dashboard using credentials of one of created users. Note that from this point all user, project and role management should be done through Keystone using either keystone-manage command or syspanel on Dashboard.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9120206829210052209-3384887993776333959?l=mirantis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mirantis.blogspot.com/feeds/3384887993776333959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mirantis.blogspot.com/2011/08/ldap-identity-store-for-openstack.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/3384887993776333959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/3384887993776333959'/><link rel='alternate' type='text/html' href='http://mirantis.blogspot.com/2011/08/ldap-identity-store-for-openstack.html' title='LDAP identity store for OpenStack Keystone'/><author><name>Yury Taraday</name><uri>http://www.blogger.com/profile/09712172575827552469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120206829210052209.post-8133821519412864361</id><published>2011-06-30T15:06:00.000-07:00</published><updated>2011-07-05T11:38:50.851-07:00</updated><title type='text'>Bay Area OpenStack Meet &amp; Drink Highlights</title><content type='html'>&lt;span style="font-family:arial;"&gt;For those of you that weren’t able to make it yesterday and maybe for those of you who want to reminisce about the events of last night, Bay Area OpenStack Meet &amp;amp; Drink was probably the most well-attended OpenStack meetup in the valley to date, outside of the OpenStack summit this spring. A diverse crowd of over 120 stackers showed up – ranging from folks just learning the basics of OpenStack to hardcore code committers.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-_j2QB__r_xg/Tgz1E-nI_rI/AAAAAAAAADE/6UO4I-0rHi8/s1600/1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://2.bp.blogspot.com/-_j2QB__r_xg/Tgz1E-nI_rI/AAAAAAAAADE/6UO4I-0rHi8/s400/1.jpg" alt="" id="BLOGGER_PHOTO_ID_5624139500554354354" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;We originally planned on hosting a 30-40 person tech meetup session in a small cozy space at the Computer History Museum. However, with over 100 RSVPs we had to go all out and rent out Hahn Auditorium, making space for all of those wanting to participate.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-t6sXxnhQ4Vo/Tgz1adia7qI/AAAAAAAAADM/bxH4yvCcwuY/s1600/2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 266px; height: 400px;" src="http://2.bp.blogspot.com/-t6sXxnhQ4Vo/Tgz1adia7qI/AAAAAAAAADM/bxH4yvCcwuY/s400/2.jpg" alt="" id="BLOGGER_PHOTO_ID_5624139869633310370" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;First 40 minutes – people eating drinking and mingling. The food line was a bit overwhelming.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-FS94_4XeepM/Tgz1mJnSXcI/AAAAAAAAADU/ddPWW9GUiyY/s1600/3.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 299px;" src="http://1.bp.blogspot.com/-FS94_4XeepM/Tgz1mJnSXcI/AAAAAAAAADU/ddPWW9GUiyY/s400/3.jpg" alt="" id="BLOGGER_PHOTO_ID_5624140070443441602" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Cloud wine was served with dinner.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-BDTYakqb1nk/Tgz1zXEKCZI/AAAAAAAAADc/cKUJvJI7zSI/s1600/4.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://2.bp.blogspot.com/-BDTYakqb1nk/Tgz1zXEKCZI/AAAAAAAAADc/cKUJvJI7zSI/s400/4.jpg" alt="" id="BLOGGER_PHOTO_ID_5624140297392490898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Joe Arnold from Cloudscaling brought a demo server, running SWIFT for people to play around with.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-t5nDsSWDRC0/Tgz2FpV6Z9I/AAAAAAAAADk/eSaW-LOJqnY/s1600/5.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 268px; height: 400px;" src="http://3.bp.blogspot.com/-t5nDsSWDRC0/Tgz2FpV6Z9I/AAAAAAAAADk/eSaW-LOJqnY/s400/5.jpg" alt="" id="BLOGGER_PHOTO_ID_5624140611536447442" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;I opened the ceremony with a 5-minute intro – polling the audience on their experience with OpenStack, saying a few words about Mirantis and upcoming events, as well as introducing Mirantis team members.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-g32bl2Un4Yw/Tgz2PJrVkLI/AAAAAAAAADs/8N-Wz4FfEQk/s1600/6.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://4.bp.blogspot.com/-g32bl2Un4Yw/Tgz2PJrVkLI/AAAAAAAAADs/8N-Wz4FfEQk/s400/6.jpg" alt="" id="BLOGGER_PHOTO_ID_5624140774835065010" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Meanwhile, Joe was getting all too excited to do his pitch of SWIFT.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-Hb0YECvTCX4/Tgz2YyxfjTI/AAAAAAAAAD0/Z4cNvwI-K98/s1600/7.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 266px;" src="http://1.bp.blogspot.com/-Hb0YECvTCX4/Tgz2YyxfjTI/AAAAAAAAAD0/Z4cNvwI-K98/s400/7.jpg" alt="" id="BLOGGER_PHOTO_ID_5624140940485561650" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Joe did his 10-minute talk on “Swift in the Small.” You can read up on the content that was presented in Joe’s blog: &lt;a href="http://joearnold.com/2011/06/27/swift-in-the-small/"&gt;http://joearnold.com/2011/06/27/swift-in-the-small/&lt;/a&gt;. You can also view the slides here: &lt;a href="http://bit.ly/mMRcpt"&gt;http://bit.ly/mMRcpt&lt;/a&gt;. And the live recording of the presentation can be found here: &lt;a href="http://bit.ly/mJOr2R"&gt;http://bit.ly/mJOr2R&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-XoqTJfbfVU0/Tgz2kSMx2PI/AAAAAAAAAD8/y3j8SR8pWUI/s1600/8.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 266px;" src="http://1.bp.blogspot.com/-XoqTJfbfVU0/Tgz2kSMx2PI/AAAAAAAAAD8/y3j8SR8pWUI/s400/8.jpg" alt="" id="BLOGGER_PHOTO_ID_5624141137900067058" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;We gave out Russian Standard vodka bottles at the meetup as favors. To complete the theme and give the audience a taste of Russian hospitality, we had an accordionist perform a 5-minute stunt immediately after Joe’s pitch on Swift (see his performance here: &lt;a href="http://bit.ly/iiYveN"&gt;http://bit.ly/iiYveN&lt;/a&gt;).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-K0rwK5K0ywM/Tgz20VsGJeI/AAAAAAAAAEE/w3LCSlADqts/s1600/9.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://2.bp.blogspot.com/-K0rwK5K0ywM/Tgz20VsGJeI/AAAAAAAAAEE/w3LCSlADqts/s400/9.jpg" alt="" id="BLOGGER_PHOTO_ID_5624141413714634210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Party time…&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-ioZFz2tNIsU/Tgz3AXkZJ_I/AAAAAAAAAEM/WGUDIYOnMl8/s1600/10.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 267px; height: 400px;" src="http://1.bp.blogspot.com/-ioZFz2tNIsU/Tgz3AXkZJ_I/AAAAAAAAAEM/WGUDIYOnMl8/s400/10.jpg" alt="" id="BLOGGER_PHOTO_ID_5624141620377626610" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Mike Scherbakov from our team of stackers talked about implementing Nova in Mirantis’ internal IT department, taking quite a few questions from the audience. The deck of his presentation is here: &lt;a href="http://slidesha.re/jyS4WL"&gt;http://slidesha.re/jyS4WL&lt;/a&gt;. The recording of the talk can be found here: &lt;a href="http://bit.ly/lo6s7a"&gt;part 1&lt;/a&gt;; &lt;a href="http://bit.ly/kTDn8z"&gt;part 2&lt;/a&gt;; &lt;a href="http://bit.ly/jZMStc"&gt;part 3&lt;/a&gt;; and &lt;a href="http://bit.ly/kDoTnn"&gt;part 4&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;I’d like to thank everyone for coming and we’ll appreciate any comments or suggestions on the event. We plan to have our next meetup at the end of September. If you would like to help organize, present your OpenStack story, or offer any ideas on how to make the experience better, please ping me on twitter @zer0tweets or send me an email – borisr at mirantis dot com.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9120206829210052209-8133821519412864361?l=mirantis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mirantis.blogspot.com/feeds/8133821519412864361/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mirantis.blogspot.com/2011/06/bay-area-openstack-meet-drink.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/8133821519412864361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/8133821519412864361'/><link rel='alternate' type='text/html' href='http://mirantis.blogspot.com/2011/06/bay-area-openstack-meet-drink.html' title='Bay Area OpenStack Meet &amp; Drink Highlights'/><author><name>Boris Renski</name><uri>http://www.blogger.com/profile/06261736815703853427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/-3oyjX4522x8/TdGoLDzMz-I/AAAAAAAAAAU/diZV9L6SJe0/s220/facebook.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-_j2QB__r_xg/Tgz1E-nI_rI/AAAAAAAAADE/6UO4I-0rHi8/s72-c/1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120206829210052209.post-7372635753831772706</id><published>2011-06-30T03:47:00.000-07:00</published><updated>2011-07-08T12:00:34.821-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vcider'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud'/><title type='text'>vCider Virtual Switch Overview</title><content type='html'>&lt;span class="Apple-style-span"&gt;A couple of months ago, Chris Marino, CEO at &lt;a href="http://www.vcider.com/"&gt;vCider&lt;/a&gt;, stopped by the Mirantis office and gave a very interesting presentation on the vCider networking solution for clouds. A few days later, he kindly provided me with beta access to their product.&lt;br /&gt;&lt;br /&gt;A few days ago, vCider announced public availability of the product. So now it's a good time to blog about my experience concerning it.&lt;br /&gt;&lt;h3&gt;&lt;br /&gt;&lt;/h3&gt;&lt;h3&gt;About vCider Virtual Switch&lt;br /&gt;&lt;/h3&gt;To make a long story short, vCider Virtual Switch allows you to build a virtual &lt;a href="http://en.wikipedia.org/wiki/OSI_model#Layer_2:_Data_Link_Layer"&gt;Layer 2&lt;/a&gt; network across several Linux boxes; these boxes might be Virtual Machines (VMs) on a cloud (or even in different clouds), or it might be a physical server.&lt;br /&gt;&lt;br /&gt;The flow is pretty simple: you download a package (DEBs and RPMs are available on the site) and install it to all of the boxes for which you will create a network. No configuration is required except for creating a file with an account token.&lt;br /&gt;&lt;br /&gt;After that, all you have to do is to visit the vCider Dashboard and create networks and assign nodes to them.&lt;br /&gt;&lt;br /&gt;So to start playing with that, I created two nodes on Rackspace and created a virtual network for them for which I used &lt;tt&gt;192.168.87.0/24&lt;/tt&gt; address space.&lt;br /&gt;&lt;br /&gt;On both boxes two new network interfaces appeared:&lt;br /&gt;&lt;br /&gt;On the first box:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;5: vcider-net0: &lt;broadcast,multicast,up,lower_up&gt; mtu 1442 qdisc pfifo_fast state UNKNOWN qlen 1000&lt;br /&gt;link/ether ee:cb:0b:93:34:45 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;inet 192.168.87.1/24 brd 192.168.87.255 scope global vcider-net0&lt;br /&gt;inet6 fe80::eccb:bff:fe93:3445/64 scope link&lt;br /&gt; valid_lft forever preferred_lft forever&lt;br /&gt;&lt;/broadcast,multicast,up,lower_up&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;and on the second one:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;7: vcider-net0: &lt;broadcast,multicast,up,lower_up&gt; mtu 1442 qdisc pfifo_fast state UNKNOWN qlen 1000&lt;br /&gt;link/ether 6e:8e:a0:e9:a0:72 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;inet 192.168.87.4/24 brd 192.168.87.255 scope global vcider-net0&lt;br /&gt;inet6 fe80::6c8e:a0ff:fee9:a072/64 scope link&lt;br /&gt; valid_lft forever preferred_lft forever&lt;br /&gt;&lt;/broadcast,multicast,up,lower_up&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;tracepath output looks like this:&lt;br /&gt;&lt;br /&gt;root@alice:~# tracepath 192.168.87.4&lt;br /&gt;1:  192.168.87.1 (192.168.87.1)                            0.169ms pmtu 1442&lt;br /&gt;1:  192.168.87.4 (192.168.87.4)                            6.677ms reached&lt;br /&gt;1:  192.168.87.4 (192.168.87.4)                            0.338ms reached&lt;br /&gt;Resume: pmtu 1442 hops 1 back 64&lt;br /&gt;root@alice:~#&lt;br /&gt;&lt;br /&gt;arping also works fine:&lt;br /&gt;&lt;br /&gt;novel@bob:~ %&amp;gt; sudo arping -I vcider-net0 192.168.87.1&lt;br /&gt;ARPING 192.168.87.1 from 192.168.87.4 vcider-net0&lt;br /&gt;Unicast reply from 192.168.87.1 [EE:CB:0B:93:34:45]  0.866ms&lt;br /&gt;Unicast reply from 192.168.87.1 [EE:CB:0B:93:34:45]  1.030ms&lt;br /&gt;Unicast reply from 192.168.87.1 [EE:CB:0B:93:34:45]  0.901ms&lt;br /&gt;^CSent 3 probes (1 broadcast(s))&lt;br /&gt;Received 3 response(s)&lt;br /&gt;novel@bob:~ %&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Performance&lt;/h3&gt;One of the most important questions is performance. First, I used &lt;tt&gt;iperf&lt;/tt&gt; to measure bandwidth on the public interfaces:&lt;br /&gt;&lt;br /&gt;novel@bob:~ %&amp;gt; iperf -s -B xx.yy.94.250&lt;br /&gt;------------------------------------------------------------&lt;br /&gt;Server listening on TCP port 5001&lt;br /&gt;Binding to local address xx.yy.94.250&lt;br /&gt;TCP window size: 85.3 KByte (default)&lt;br /&gt;------------------------------------------------------------&lt;br /&gt;[  4] local xx.yy.94.250 port 5001 connected with xx.yy.84.110 port 34231&lt;br /&gt;[ ID] Interval       Transfer     Bandwidth&lt;br /&gt;[  4]  0.0-10.3 sec  12.3 MBytes  9.94 Mbits/sec&lt;br /&gt;[  5] local xx.yy.94.250 port 5001 connected with xx.yy.84.110 port 34232&lt;br /&gt;[  5]  0.0-20.9 sec  12.5 MBytes  5.02 Mbits/sec&lt;br /&gt;[SUM]  0.0-20.9 sec  24.8 MBytes  9.93 Mbits/sec&lt;br /&gt;[  6] local xx.yy.94.250 port 5001 connected with xx.yy.84.110 port 34233&lt;br /&gt;[  6]  0.0-10.6 sec  12.5 MBytes  9.92 Mbits/sec&lt;br /&gt;[  4] local xx.yy.94.250 port 5001 connected with xx.yy.84.110 port 34234&lt;br /&gt;[  4]  0.0-10.6 sec  12.5 MBytes  9.94 Mbits/sec&lt;br /&gt;[  5] local xx.yy.94.250 port 5001 connected with xx.yy.84.110 port 34235&lt;br /&gt;[  5]  0.0-10.5 sec  12.4 MBytes  9.94 Mbits/sec&lt;br /&gt;[  6] local xx.yy.94.250 port 5001 connected with xx.yy.84.110 port 34236&lt;br /&gt;[  6]  0.0-10.6 sec  12.6 MBytes  9.94 Mbits/sec&lt;br /&gt;[  4] local xx.yy.94.250 port 5001 connected with xx.yy.84.110 port 34237&lt;br /&gt;[  4]  0.0-10.7 sec  12.6 MBytes  9.94 Mbits/sec&lt;br /&gt;[  5] local xx.yy.94.250 port 5001 connected with xx.yy.84.110 port 34238&lt;br /&gt;[  5]  0.0-10.6 sec  12.6 MBytes  9.93 Mbits/sec&lt;br /&gt;&lt;br /&gt;So it gives average bandwidth ~9.3Mbit/sec.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;And here's the same test via vCider network:&lt;br /&gt;&lt;br /&gt;novel@bob:~ %&amp;gt; iperf -s -B 192.168.87.4&lt;br /&gt;------------------------------------------------------------&lt;br /&gt;Server listening on TCP port 5001&lt;br /&gt;Binding to local address 192.168.87.4&lt;br /&gt;TCP window size: 85.3 KByte (default)&lt;br /&gt;------------------------------------------------------------&lt;br /&gt;[  4] local 192.168.87.4 port 5001 connected with 192.168.87.1 port 60977&lt;br /&gt;[ ID] Interval       Transfer     Bandwidth&lt;br /&gt;[  4]  0.0-10.5 sec  11.4 MBytes  9.10 Mbits/sec&lt;br /&gt;[  5] local 192.168.87.4 port 5001 connected with 192.168.87.1 port 60978&lt;br /&gt;[  5]  0.0-10.5 sec  11.4 MBytes  9.05 Mbits/sec&lt;br /&gt;[  6] local 192.168.87.4 port 5001 connected with 192.168.87.1 port 60979&lt;br /&gt;[  6]  0.0-10.6 sec  11.4 MBytes  9.03 Mbits/sec&lt;br /&gt;[  4] local 192.168.87.4 port 5001 connected with 192.168.87.1 port 60980&lt;br /&gt;[  4]  0.0-10.4 sec  11.2 MBytes  9.03 Mbits/sec&lt;br /&gt;[  5] local 192.168.87.4 port 5001 connected with 192.168.87.1 port 60981&lt;br /&gt;[  5]  0.0-10.5 sec  11.4 MBytes  9.06 Mbits/sec&lt;br /&gt;[  6] local 192.168.87.4 port 5001 connected with 192.168.87.1 port 60982&lt;br /&gt;[  6]  0.0-10.4 sec  11.3 MBytes  9.05 Mbits/sec&lt;br /&gt;[  4] local 192.168.87.4 port 5001 connected with 192.168.87.1 port 60983&lt;br /&gt;[  4]  0.0-20.8 sec  11.2 MBytes  4.51 Mbits/sec&lt;br /&gt;[SUM]  0.0-20.8 sec  22.4 MBytes  9.05 Mbits/sec&lt;br /&gt;[  5] local 192.168.87.4 port 5001 connected with 192.168.87.1 port 60984&lt;br /&gt;[  5]  0.0-10.5 sec  11.3 MBytes  9.03 Mbits/sec&lt;br /&gt;&lt;br /&gt;It gives an average bandwidth of 8.5Mbit/sec, and it's about 91% of the original bandwidth, which is not bad I believe.&lt;br /&gt;&lt;br /&gt;For the sake of experimenting, I tried to emulate &lt;a href="http://en.wikipedia.org/wiki/TAP_%28network_driver%29"&gt;TAP&lt;/a&gt; networking using &lt;a href="http://openvpn.net/"&gt;openvpn&lt;/a&gt;. I chose the quickest configuration possible and just ran openvpn on the server this way:&lt;br /&gt;&lt;br /&gt;# openvpn --dev tap0&lt;br /&gt;&lt;br /&gt;and on the client:&lt;br /&gt;&lt;br /&gt;# openvpn --remote xx.yy.94.250 --dev tap0&lt;br /&gt;&lt;br /&gt;As you might guess, openvpn runs in user space and it tunnels traffic over the public&lt;br /&gt;interfaces on the boxes I use for tests.&lt;br /&gt;&lt;br /&gt;And I conducted another &lt;tt&gt;iperf&lt;/tt&gt; test:&lt;br /&gt;&lt;br /&gt;novel@bob:~ %&amp;gt; iperf -s -B 192.168.37.4&lt;br /&gt;------------------------------------------------------------&lt;br /&gt;Server listening on TCP port 5001&lt;br /&gt;Binding to local address 192.168.37.4&lt;br /&gt;TCP window size: 85.3 KByte (default)&lt;br /&gt;------------------------------------------------------------&lt;br /&gt;[  4] local 192.168.37.4 port 5001 connected with 192.168.37.1 port 53923&lt;br /&gt;[ ID] Interval       Transfer     Bandwidth&lt;br /&gt;[  4]  0.0-10.5 sec  11.2 MBytes  8.97 Mbits/sec&lt;br /&gt;[  5] local 192.168.37.4 port 5001 connected with 192.168.37.1 port 53924&lt;br /&gt;[  5]  0.0-10.5 sec  11.1 MBytes  8.88 Mbits/sec&lt;br /&gt;[  6] local 192.168.37.4 port 5001 connected with 192.168.37.1 port 53925&lt;br /&gt;[  4] local 192.168.37.4 port 5001 connected with 192.168.37.1 port 53926&lt;br /&gt;[  6]  0.0-10.4 sec  11.1 MBytes  8.90 Mbits/sec&lt;br /&gt;[  4]  0.0-20.6 sec  10.8 MBytes  4.38 Mbits/sec&lt;br /&gt;[SUM]  0.0-20.6 sec  21.8 MBytes  8.90 Mbits/sec&lt;br /&gt;[  5] local 192.168.37.4 port 5001 connected with 192.168.37.1 port 53927&lt;br /&gt;[  5]  0.0-10.4 sec  11.0 MBytes  8.87 Mbits/sec&lt;br /&gt;[  6] local 192.168.37.4 port 5001 connected with 192.168.37.1 port 53928&lt;br /&gt;[  6]  0.0-10.3 sec  10.9 MBytes  8.90 Mbits/sec&lt;br /&gt;[  4] local 192.168.37.4 port 5001 connected with 192.168.37.1 port 53929&lt;br /&gt;[  4]  0.0-10.5 sec  11.1 MBytes  8.88 Mbits/sec&lt;br /&gt;[  5] local 192.168.37.4 port 5001 connected with 192.168.37.1 port 53930&lt;br /&gt;[  5]  0.0-10.3 sec  10.9 MBytes  8.88 Mbits/sec&lt;br /&gt;&lt;br /&gt;It gives an average bandwidth of 8.3Mbit/sec, and it's 89% of the original bandwidth. It's just a little slower than vCider Virtual Switch which is very good for openvpn, but I have to note it's not quite a fair comparison:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"&gt;I don't use encryption in my openvpn setup&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Real-world openvpn configuration will be much more complex&lt;/li&gt;&lt;li&gt;I believe openvpn will scale significantly worse with the growth of the number of machines in the network, as openvpn works in client/server mode while vCider  works in p2p mode and uses central service to grab metadata such as routing information etc.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Also, it seems to me that the vCider team's comparison to openvpm is helpful, as they have a note on it in the &lt;a href="http://www.vcider.com/developers/frequently-asked-questions#software"&gt;FAQ&lt;/a&gt; -- be sure to check it out.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Support&lt;/h3&gt;It's a pleasure to note that the vСider team is very responsive. As I started testing the product at quite an early stage, I spotted some issues, and even they were not critical. It's a great pleasure to see they are all fixed in the next version.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Conclusion&lt;/h3&gt;vCider Virtual Switch is a product with expected behavior, good performance, complete documentation, and it's easy to use. The vCider team provides good support as well.&lt;br /&gt;&lt;br /&gt;It seems that for relatively small setups within a single trusted environment, e.g. about 5-8 VMs within a single cloud provider, where traffic encryption and performance are not that critical, one could go with a openvpn setup. However, when either security or performance becomes important or the size of the setup increases, vCider Virtual Switch would be a good choice.&lt;br /&gt;&lt;br /&gt;I am looking forward to new releases and specifically I'm very curious about multicast support and exposed API which manages networks.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Further reading&lt;/h3&gt;* &lt;a href="http://www.vcider.com/"&gt;vCider Home Page&lt;/a&gt;&lt;br /&gt;* &lt;a href="http://www.vcider.com/developers/frequently-asked-questions"&gt;vCider Virual Switch FAQ&lt;/a&gt;&lt;br /&gt;* &lt;a href="http://en.wikipedia.org/wiki/OSI_model"&gt;Wikipedia article on OSI model&lt;/a&gt;&lt;br /&gt;* &lt;a href="http://openvpn.net/"&gt;OpenVPN Home Page&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9120206829210052209-7372635753831772706?l=mirantis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mirantis.blogspot.com/feeds/7372635753831772706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mirantis.blogspot.com/2011/06/vcider-virtual-switch-overview.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/7372635753831772706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/7372635753831772706'/><link rel='alternate' type='text/html' href='http://mirantis.blogspot.com/2011/06/vcider-virtual-switch-overview.html' title='vCider Virtual Switch Overview'/><author><name>Roman Bogorodskiy</name><uri>http://www.blogger.com/profile/03240278201195905090</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120206829210052209.post-538569146289589173</id><published>2011-06-09T01:10:00.000-07:00</published><updated>2011-06-09T01:28:46.551-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shared storage'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='drbd'/><title type='text'>Clustered LVM on DRBD resource in Fedora Linux</title><content type='html'>As &lt;a href="http://fghaas.wordpress.com/"&gt;Florian Haas&lt;/a&gt; has &lt;a href="http://mirantis.blogspot.com/2011/05/shared-storage-for-openstack-based-on.html?showComment=1306528806951#c5028478804503884300"&gt;pointed out&lt;/a&gt; in my previous post's comment, our shared storage configuration requires special precautions to avoid corruption of data when two hosts connected via DRBD try to manage LVM volumes simultaneously. Generally, these precautions concern locking LVM metadata operations while running DRBD in 'dual-primary' mode.&lt;br /&gt;&lt;br /&gt;Let's examine it in detail. The LVM locking mechanism is configured in the [global] section of &lt;i&gt;/etc/lvm/lvm.conf&lt;/i&gt;. The 'locking_type' parameter is the most important  here. It defines which locking LVM is used while changing metadata. It can be equal to:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;'0': disables locking completely - it's dangerous to use;&lt;/li&gt;&lt;li&gt;'1': default, local file-based locking. It knows nothing about the cluster and possible conflicting metadata changes;&lt;/li&gt;&lt;li&gt;'2': uses an external shared library and is defined by the 'locking_library' parameter;&lt;/li&gt;&lt;li&gt;'3': uses built-in LVM clustered locking;&lt;/li&gt;&lt;li&gt;'4': read-only locking which forbids any changes of metadata.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;The simplest way is to use local locking on one of the drbd peers and to disable metadata operations on another one. This has a serious drawback though: we won't have our Volume Groups and Logical Volumes activated automatically upon creation on the other, 'passive' peer. The thing is that it's not good for the production environment and cannot be automated easily.&lt;br /&gt;&lt;br /&gt;But there is another, more sophisticated way. We can use the &lt;a href="http://www.linux-ha.org/doc/users-guide/users-guide.html"&gt;Linux-HA&lt;/a&gt; (Heartbeat) coupled with the &lt;a href="http://linux-ha.org/doc/man-pages/re-ra-LVM.html"&gt;LVM Resource Agent&lt;/a&gt;. It automates activation of the newly created LVM resources on the shared storage, but still provides no locking mechanism suitable for a 'dual-primary' DRBD operation.&lt;br /&gt;&lt;br /&gt;It should be noted that full support of clustered locking for the LVM can be achieved by the &lt;b&gt;lvm2-cluster&lt;/b&gt; Fedora RPM package stored in the repository. It contains the &lt;b&gt;clvmd&lt;/b&gt; service which runs on all hosts in the cluster and controls LVM locking on shared storage. In this case, we have only 2 drbd-peers in the cluster.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;clvmd&lt;/b&gt; requires a cluster engine in order to function properly. It's provided by the &lt;b&gt;cman&lt;/b&gt; service, installed as a dependency of the &lt;b&gt;lvm2-cluster&lt;/b&gt; (other dependencies may vary from installation to installation):&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1010188.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;The only thing we need the cluster for is the use of clvmd; the configuration of cluster itself is pretty basic. Since we don't need advanced features like automated &lt;a href="https://fedorahosted.org/cluster/wiki/Fence"&gt;fencing&lt;/a&gt; yet, we specify manual handling. As we have only 2 nodes in the cluster, we can tell cman about it. Configuration for &lt;b&gt;cman&lt;/b&gt; resides in the &lt;i&gt;/etc/cluster/cluster.conf&lt;/i&gt; file:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1010213.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;clusternode name&lt;/b&gt; should be a fully qualified domain name and should be resolved by DNS or be present in &lt;i&gt;/etc/hosts&lt;/i&gt;. Number of &lt;b&gt;votes&lt;/b&gt; is used to determine &lt;b&gt;quorum&lt;/b&gt; of the cluster. In this case, we have two nodes, one vote per node, and expect one vote to make the cluster run (to have a quorum), as configured by &lt;b&gt;cman expected&lt;/b&gt; attribute.&lt;br /&gt;&lt;br /&gt;The second thing we need to configure is the cluster engine (&lt;b&gt;corosync&lt;/b&gt;). Its configuration goes to &lt;i&gt;/etc/corosync/corosync.conf&lt;/i&gt;:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1010226.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;The &lt;b&gt;bindinetaddr&lt;/b&gt; parameter must contain a &lt;i&gt;&lt;b&gt;network&lt;/b&gt;&lt;/i&gt; address. We configure &lt;b&gt;corosync&lt;/b&gt; to work on &lt;b&gt;eth1&lt;/b&gt; interfaces, connecting our nodes back-to-back on 1Gbps network. Also, we should  configure &lt;b&gt;iptables&lt;/b&gt; to accept multicast traffic on both hosts.&lt;br /&gt;&lt;br /&gt;It's noteworthy that these configurations should be identical on both cluster nodes.&lt;br /&gt;&lt;br /&gt;After the cluster has been prepared, we can change the LVM locking type in &lt;i&gt;/etc/lvm/lvm.conf&lt;/i&gt; on both drbd-connected nodes:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1010243.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Start &lt;b&gt;cman&lt;/b&gt; and &lt;b&gt;clvmd&lt;/b&gt; services on drbd-peers and get our cluster ready for the action:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1010247.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Now, as we already have a Volume Group on the shared storage, we can easily make it cluster-aware:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1010256.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Now we see the 'c' flag in VG Attributes:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1010259.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;As a result, Logical Volumes created in the &lt;i&gt;vg_shared&lt;/i&gt; volume group will be active on both nodes, and clustered locking is enabled for operations with volumes in this group. LVM commands can be issued on both hosts and &lt;b&gt;clvmd&lt;/b&gt; takes care of possible concurrent metadata changes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9120206829210052209-538569146289589173?l=mirantis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mirantis.blogspot.com/feeds/538569146289589173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mirantis.blogspot.com/2011/06/clustered-lvm-on-drbd-resource-in.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/538569146289589173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/538569146289589173'/><link rel='alternate' type='text/html' href='http://mirantis.blogspot.com/2011/06/clustered-lvm-on-drbd-resource-in.html' title='Clustered LVM on DRBD resource in Fedora Linux'/><author><name>Oleg</name><uri>http://www.blogger.com/profile/07084186172610456681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120206829210052209.post-8263082940492188308</id><published>2011-06-06T03:09:00.000-07:00</published><updated>2011-06-07T16:54:14.260-07:00</updated><title type='text'>OpenStack Nova: basic disaster recovery</title><content type='html'>&lt;div style="text-align: justify;"&gt;Today, I want to take a look at some possible issues that may be encountered while using &lt;a href="http://openstack.org/"&gt;OpenStack&lt;/a&gt;. The purpose of this topic is to share our experience dealing with the hardware or software failures which definitely would be faced by anyone who attempts to run &lt;a href="http://openstack.org/"&gt;OpenStack&lt;/a&gt; in production.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Software issue&lt;/h3&gt;&lt;br /&gt;Let's look at the simplest, but possibly the most frequent issue. For example, if we need to upgrade the kernel or software that will require a host reboot on one of the compute nodes, the best decision in this case is to migrate all virtual machines running on this server to other compute nodes. Unfortunately, sometimes it may be impossible due to several reasons, such as lack of shared storage to perform migration or cpu/memory resources to allocate all VMs. The only option is to shut down virtual machines for the maintenance period. But how should they be started correctly after being rebooted? Of course, you may set the special flag in &lt;i&gt;&lt;b&gt;nova.conf&lt;/b&gt;&lt;/i&gt; and instances will start automatically on the host system boot:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1009910.js"&gt; &lt;/script&gt;&lt;br /&gt;However, you may want to disable it (in fact, setting this flag is a bad idea if you use &lt;i&gt;&lt;b&gt;nova-volume&lt;/b&gt;&lt;/i&gt; service).&lt;br /&gt;&lt;br /&gt;There are many ways to start virtual machines. Probably the simplest one is to run:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1009923.js"&gt; &lt;/script&gt;&lt;br /&gt;It will recreate and start the libvirt domain using instance XML. This method works good if you don't have remote attached volume; otherwise, &lt;i&gt;&lt;b&gt;nova boot&lt;/b&gt;&lt;/i&gt; will fail with an error. In this case, you'll need to start the domain manually using the &lt;i&gt;virsh&lt;/i&gt; tool, connect the iscsi device, create an XML file and attach it to the instance, which is a nightmare if you have lots of instances with volumes.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Hardware issue&lt;/h3&gt;&lt;br /&gt;Imagine another situation. Assume our server with a compute node experiences a hardware issue that we can't eliminate in a short time. The bad thing is that it often happens unpredictably, without the ability to transfer virtual machines to a safe place. Yet, if you have shared storage, you won't lose instances data; however, the way to recover may be pretty vague. Going into technical details, the procedure can be described by following steps:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;update host information in DB for recovered instance&lt;/li&gt;&lt;br /&gt;&lt;li&gt;spawn instance on compute node&lt;/li&gt;&lt;br /&gt;&lt;li&gt;search for any attached volumes in database&lt;/li&gt;&lt;br /&gt;&lt;li&gt;look for volume device path, connect to it by iscsi or some other driver if necessary&lt;/li&gt;&lt;br /&gt;&lt;li&gt;attach it to the guest system&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h3&gt;Solution&lt;/h3&gt;&lt;br /&gt;For this and previous situations we developed python script that would run a virtual machine on the host where this script is executed. You can find it on our git repository: &lt;a href="https://github.com/Mirantis/openstack-utils/blob/master/nova-compute"&gt;openstack-utils&lt;/a&gt;. All you need is to copy the script on the compute node where you want to recover the virtual machine and execute:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1009969.js"&gt; &lt;/script&gt;&lt;br /&gt;You can look for &lt;i&gt;instance_id&lt;/i&gt; using the &lt;i&gt;&lt;b&gt;nova list&lt;/b&gt;&lt;/i&gt; command. The only limitation is that the virtual machine should be available on the host system.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Of course, in everyday &lt;a href="http://openstack.org/"&gt;OpenStack&lt;/a&gt; usage, you will be faced with lots of troubles that couldn't be solved by this script. For example, you may have storage configuration that provides the mirroring of data between two compute nodes and you need to recover the virtual machine on the third node that doesn't contain it on local hard drives. The more complex issues require more sophisticated solutions and we are working to cover most of them.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9120206829210052209-8263082940492188308?l=mirantis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mirantis.blogspot.com/feeds/8263082940492188308/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mirantis.blogspot.com/2011/06/openstack-nova-basic-disaster-recovery.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/8263082940492188308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/8263082940492188308'/><link rel='alternate' type='text/html' href='http://mirantis.blogspot.com/2011/06/openstack-nova-basic-disaster-recovery.html' title='OpenStack Nova: basic disaster recovery'/><author><name>Alexander Sakhnov</name><uri>http://www.blogger.com/profile/18153663838454405391</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120206829210052209.post-3856892668011216504</id><published>2011-05-27T02:04:00.000-07:00</published><updated>2011-05-27T15:37:16.265-07:00</updated><title type='text'>OpenStack Nova and Dashboard authorization using existing LDAP</title><content type='html'>Our current integration task involves using &lt;a href="http://www.gosa-project.org/"&gt;goSA&lt;/a&gt; as the central management utility. goSA internally uses the LDAP repository for all of its data. So we had to find a solution to make both &lt;a href="http://openstack.org/"&gt;OpenStack&lt;/a&gt; &lt;a href="http://openstack.org/projects/compute/"&gt;Nova&lt;/a&gt; and &lt;a href="http://wiki.openstack.org/OpenStackDashboard"&gt;Dashboard&lt;/a&gt; authenticate and authorize users using goSA's LDAP structures.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;LDAP in Nova&lt;/h3&gt;Nova stores its users, projects and roles (global and per-project) in LDAP. Necessary schema files are in /nova/auth dir in the Nova source distribution. The following describes how Nova stores each of these object types.&lt;br /&gt;&lt;br /&gt;Users are stored as objects with a &lt;tt&gt;novaUser&lt;/tt&gt; class. They have mandatory &lt;tt&gt;accessKey&lt;/tt&gt;, &lt;tt&gt;secretKey&lt;/tt&gt; and &lt;tt&gt;isNovaAdmin&lt;/tt&gt; (self-explanatory) attributes along with customizable attributes set by flags &lt;em&gt;ldap_user_id_attribute&lt;/em&gt; (&lt;tt&gt;uid&lt;/tt&gt; by default) and &lt;em&gt;ldap_user_name_attribute&lt;/em&gt; (&lt;tt&gt;cn&lt;/tt&gt;). To use the latter ones, it assigns &lt;tt&gt;person&lt;/tt&gt;, &lt;tt&gt;organizationalPerson&lt;/tt&gt; and &lt;tt&gt;inetOrgPerson&lt;/tt&gt; to all newly created users. All users are stored and searched for in the LDAP subtree defined by &lt;em&gt;ldap_user_subtree&lt;/em&gt; and &lt;em&gt;ldap_user_unit&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;If you want to manage user creation and deletion from some other place (such as &lt;a href="http://www.gosa-project.org/"&gt;goSA&lt;/a&gt; in our case), you can set the &lt;em&gt;ldap_user_modify_only&lt;/em&gt; flag to &lt;tt&gt;True&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;Projects are objects with the widely used &lt;tt&gt;groupOfNames&lt;/tt&gt; class in the subtree defined by the &lt;em&gt;ldap_project_subtree&lt;/em&gt; flag. Nova uses the &lt;tt&gt;cn&lt;/tt&gt; attribute for the project name, &lt;tt&gt;description&lt;/tt&gt; for description, &lt;tt&gt;member&lt;/tt&gt; for the list of members' DNs, &lt;tt&gt;owner&lt;/tt&gt; for the project manager's DN. All of these attributes are common for user (and any object) groups management, so it's easy to integrate Nova projects with an existing user groups management system (e.g. &lt;a href="http://www.gosa-project.org/"&gt;goSA&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Roles are also stored as &lt;tt&gt;groupOfNames&lt;/tt&gt;, with similar &lt;tt&gt;cn&lt;/tt&gt;, &lt;tt&gt;description&lt;/tt&gt; and &lt;tt&gt;member&lt;/tt&gt; attributes. Nova has hard-coded roles: &lt;tt&gt;cloudadmin&lt;/tt&gt;, &lt;tt&gt;itsec&lt;/tt&gt;, &lt;tt&gt;sysadmin&lt;/tt&gt;, &lt;tt&gt;netadmin&lt;/tt&gt;, &lt;tt&gt;developer&lt;/tt&gt;. Global roles are stored in a subtree defined by &lt;em&gt;role_project_subtree&lt;/em&gt;, &lt;tt&gt;cn&lt;/tt&gt;'s are defined by the &lt;em&gt;ldap_cloudadmin&lt;/em&gt;, &lt;em&gt;ldap_itsec&lt;/em&gt;, &lt;em&gt;ldap_sysadmin&lt;/em&gt;, &lt;em&gt;ldap_netadmin&lt;/em&gt; and &lt;em&gt;ldap_developer&lt;/em&gt; flags respectively. Per-project roles are stored right under the project's DN with &lt;tt&gt;cn&lt;/tt&gt; set to the role's name.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;LDAP in Dashboard&lt;/h3&gt;To make Dashboard authorize users in LDAP, I use the &lt;a href="http://pypi.python.org/pypi/django-auth-ldap"&gt;django-ldap-auth&lt;/a&gt; module.&lt;br /&gt;First, you need to install it using your preferred package manager (&lt;tt&gt;easy_install django-auth-ldap&lt;/tt&gt; is sufficient). Second, you need to add it to Dashboard's &lt;tt&gt;local_settings.py&lt;/tt&gt; in &lt;tt&gt;AUTHENTICATION_BACKENDS&lt;/tt&gt; and set up &lt;tt&gt;AUTH_LDAP_SERVER_URI&lt;/tt&gt; to your LDAP URI and &lt;tt&gt;AUTH_LDAP_USER_DN_TEMPLATE&lt;/tt&gt; to Python's template of users' DN; in our case, it should be &lt;tt&gt;"&lt;em&gt;ldap_user_id_attribute&lt;/em&gt;=%(user)s,&lt;em&gt;ldap_user_subtree&lt;/em&gt;"&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;Note that in &lt;tt&gt;local_settings.py&lt;/tt&gt; you override default settings, so if you want to just add a backend to &lt;tt&gt;AUTHENTICATION_BACKENDS&lt;/tt&gt;, you should use &lt;tt&gt;+=&lt;/tt&gt;. Also if you want to totally disable &lt;tt&gt;ModelBackend&lt;/tt&gt; like we did, you can use &lt;tt&gt;=&lt;/tt&gt; as well.&lt;br /&gt;&lt;br /&gt;Also note that to make Dashboard work, you'll have to create an account in Nova with admin privileges and a project with the same name as the account. You can either set all parameters in LDAP by hand or add it using &lt;tt&gt;nova-manage user admin&lt;/tt&gt; using one of usernames from LDAP.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Configuration examples&lt;/h3&gt;Let's say goSA is managing the organization &lt;tt&gt;exampleorg&lt;/tt&gt; in the domain &lt;tt&gt;example.com&lt;/tt&gt; on LDAP at &lt;tt&gt;ldap://ldap.example.com&lt;/tt&gt;. To make use of its users and groups for Nova's user, projects and roles, we wrote configs like this:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/995105.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/995111.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;By the way, to make &lt;a href="http://www.gosa-project.org/"&gt;goSA&lt;/a&gt; the central user management utility, we created a special plugin that manages Nova users. The plugin can be found &lt;a href="https://github.com/Mirantis/gosa-openstack"&gt;here&lt;/a&gt;. It looks like this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-T1aqhk1cXtw/Td-ijzZHFqI/AAAAAAAAAAM/GDTWtZUxHDY/s1600/gosa-nova.png"&gt;&lt;img style="CURSOR: hand" id="BLOGGER_PHOTO_ID_5611382396701578914" border="0" alt="" src="http://4.bp.blogspot.com/-T1aqhk1cXtw/Td-ijzZHFqI/AAAAAAAAAAM/GDTWtZUxHDY/s640/gosa-nova.png" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9120206829210052209-3856892668011216504?l=mirantis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mirantis.blogspot.com/feeds/3856892668011216504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mirantis.blogspot.com/2011/05/openstack-nova-and-dashboard.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/3856892668011216504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/3856892668011216504'/><link rel='alternate' type='text/html' href='http://mirantis.blogspot.com/2011/05/openstack-nova-and-dashboard.html' title='OpenStack Nova and Dashboard authorization using existing LDAP'/><author><name>Yury Taraday</name><uri>http://www.blogger.com/profile/09712172575827552469</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-T1aqhk1cXtw/Td-ijzZHFqI/AAAAAAAAAAM/GDTWtZUxHDY/s72-c/gosa-nova.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120206829210052209.post-5946466323032525119</id><published>2011-05-19T05:22:00.001-07:00</published><updated>2011-05-26T04:40:39.639-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openstack'/><category scheme='http://www.blogger.com/atom/ns#' term='shared storage'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='drbd'/><title type='text'>Shared storage for OpenStack based on DRBD</title><content type='html'>&lt;div style="TEXT-ALIGN: left" dir="ltr" trbidi="on"&gt;Storage is a tricky part of the cloud environment. We want it to be fast, to be network-accessible and to be as reliable as possible. One way is to go to the shop and buy yourself a SAN solution from a prominent vendor for solid money. Another way is to take commodity hardware and use open source magic to turn it into distributed network storage. Guess what we did?&lt;br /&gt;&lt;br /&gt;We have several primary goals ahead. First, our storage has to be reliable. We want to survive both minor and major hardware crashes - from HDD failure to host power loss. Second, it must be flexible enough to slice it fast and easily and resize slices as we like. Third, we will manage and mount our storage from cloud nodes over the network. And, last but not the least, we want decent performance from it.&lt;br /&gt;&lt;br /&gt;For now, we have decided on the DRBD driver for our storage. &lt;a style="OUTLINE-STYLE: none; COLOR: #003366; TEXT-DECORATION: none" class="external-link" href="http://www.drbd.org/" rel="nofollow"&gt;DRBD&lt;/a&gt;® refers to block devices designed as a building block to form high availability (HA) clusters. This is done by mirroring a whole block device via an assigned network. DRBD can be understood as network-based RAID-1. It has lots of &lt;a style="OUTLINE-STYLE: none; COLOR: #003366; TEXT-DECORATION: none" class="external-link" href="http://www.drbd.org/home/feature-list/" rel="nofollow"&gt;features&lt;/a&gt;, has been tested and is reasonably stable.&lt;br /&gt;&lt;br /&gt;DRBD has been supported by the Linux kernel since version 2.6.33. It is implemented as a kernel module and included in the mainline. We can install the DRBD driver and command line interface tools using a standard package distribution mechanism; in our case it is Fedora 14:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/988288.js"&gt; &lt;/script&gt;&lt;br /&gt;The DRBD configuration file is &lt;i&gt;/etc/drbd.conf&lt;/i&gt;, but usually it contains only 'include' statements. The configuration itself resides in &lt;i&gt;global_common.conf&lt;/i&gt; and &lt;i&gt;*.res&lt;/i&gt; files inside &lt;i&gt;/etc/drbd.d/.&lt;/i&gt; An important parameter in &lt;i&gt;global_common.conf&lt;/i&gt; is '&lt;b&gt;protocol&lt;/b&gt;'. It defines the sync level of the replication:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A (async). Local write operations on the primary node are considered completed as soon as the local disk write has occurred, and the replication packet has been placed in the local TCP send buffer. Data loss is possible in case of fail-over.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;B (semi-sync or memory-sync). Local write operations on the primary node are considered completed as soon as the local disk write has occurred, and the replication packet has reached the peer node. Data loss is unlikely unless the primary node is irrevocably destroyed.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;C (sync). Local write operations on the primary node are considered completed only after both the local and the remote disk write have been confirmed. As a result, loss of a single node is guaranteed not to lead to any data loss. This is the default replication mode.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Other sections of the common configuration are usually left blank and can be redefined in per-resource configuration files. To create a usable resource, we must create a configuration file for our resource in &lt;i&gt;/etc/drbd.d/drbd0.res&lt;/i&gt;. Basic parameters for the resource are:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Name of the resource. Defined with 'resource' parameter, open main configuration section.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;'&lt;b&gt;on&lt;/b&gt;' directive opens the host configuration section. Only 2 '&lt;b&gt;on&lt;/b&gt;' host sections are allowed per resource. Common parameters for both hosts can be defined once in the main resource configuration section.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;'&lt;b&gt;address&lt;/b&gt;' directive is unique to each host and must contain the IP-address and port number to which the DRBD driver listens.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;'&lt;b&gt;device&lt;/b&gt;' directive defines the path to the device created on the host for the DRBD resource.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;'&lt;b&gt;disk&lt;/b&gt;' is the path to the back-end device for the resource. This can be a hard drive partition (i.e. &lt;i&gt;/dev/sda1&lt;/i&gt;), soft- or hardware RAID device, LVM Logical Volume or any other block device, configured by the Linux device-mapper infrastructure.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;'&lt;b&gt;meta&lt;/b&gt;-disk' defines how DRBD stores meta-data. It can be '&lt;b&gt;internal&lt;/b&gt;' when meta-data resides on the same back-end device as user data, or '&lt;b&gt;external&lt;/b&gt;' on a separate device.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Configuration Walkthrough&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We are creating a relatively simple configuration: one DRBD resource shared between two nodes. On each node, the back-end for the resource is the software RAID-0 (stripe) device &lt;i&gt;/dev/md3&lt;/i&gt; made of two disks. The hosts are connected back-to-back by GigabitEthernet interfaces with private addresses.&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/988292.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;As we need write access to the resource on both nodes, we must make it 'primary' on both nodes. A DRBD device in the primary role can be used unrestrictedly for read and write operations. This mode is called 'dual-primary' mode. Dual-primary mode requires additional configuration. In the 'startup' section directive, 'become-primary-on' is set to 'both'. In the 'net' section, the following is recommended:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/988295.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;The '&lt;b&gt;allow-two-primaries&lt;/b&gt;' directive allows both ends to send data.&lt;br /&gt;Next, three parameters define I/O errors handling.&lt;br /&gt;The '&lt;b&gt;sndbuf-size&lt;/b&gt;' is set to 0 to allow dynamic adjustment of the TCP buffer size.&lt;br /&gt;&lt;br /&gt;Resource configuration with all of these considerations applied will be as follows:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/988356.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Enabling Resource For The First Time&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To create the device &lt;i&gt;/dev/drbd0&lt;/i&gt; for later use, we use the &lt;b&gt;drbdadm&lt;/b&gt; command:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/988357.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;After the front-end device is created, we bring the resource up:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/988362.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;This command set must be executed on both nodes. We may collapse the steps &lt;b&gt;drbdadm attach&lt;/b&gt;, &lt;b&gt;drbdadm syncer&lt;/b&gt;, and &lt;b&gt;drbdadm connect&lt;/b&gt; into one, by using the shorthand command &lt;b&gt;drbdadm up&lt;/b&gt;.&lt;br /&gt;Now we can observe the &lt;i&gt;/proc/drbd&lt;/i&gt; virtual status file and get the status of our resource:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/988364.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;We must now synchronize resources on both nodes. If we want to replicate data that are already on one of the drives, it's important to run the next command on the host which contains data. Otherwise, this can be issued on any of two hosts.&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/988369.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;This command puts the node &lt;b&gt;host1&lt;/b&gt; in 'primary' mode and makes it the synchronization source. This is reflected in the status file &lt;i&gt;/proc/drbd&lt;/i&gt;:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/988373.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;We can adjust the syncer rate to make initial and background synchronization faster. To speed up the initial sync &lt;b&gt;drbdsetup&lt;/b&gt; command used:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/988376.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;This allows us to consume almost all bandwidth of Gigabit Ethernet. The background syncer rate is configured in the corresponding config file section:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/988377.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;The exact rate depends on available bandwidth and must be about 0.3 of the slowest I/O subsystem (network or disk). DRBD seems to make it slower if it interferes with data flow.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;LVM Over DRBD Configuration&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Configuration of LVM over DRBD requires changes to &lt;i&gt;/etc/lvm/lvm.conf&lt;/i&gt;. First, physical volume is created:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/988378.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;This command writes LVM Physical Volume data on the &lt;b&gt;drbd0&lt;/b&gt; device and also on the underlying &lt;b&gt;md3&lt;/b&gt; device. This can pose a problem as LVM default behavior is to scan all block devices for the LVM PV signatures. This means &lt;i&gt;two&lt;/i&gt; devices with the same UUID will be detected and an error issued. This can be avoided by excluding &lt;i&gt;/mnt/md3&lt;/i&gt; from scanning in the &lt;i&gt;/etc/lvm/lvm.conf&lt;/i&gt; file by using the 'filter' parameter:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/988380.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;The &lt;strong&gt;vgscan&lt;/strong&gt; command must be executed after the file is changed. It forces LVM to discard its configuration cache and re-scan the devices for PV signatures.&lt;br /&gt;Different 'filter' configurations can be used, but it must ensure that: 1. DRBD devices used as PVs are accepted (included); 2. Corresponding lower-level devices are rejected (excluded).&lt;br /&gt;&lt;br /&gt;It is also nessesary to disable the LVM write cache:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/988384.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;These steps must be repeated on the peer node. Now we can create a Volume Group using the configured PV &lt;i&gt;/dev/drbd0&lt;/i&gt; and Logical Volume in this VG. Execute these commands on one of nodes:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/988386.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;To make use of this VG and LV on the peer node, we must make it active on it:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/988389.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;When the new PV is configured, it is possible to proceed to adding it to the Volume Group or creating a new one from it. This VG can be used to create Logical Volumes as usual.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-size:medium;"&gt;Conclusion&lt;/span&gt;&lt;br /&gt;We are going to install &lt;a href="http://www.openstack.org"&gt;Openstack&lt;/a&gt; on nodes with shared storage as a private cloud controller. The architecture of our system presumes that storage volumes will reside on the same nodes as &lt;b&gt;nova-compute&lt;/b&gt;. This makes it very important to have some level of disaster survival on the cloud nodes.&lt;br /&gt;&lt;br /&gt;With DRBD we can survive any I/O errors on one of nodes. DRBD internal error handling can be configured to mask any errors and go to &lt;i&gt;diskless&lt;/i&gt; mode. In this mode, all I/O operations are transparently redirected from the failed node to the replicant. This gives us time to restore a faulty disk system.&lt;br /&gt;&lt;br /&gt;If we have a major system crash, we still have all of the data on the second node. We can use them to restore or replace the failed system. Network failure can put us into a 'split brain' situation, when data differs between hosts. This is dangerous, but DRBD also has rather powerful mechanisms to deal with these kinds of problems.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9120206829210052209-5946466323032525119?l=mirantis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mirantis.blogspot.com/feeds/5946466323032525119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mirantis.blogspot.com/2011/05/shared-storage-for-openstack-based-on.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/5946466323032525119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/5946466323032525119'/><link rel='alternate' type='text/html' href='http://mirantis.blogspot.com/2011/05/shared-storage-for-openstack-based-on.html' title='Shared storage for OpenStack based on DRBD'/><author><name>Oleg</name><uri>http://www.blogger.com/profile/07084186172610456681</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120206829210052209.post-5074898796414173224</id><published>2011-05-18T08:33:00.000-07:00</published><updated>2011-05-31T03:07:13.794-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openstack'/><category scheme='http://www.blogger.com/atom/ns#' term='nova'/><category scheme='http://www.blogger.com/atom/ns#' term='kickstart'/><category scheme='http://www.blogger.com/atom/ns#' term='rpm'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><title type='text'>OpenStack Deployment on Fedora using Kickstart</title><content type='html'>&lt;div style="TEXT-ALIGN: left" dir="ltr" trbidi="on"&gt;&lt;span style="FONT-WEIGHT: bold;font-size:19;" class="Apple-style-span" &gt;Overview&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In this article, we discuss our approach to performing an Openstack installation on Fedora using our RPM repository and Kickstart. When we first started working with &lt;a class="external-link" href="http://openstack.org/" rel="nofollow"&gt;OpenStack&lt;/a&gt;, we found that the most popular platform for deploying OpenStack was Ubuntu, which seemed like a viable option for us, as there are packages for it available, as well as plenty of documentation. However, because our internal infrastructure is running on Fedora, instead of migrating the full infrastructure to Ubuntu, we decided to make OpenStack Fedora-friendly. The challenge in using Fedora, however, is that there aren't any packages, nor is there much documentation available. Details of how we worked around these limitations are discussed below.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a href="http://www.blogger.com/" name="OpenStackDeploymentonFedorausingKickstart-OpenStackRPMRepository"&gt;&lt;/a&gt;OpenStack RPM Repository&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;Of course, installing everything from sources and bypassing the system's package manager is always an option, but this approach has some limitations:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;OpenStack has a lot of dependencies, so it's hard to track them all&lt;/li&gt;&lt;li&gt;Installations that bypass the system's package manager take quite some time (compared to executing a single Yum installation)&lt;/li&gt;&lt;li&gt;When some packages are installed from repositories, and some are installed from sources, managing upgrades can become quite tricky&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Because of these limitations, we decided to create RPMs for Fedora. In order to avoid reinventing the wheel, we've based these RPMs on &lt;a class="external-link" href="https://github.com/griddynamics/openstack-rhel" rel="nofollow"&gt;RHEL6 OpenStack Packages&lt;/a&gt;, as RHEL6 and Fedora are fairly similar. There are two sets of packages available for various OpenStack versions:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a class="external-link" href="http://download.mirantis.com/cactus/" rel="nofollow"&gt;Cactus&lt;/a&gt; - click here for the latest official release&lt;/li&gt;&lt;li&gt;&lt;a class="external-link" href="http://download.mirantis.com/repo/" rel="nofollow"&gt;Hourly&lt;/a&gt; - click here for hourly builds from trunk&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;There are two key metapackages:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;node-full:&lt;/b&gt; installing a complete cloud controller infrastructure, including RabbitMQ, dnsmasq, etc.&lt;/li&gt;&lt;li&gt;&lt;b&gt;node-compute:&lt;/b&gt; installing only node-compute services&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;To use the repository, just install the RPM:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/978391.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In addition to installing everything with a single "yum install" command, we also need to perform the configuration. For a bare metal installation, we've created a Kickstart script. &lt;a href="http://fedoraproject.org/wiki/Anaconda/Kickstart"&gt;Kickstart&lt;/a&gt; by itself is a set of answers for the automated installation of Fedora distributive. We use it for automated hosts provisioning with &lt;a href="http://en.wikipedia.org/wiki/Preboot_Execution_Environment"&gt;PXE&lt;/a&gt;. The post-installation part of the Kickstart script was extended to include the OpenStack installation and configuration procedures.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;&lt;a href="http://www.blogger.com/" name="OpenStackDeploymentonFedorausingKickstart-CloudController"&gt;&lt;/a&gt;Cloud Controller&lt;/h4&gt;&lt;br /&gt;&lt;br /&gt;To begin with, you can find the post-installation part of the Kickstart file for deploying a cloud controller below.&lt;br /&gt;There are basic settings you will need to change. In our case, we are using a MySQL database.&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/978418.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Your server must be accessible by hostname, because RabbitMQ uses "node@host" identification. Also, because OpenStack uses hostnames to register services, if you want to change the hostname, you must stop all nova services and RabbitMQ, and then start it again after making the change. So make sure you set a resolvable hostname.&lt;br /&gt;&lt;br /&gt;Add required repos and install the cloud controller.&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/978466.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;qemu 0.14+ is needed to support creating custom images.&lt;br /&gt;(UPD: Fedora 15 release already has qemu 0.14.0 in repository)&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/978474.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you're running nova under a non-privileged user ("nova" in this case), libvirt configs should be changed to provide access to the libvirtd unix socket for nova services. Access over TCP is required for live migration, so all of our nodes should have read/write access to the TCP socket.&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/978477.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now we can apply our db credentials to the nova config and generate the root certificate.&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/978481.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And finally, we add services to "autostart", prepare the database, and run the migration. Don't forget the setup root password for the MySQL server.&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/978487.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;&lt;a href="http://www.blogger.com/" name="OpenStackDeploymentonFedorausingKickstart-ComputeNode"&gt;&lt;/a&gt;Compute Node&lt;/h4&gt;&lt;br /&gt;Compute Node script is much easier:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/978490.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The config section differs very little; there is a cloud controller IP variable, which points to full nova infrastructure and other support services, such as MySQL and rabbit.&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/978494.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;That code is very similar to cloud controller, except that it installs the openstack-nova-node-compute package, instead of node-full.&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/978497.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;It is required to change the Cloud Controller IP address (CC_IP variable) for Compute Node installation.&lt;br /&gt;&lt;br /&gt;IMPORTANT NOTE: All of your compute nodes should have synchronized time with the cloud controller for heartbeat control.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9120206829210052209-5074898796414173224?l=mirantis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mirantis.blogspot.com/feeds/5074898796414173224/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mirantis.blogspot.com/2011/05/openstack-deployment-on-fedora-using.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/5074898796414173224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/5074898796414173224'/><link rel='alternate' type='text/html' href='http://mirantis.blogspot.com/2011/05/openstack-deployment-on-fedora-using.html' title='OpenStack Deployment on Fedora using Kickstart'/><author><name>Maxim Lvov</name><uri>http://www.blogger.com/profile/06664526576005259726</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9120206829210052209.post-2385677994928506222</id><published>2011-05-16T15:42:00.000-07:00</published><updated>2011-05-18T17:53:29.585-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='infrastructure computing'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='middleware'/><title type='text'>Make your bet on open source infrastructure computing</title><content type='html'>&lt;div style="TEXT-ALIGN: left" dir="ltr" trbidi="on"&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: small; "&gt;Today we are launching our company blog, focused on open source infrastructure computing. We plan to cover various emerging technologies and market paradigms related to this segment of IT. As you might imagine, we did not choose this topic by accident. Aside from being the focus for our blog, it is also the focus of Mirantis as a company. Employing Silicon Valley industry veterans backed by 150 open source hackers and programming champions from Russia we have built this company because we believe in a few basic principles. I felt there is no better way to open our blog, than to share these principles with the world. So here we go:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: large; "&gt;&lt;strong&gt;&lt;span style="mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin"&gt;&lt;span style="mso-list: Ignore"&gt;1.&lt;span style="FONT: 7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"&gt;Cloud Drives Adoption of Open Source&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: small; "&gt;Until recently the biggest selling point of commercial enterprise software was its reliability and scalability when it comes to mission-critical tasks. Open source was considered OK by enterprises for tactical purposes, but a no-no for mission-critical, enterprise wide stuff. Now after Amazon, Rackspace, salesforce.com etc. have built out their systems on top of what’s now largely available in open source the argument of OSS being unreliable no longer holds water.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: small; "&gt;Moreover, today, cloud essentially refers to the new paradigm for delivery of IT services… i.e. it is an economic model that revolves around “pay for what you get, when you get it.” Surprisingly, it took enterprises a very long time to accept this approach, but last year was pivotal in showing that it is tracking and is the way of the future. Open source historically, has been monetized, leveraging a model that is much closer to “cloud” than that of commercial software. I.e. in case of commercial software you buy the license and pay for implementation upfront. If you are lucky to implement, you continue to pay subscription which is sold in various forms – support, service assurance etc. With open source – you always implement first, if it works – you may (or may not) buy commercial support, which is also frequently sold as a subscription service. Therefore, as enterprises wrap their mindset around cloud, they shy further away from the traditional commercial software model and closer to the open source / services focused model.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: large; "&gt;&lt;strong&gt;&lt;span style="mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin"&gt;&lt;span style="mso-list: Ignore"&gt;2.&lt;span style="FONT: 7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"&gt;OSS is The Future of Enterprise Infrastructure Computing&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: small; "&gt;I expect that enterprise adoption of open source will be particularly concentrated in the infrastructure computing space. I.e. open source databases (NoSQL, MySQL instead of Oracle, DB2 etc.), application servers (SrpingDM, JBoss vs. WebSphere, WebLogic), messaging engines (RabbitMQ vs. Tibco), infrastructure monitoring and security tools etc. Adoption of OSS initiatives higher up the stack (Alfresco, Compiere ERP, Pentaho etc.) in my opinion will lag behind infrastructure projects. One of the reasons here being greater end user dependence on tools that are higher up the stack. If you have 100 employees that are used to getting their BI reports in Cognos, it is hard to get them to switch to Pentaho and get used to the new user interface and report formats. However, if your Cognos BI runs on Oracle, switching it to MySQL will likely only affect a few IT folks, while 100 users will not notice the difference.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: small; "&gt;More importantly, however, the lower down the stack you are, the more “techie” the consumer of your product is. The more techie your consumer, the more likely he is to a) prefer customizing the product to the process and not the other way around; b) ultimately contribute to the open source product. Lower level OSS products tend to be more popular and more in demand overall. The extreme example would be to look at operating system vs. end user apps. Linux powers more than half of enterprise servers, but how many people use open source text editing software?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: large; "&gt;&lt;strong&gt;&lt;span style="mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin"&gt;&lt;span style="mso-list: Ignore"&gt;3.&lt;span style="FONT: 7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"&gt;Public PaaS is not for Everyone&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: small; "&gt;An alternative to dealing with infrastructure computing is to not deal with it at all and use a platform like Google App Engine or Force.com to build your apps. Why deal with lower end of the stack at all if the guys that know how to do it best already today allow you to use their platform? I believe that PaaS will become the dominant answer in the SMB market, however, organizations that fall in the category of “technology creators” such as cloud service vendors themselves, financial services, large internet portals etc. will always want to keep control over their entire stack to be able to innovate ahead of the curve and remain vendor independent. Therefore, technology driven companies (those that differentiate with technology) will be the primary market for proprietary OSS based infrastructure computing.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: large; "&gt;&lt;strong&gt;&lt;span style="mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-latin"&gt;&lt;span style="mso-list: Ignore"&gt;4.&lt;span style="FONT: 7pt 'Times New Roman'"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"&gt;Infrastructure Computing is Nobody’s Core Competency&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: small; "&gt;Although infrastructure computing is a necessary component in every organization and most technology driven companies want to have full control over their entire stack, there are no technology companies out there that differentiate themselves based on the awesomeness of their infrastructure stack. Yes, everybody knows that Google’s application infrastructure is great and so is that of salesforce.com, but in the end, the customers don’t care if it takes 2K servers to power salesforce.com or 100K servers, as long as the features are there. In that context, it almost always makes sense to outsource infrastructure computing functions to some third party so as to enable the company to focus on those aspects of its technology that differentiate it from the competition.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;span  &gt;&lt;/span&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9120206829210052209-2385677994928506222?l=mirantis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mirantis.blogspot.com/feeds/2385677994928506222/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mirantis.blogspot.com/2011/05/make-your-bet-on-open-source.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/2385677994928506222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9120206829210052209/posts/default/2385677994928506222'/><link rel='alternate' type='text/html' href='http://mirantis.blogspot.com/2011/05/make-your-bet-on-open-source.html' title='Make your bet on open source infrastructure computing'/><author><name>Boris Renski</name><uri>http://www.blogger.com/profile/06261736815703853427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/-3oyjX4522x8/TdGoLDzMz-I/AAAAAAAAAAU/diZV9L6SJe0/s220/facebook.jpg'/></author><thr:total>0</thr:total></entry></feed>
