Difference between revisions of "Virtuozzo Storage"

From OpenVZ Virtuozzo Containers Wiki
Jump to: navigation, search
(Created page with "This article explains how to setup Parallels Cloud Storage cluster and deploy ploop-based OpenVZ container inside the cluster. ==Setting up Parallels Cloud Storage cluster== ...")
 
(added overview)
Line 1: Line 1:
This article explains how to setup Parallels Cloud Storage cluster and deploy ploop-based OpenVZ container inside the cluster.
+
= Parallels Cloud Storage (Pstorage) =
  
==Setting up Parallels Cloud Storage cluster==
+
Parallels Storage (Pstorage) is a highly-available distributed storage (virtual SAN) with built-in replication and disaster recovery. Pstorage provides a storage virtualization platform on top of commodity hardware with locally attached hard drives and enables the unification of storage into a cluster in scenarios like virtualization with the help of virtual machines (VMs) and/or Containers (CTs). Pstorage ensures a fast live migration of VMs and CTs across hardware nodes, without the need to copy VM/CT data, and high availability as the storage becomes available remotely.
  
Choose a name for the cluster that will uniquely identify it among other clusters in your network. A name may contain the characters a-z, A-Z, 0-9, dash (-), and underscore (_). Here we will use 'test_cluster' as a cluster name.
+
The main Pstorage features are listed below:
  
===Create metadata server (MDS)===
+
* No special hardware requirements. Commodity hardware (SATA/SAS drives, 1Gbit+ Ethernet) can be used to create a storage.
 +
* Strong consistency semantics. This makes Pstorage suitable for iSCSI, VMs and CTs running on top of it (unlike object storage such as Amazon S3 or Swift).
 +
* Built-in replication.
 +
* Automatic disaster recovery on hard drive or node failures.
 +
* High availability. Data remain accessible even in case of hard drive or node failures.
 +
* Optional SSD caching. SSD caches boost the overall performance in the cluster on write and read operations.
 +
* Data checksumming and scrubbing. Checksumming and scrubbing greatly enhance data reliability.
 +
* Grow on demand. More storage nodes can be added to the cluster to increase its disk space. A VM/CT image size is not limited by the size of any of the hard drives.
 +
* Scales to Petabytes
 +
* More uniform hardware performance and capacity utilization across the nodes, so overutilized nodes benefit from idle ones.
 +
* High performance - comparable to SAN (FIXME link).
  
Log in to the computer you want to configure as a metadata server as root or as a user with
+
NOTE: Parallels Cloud Storage is available as a TECHNOLOGY PREVIEW ONLY for OpenVZ users and can't be licensed for production. To unlock for running in production you should upgrade to a full Parallels Cloud Server product (see below). Available free capacity for in technology preview mode is 100GB of logical (Containers usable) disk space. After hitting this limit writers can get blocked w/o errors expecting for a limit to be extended, so please avoid hitting the limit.
root privileges.
 
  
Download and install the following RPM packages: pstorage-ctl, pstorage-libs-shared and pstorage-metadata-server. The packages are available in the Parallels Cloud Server remote repository (this repository is automatically configured for your system when you install Parallels Cloud Server) and can be installed with this command:
+
==Pstorage components==
 +
Any Pstorage includes three components:
  
<code># yum install pstorage-ctl pstorage-libs-shared pstorage-metadata-server</code>
+
* Metadata server (MDS). MDSs manage metadata, like file names, and keep control over how files are split into chunks and where the chunks are stored. They also track versions of chunks and ensure that the cluster has enough replicas. An MDS can be run in multiple instances to provide high availability. Besides, MDSs keep a global log of important events that happen in the cluster.
 +
* Chunk server (CS). A CS is a service responsible for storing real user data chunks and providing access to these data. A Pstorage cluster must have multiple instances of CSs for high availability.
 +
