ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【linux】多路径|Multipath I/O 技能 [打印本页]

作者: 伤心客    时间: 2024-8-24 07:44
标题: 【linux】多路径|Multipath I/O 技能
目次
   大略
   详细
   什么是多路径?
   Multipath安装与使用
   安装
   使用
   Linux下multipath软件先容
   附录
   设置文件阐明
    其他解
   
   
   大略

   略
   详细

   什么是多路径?

   普通的电脑主机都是一个硬盘挂接到一个总线上,这里是一对一的关系。
   而到了分布式环境,主机和存储网络连接,中间每一层可能存在多块网卡,多个交换机可选,就构成了多对多的关系。
   也就是说,主机到存储可以有多条路径可以选择。主机到存储之间的IO由多条路径可以选择,那么就有以下问题需要解决:
       1 ) 每条路径如何表达?
    2 )I/O流量如何选择路径?
    3) 流量如安在多条路径之间分配?(负载平衡)
    4) 此中一条路径坏掉了,如那里理? (高可用)
       第一条比力简单,每条路径,让操作系统把每条路径识别成独立的磁盘即可,这两个识别出的磁盘现实上只是通向同一个物理盘的不同路径而已,如下图:
   

   IO 可以从两张网卡中的恣意一张到达存储设备RDID A,也就是有2条路径,把这两条路径设备成/dev/hba1 和/dev/hba2 两块盘. 选择此中一块盘写数据即可. 现实都是向RDID A写数据. 对磁盘/dev/hba1就是走绿色那条路径,对/dev/hba2写就是走蓝色那条路径.
    lsblk 会看到下面的输出,/dev/hba1 和/dev/hba2 两块盘现实指向的是同一个物理存储设备 253:2,映射为多路径设备mpatha
  
  1. # lsblk
  2. NAME            MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
  3. ……
  4. hda1              8:48   0   30G  0 disk
  5. └─mpatha        253:2    0   30G  0 mpath
  6. hda2              8:64   0   30G  0 disk
  7. └─mpatha        253:2    0   30G  0 mpath
