• Linux配置和管理设备映射多路径multipath


    (一)多路径管理软件的由来
    在企业中,服务器与存储通常是分开放置的,服务器上的硬盘通常用来安装操作系统和应用软件,业务数据则是存储在单独的存储设备上,那么,服务器与存储是如何连接的呢?根据存储协议,经常有2种方案:

    • NAS存储(Network Attached Storage,网络附加存储),NAS存储使用基于文件的协议(例如CIFS、NFS),其它计算机通过以太网访问NAS存储,类似于一个共享目录,NAS存储好处多多,网络适配性好,只要网络互通,就能访问,NAS存储价格也较为便宜,缺点是相对SAN而言,网络带宽受限、网络延迟较大,性能较差。
    • SAN存储(Storage Area Network,存储区域网络),SAN存储基于Fabric协议,分配给其它机器的是LUN,SAN存储可以来理解为一个虚拟的磁盘。通常价格昂贵,性能较好。

    对于NAS存储,只要使用IP访问即可,但是对于SAN存储,需要专业的硬件支持,主要是SAN HBA卡和SAN交换机。
    在SAN网络中,大企业为了业务稳定,不因硬件损坏而导致业务停滞,在硬件采购时,往往采用“双份”的策略:2个网卡做绑定、2个CPU、2个风扇、2个HBA卡、2个SAN交换机等等。为了保障存储的高可用性,存储、SAN交换机、服务器架构通常如下:
    架构1:一台服务器拥有2个HBA卡,1台SAN交换机,2个存储控制器控制1台存储,这样就形成了2条链路。
    hba1 <--> SAN <--> cntrlr1 (Storage)
    hba2 <--> SAN <--> cntrlr2 (Storage)

    架构2:一台服务器拥有2个HBA卡,2台SAN交换机,2个存储控制器控制1台存储(这里把RAID A和RAID B看做是同一台存储上划出来的LUN,RAID A和RAID B使用相同的2个控制器),这样就形成了4台链路,但是对于每个LUN而言,还是2条链路:
    hba1 <--> SAN1 <--> cntrlr1 (RAID A)
    hba1 <--> SAN1 <--> cntrlr1 (RAID B)
    hba2 <--> SAN2 <--> cntrlr2 (RAID A)
    hba2 <--> SAN2 <--> cntrlr2 (RAID B)

    这种多条链路架构带来的好处有:
    --冗余。每个存储都有2条链路,在active/standby模式下,如果HBA卡、SAN交换机、存储控制器出现了单点故障,还有另外一条链路提供服务。
    --改进的性能。2条链路设置为active/active模式,实现I/O负载平衡。
    当然,坏处也非常明显:
    通过上面的2种架构可以发现,在SAN网络中,存储分配出来的LUN(可以理解为一个硬盘),在多条存储链路连接后,主机会将每条链路识别到的LUN当做一个硬盘,如果一个LUN被主机上的2个HBA卡各自识别了一次,那么我们会在主机上看到2个一样大小的硬盘。明明只有一个硬盘,却因链路问题主机识别为了2个硬盘,给磁盘管理带来了麻烦。
    这时候,多路径设备管理软件就应运而生了。每个多路径设备都有一个全球识别符(WWID),他是一个全球唯一的无法更改的号码,通过WWID,多路径软件就可以将因路径问题重复识别到了磁盘做一个整合映射,对外提供服务。例如,LUN A在通过存储多路径后,在主机上别识别为了/dev/sdc和/dev/sdd,然而sdc和sdd有相同的WWID,所以会将sdc和sdd整合为mpath1磁盘对外提供服务,解决了主机重复识别磁盘的问题。

    (二)设备映射多路径问题展现
    在《存储系列1-openfiler开源存储管理平台实践》文章第四节“(4.1)使用openfiler对外提供块存储(类似SAN存储)”分配存储之后,我们可以看到这样的情况:


    在存储端分配了3个lv,大小分别为1GB、2GB、10GB。

    但是在客户机上却增加了6个磁盘,多了1倍的数量,仔细查看,发现sdb和sdc、sdd和sde、sdf和sdg大小相同。

    再确认磁盘路径确认磁盘分配,发现如下,客户机通过2条路径访问同一个磁盘,因为路径不同,最终同一个LUN分配了2个不同的盘符。

    这里整理一下存储、链路、主机之间的对应关系,如下:

    同一块磁盘对应2个或以上盘符,用户在使用时如果稍不注意,肯定会出问题,因此需要使用多路径软件将多个盘符映射到同一个盘符下面。

    (三)常见的多路径配置管理软件
    通过上面的介绍,想必大家已经知道多路径存储带来的问题了。针对多路径问题,各个系统厂商和存储厂商均开发了多路径设备管理软件。常见的多路径设备管理软件有:

    • EMC存储厂商的PowerPath
    • Windows系统的MPIO
    • HP-UNIX系统的Native_Multi-Path
    • Linux系统的DM Multipath

    下面以Linux的DM Multipath为例,学习多路径软件的配置和管理。

    (四)设备映射多路径软件安装
    我使用的环境为:
    --存储服务器(iSCSI target):使用openfiler提供iSCSI存储
    --客户机服务器(iSCSI initiator):centos7(redhat7也一样)
    存储服务器openfiler的存储分配方法不再赘述,可以参考文章:《存储系列1-openfiler开源存储管理平台实践》。接下来我们在客户机安装多路径软件

    # 安装多路径软件
    yum install -y device-mapper*
    
    # 将多路径软件添加至内核模块中
    modprobe dm-multipath
    modprobe dm-round-robin
    
    # 检查内核添加情况
    [root@mysql8 ~]# lsmod |grep multipath
    dm_multipath 27427 6 dm_round_robin,dm_service_time
    dm_mod 123303 23 dm_round_robin,dm_multipath,dm_log,dm_mirror,dm_service_time
    
    # 设置开机自启动
    systemctl enable multipathd.service
    
    # 检查开机自启动
    [root@mysql8 ~]# systemctl list-unit-files|grep multipath
    multipathd.service enabled
    
    # 创建多路径参数配置文件,该语句会创建multipath的参数配置文件:/etc/multipath.conf
    /sbin/mpathconf --enable
    
    # 启动多路径软件multipathd
    systemctl start multipathd.service

    在安装并启动multipath之后,我们并没有做任何的参数配置,但是可以发现,主机上多了3块磁盘:/dev/mapper/mpathe、/dev/mapper/mpathf、/dev/mapper/mpathg。我们知道,多路径软件就是用来管理磁盘映射的,把主机识别到的6块磁盘映射为了3块磁盘。

    [root@testserver by-id]# fdisk -l
    ... 略 ...
    Disk /dev/mapper/mpathe: 1073 MB, 1073741824 bytes, 2097152 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    
    Disk /dev/mapper/mpathf: 2147 MB, 2147483648 bytes, 4194304 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    
    Disk /dev/mapper/mpathg: 10.7 GB, 10737418240 bytes, 20971520 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes

    那么,这3块磁盘又和主机识别到的6块磁盘时上面关系呢?我们可以使用多路径查看命令来确认:

    # 可以看到mpathe与sdc和sdb对应同一块磁盘
    [root@testserver by-id]# multipath -ll
    mpathe (14f504e46494c45523838576731322d526231352d73794852) dm-3 OPNFILER,VIRTUAL-DISK 
    size=1.0G features='0' hwhandler='0' wp=rw
    |-+- policy='service-time 0' prio=1 status=active
    | `- 4:0:0:1 sdc 8:32 active ready running
    `-+- policy='service-time 0' prio=1 status=enabled
      `- 3:0:0:1 sdb 8:16 active ready running
    mpathg (14f504e46494c45526463737145732d426f516a2d6f4c416d) dm-5 OPNFILER,VIRTUAL-DISK 
    size=10G features='0' hwhandler='0' wp=rw
    |-+- policy='service-time 0' prio=1 status=active
    | `- 4:0:0:3 sdg 8:96 active ready running
    `-+- policy='service-time 0' prio=1 status=enabled
      `- 3:0:0:3 sdf 8:80 active ready running
    mpathf (14f504e46494c4552336b535576772d6f5a556b2d5844746e) dm-4 OPNFILER,VIRTUAL-DISK 
    size=2.0G features='0' hwhandler='0' wp=rw
    |-+- policy='service-time 0' prio=1 status=active
    | `- 4:0:0:2 sde 8:64 active ready running
    `-+- policy='service-time 0' prio=1 status=enabled
      `- 3:0:0:2 sdd 8:48 active ready running

    最终,我们看到的磁盘关系就是这样的了

    总结一下:存储端划分了3个LUN(可以理解为逻辑卷lv,或者磁盘都行),在通过2条存储链路映射之后,在主机端识别到了6个磁盘,2个盘符对应同一个LUN,在使用多路径软件multipath做了映射之后,6个磁盘映射为了3个磁盘,最终结果为:存储的lvdata1对应mpathe、lvdata2对应mpathf、lvdata3对应mpathg。


    (五)设备映射多路径软件配置
    在上一步中,我们并没有对multipath的参数配置文件作任何修改,启动multipath之后,就自动将重复的磁盘做了聚合映射,在这一章节。我们通过修改参数文件,了解一下multipath软件有哪些参数可以配置。
    multipath软件的参数配置文件为 /etc/multipath.conf 。多路径配置文件主要分为以下几个部分:

    • blacklist:多路径设备黑名单,该处的设备不会被多路径软件识别管理
    • blacklist_exceptions:根据blacklist部分中的参数列出不在黑名单中的设备
    • defaults:DM Multipath的常规配置
    • multipaths:各个独立多路径设备的特性设置,该部分参数会覆盖defaults和devices的参数
    • devices:各个存储控制器的设置,如果要使用非默认的存储设备,则可能需要创建devices子部份,该部分参数会覆盖defaults部分的参数

    如果同一个参数在defaults,devices,multipaths部分都进行了配置,则优先级从高到低为:multipaths,devices, defaults。

    multipath默认配置文件如下:

    [root@testserver ~]# cat /etc/multipath.conf 
    # This is a basic configuration file with some examples, for device mapper
    # multipath.
    #
    # For a complete list of the default configuration values, run either
    # multipath -t
    # or
    # multipathd show config
    #
    # For a list of configuration options with descriptions, see the multipath.conf
    # man page
    
    ## By default, devices with vendor = "IBM" and product = "S/390.*" are
    ## blacklisted. To enable mulitpathing on these devies, uncomment the
    ## following lines.
    #blacklist_exceptions {
    #    device {
    #    vendor    "IBM"
    #    product    "S/390.*"
    #    }
    #}
    
    ## Use user friendly names, instead of using WWIDs as names.
    defaults {
    user_friendly_names yes
    find_multipaths yes
    }
    ##
    ## Here is an example of how to configure some standard options.
    ##
    #
    #defaults {
    #    polling_interval 10
    #    path_selector    "round-robin 0"
    #    path_grouping_policy    multibus
    #    uid_attribute    ID_SERIAL
    #    prio    alua
    #    path_checker    readsector0
    #    rr_min_io    100
    #    max_fds    8192
    #    rr_weight    priorities
    #    failback    immediate
    #    no_path_retry    fail
    #    user_friendly_names    yes
    #}
    ##
    ## The wwid line in the following blacklist section is shown as an example
    ## of how to blacklist devices by wwid. The 2 devnode lines are the
    ## compiled in default blacklist. If you want to blacklist entire types
    ## of devices, such as all scsi devices, you should use a devnode line.
    ## However, if you want to blacklist specific devices, you should use
    ## a wwid line. Since there is no guarantee that a specific device will
    ## not change names on reboot (from /dev/sda to /dev/sdb for example)
    ## devnode lines are not recommended for blacklisting specific devices.
    ##
    #blacklist {
    # wwid 26353900f02796769
    #    devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
    #    devnode "^hd[a-z]"
    #}
    #multipaths {
    #    multipath {
    #    wwid    3600508b4000156d700012000000b0000
    #    alias    yellow
    #    path_grouping_policy    multibus
    #    path_selector    "round-robin 0"
    #    failback    manual
    #    rr_weight    priorities
    #    no_path_retry    5
    #    }
    #    multipath {
    #    wwid    1DEC_____321816758474
    #    alias    red
    #    }
    #}
    #devices {
    #    device {
    #    vendor    "COMPAQ "
    #    product    "HSV110 (C)COMPAQ"
    #    path_grouping_policy    multibus
    #    path_checker    readsector0
    #    path_selector    "round-robin 0"
    #    hardware_handler    "0"
    #    failback    15
    #    rr_weight    priorities
    #    no_path_retry    queue
    #    }
    #    device {
    #    vendor    "COMPAQ "
    #    product    "MSA1000 "
    #    path_grouping_policy    multibus
    #    }
    #}
    
    blacklist {
    }
    View Code

     (5.1)配置文件黑名单(blacklist部分)

    如将 find_multipaths 参数设定为 yes,则您只需要将那些您不想使其具有多路径功能的多路径设备列入黑名单,通常不需要将设备列入黑名单。可以使用三种方法将设备列入黑名单。


    (5.1.1)根据WWID将设备列入黑名单
    要根据WWID配置黑名单,需要在blacklist中添加WWID条目
    例子:将WWID为14f504e46494c4552336b535576772d6f5a556b2d5844746e加入黑名单

    blacklist {
           wwid 14f504e46494c4552336b535576772d6f5a556b2d5844746e
    }

     实战过程:

    # 1、添加黑名单之前
    [root@testserver ~]# multipath -ll mpathe (14f504e46494c45523838576731322d526231352d73794852) dm-3 OPNFILER,VIRTUAL-DISK size=1.0G features='0' hwhandler='0' wp=rw |-+- policy='service-time 0' prio=1 status=active | `- 4:0:0:1 sdc 8:32 active ready running `-+- policy='service-time 0' prio=1 status=enabled `- 3:0:0:1 sdb 8:16 active ready running mpathg (14f504e46494c45526463737145732d426f516a2d6f4c416d) dm-5 OPNFILER,VIRTUAL-DISK size=10G features='0' hwhandler='0' wp=rw |-+- policy='service-time 0' prio=1 status=active | `- 4:0:0:3 sdg 8:96 active ready running `-+- policy='service-time 0' prio=1 status=enabled `- 3:0:0:3 sdf 8:80 active ready running mpathf (14f504e46494c4552336b535576772d6f5a556b2d5844746e) dm-4 OPNFILER,VIRTUAL-DISK size=2.0G features='0' hwhandler='0' wp=rw |-+- policy='service-time 0' prio=1 status=active | `- 4:0:0:2 sde 8:64 active ready running `-+- policy='service-time 0' prio=1 status=enabled `- 3:0:0:2 sdd 8:48 active ready running

    # 2.使用wwid添加黑名单
    [root@testserver
    ~]# vim /etc/multipath.conf blacklist { wwid 14f504e46494c4552336b535576772d6f5a556b2d5844746e }
    # 3.使新添加的黑名单生效 [root@testserver
    ~]# service multipathd reload Reloading multipathd configuration (via systemctl): [ OK ] # 4.再次查看多路径信息,mpathf磁盘已经不在了
    [root@testserver
    ~]# multipath -ll mpathe (14f504e46494c45523838576731322d526231352d73794852) dm-3 OPNFILER,VIRTUAL-DISK size=1.0G features='0' hwhandler='0' wp=rw |-+- policy='service-time 0' prio=1 status=active | `- 3:0:0:1 sdb 8:16 active ready running `-+- policy='service-time 0' prio=1 status=enabled `- 4:0:0:1 sdc 8:32 active ready running mpathg (14f504e46494c45526463737145732d426f516a2d6f4c416d) dm-5 OPNFILER,VIRTUAL-DISK size=10G features='0' hwhandler='0' wp=rw |-+- policy='service-time 0' prio=1 status=active | `- 3:0:0:3 sdf 8:80 active ready running `-+- policy='service-time 0' prio=1 status=enabled `- 4:0:0:3 sdg 8:96 active ready running

     NOTE:如何查看WWID

    [root@testserver ~]# lsscsi -i
    [0:0:0:0] disk VMware, VMware Virtual S 1.0 /dev/sda -
    [2:0:0:0] cd/dvd NECVMWar VMware IDE CDR10 1.00 /dev/sr0 -
    [3:0:0:1] disk OPNFILER VIRTUAL-DISK 0 /dev/sdb 14f504e46494c45523838576731322d526231352d73794852
    [3:0:0:2] disk OPNFILER VIRTUAL-DISK 0 /dev/sdd 14f504e46494c4552336b535576772d6f5a556b2d5844746e
    [3:0:0:3] disk OPNFILER VIRTUAL-DISK 0 /dev/sdf 14f504e46494c45526463737145732d426f516a2d6f4c416d
    [4:0:0:1] disk OPNFILER VIRTUAL-DISK 0 /dev/sdc 14f504e46494c45523838576731322d526231352d73794852
    [4:0:0:2] disk OPNFILER VIRTUAL-DISK 0 /dev/sde 14f504e46494c4552336b535576772d6f5a556b2d5844746e
    [4:0:0:3] disk OPNFILER VIRTUAL-DISK 0 /dev/sdg 14f504e46494c45526463737145732d426f516a2d6f4c416d

    (5.1.2)根据设备名称将设备列入黑名单
    要根据设备名称配置黑名单,需要在blacklist中添加devnode条目
    例子:将磁盘sdb和sdc加入黑名单

    blacklist {
           devnode "sdb,sdc"
    }

     实战过程:

    # 1.在上一步wwid的基础上添加设备名称黑名单,把sdb、sdc加入黑名单
    [root@testserver ~]# vim /etc/multipath.conf blacklist { wwid 14f504e46494c4552336b535576772d6f5a556b2d5844746e } # 在上面的基础上多添加一个blacklist模块 blacklist { devnode "sdb|sdc" } # 2.使添加的黑名单生效
    [root@testserver
    ~]# service multipathd reload Reloading multipathd configuration (via systemctl): [ OK ] # 3.确认mpathe磁盘,已经识别不到了
    [root@testserver
    ~]# multipath -ll Oct 23 15:24:49 | /etc/multipath.conf line 97, duplicate keyword: blacklist mpathg (14f504e46494c45526463737145732d426f516a2d6f4c416d) dm-5 OPNFILER,VIRTUAL-DISK size=10G features='0' hwhandler='0' wp=rw |-+- policy='service-time 0' prio=1 status=active | `- 3:0:0:3 sdf 8:80 active ready running `-+- policy='service-time 0' prio=1 status=enabled `- 4:0:0:3 sdg 8:96 active ready running

     NOTE:默认情况下,以下 devnode 条目将会被列入默认黑名单中;因为这些条目而被列入黑名单的设备通常不支持 DM Multipath。如需在这些设备中启用 multipath,则需要在配置文件的 blacklist_exceptions 部分指定这些设备。

    blacklist {
    devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
    devnode "^(td|ha)d[a-z]"
    }

    (5.1.3)根据设备类型将设备列入黑名单
    要根据设备类型配置黑名单,需要在blacklist中添加device条目
    例子:将IBM 3S42存储和惠普的所有存储放入黑名单

    blacklist {
           device {
                   vendor  "IBM"
                   product "3S42"       #DS4200 Product 10
           }
           device {
                   vendor  "HP"
                   product "*"
           }
    }

    (5.2)黑名单之外的设备(blacklist_exceptions部分)
    如果有大量的设备,但只有一个设备想要设置为多路径,这是可以考虑将所有设备添加到黑名单blacklist中,然后在blacklist_exceptions中单独添加该设备。当在配置文件的 blacklist_exceptions 指定设备时,您必须以指定黑名单的相同方法来指定例外情况。
    例子:把所有设备加入黑名单,然后将wwid为14f504e46494c4552336b535576772d6f5a556b2d5844746e的设备添加到黑名单之外

    blacklist{
           wwid *
    }
    
    blacklist_exceptions {
           wwid 14f504e46494c4552336b535576772d6f5a556b2d5844746e
    }

     实战过程:

    # 1.将所有设备添加到黑名单blacklist中,然后在blacklist_exceptions中单独添加wwid为14f504e46494c4552336b535576772d6f5a556b2d5844746e的设备
    [root@testserver ~]# vim /etc/multipath.conf blacklist{ wwid * } blacklist_exceptions { wwid 14f504e46494c4552336b535576772d6f5a556b2d5844746e } # 2.使配置信息生效
    [root@testserver
    ~]# service multipathd reload Reloading multipathd configuration (via systemctl): [ OK ]
    # 3.可以看到,只有该wwid的设备能够识别到 [root@testserver
    ~]# multipath -ll mpathf (14f504e46494c4552336b535576772d6f5a556b2d5844746e) dm-3 OPNFILER,VIRTUAL-DISK size=2.0G features='0' hwhandler='0' wp=rw |-+- policy='service-time 0' prio=1 status=active | `- 3:0:0:2 sdd 8:48 active ready running `-+- policy='service-time 0' prio=1 status=enabled `- 4:0:0:2 sde 8:64 active ready running

    (5.3)配置文件默认(defaults部分)
    defaults部分时DM Multipath的常规属性配置,通常格式如下:

    defaults {
            user_friendly_names     yes
            path_grouping_policy    multibus
    }

     defaults部分有较多的参数,主要参数有(这里主要记录常用的):

    参数 解释
    polling_interval 以秒(s)为单位指定两次路径检查的时间间隔
    find_multipaths

    设定多路径设备的模式。如果这个参数为yes,多路径将不会尝试为不在黑名单中的每个路径都创建设备,而是满足一下3个条件之一才创建设备:

    • 对于相同WWID设备,在黑名单指定的路径外还有2个或以上的路径
    • 用户通过使用multipath命令指定设备强制创建该设备
    • 路径拥有与之前创建的多路径设备相同的WWID。无论何时使用 find_multipaths 组件创建多路径设备后,多路径都会记住该设备的 WWID 以便在再次看到使用那个 WWID 的路径时自动创建设备。这可让您自动选择正确的所路径创建多路径设备而无需编辑多路径黑名单。
    默认为no。
    path_selector 指定I/O所使用路径算法,可能的值包括
    • round-robin 0:在路径中循环使用每个路径,像每个路径发送同样的I/O,默认;
    • queue-length 0:将下一组I/O请求发送到I/O队列最短的路径;
    • service-time 0:将下一组 I/O 发送到具有最短预计服务时间的路径
    path_grouping_policy 用于指定分组策略,我的理解为指定多路径为active/active还是active/standby模式
    • failover:每个优先组群有一个路径。默认
    • multibus:所有有效路径在一个优先组中
    • group_by_serial:每个检测到的系列号有一个优先组群
    • group_by_prio:每个优先组群有一个路径优先值。优先权根据指定为 global、per-controller 或者 per-multipath 选项的调用程序决定
    • group_by_node_name:每个目标节点名有一个优先组
    failback

    管理路径群组出错切换,值有:

    • immediate:立即恢复到包含活跃路径的最高级别路径组群
    • manual:不需要立即恢复,只有在操作者干预的情况下发生恢复。默认
    • followover:指定当路径组的第一个路径成为活跃路径时应执行自动恢复。这可让节点在另一个节点请求故障修复时不会自动恢复。
    • 大于0的数字值指定推迟出错切换时间,以秒(s)表示。
    user_friendly_names
    • 如果设置为yes,则该操作系统会使用文件/etc/multipath/bindings为该多路径分配一个持久且唯一的别名,格式为mpath n
    • 如果为no,则该系统使用WWID作为多路径的别名。默认
    • 在这两种情况下,你在这里指定的数值将被你在配置文件multipaths部分指定的别名覆盖

    NOTE:如果为yes,多路径别名与wwid的关系:

    [root@testserver ~]# cat /etc/multipath/bindings 
    ... 略 ...
    mpathe 14f504e46494c45523838576731322d526231352d73794852
    mpathf 14f504e46494c4552336b535576772d6f5a556b2d5844746e
    mpathg 14f504e46494c45526463737145732d426f516a2d6f4c416d
    checker_timeout 路径检查器和排序器执行带显式超时SCSI命令的超时时间,以秒(s)为单位。默认是/sys/block/sdc/device/timeout的值
    force_sync 如果将其设置为yes,则会阻止路径检查程序在异步(async)模式下运行。默认值为no。

    NOTE:path_grouping_policy这个参数我的理解是用来做多路径的路径访问方式的,简单来说就是多条路径是以active/active这种负载均衡的方式工作,还是以active/standby这种链路冗余的方式工作,我们不妨测试一下具体值的效果:

    (1)当 path_grouping_policy=failover时,路径为active/standby

    [root@testserver lib]# multipath -ll
    Oct 23 16:49:17 | /etc/multipath.conf line 96, duplicate keyword: defaults
    mpathe (14f504e46494c45523838576731322d526231352d73794852) dm-4 OPNFILER,VIRTUAL-DISK 
    size=1.0G features='0' hwhandler='0' wp=rw
    |-+- policy='service-time 0' prio=1 status=active
    | `- 3:0:0:1 sdb 8:16 active ready running
    `-+- policy='service-time 0' prio=1 status=enabled
      `- 4:0:0:1 sdc 8:32 active ready running

     (2)当 path_grouping_policy=multibus时,路径为active/active

    [root@testserver lib]# multipath -ll
    Oct 23 16:49:47 | /etc/multipath.conf line 96, duplicate keyword: defaults
    mpathe (14f504e46494c45523838576731322d526231352d73794852) dm-4 OPNFILER,VIRTUAL-DISK 
    size=1.0G features='0' hwhandler='0' wp=rw
    `-+- policy='service-time 0' prio=1 status=active
    |- 3:0:0:1 sdb 8:16 active ready running
    `- 4:0:0:1 sdc 8:32 active ready running

    (5.4)多路径设备配置属性(multipaths部分)
    在multipath.conf配置文件multipaths部分可为每个多路径设备设置(可以理解为一个多路径磁盘)的属性,这些属性只适用于一个特定的multipath。这部分有较多的参数属性,其中大部分参数都与上面的defaults部分重合,这里只介绍2个参数。

    参数 解释
    wwid 指定使用multipath属性的多路径设备的符号名称,这个参数在multipath部分是必须的。
    alias

    指定使用multipath属性的多路径设备的符号名称,如果使用了user_friendly_names,这里不要将别名设置为mpath n,这样可能会与自动分配的友好用户名冲突,进而给出不正确的设备节点名称。

     实战过程:

    将wwid为14f504e46494c45523838576731322d526231352d73794852的存储名称从mpathe改为datadisk1,以便于用户识别,将路径选择方式改为failover

    # 1.添加multipaths之前的多路径信息
    [root@testserver device]# multipath -ll Oct 28 14:29:48 | /etc/multipath.conf line 96, duplicate keyword: defaults mpathe (14f504e46494c45523838576731322d526231352d73794852) dm-3 OPNFILER,VIRTUAL-DISK size=1.0G features='0' hwhandler='0' wp=rw `-+- policy='service-time 0' prio=1 status=active |- 3:0:0:1 sdb 8:16 active ready running `- 4:0:0:1 sde 8:64 active ready running mpathg (14f504e46494c45526463737145732d426f516a2d6f4c416d) dm-5 OPNFILER,VIRTUAL-DISK size=10G features='0' hwhandler='0' wp=rw `-+- policy='service-time 0' prio=1 status=active |- 3:0:0:3 sdd 8:48 active ready running `- 4:0:0:3 sdg 8:96 active ready running # 2.添加multipaths部分信息 [root@testserver ~]# vim /etc/multipath.conf multipaths { multipath { wwid 14f504e46494c45523838576731322d526231352d73794852 alias datadisk1 path_grouping_policy failover path_selector "round-robin 0" failback manual rr_weight priorities no_path_retry 5 } } # 3.使配置信息生效 [root@testserver ~]# service multipathd reload Reloading multipathd configuration (via systemctl): [ OK ] [root@testserver ~]# vim /etc/multipath.conf # 4.查看修改之后的多路径信息 [root@testserver device]# multipath -ll Oct 28 14:42:45 | /etc/multipath.conf line 96, duplicate keyword: defaults datadisk1 (14f504e46494c45523838576731322d526231352d73794852) dm-3 OPNFILER,VIRTUAL-DISK size=1.0G features='1 queue_if_no_path' hwhandler='0' wp=rw |-+- policy='round-robin 0' prio=1 status=active | `- 3:0:0:1 sdb 8:16 active ready running `-+- policy='round-robin 0' prio=1 status=enabled `- 4:0:0:1 sde 8:64 active ready running mpathg (14f504e46494c45526463737145732d426f516a2d6f4c416d) dm-5 OPNFILER,VIRTUAL-DISK size=10G features='0' hwhandler='0' wp=rw `-+- policy='service-time 0' prio=1 status=active |- 3:0:0:3 sdd 8:48 active ready running `- 4:0:0:3 sdg 8:96 active ready running # 5.通过fdisl -l也可以看到磁盘名称已经发生变化 [root@testserver device]# fdisk -l ... Disk /dev/mapper/datadisk1: 1073 MB, 1073741824 bytes, 2097152 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes

    (5.5)多路径存储设备属性(devices部分)
    在multipath.conf配置文件devices部分可为每个存储设备设置(可以理解为存储厂商的一款存储产品)的属性。多路径配置中默认包含许多的存储产品,要查看已经包含了哪些存储产品,可以使用以下查看:

    multipathd show config
    # 或者
    multipath -t

     正常情况下,无需修改这些存储设备的默认值,如果想要修改可以在配置文件的devices部分添加条目来覆盖修改。对于不在multipath默认里面的存储设备,也可以在devices部分手动添加一个设备。

    这部分有较多的参数属性,其中大部分参数都与上面的defaults、multipaths部分重合,这里只介绍几个参数。

    参数 解释
    ventor 存储设备厂商名称,可查看/sys/block/sdc/device/vendor
    product

    存储设备产品名称,可查看/sys/block/sdc/device/model

    alias_prefix

    这个设备使用的user_friendly_name前缀,而不是默认的mpath。

    参考配置:

    device {
            vendor            "COMPAQ"
            product            "MSA1000"
            path_grouping_policy    multibus
            path_checker        tur
            rr_weight        priorities
        }

    (六)设备映射多路径软件管理及故障排除
    (6.1)multipathd启动与关闭

    multipathd启动与关闭命令如下:

    [root@testserver mapper]# service multipathd 
    Usage: /etc/init.d/multipathd {start|stop|force-stop|status|restart|force-restart|condrestart|reload}
    
    # 启动
    service multipathd start
    
    # 关闭
    service multipathd stop
    
    # 重新启动
    service multipathd restart
    
    # 不重启multipathd使修改的参数生效
    service multipathd reload 

    (6.2)multipath命令

    选项  描述
    -l  显示来自 sysfs 和设备映射器的当前多路径配置
    -ll 显示来自 sysfs 、设备映射器以及系统中其他所有可用组件的当前多路径配置
    -f device 删除命名的多路径设备
    -F 删除所有不使用的多路经设备
    -w device 从 wwids 文件中删除指定设备的 wwid。
    -W 重新设定 wwids 文件使其只包含当前 multipath 设备

    (6.3)multipathd命令
    可以使用multipathd命令管理multipathd守护进程。关于multipathd命令的使用,可以使用命令"man multipathd"查看手册,或者使用"multipathd show"命令也会有提示。

    [root@testserver mapper]# multipathd show maps format "%n %w %d %s"
    name uuid sysfs vend/prod/rev 
    datadisk1 14f504e46494c45523838576731322d526231352d73794852 dm-3 OPNFILER,VIRTUAL-DISK 
    mpathf 14f504e46494c4552336b535576772d6f5a556b2d5844746e dm-4 OPNFILER,VIRTUAL-DISK 
    mpathg 14f504e46494c45526463737145732d426f516a2d6f4c416d dm-5 OPNFILER,VIRTUAL-DISK

     multipath -k命令是multipathd守护进程的交互式界面,使用help命令帮助,使用Ctrl+D命令退出交互

    [root@testserver mapper]# multipathd -k
    multipathd> help
    multipath-tools v0.4.9 (05/33, 2016)
    CLI commands reference:
    list|show paths
    list|show paths format $format
    ... 略 ...
    map|multipath $map unsetprkey
    forcequeueing daemon
    restorequeueing daemon
    multipathd> show maps    #查看映射关系
    name sysfs uuid 
    datadisk1 dm-3 14f504e46494c45523838576731322d526231352d73794852
    mpathf dm-4 14f504e46494c4552336b535576772d6f5a556b2d5844746e
    mpathg dm-5 14f504e46494c45526463737145732d426f516a2d6f4c416d

    (6.4)使用dmsetup命令查看设备映射条目
    使用dmsetup找出操作系统内存设备映射条目与多路径设备的映射关系。以下命令显示所有映射设备及其主副号码,副号确定dm设备的名称,例如datadisk1的副号码为3,则datadisk1与/dev/dm-3对映。

    [root@testserver ~]# dmsetup ls
    datadisk1    (253:3)
    centos-home    (253:2)
    mpathg    (253:5)
    mpathf    (253:4)
    centos-swap    (253:1)
    centos-root    (253:0)

    设备映射关系也可以从这查看:

    [root@testserver block]# cd /dev/mapper/
    [root@testserver mapper]# ll
    total 0
    lrwxrwxrwx. 1 root root 7 Oct 28 15:48 centos-home -> ../dm-2
    lrwxrwxrwx. 1 root root 7 Oct 28 15:48 centos-root -> ../dm-0
    lrwxrwxrwx. 1 root root 7 Oct 28 15:48 centos-swap -> ../dm-1
    crw-------. 1 root root 10, 236 Oct 28 15:48 control
    lrwxrwxrwx. 1 root root 7 Oct 28 15:54 datadisk1 -> ../dm-3
    lrwxrwxrwx. 1 root root 7 Oct 28 15:54 mpathf -> ../dm-4
    lrwxrwxrwx. 1 root root 7 Oct 28 15:54 mpathg -> ../dm-5

     【完】


  • 相关阅读:
    DOM增删改替换
    DRF框架之序列化器serializers组件详解
    DRF基础操作流程
    DRF框架基础知识储备
    selectors模块
    并发编程——IO模型详解
    高性能web服务器——nginx
    Django中的ORM如何通过数据库中的表格信息自动化生成Model 模型类?
    使用cors完成跨域请求处理
    Flask基础
  • 原文地址:https://www.cnblogs.com/lijiaman/p/13893346.html
Copyright © 2020-2023  润新知