* Clients. Clients access a Pstorage cluster by communicating with MDSs and CSs. Parallels Containers and virtual machines can be run natively, i.e. directly from the Pstorage cluster. An additional Pstorage client - can be used to mount Pstorage as a conventional file system (though Pstorage is not POSIX-compliant). Besides, Pstorage files can be mounted as a block device using the "ploop" feature and formatted as ext4 file system for other needs.
  
Create MDS:
+
A recommended cluster setup includes from 3 to 5 MDS instances (allowing you to survive the loss of 1 or 2 of MDSs, respectively) and multiple CSs providing storage capacity.
 +
 
 +
=Pstorage setup HOWTO=
 +
Below HOWTO explains how to setup Parallels Cloud Storage (Pstorage) cluster and run OpenVZ containers stored there. Please note, that it's just a brief HOWTO for quick and easy evaluation of Parallels Cloud Storage (configuring only 1x MDS and CS service) and is not a real manual. We highly recommend to consult Pstorage manual (FIXME) and man pages (such as pstorage, pstorage-make-cs, pstorage-make-mds etc.) as it contain a lot of important details on types of SSD drives supported, what are the recommended configurations, how to configure big clusters with failure domains and so on.
 +
 
 +
==Installing Parallels Cloud Storage software==
 +
 
 +
In order to install Pstorage RPM packages log in as root to all the machines planned to be added to the cluster and perform the following actions.
 +
 
 +
Download and install the following RPM packages: pstorage-ctl, pstorage-libs-shared and pstorage-metadata-server. These packages can be downloaded from http://download.openvz.org/pstorage:
 +
 
 +
<code>
 +
# wget FIXME
 +
# yum install pstorage-ctl pstorage-libs-shared pstorage-metadata-server pstorage-chunk-server pstorage-client
 +
</code>
 +
 
 +
 
 +
==Creating a cluster==
 +
 
 +
Every Pstorage cluster has a unique cluster name used for remote service discovery and during authorization.
 +
So choose a name for the cluster that will uniquely identify it among other clusters in your network and avoid reusing it on cluster recreate. A name may contain the characters a-z, A-Z, 0-9, dash (-), and underscore (_). Here we will use 'test_cluster' as a cluster name.
 +
 
 +
===Create metadata servers (MDS)===
 +
 
 +
Log in to the computers you want to configure as a metadata server as root.
 +
 
 +
To create the very first MDS and your cluster type:
  
 
<code># pstorage -c test_cluster make-mds -I -a 10.30.100.101 -r /pstorage/test_cluster-mds -p</code>
 
<code># pstorage -c test_cluster make-mds -I -a 10.30.100.101 -r /pstorage/test_cluster-mds -p</code>
  
This command creates new Parallels Cloud Storage cluster and metadata server and configures the IP address of 10.30.100.101 for communication with this server (replace 10.30.100.101 with IP address of your own MDS server). The command will ask you to enter the password for authentication in your cluster. The password you specify is encrypted and saved into the /etc/pstorage/clusters/pcs1/auth_digest.key file.
+
This command creates new Parallels Cloud Storage cluster and metadata server and configures the IP address of 10.30.100.101 for communication with this server (replace 10.30.100.101 with IP address of your own MDS server). MDS will store its data at location specified by -r option. The command will also ask you to enter the password for authentication in your cluster.
  
 
After you have created the MDS server, start the MDS management service (pstorage-mdsd) and configure it to start automatically when the server boots:
 
After you have created the MDS server, start the MDS management service (pstorage-mdsd) and configure it to start automatically when the server boots:
Line 26: Line 64:
 
<code># chkconfig pstorage-mdsd on</code>
 
<code># chkconfig pstorage-mdsd on</code>
  
Every time you add new server or client to the cluster, you need to create the bs.list file in the /etc/pstorage/clusters/Cluster_Name directory (make this directory if it does not exist) on the server you are configuring for the cluster and specify IP addresses and ports of the MDS servers in the cluster.
+
To create 2nd and subsequent MDS services on other nodes do:
 
