How to setup preferred path with multipath
Environment
Red Hat Enterprise Linux 7
device-mapper-multipath
LUNs with ALUA enabled
Issue
All paths for a LUN are grouped all together even though they come with different priority from the external storage.
The output of "multipath -ll" shows something like the following:
mpatha (360021868018107e0c000000000000098) dm-16 IBM ,2145
size=100G features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=30 status=active
|- 8:0:1:18 sdv 65:80 active ready running
|- 9:0:2:18 sded 128:80 active ready running
|- 8:0:3:18 sdby 68:192 active ready running
`- 9:0:3:18 sdgf 131:176 active ready running
But something similar to the following is expected:
mpatha (360021868018107e0c000000000000098) dm-16 IBM ,2145
size=100G features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=10 status=active
|- 8:0:1:18 sdv 65:80 active ready running
|- 9:0:2:18 sded 128:80 active ready running
`-+- policy='round-robin 0' prio=50 status=active
|- 8:0:3:18 sdby 68:192 active ready running
`- 9:0:3:18 sdgf 131:176 active ready running
Resolution
- Edit the multipath.conf file
- Remove the path_grouping_policy from the configuration of the affected LUN in the multipath.conf file, so that it will look like the following:
multipaths {
multipath {
wwid 360021868018107e0c000000000000098
alias mpatha
path_selector "round-robin 0"
failback immediate
rr_weight priorities
no_path_retry 5
}
}
- Restart the multipath service
Root Cause
This is because the option "path_grouping_policy" is configured as "multibus":
multipaths {
multipath {
wwid 360021868018107e0c000000000000098
alias mpatha
path_grouping_policy multibus
path_selector "round-robin 0"
failback immediate
rr_weight priorities
no_path_retry 5
}
}
From the documentation, the value "multibus" means that all paths will be grouped in one priority group:
path_grouping_policy
Specifies the default path grouping policy to apply to unspecified multipaths. Possible values include:
failover: 1 path per priority group.
multibus: all valid paths in 1 priority group.
group_by_serial: 1 priority group per detected serial number.
group_by_prio: 1 priority group per path priority value. Priorities are determined by callout programs specified as global, per-controller, or per-multipath options.
group_by_node_name: 1 priority group per target node name. Target node names are fetched in /sys/class/fc_transport/target*/node_name.
The default value is failover.
Diagnostic Steps
Check the returned ports/priority for each device in order to confirm that they need to be grouped differently. The output of multipath -ll is showing the following:
Jan 12 11:54:50 | reported target port group is 1
Jan 12 11:54:50 | aas = 01 [active/non-optimized]
Jan 12 11:54:50 | sdv: alua prio = 10 <===== ALUA priority of this path
Jan 12 11:54:50 | reported target port group is 1
Jan 12 11:54:50 | aas = 01 [active/non-optimized]
Jan 12 11:54:50 | sded: alua prio = 10 <===== ALUA priority of this path
Jan 12 11:54:50 | reported target port group is 0
Jan 12 11:54:50 | aas = 00 [active/optimized]
Jan 12 11:54:50 | sdby: alua prio = 50 <===== ALUA priority of this path
Jan 12 11:54:50 | reported target port group is 0
Jan 12 11:54:50 | aas = 00 [active/optimized]
Jan 12 11:54:50 | sdgf: alua prio = 50 <===== ALUA priority of this path
This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.
Comments