复制代码
  
    
    
   那么2 )I/O流量如何选择路径?  3) 流量如安在多条路径之间分配?(负载平衡)  4) 此中一条路径坏掉了,如那里理? (高可用) 这些问题怎么解决? 这就需要多路径出场了。
    
   Multipath I/O 技能
    
   当服务器到某一存储设备有多条路径时,每条路径都会识别为一个单独的设备,下IO时,要写哪个设备(既走哪条路径),然后故障时的切换和恢复,IO流量的负载平衡等,都要applicantion自己选择和判断,太麻烦了,还不方便.
   
   

   于是技能人员编写了一个中间层软件,专门解决 1 ) 每条路径如何表达? 2 )I/O流量如何选择路径?  3) 流量如安在多条路径之间分配?(负载平衡)  4) 此中一条路径坏掉了,如那里理? (高可用)  这几个问题,这就是多路径技能。
   多路径技能此中之一就叫Multipath(linux上的主流),把选择哪条路故障时的切换和恢复,IO流量的负载平衡等Multipath帮你搞定,applicantion全程无感知,对Multipath模仿出来的设备下IO即可,就像写一个普通的盘一样,幸福.
   
    
   

    
    
    
   Multipath安装与使用

   (摘自:Linux下multipath安装与使用-https://blog.csdn.net/u011436427/article/details/113662832)
   
   安装

   
   linux中大多已经默认安装了multipath,只需设置开机启动即可.
   systemctl enable multipathd.service
   
   使用

    
   添加设置文件
   
需要multipath正常工作只需要如下设置即可,如果想要了解详细的设置,请参考Multipath
   
  
  1. # vi /etc/multipath.conf
  2. blacklist {
  3.     devnode "^sda"
  4. }
  5. defaults {
  6.     user_friendly_names yes
  7.     path_grouping_policy multibus
  8.     failback immediate
  9.     no_path_retry fail
  10. }
复制代码
   
   启动服务
   systemctl start multipathd.service
   
   检察服务
   
  
  1. # multipath -ll
  2. mpatha (360000000000000000e00000000010001) dm-2 IET     ,VIRTUAL-DISK
  3. size=30G features='0' hwhandler='0' wp=rw
  4. `-+- policy='service-time 0' prio=1 status=active
  5.   |- 3:0:0:1 sdd 8:48 active ready running
  6.   `- 4:0:0:1 sde 8:64 active ready running
复制代码
  
   查抄设置是否乐成
   如果设置正确的话就会在/dev/mapper/目次下多出mpath0、mpath1(自动分配的名称)等之类设备,不过如果在设置的时候起了别名,会使用别名来代替自动分配的名称
   # ll /dev/mapper/
    
   

    
   此时,执行lsblk下令就可以看到多路径磁盘mpatha了:
    
  
  1. # lsblk
  2. NAME            MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
  3. sda               8:0    0   20G  0 disk
  4. ├─sda1            8:1    0  500M  0 part  /boot
  5. └─sda2            8:2    0 19.5G  0 part
  6.   ├─centos-root 253:0    0 17.5G  0 lvm   /
  7.   └─centos-swap 253:1    0    2G  0 lvm   [SWAP]
  8. sdb               8:16   0   30G  0 disk
  9. sdc               8:32   0   30G  0 disk
  10. sdd               8:48   0   30G  0 disk
  11. └─mpatha        253:2    0   30G  0 mpath
  12. sde               8:64   0   30G  0 disk
  13. └─mpatha        253:2    0   30G  0 mpath
  14. sr0              11:0    1  603M  0 rom
复制代码
  
   
   此时/dev/mapper/mpatha 就是 对应下图的白色方框部分了:
   

   
   由于mpatha是逻辑设备名,您应该向/dev/mapper/mpatha进行I/O操作,而不是直接向sdd或sde进行。这是因为mpatha是多路径软件为您抽象出来的设备,它会处理路径选择、故障切换等复杂操作,让您能够像操作一个本地磁盘一样操作远程存储设备。
    
   请注意,在向/dev/mapper/mpatha进行I/O操作之前,您需要确保该设备已经正确挂载到文件系统,而且您拥有适当的权限进行读写操作。通常,这可以通过在/etc/fstab中设置自动挂载,或者使用mount下令手动挂载来完成。
   别的,如果您在操作系统中执行格式化或分区操作,也应该针对/dev/mapper/mpatha进行,而不是针对sddsde。这是因为mpatha是多路径软件提供的逻辑视图,而sddsde只是物理路径的表现。对物理路径直接进行操作可能会导致数据丢失或不一致。
   
   分区、格式化和创建逻辑卷
   
   接下来,就可以对mpatha做分区、格式化和创建逻辑卷等各种磁盘操作了
    
  
  1. # /etc/init.d/multipathd start #开启mulitipath服务
  2. # multipath -F #删除现有路径
  3. # multipath -v2 #格式化路径
  4. # multipath -ll #查看多路径
复制代码
  
   如果设置正确的话就会在/dev/mapper/目次下多出mpathbp1等之类的设备,用fdisk -l下令可以看到多路径软件创建的磁盘,
   如:/dev/mapper/mpathbp1
    
   格式化硬盘
   
执行fdisk -l,可以看到存储已经识别乐成,而且多路径设置也正确。信息如下:
   
  
  1. [root@localhost ~]# fdisk -l
  2. ......
  3. Disk /dev/mapper/mpathb: 2684.4 GB, 2684354560000 bytes
  4.  heads, 63 sectors/track, 326354 cylinders
  5. Units = cylinders of 16065 * 512 = 8225280 bytes
  6. Sector size (logical/physical): 512 bytes / 512 bytes
  7. I/O size (minimum/optimal): 512 bytes / 512 bytes
  8. Disk identifier: 0x00000000
  9.              Device Boot      Start         End      Blocks   Id  System
  10. /dev/mapper/mpathbp1               1      267350  2147483647+  ee  GPT
复制代码
   
   通过上面的信息可以发现已经是GPT的分区格式了,接下来就是需要对硬盘进行格式化。如果不是,需要先执行如下步骤:
   
    新建分区
  
  1. [root@localhost ~]# pvcreate /dev/mapper/mpathb
  2. [root@localhost ~]# parted /dev/mapper/mpathb
  3. GNU Parted 2.1
  4. Using /dev/mapper/mpathbp1
  5. Welcome to GNU Parted! Type 'help' to view a list of commands.
  6. (parted) mklabel gpt                #设置分区类型为gpt
  7. (parted) mkpart extended 0% 100%    #扩展分区,并使用整个硬盘
  8. (parted) quit                       #退出                                              
  9. Information: You may need to update /etc/fstab.
复制代码
  
   格式化&挂载硬盘
  
  1. [root@localhost ~]# mkfs.ext4 /dev/mapper/mpathbp1
  2. [root@localhost ~]# mount /dev/mapper/mpathbp1 /test
复制代码
  挂载乐成后,即可使用了。
   
   当在系统里创建了一个新的分区后,因为mount挂载在重启系统后会失效,所以需要将分区信息写到/etc/fstab文件中让其永世挂载。
  
  1. [root@localhost ~]# vi /etc/fstab
  2. /dev/mapper/mpathbp1    /test                ext4    defaults        1 2
复制代码
  生存退出,重启后/dev/mapper/mpathbp1 就会自动挂载到/test 目次下
   
   Linux下multipath安装与使用_redhat 7 multipath-CSDN博客
   
    更多设置和维护相关:
   Linux Multipath多路径设置:概念、设置、常用维护下令等-https://www.cnblogs.com/liulianzhen99/articles/17968524
   
   
   Linux下multipath软件先容

    
   Linux下实现多路径的软件是multipath,centos默认已经安装了multipath:
       [root@localhost ~]# rpm -qa|grep mapper
    device-mapper-multipath-0.4.9-64.el6.x86_64
    device-mapper-event-libs-1.02.77-9.el6.x86_64
    device-mapper-multipath-libs-0.4.9-64.el6.x86_64
    device-mapper-persistent-data-0.1.4-1.el6.x86_64
    device-mapper-libs-1.02.77-9.el6.x86_64
    device-mapper-event-1.02.77-9.el6.x86_64
    device-mapper-1.02.77-9.el6.x86_64
      • 表明如以下:
   (1)device-mapper-multipath:即multipath-tools。重要提供multipathd和multipath等工具和 multipath.conf等设置文件。这些工具通过device mapper的ioctr的接口创建和设置multipath设备(调用device-mapper的用户空间库,创建的多路径设备会在/dev /mapper中)。
   (2)device-mapper:重要包罗两大部分:内核部分和用户部分。
   此中内核部分重要由device mapper焦点(dm.ko)和一些target driver(md-multipath.ko)。焦点完成设备的映射,而target根据映射关系和自身特点详细处理从mappered device 下来的i/o。同时,在焦点部分,提供了一个接口,用户通过ioctr可和内核部分通讯,以引导内核驱动的活动,比如如何创建mappered device,这些divece的属性等。linux device mapper的用户空间部分重要包罗device-mapper这个包。此中包罗dmsetup工具和一些资助创建和设置mappered device的库。这些库重要抽象,封装了与ioctr通讯的接口,以便方便创建和设置mappered device。multipath-tool的程序中就需要调用这些库。
   (3)dm-multipath.ko和dm.ko:dm.ko是device mapper驱动。它是实现multipath的基础。dm-multipath实在是dm的一个target驱动。
   (4)scsi_id: 包含在udev程序包中,可以在multipath.conf中设置该程序来获取scsi设备的序号。通过序号,便可以判断多个路径对应了同一设备。这个是多路径实现的关键。scsi_id是通过sg驱动,向设备发送EVPD page80或page83 的inquery下令来查询scsi设备的标识。但一些设备并不支持EVPD 的inquery下令,所以他们无法被用来天生multipath设备。但可以改写scsi_id,为不能提供scsi设备标识的设备虚拟一个标识符,并输出到标准输出。multipath程序在创建multipath设备时,会调用scsi_id,从其标准输出中得到该设备的scsi id。在改写时,需要修改scsi_id程序的返回值为0。因为在multipath程序中,会查抄该直来确定scsi id是否已经乐成得到。
    
   

   
       [root@bootstrap vdbench50401]# lsblk
    ...
    sdb         8:16   0     4G  0 disk
    └─mpathah 253:0    0     4G  0 mpath
    sdc         8:32   0     4G  0 disk
    └─mpathag 253:1    0     4G  0 mpath
    sdd         8:48   0     4G  0 disk
    └─mpathaj 253:2    0     4G  0 mpath
    sde         8:64   0     4G  0 disk
    └─mpathai 253:3    0     4G  0 mpath
    sdf         8:80   0     4G  0 disk
    └─mpathah 253:0    0     4G  0 mpath
    sdg         8:96   0     4G  0 disk
    └─mpathag 253:1    0     4G  0 mpath
    sdh         8:112  0     4G  0 disk
    └─mpathaj 253:2    0     4G  0 mpath
    sdi         8:128  0     4G  0 disk
    └─mpathai 253:3    0     4G  0 mpath
    sdj         8:144  0     4G  0 disk
    └─mpathah 253:0    0     4G  0 mpath
    sdk         8:160  0     4G  0 disk
    └─mpathag 253:1    0     4G  0 mpath
    sdl         8:176  0     4G  0 disk
    └─mpathaj 253:2    0     4G  0 mpath
    sdm         8:192  0     4G  0 disk
    └─mpathai 253:3    0     4G  0 mpath
      
    
   附录

   设置文件阐明

   
   这个设置是Linux系统中multipath的设置文件,用于设置多路径I/O(Multipath I/O)的活动。多路径I/O通常用于存储系统,允许操作系统通过多个物理路径(例如,通过不同的网络交换机或物理接口)访问同一个逻辑存储设备。这样做可以提高系统的可靠性和性能。
   下面是设置文件的详细表明:
   blacklist 部分
   
   conf复制代码
      
blacklist { 
devnode "^sda" 
}
      blacklist部分用于指定哪些设备不应该被多路径软件管理。在这个例子中,所有设备名以sda`开头的设备都不会被多路径软件处理。
   defaults 部分
   
   conf复制代码
      
defaults { 
user_friendly_names yes 
path_grouping_policy multibus 
failback immediate 
no_path_retry fail 
}
      defaults`部分用于设置多路径I/O的默认活动。
   这个设置文件的重要目标是确保multipath按照预期的方式运行,只管理那些应该被管理的设备,而且具有符合的默认活动。固然,详细的设置可能会根据现实的硬件和网络环境有所不同。
    
    
   
   

 其他表明


mpath 是多路径(Multipath)设备的缩写。多路径I/O(Multipath I/O,简称MPIO)是一种用于提高存储系统可靠性和性能的技能。它允许一个存储设备(如磁盘或磁带驱动器)通过多个物理路径连接到主机系统。当存储设备有多个路径可用时,多路径软件将选择一个最优路径用于数据I/O。在您的情况中,所有的磁盘都被映射到了mpath设备。您可能使用了某种存储解决方案(如LVM、RAID或其他SAN/NAS设备),而且这些磁盘设备都通过多路径I/O进行了管理。
注意到mpathah, mpathag, mpathaj, 和 mpathai 这些设备被多次列出,但是它们的设备号(例如 253:0)是雷同的,这可能是由于多路径I/O软件的工作方式造成的。只管多个物理磁盘被列出,但在多路径I/O的上下文中,它们可能被视为单个逻辑设备。
 
 
 
Q:什么是Multipath多路径?
 
答:Multipath I/O 电脑储存技能,指使用两个以上的路径同时在CPU与储存设备之间传送讯号,以达到侦错与强化效能的目标。 简单的说当服务器到某一存储设备有多条路径时,每条路径都会识别为一个单独的设备(不便于使用),而多路径允许您将服务器节点和储存阵列间的多个I/O路径设置为一个单一设备(就是我们所说的链路聚合)即多路径聚合了I/O路径并天生由这些集合路径组成的新设备,这些I/O路径可包含独立电缆、交换器和控制器的实体SAN链接(FC / SAS / iSCSI)等;
:Multipath多路径管理基础先容与安装设置使用_multipath下令详解-CSDN博客


华为多路径Ultrapath——原理篇 (huawei.com)




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4