+
# Login to the node as root.
For example:
+
# Setup cluster discovery. Normally, all the Pstorage components should be capable to discover each other on the network using multicast discovery (mDNS). This may not work however in Virtual Machines or if your network doesn't support multicasts. In this case you need to setup an MDS bootstrap list on the nodes manually. To do so create the bs.list file in the /etc/pstorage/clusters/<cluster_name> directory (make this directory if it does not exist) on the server you are configuring for the cluster and specify IP addresses and ports of the MDS servers in the cluster.
 
+
For example to create a bootstrap list for above cluster created type:
 
<code># echo "10.30.100.101:2510" >> /etc/pstorage/clusters/test_cluster/bs.list</code>
 
<code># echo "10.30.100.101:2510" >> /etc/pstorage/clusters/test_cluster/bs.list</code>
 +
Now future Pstorage services started on this machine will be able to discover other parties.
 +
# Authenticate the server in the cluster:
 +
<code># pstorage -c test_cluster auth-node</code>
 +
# Add new MDS to the cluster using similar to above make-mds command w/o -I option.
  
 
===Create chunk server (CS)===
 
===Create chunk server (CS)===
  
Log in to the computer you want to configure as a chunk server as root or as a user with root privileges.
+
Log in to the computer you want to configure as a chunk server as root.
 
 
Download and install the following RPM packages: pstorage-ctl, pstorage-libs-shared and pstorage-chunk-server. The packages are available in the Parallels Cloud Server remote repository (this repository is automatically configured for your system when you install Parallels Cloud Server) and can be installed with this command:
 
 
 
<code># yum install pstorage-ctl pstorage-libs-shared pstorage-chunk-server</code>
 
  
Authenticate the server in the cluster:
+
Authenticate the server in the cluster (skip this step if configured MDS or CS already on that server):
 +
NOTE: you may need to setup a bootstrap list as described above in case cluster auto-discovery doesn't work.
  
 
<code># pstorage -c test_cluster auth-node</code>
 
<code># pstorage -c test_cluster auth-node</code>
Line 48: Line 87:
 
Create CS:
 
Create CS:
  
<code># pstorage -c test_cluster make-cs -r /pstorage/test_cluster-cs -t 1</code>
+
<code># pstorage -c test_cluster make-cs -r /pstorage/test_cluster-cs</code>
  
After you have created the chunk server, start the chunk management service (pstorage-csd) and configure it to start automatically when the chunk server boots:  
+
This command will create a CS service and use the directory specified after -r option for CS data store.
 +
After you have created the chunk server, start is as a service (pstorage-csd) and configure it to start automatically when the machine boots:
  
 
<code># service pstorage-csd start</code>
 
<code># service pstorage-csd start</code>
Line 56: Line 96:
 
<code># chkconfig pstorage-csd on</code>
 
<code># chkconfig pstorage-csd on</code>
  
===Setting up client===
+
===Setting up a client===
  
Log in to the computer you want to act as a client as root or as a user with root privileges.
+
Log in to the computer you want to act as a client as root.
  
Download and install the following RPM packages: pstorage-libs-shared and pstorage-client. The packages are available in the Parallels Cloud Server remote repository (this repository is automatically configured for your system when you install Parallels Cloud Server) and can be installed with this command:
+
Authenticate the server in the cluster (skip this step if configured MDS or CS already on that server):
 +
NOTE: you may need to setup a bootstrap list as described above in case cluster auto-discovery doesn't work.
  
<code># yum install pstorage-libs-shared pstorage-client</code>
+
<code># pstorage -c test_cluster auth-node</code>
 +
 
 +
The command will ask you the password that you specified when setting up the first MDS server.
  
 
Create the directory to mount the Parallels Cloud Storage cluster to:
 
Create the directory to mount the Parallels Cloud Storage cluster to:
  
