I'm currently facing a problem with a storage virtualization device which is located in two different datacenters and shows up as another path to a configured SAN-LUN.
The virtualization device is from EMC² and is called V-PLEX.
So I have something like this:
DC A
Host ---VPLEX-DC A---LUN storage A
| |
..|...........|...................
| DC B |
------VPLEX-DC B---LUN storage B
The VPLEX device itself is for storage based mirroring and synchronizes write access to storage A to storage B and the other way around.
My problem is, that the virtual LUN I get from the VPLEX does not have any prioritization given by dm-multipath and looks like this:
mpath3 (36000144000000010e06d8f12ec30dfef) dm-9 EMC,Invista
[size=5.0G][features=1 queue_if_no_path][hwhandler=0][rw]
\_ round-robin 0 [prio=1][active]
\_ 5:0:1:2 sdad 65:208 [active][ready]
\_ 5:0:4:2 sdak 66:64 [active][ready]
\_ 5:0:5:2 sdap 66:144 [active][ready]
\_ 4:0:0:2 sdc 8:32 [active][ready]
\_ 4:0:1:2 sdh 8:112 [active][ready]
\_ 4:0:4:2 sdo 8:224 [active][ready]
\_ 4:0:5:2 sdt 65:48 [active][ready]
\_ 5:0:0:2 sdy 65:128 [active][ready]
That way, write access is made round-robin and access to the "remote-devices" - device located in the other DC - creating duplicate traffic through the
SAN switches as the access has to be routed to the remote VPLEX-B and it will write to the local VPLEX-A.
I wanted to solve this problem by giving priorities to a path by its remote-port - which is different for each connection to a SAN device. Unfortunately
there currently doesn't exist any priorizer and I have to write one on my own.
To make the definition flexible, I would like to have a file with a list of port-wwns associated with a priority.
For versions shipped with RHEL5 this could be a simple shell script which simply looks up the sysfs file structures of a given device. For RHEL6 this has to be
a binary library. So writing a binary version will make more sense than maintaining two different solutions.
A P-o-c script I wrote runs fine on RHEL5 - althouh a bit slow - but shows the results I wanted to see:
--------- script --------
#! /bin/bash
PRIO_DEF="/etc/dm-multipath-vplex.conf"
DEVICE=${1#/dev/*}
# find scsi-device address
SCSI_ADDR="$(basename $(readlink /sys/block/$DEVICE/device/scsi_device*) )"
# 3:0:2:0
# remove trailing :0
SCSI_ADDR=${SCSI_ADDR%:*}
# 3:0:2
# change x:x:x to x:x-x
SCSI_ADDR=$(echo "$SCSI_ADDR" | sed -e 's/:\([0-9]\)$/-\1/' )
# get port_name for scsi-remote-port
RPORT=$(cat "/sys/class/fc_remote_ports/rport-$SCSI_ADDR/port_name")
# return prio
IGNORECASE=1
awk "/$RPORT/ { print \$1 }" $PRIO_DEF
------------------------------------------
---------- dm-multipath-vplex.conf --------
# VPLEX DC A
1 0x50001442606d8f00
1 0x50001442606d8f01
1 0x50001442606d8f02
1 0x50001442606d8f03
1 0x50001442706d8f00
1 0x50001442706d8f01
1 0x50001442706d8f02
1 0x50001442706d8f03
# VPLEX DC B
2 0x5000144260641900
2 0x5000144260641901
2 0x5000144260641902
2 0x5000144260641903
2 0x5000144270641900
2 0x5000144270641901
2 0x5000144270641902
2 0x5000144270641903
--------------------------------------------
Do you think that this solutions is worth including it as rport-prio into device mappers source? My C language skills are a bit rusty, but I at least managed to
find out the SCSI-address of a given device and build the sysfs-path to the remote port.
The rest should also be manageable, but I wanted to ask as early a possible to have it included into mainstream and get some feedback on this.
Best regrads,
Andreas Bleischwitz
-- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel