In order to create a mirrored logical volume that is shared by all of the nodes in a cluster, the locking type must be set correctly in the lvm.conf
file in every node of the cluster. By default, the locking type is set to local. To change this, execute the following command in each node of the cluster to enable clustered locking:
# /sbin/lvmconf --enable-cluster
To create a clustered logical volume, the cluster infrastructure must be up and running on every node in the cluster. The following example verifies that the clvmd
daemon is running on the node from which it was issued:
[root@doc-07 ~]# ps auxw | grep clvmd
root 17642 0.0 0.1 32164 1072 ? Ssl Apr06 0:00 clvmd -T20 -t 90
The following command shows the local view of the cluster status:
[root@example-01 ~]# cman_tool services
fence domain
member count 3
victim count 0
victim now 0
master nodeid 2
wait state none
members 1 2 3
dlm lockspaces
name clvmd
id 0x4104eefa
flags 0x00000000
change member 3 joined 1 remove 0 failed 0 seq 1,1
members 1 2 3
Ensure that the cmirror
package is installed.
Start the cmirrord
service.
[root@hexample-01 ~]# service cmirrord start
Starting cmirrord: [ OK ]
Create the mirror. The first step is creating the physical volumes. The following commands create three physical volumes. Two of the physical volumes will be used for the legs of the mirror, and the third physical volume will contain the mirror log.
[root@doc-07 ~]# pvcreate /dev/xvdb1
Physical volume "/dev/xvdb1" successfully created
[root@doc-07 ~]# pvcreate /dev/xvdb2
Physical volume "/dev/xvdb2" successfully created
[root@doc-07 ~]# pvcreate /dev/xvdc1
Physical volume "/dev/xvdc1" successfully created
Create the volume group. This example creates a volume group vg001
that consists of the three physical volumes that were created in the previous step.
[root@doc-07 ~]# vgcreate vg001 /dev/xvdb1 /dev/xvdb2 /dev/xvdc1
Clustered volume group "vg001" successfully created
Note that the output of the vgcreate
command indicates that the volume group is clustered. You can verify that a volume group is clustered with the vgs
command, which will show the volume group's attributes. If a volume group is clustered, it will show a c attribute.
[root@doc-07 ~]# vgs vg001
VG #PV #LV #SN Attr VSize VFree
vg001 3 0 0 wz--nc 68.97G 68.97G
Create the mirrored logical volume. This example creates the logical volume mirrorlv
from the volume group vg001
. This volume has one mirror leg. This example specifies which extents of the physical volume will be used for the logical volume.
[root@doc-07 ~]# lvcreate -l 1000 -m1 vg001 -n mirrorlv /dev/xvdb1:1-1000 /dev/xvdb2:1-1000 /dev/xvdc1:0
Logical volume "mirrorlv" created
You can use the lvs
command to display the progress of the mirror creation. The following example shows that the mirror is 47% synced, then 91% synced, then 100% synced when the mirror is complete.
[root@doc-07 log]# lvs vg001/mirrorlv
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
mirrorlv vg001 mwi-a- 3.91G vg001_mlog 47.00
[root@doc-07 log]# lvs vg001/mirrorlv
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
mirrorlv vg001 mwi-a- 3.91G vg001_mlog 91.00
[root@doc-07 ~]# lvs vg001/mirrorlv
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
mirrorlv vg001 mwi-a- 3.91G vg001_mlog 100.00
The completion of the mirror is noted in the system log:
May 10 14:52:52 doc-07 [19402]: Monitoring mirror device vg001-mirrorlv for events
May 10 14:55:00 doc-07 lvm[19402]: vg001-mirrorlv is now in-sync
You can use the lvs
with the -o +devices
options to display the configuration of the mirror, including which devices make up the mirror legs. You can see that the logical volume in this example is composed of two linear images and one log.
[root@doc-07 ~]# lvs -a -o +devices
LV VG Attr LSize Origin Snap% Move Log Copy% Convert Devices
mirrorlv vg001 mwi-a- 3.91G mirrorlv_mlog 100.00 mirrorlv_mimage_0(0),mirrorlv_mimage_1(0)
[mirrorlv_mimage_0] vg001 iwi-ao 3.91G /dev/xvdb1(1)
[mirrorlv_mimage_1] vg001 iwi-ao 3.91G /dev/xvdb2(1)
[mirrorlv_mlog] vg001 lwi-ao 4.00M /dev/xvdc1(0)
You can use the seg_pe_ranges
option of the lvs
to display the data layout. You can use this option to verify that your layout is properly redundant. The output of this command displays PE ranges in the same format that the lvcreate
and lvresize
commands take as input.
[root@doc-07 ~]# lvs -a -o +seg_pe_ranges --segments
PE Ranges
mirrorlv_mimage_0:0-999 mirrorlv_mimage_1:0-999
/dev/xvdb1:1-1000
/dev/xvdb2:1-1000
/dev/xvdc1:0-0