diff options
Diffstat (limited to 'Feature Planning/GlusterFS 3.5/libgfapi with qemu libvirt.md')
-rw-r--r-- | Feature Planning/GlusterFS 3.5/libgfapi with qemu libvirt.md | 222 |
1 files changed, 222 insertions, 0 deletions
diff --git a/Feature Planning/GlusterFS 3.5/libgfapi with qemu libvirt.md b/Feature Planning/GlusterFS 3.5/libgfapi with qemu libvirt.md new file mode 100644 index 0000000..2309016 --- /dev/null +++ b/Feature Planning/GlusterFS 3.5/libgfapi with qemu libvirt.md @@ -0,0 +1,222 @@ + Work In Progress + Author - Satheesaran Sundaramoorthi + <sasundar@redhat.com> + +**Purpose** +----------- + +Gluster volume can be used to store VM Disk images. This usecase is +popularly known as 'Virt-Store' usecase. Earlier, gluster volume had to +be fuse mounted and images are created/accessed over the fuse mount. + +With the introduction of GlusterFS libgfapi, QEMU supports glusterfs +through libgfapi directly. This we call as *QEMU driver for glusterfs*. +These document explains about the way to make use of QEMU driver for +glusterfs + +Steps for the entire procedure could be split in to 2 views viz,the +document from + +1. Steps to be done on gluster volume side +2. Steps to be done on Hypervisor side + +**Steps to be done on gluster side** +------------------------------------ + +These are the steps that needs to be done on the gluster side Precisely +this involves + +1. Creating "Trusted Storage Pool" +2. Creating a volume +3. Tuning the volume for virt-store +4. Tuning glusterd to accept requests from QEMU +5. Tuning glusterfsd to accept requests from QEMU +6. Setting ownership on the volume +7. Starting the volume + +##### Creating "Trusted Storage Pool" + +Install glusterfs rpms on the NODE. You can create a volume with a +single node. You can also scale up the cluster, as we call as *Trusted +Storage Pool*, by adding more nodes to the cluster + + gluster peer probe <hostname> + +##### Creating a volume + +It is highly recommended to have replicate volume or +distribute-replicate volume for virt-store usecase, as it would add high +availability and fault-tolerance. Remember the plain distribute works +equally well + + gluster volume create replica 2 <brick1> .. <brickN> + +where, <brick1> is <hostname>:/<path-of-dir> Note: It is recommended to +create sub-directories inside brick and that could be used to create a +volume.For example, say, */home/brick1* is the mountpoint of XFS, then +you can create a sub-directory inside it */home/brick1/b1* and use it +while creating a volume.You can also use space available in root +filesystem for bricks. Gluster cli, by default, throws warning in that +case. You can override by using *force* option + + gluster volume create replica 2 <brick1> .. <brickN> force + +*If you are new to GlusterFS, you can take a look at +[QuickStart](http://gluster.readthedocs.org/en/latest/Quick-Start-Guide/Quickstart/) guide.* + +##### Tuning the volume for virt-store + +There are recommended settings available for virt-store. This provide +good performance characteristics when enabled on the volume that was +used for *virt-store* + +Refer to +[Virt-store-usecase\#Tunables](Virt-store-usecase#Tunables "wikilink") +for recommended tunables and for applying them on the volume, +[Virt-store-usecase\#Applying\_the\_Tunables\_on\_the\_volume](Virt-store-usecase#Applying_the_Tunables_on_the_volume "wikilink") + +##### Tuning glusterd to accept requests from QEMU + +glusterd receives the request only from the applications that run with +port number less than 1024 and it blocks otherwise. QEMU uses port +number greater than 1024 and to make glusterd accept requests from QEMU, +edit the glusterd vol file, */etc/glusterfs/glusterd.vol* and add the +following, + + option rpc-auth-allow-insecure on + +Note: If you have installed glusterfs from source, you can find glusterd +vol file at */usr/local/etc/glusterfs/glusterd.vol* + +Restart glusterd after adding that option to glusterd vol file + + service glusterd restart + +##### Tuning glusterfsd to accept requests from QEMU + +Enable the option *allow-insecure* on the particular volume + + gluster volume set <volname> server.allow-insecure on + +**IMPORTANT :** As of now(april 2,2014)there is a bug, as +*allow-insecure* is not dynamically set on a volume.You need to restart +the volume for the change to take effect + +##### Setting ownership on the volume + +Set the ownership of qemu:qemu on to the volume + + gluster volume set <vol-name> storage.owner-uid 107 + gluster volume set <vol-name> storage.owner-gid 107 + +**IMPORTANT :** The UID and GID can differ per Linux distribution, or +even installation. The UID/GID should be the one fomr the *qemu* or +'kvm'' user, you can get the IDs with these commands: + + id qemu + getent group kvm + +##### Starting the volume + +Start the volume + + gluster volume start <vol-name> + +**Steps to be done on Hypervisor Side** +--------------------------------------- + +Hypervisor is just the machine which spawns the Virtual Machines. This +machines should be necessarily the baremetal with more memory and +computing power. The following steps needs to be done on hypervisor, + +1. Install qemu-kvm +2. Install libvirt +3. Create a VM Image +4. Add ownership to the Image file +5. Create libvirt XML to define Virtual Machine +6. Define the VM +7. Start the VM +8. Verification + +##### Install qemu-kvm + +##### Install libvirt + +##### Create a VM Image + +Images can be created using *qemu-img* utility + + qemu-img create -f <format> gluster://<server>/<vol-name>/ <image> <size> + +- format - This can be raw or qcow2 +- server - One of the gluster Node's IP or FQDN +- vol-name - gluster volume name +- image - Image File name +- size - Size of the image + +Here is sample, + + qemu-img create -f qcow2 gluster://host.sample.com/vol1/vm1.img 10G + +##### Add ownership to the Image file + +NFS or FUSE mount the glusterfs volume and change the ownership of the +image file to qemu:qemu + + mount -t nfs -o vers=3 <gluster-server>:/<vol-name> <mount-point> + +Change the ownership of the image file that was earlier created using +*qemu-img* utility + + chown qemu:qemu <mount-point>/<image-file> + +##### Create libvirt XML to define Virtual Machine + +*virt-install* is python wrapper which is mostly used to create VM using +set of params. *virt-install* doesn't support any network filesystem [ +<https://bugzilla.redhat.com/show_bug.cgi?id=1017308> ] + +Create a libvirt xml - <http://libvirt.org/formatdomain.html> See to +that the disk section is formatted in such a way, qemu driver for +glusterfs is being used. This can be seen in the following example xml +description + + <disk type='network' device='disk'> + <driver name='qemu' type='raw' cache='none'/> + <source protocol='gluster' name='distrepvol/vm3.img'> + <host name='10.70.37.106' port='24007'/> + </source> + <target dev='vda' bus='virtio'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> + </disk> + +##### Define the VM from XML + +Define the VM from the XML file that was created earlier + + virsh define <xml-file-description> + +Verify that the VM is created successfully + + virsh list --all + +##### Start the VM + +Start the VM + + virsh start <VM> + +##### Verification + +You can verify the disk image file that is being used by VM + + virsh domblklist <VM-Domain-Name/ID> + +The above should show the volume name and image name. Here is the +example, + + [root@test ~]# virsh domblklist vm-test2 + Target Source + ------------------------------------------------ + vda distrepvol/test.img + hdc -
\ No newline at end of file |