blob: ccf3d47a522180de3594fce3b688e3a66486e416 [file] [log] [blame]
<?xml version='1.0' encoding='utf-8' ?>
<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY % BOOK_ENTITIES SYSTEM "cloudstack.ent">
%BOOK_ENTITIES;
]>
<!-- Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<section id="primary-storage-add">
<title>Add Primary Storage</title>
<section id="sys-require-primary-storage">
<title>System Requirements for Primary Storage</title>
<para>Hardware requirements:</para>
<itemizedlist>
<listitem>
<para>Any standards-compliant iSCSI, SMB, or NFS server that is supported by the underlying
hypervisor.</para>
</listitem>
<listitem>
<para>The storage server should be a machine with a large number of disks. The disks should
ideally be managed by a hardware RAID controller.</para>
</listitem>
<listitem>
<para>Minimum required capacity depends on your needs.</para>
</listitem>
</itemizedlist>
<para>When setting up primary storage, follow these restrictions:</para>
<itemizedlist>
<listitem>
<para>Primary storage cannot be added until a host has been added to the cluster.</para>
</listitem>
<listitem>
<para>If you do not provision shared primary storage, you must set the global configuration
parameter system.vm.local.storage.required to true, or else you will not be able to start
VMs.</para>
</listitem>
</itemizedlist>
</section>
<section id="adding-primary-storage">
<title>Adding Primary Storage</title>
<para>When you create a new zone, the first primary storage is added as part of that procedure.
You can add primary storage servers at any time, such as when adding a new cluster or adding
more servers to an existing cluster.</para>
<warning>
<para>When using preallocated storage for primary storage, be sure there is nothing on the
storage (ex. you have an empty SAN volume or an empty NFS share). Adding the storage to
&PRODUCT; will destroy any existing data.</para>
</warning>
<para></para>
<note>
<para>Primary storage can also be added at the zone level through the &PRODUCT; API (adding
zone-level primary storage is not yet supported through the &PRODUCT; UI).</para>
<para>Once primary storage has been added at the zone level, it can be managed through the
&PRODUCT; UI.</para>
</note>
<para></para>
<orderedlist>
<listitem>
<para>Log in to the &PRODUCT; UI (see <xref linkend="log-in"/>).</para>
</listitem>
<listitem>
<para>In the left navigation, choose Infrastructure. In Zones, click View More, then click
the zone in which you want to add the primary storage.</para>
</listitem>
<listitem>
<para>Click the Compute tab.</para>
</listitem>
<listitem>
<para>In the Primary Storage node of the diagram, click View All.</para>
</listitem>
<listitem>
<para>Click Add Primary Storage.</para>
</listitem>
<listitem>
<para>Provide the following information in the dialog. The information required varies
depending on your choice in Protocol.</para>
<itemizedlist>
<listitem>
<para><emphasis role="bold">Scope.</emphasis> Indicate whether the storage is available
to all hosts in the zone or only to hosts in a single cluster.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Pod.</emphasis> (Visible only if you choose Cluster in the
Scope field.) The pod for the storage device.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Cluster.</emphasis> (Visible only if you choose Cluster in
the Scope field.) The cluster for the storage device.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Name.</emphasis> The name of the storage device.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Protocol.</emphasis> For XenServer, choose either NFS,
iSCSI, or PreSetup. For KVM, choose NFS or SharedMountPoint. For vSphere choose either
VMFS (iSCSI or FiberChannel) or NFS. For Hyper-V, choose SMB.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Server (for NFS, iSCSI, or PreSetup).</emphasis> The IP
address or DNS name of the storage device.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Server (for VMFS).</emphasis> The IP address or DNS name of
the vCenter server.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Path (for NFS).</emphasis> In NFS this is the exported path
from the server.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Path (for VMFS).</emphasis> In vSphere this is a combination
of the datacenter name and the datastore name. The format is "/" datacenter name "/"
datastore name. For example, "/cloud.dc.VM/cluster1datastore".</para>
</listitem>
<listitem>
<para><emphasis role="bold">Path (for SharedMountPoint).</emphasis> With KVM this is the
path on each host that is where this primary storage is mounted. For example,
"/mnt/primary".</para>
</listitem>
<listitem>
<para><emphasis role="bold">SMB Username</emphasis> (for SMB/CIFS): Applicable only if you
select SMB/CIFS provider. The username of the account which has the necessary
permissions to the SMB shares. The user must be part of the Hyper-V administrator
group.</para>
</listitem>
<listitem>
<para><emphasis role="bold">SMB Password</emphasis> (for SMB/CIFS): Applicable only if you
select SMB/CIFS provider. The password associated with the account.</para>
</listitem>
<listitem>
<para><emphasis role="bold">SMB Domain</emphasis>(for SMB/CIFS): Applicable only if you
select SMB/CIFS provider. The Active Directory domain that the SMB share is a part
of.</para>
</listitem>
<listitem>
<para><emphasis role="bold">SR Name-Label (for PreSetup).</emphasis> Enter the
name-label of the SR that has been set up outside &PRODUCT;.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Target IQN (for iSCSI).</emphasis> In iSCSI this is the IQN
of the target. For example, iqn.1986-03.com.sun:02:01ec9bb549-1271378984.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Lun # (for iSCSI).</emphasis> In iSCSI this is the LUN
number. For example, 3.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Tags (optional).</emphasis> The comma-separated list of tags
for this storage device. It should be an equivalent set or superset of the tags on
your disk offerings..</para>
</listitem>
</itemizedlist>
<para>The tag sets on primary storage across clusters in a Zone must be identical. For
example, if cluster A provides primary storage that has tags T1 and T2, all other clusters
in the Zone must also provide primary storage that has tags T1 and T2.</para>
</listitem>
<listitem>
<para>Click OK.</para>
</listitem>
</orderedlist>
</section>
<section>
<title>Configuring a Storage Plug-in</title>
<note>
<para>Primary storage that is based on a custom plug-in (ex. SolidFire) must be added through
the &PRODUCT; API (described later in this section). There is no support at this time
through the &PRODUCT; UI to add this type of primary storage (although most of its features
are available through the &PRODUCT; UI).</para>
</note>
<note>
<para>At this time, a custom storage plug-in, such as the SolidFire storage plug-in, can only
be leveraged for data disks (through Disk Offerings).</para>
</note>
<note>
<para>The SolidFire storage plug-in for &PRODUCT; is part of the standard &PRODUCT; install.
There is no additional work required to add this component.</para>
</note>
<para>Adding primary storage that is based on the SolidFire plug-in enables &PRODUCT; to provide
hard quality-of-service (QoS) guarantees.</para>
<para>When used with Disk Offerings, an administrator is able to build an environment in which a
data disk that a user creates leads to the dynamic creation of a SolidFire volume, which has
guaranteed performance. Such a SolidFire volume is associated with one (and only ever one)
&PRODUCT; volume, so performance of the &PRODUCT; volume does not vary depending on how
heavily other tenants are using the system.</para>
<para>The createStoragePool API has been augmented to support plugable storage providers. The
following is a list of parameters to use when adding storage to &PRODUCT; that is based on the
SolidFire plug-in:</para>
<itemizedlist>
<listitem>
<para>command=createStoragePool</para>
</listitem>
<listitem>
<para>scope=zone</para>
</listitem>
<listitem>
<para>zoneId=[your zone id]</para>
</listitem>
<listitem>
<para>name=[name for primary storage]</para>
</listitem>
<listitem>
<para>hypervisor=Any</para>
</listitem>
<listitem>
<para>provider=SolidFire</para>
</listitem>
<listitem>
<para>capacityIops=[whole number of IOPS from the SAN to give to &PRODUCT;]</para>
</listitem>
<listitem>
<para>capacityBytes=[whole number of bytes from the SAN to give to &PRODUCT;]</para>
</listitem>
</itemizedlist>
<para>The url parameter is somewhat unique in that its value can contain additional key/value
pairs.</para>
<itemizedlist>
<para>url=[key/value pairs detailed below (values are URL encoded; for example, '=' is
represented as '%3D')]</para>
<listitem>
<para>MVIP%3D[Management Virtual IP Address] (can be suffixed with :[port number])</para>
</listitem>
<listitem>
<para>SVIP%3D[Storage Virtual IP Address] (can be suffixed with :[port number])</para>
</listitem>
<listitem>
<para>clusterAdminUsername%3D[cluster admin's username]</para>
</listitem>
<listitem>
<para>clusterAdminPassword%3D[cluster admin's password]</para>
</listitem>
<listitem>
<para>clusterDefaultMinIops%3D[Min IOPS (whole number) to set for a volume; used if Min IOPS
is not specified by administrator or user]</para>
</listitem>
<listitem>
<para>clusterDefaultMaxIops%3D[Max IOPS (whole number) to set for a volume; used if Max IOPS
is not specified by administrator or user]</para>
</listitem>
<listitem>
<para>clusterDefaultBurstIopsPercentOfMaxIops%3D[Burst IOPS is determined by (Min IOPS *
clusterDefaultBurstIopsPercentOfMaxIops parameter) (can be a decimal value)]</para>
</listitem>
</itemizedlist>
<para>Example URL to add primary storage to &PRODUCT; based on the SolidFire plug-in (note that
URL encoding is used with the value of the url key, so '%3A' equals ':','%3B' equals ';' (';'
is a key/value pair delimiter for the url field) and '%3D' equals '='):</para>
<para>http://127.0.0.1:8080/client/api?</para>
<para>command=createStoragePool</para>
<para>&amp;scope=zone</para>
<para>&amp;zoneId=cf4e6ddf-8ae7-4194-8270-d46733a52b55</para>
<para>&amp;name=SolidFire_121258566</para>
<para>&amp;url=</para>
<para>MVIP%3D192.168.138.180%3A443</para>
<para>%3BSVIP%3D192.168.56.7</para>
<para>%3BclusterAdminUsername%3Dadmin</para>
<para>%3BclusterAdminPassword%3Dpassword</para>
<para>%3BclusterDefaultMinIops%3D200</para>
<para>%3BclusterDefaultMaxIops%3D300</para>
<para>%3BclusterDefaultBurstIopsPercentOfMaxIops%3D2.5</para>
<para>&amp;provider=SolidFire</para>
<para>&amp;tags=SolidFire_SAN_1</para>
<para>&amp;capacityIops=4000000</para>
<para>&amp;capacityBytes=2251799813685248</para>
<para>&amp;hypervisor=Any</para>
<para>&amp;response=json</para>
<para>&amp;apiKey=VrrkiZQWFFgSdA6k3DYtoKLcrgQJjZXoSWzicHXt8rYd9Bl47p8L39p0p8vfDpiljtlcMLn_jatMSqCWv5Cs-Q</para>
<para>&amp;signature=wqf8KzcPpY2JmT1Sxk%2F%2BWbgX3l8%3D</para>
</section>
</section>