<code># mkdir -p /mnt/pcs</code>
+
<code># mkdir -p /pcs</code>
 +
 
 +
Mount Pstorage cluster as a file system:
 +
 
 +
<code># pstorage-mount -c test_cluster /pcs/</code>
 +
 
 +
You may want to add this mount to /etc/fstab to make it happen automatically on node boot. Consult man pstorage-mount for more details.
 +
 
 +
Now you can access your data from all the client machines and ready to run containers!
  
Mount cluster:
+
===Create a container running in the cluster===
  
<code># pstorage-mount -c test_cluster /mnt/pcs/</code>
+
Running a container over Pstrage is no different from any other local file system, so below example is just for the reference.
 +
Log in to the computer running OpenVZ and that you have configured to act as a client for the Parallels Cloud Storage cluster.
  
For more information on setting up pstorage cluster please refer to the Parallels Cloud Storage documentation [http://download.parallels.com/doc/pcs/pdf/Parallels_Cloud_Storage.pdf http://download.parallels.com/doc/pcs/pdf/Parallels_Cloud_Storage.pdf].
+
Mount Pstorage cluster at /pcs as described above if not done yet.
  
==Create ploop-based container inside cluster==
+
Load OpenVZ ploop kernel modules if they aren't loaded yet:
  
Log in to the computer that you have configured to act as a client for the Parallels Cloud Storage cluster. Further we assume that you have already installed and configured OpenVZ on this computer.
+
<code># modprobe ploop pfmt_ploop1 pio_kaio</code>
  
Load kernel modules if they aren't loaded:
+
Create a folder on Pstorage for the containers:
 +
<code># mkdir -p /pcs/containers</code>
  
<code># modprobe ploop pfmt_ploop1 pio_kaio
+
Create a ploop-based container with CTID=101 (put your own template name below):
  
Create folder for container data:
+
<code>vzctl create 101 --layout ploop --ostemplate centos-6-x86_64 --private /pcs/containers/</code>
  
<code># mkdir -p /mnt/pcs/container</code>
+
Now container with CTID=101 is ready for use and can be started right from the cluster shared Pstorage:
 +
<code>vzctl start 101</code>
  
Create ploop-based container with CTID=101 (replace template name with your own template):
+
In order to quickly relocate the container to another node (w/o data migration), just stop and unregister it on source node, then register and start on destination.
  
<code>vzctl create 101 --layout ploop --ostemplate centos-6-x86_64 --private /mnt/pcs/container/</code>
+
==Upgrading to Parallels Cloud Server==
 +
Please contact sales FIXME
  
Now container with CTID=101 is ready for use.
+
==Pstorage Documentation==
 +
* For more information on setting up pstorage cluster please refer to the Parallels Cloud Storage documentation [http://download.parallels.com/doc/pcs/pdf/Parallels_Cloud_Storage.pdf].
 +
* Pstroage performance whitepaper [http://www.parallels.com/fileadmin/parallels/documents/hosting-cloud-enablement/pcs/Production_Whitepapers/PCloudStorage_Performance_Results_WP_EN_Ltr_02192013_web.pdf].

Revision as of 04:51, 13 January 2014

Parallels Cloud Storage (Pstorage)

Parallels Storage (Pstorage) is a highly-available distributed storage (virtual SAN) with built-in replication and disaster recovery. Pstorage provides a storage virtualization platform on top of commodity hardware with locally attached hard drives and enables the unification of storage into a cluster in scenarios like virtualization with the help of virtual machines (VMs) and/or Containers (CTs). Pstorage ensures a fast live migration of VMs and CTs across hardware nodes, without the need to copy VM/CT data, and high availability as the storage becomes available remotely.

The main Pstorage features are listed below:

  • No special hardware requirements. Commodity hardware (SATA/SAS drives, 1Gbit+ Ethernet) can be used to create a storage.
  • Strong consistency semantics. This makes Pstorage suitable for iSCSI, VMs and CTs running on top of it (unlike object storage such as Amazon S3 or Swift).
  • Built-in replication.
  • Automatic disaster recovery on hard drive or node failures.
  • High availability. Data remain accessible even in case of hard drive or node failures.
  • Optional SSD caching. SSD caches boost the overall performance in the cluster on write and read operations.
  • Data checksumming and scrubbing. Checksumming and scrubbing greatly enhance data reliability.
  • Grow on demand. More storage nodes can be added to the cluster to increase its disk space. A VM/CT image size is not limited by the size of any of the hard drives.
  • Scales to Petabytes
  • More uniform hardware performance and capacity utilization across the nodes, so overutilized nodes benefit from idle ones.
  • High performance - comparable to SAN (FIXME link).

NOTE: Parallels Cloud Storage is available as a TECHNOLOGY PREVIEW ONLY for OpenVZ users and can't be licensed for production. To unlock for running in production you should upgrade to a full Parallels Cloud Server product (see below). Available free capacity for in technology preview mode is 100GB of logical (Containers usable) disk space. After hitting this limit writers can get blocked w/o errors expecting for a limit to be extended, so please avoid hitting the limit.

Pstorage components

Any Pstorage includes three components:

  • Metadata server (MDS). MDSs manage metadata, like file names, and keep control over how files are split into chunks and where the chunks are stored. They also track versions of chunks and ensure that the cluster has enough replicas. An MDS can be run in multiple instances to provide high availability. Besides, MDSs keep a global log of important events that happen in the cluster.
  • Chunk server (CS). A CS is a service responsible for storing real user data chunks and providing access to these data. A Pstorage cluster must have multiple instances of CSs for high availability.
  • Clients. Clients access a Pstorage cluster by communicating with MDSs and CSs. Parallels Containers and virtual machines can be run natively, i.e. directly from the Pstorage cluster. An additional Pstorage client - can be used to mount Pstorage as a conventional file system (though Pstorage is not POSIX-compliant). Besides, Pstorage files can be mounted as a block device using the "ploop" feature and formatted as ext4 file system for other needs.

A recommended cluster setup includes from 3 to 5 MDS instances (allowing you to survive the loss of 1 or 2 of MDSs, respectively) and multiple CSs providing storage capacity.

Pstorage setup HOWTO

Below HOWTO explains how to setup Parallels Cloud Storage (Pstorage) cluster and run OpenVZ containers stored there. Please note, that it's just a brief HOWTO for quick and easy evaluation of Parallels Cloud Storage (configuring only 1x MDS and CS service) and is not a real manual. We highly recommend to consult Pstorage manual (FIXME) and man pages (such as pstorage, pstorage-make-cs, pstorage-make-mds etc.) as it contain a lot of important details on types of SSD drives supported, what are the recommended configurations, how to configure big clusters with failure domains and so on.

Installing Parallels Cloud Storage software

In order to install Pstorage RPM packages log in as root to all the machines planned to be added to the cluster and perform the following actions.

Download and install the following RPM packages: pstorage-ctl, pstorage-libs-shared and pstorage-metadata-server. These packages can be downloaded from http://download.openvz.org/pstorage:

  1. wget FIXME
  2. yum install pstorage-ctl pstorage-libs-shared pstorage-metadata-server pstorage-chunk-server pstorage-client


Creating a cluster

Every Pstorage cluster has a unique cluster name used for remote service discovery and during authorization. So choose a name for the cluster that will uniquely identify it among other clusters in your network and avoid reusing it on cluster recreate. A name may contain the characters a-z, A-Z, 0-9, dash (-), and underscore (_). Here we will use 'test_cluster' as a cluster name.

Create metadata servers (MDS)

Log in to the computers you want to configure as a metadata server as root.

To create the very first MDS and your cluster type:

# pstorage -c test_cluster make-mds -I -a 10.30.100.101 -r /pstorage/test_cluster-mds -p

This command creates new Parallels Cloud Storage cluster and metadata server and configures the IP address of 10.30.100.101 for communication with this server (replace 10.30.100.101 with IP address of your own MDS server). MDS will store its data at location specified by -r option. The command will also ask you to enter the password for authentication in your cluster.

After you have created the MDS server, start the MDS management service (pstorage-mdsd) and configure it to start automatically when the server boots:

# service pstorage-mdsd start

# chkconfig pstorage-mdsd on

To create 2nd and subsequent MDS services on other nodes do:

  1. Login to the node as root.
  2. Setup cluster discovery. Normally, all the Pstorage components should be capable to discover each other on the network using multicast discovery (mDNS). This may not work however in Virtual Machines or if your network doesn't support multicasts. In this case you need to setup an MDS bootstrap list on the nodes manually. To do so create the bs.list file in the /etc/pstorage/clusters/<cluster_name> directory (make this directory if it does not exist) on the server you are configuring for the cluster and specify IP addresses and ports of the MDS servers in the cluster.

For example to create a bootstrap list for above cluster created type: # echo "10.30.100.101:2510" >> /etc/pstorage/clusters/test_cluster/bs.list Now future Pstorage services started on this machine will be able to discover other parties.

  1. Authenticate the server in the cluster:

# pstorage -c test_cluster auth-node

  1. Add new MDS to the cluster using similar to above make-mds command w/o -I option.

Create chunk server (CS)

Log in to the computer you want to configure as a chunk server as root.

Authenticate the server in the cluster (skip this step if configured MDS or CS already on that server): NOTE: you may need to setup a bootstrap list as described above in case cluster auto-discovery doesn't work.

# pstorage -c test_cluster auth-node

The command will ask you the password that you specified when setting up the first MDS server.

Create CS:

# pstorage -c test_cluster make-cs -r /pstorage/test_cluster-cs

This command will create a CS service and use the directory specified after -r option for CS data store. After you have created the chunk server, start is as a service (pstorage-csd) and configure it to start automatically when the machine boots:

# service pstorage-csd start

# chkconfig pstorage-csd on

Setting up a client

Log in to the computer you want to act as a client as root.

Authenticate the server in the cluster (skip this step if configured MDS or CS already on that server): NOTE: you may need to setup a bootstrap list as described above in case cluster auto-discovery doesn't work.

# pstorage -c test_cluster auth-node

The command will ask you the password that you specified when setting up the first MDS server.

Create the directory to mount the Parallels Cloud Storage cluster to:

# mkdir -p /pcs

Mount Pstorage cluster as a file system:

# pstorage-mount -c test_cluster /pcs/

You may want to add this mount to /etc/fstab to make it happen automatically on node boot. Consult man pstorage-mount for more details.

Now you can access your data from all the client machines and ready to run containers!

Create a container running in the cluster

Running a container over Pstrage is no different from any other local file system, so below example is just for the reference. Log in to the computer running OpenVZ and that you have configured to act as a client for the Parallels Cloud Storage cluster.

Mount Pstorage cluster at /pcs as described above if not done yet.

Load OpenVZ ploop kernel modules if they aren't loaded yet:

# modprobe ploop pfmt_ploop1 pio_kaio

Create a folder on Pstorage for the containers: # mkdir -p /pcs/containers

Create a ploop-based container with CTID=101 (put your own template name below):

vzctl create 101 --layout ploop --ostemplate centos-6-x86_64 --private /pcs/containers/

Now container with CTID=101 is ready for use and can be started right from the cluster shared Pstorage: vzctl start 101

In order to quickly relocate the container to another node (w/o data migration), just stop and unregister it on source node, then register and start on destination.

Upgrading to Parallels Cloud Server

Please contact sales FIXME

Pstorage Documentation

  • For more information on setting up pstorage cluster please refer to the Parallels Cloud Storage documentation [1].
  • Pstroage performance whitepaper [2].