NVMe多路径

NVMe Native多路径

存储侧

使用NVMe Native多路径时,存储侧无需额外配置,参考6.1.1.1节中存储侧配置,保证主机访问模式为均衡即可。

主机侧

检查多路径状态

当前支持的系统中,NVMe Native多路径默认开启,可使用如下方法确认:

[root@localhost /]# cat /sys/module/nvme_core/parameters/multipath 
 Y

查看多路径状态策略

使用如下命令查看当前多路径策略:

[root@localhost /]# ls /sys/class/nvme-subsystem/ | grep subsys 
nvme-subsys0 
[root@localhost /]#  
[root@localhost /]# cat /sys/class/nvme-subsystem/nvme-subsys0/iopolicy  
numa

可以看到多路径默认策略为numa,该策略下多路径只会选用一条路径下发IO,如果要实现负载均衡,需要修改多路径策略。

修改多路径策略

临时修改多路径策略为round-robin,可使用如下方法:

[root@localhost /]# echo round-robin > /sys/class/nvme-subsystem/nvme-subsys0/iopolicy  
[root@localhost /]# cat /sys/class/nvme-subsystem/nvme-subsys0/iopolicy  
round-robin

如果想永久生效,可参考下面的步骤配置:

  1. 在系统服务目录/etc/systemd/system下新建一个服务,服务名可自定义,如nvme_aa_round-robin.service。

    [root@localhost /]# cat /etc/systemd/system/nvme_aa_round-robin.service 
    [Unit] 
    Description=Add active/active support to native NVMe multipath 
    
    [Service] 
    Type=oneshot 
    ExecStart=/bin/sh -c "echo round-robin > /sys/class/nvme-subsystem/nvme-subsys0/iopolicy" 
    
    [Install] 
    WantedBy=default.target

  2. 验证服务功能正常。

    [root@localhost /]# cat /sys/class/nvme-subsystem/nvme-subsys0/iopolicy  
    numa 
    [root@localhost /]#  
    [root@localhost /]# systemctl start nvme_aa_round-robin.service 
    [root@localhost /]# cat /sys/class/nvme-subsystem/nvme-subsys0/iopolicy  
    round-robin

  3. 设置服务开机启动。

    [root@localhost /]# systemctl enable nvme_aa_round-robin.service 
    Created symlink /etc/systemd/system/default.target.wants/nvme_aa_round-robin.service → /etc/systemd/system/nvme_aa_round-robin.service.

配置检查

执行nvme list查看磁盘,当使用NVMe Native多路径时,不论每个NameSpace有多少条物理路径,nvme list下都只会对应一个盘符

[root@localhost /]# nvme list 
Node             SN                   Model                                    Namespace Usage                      Format           FW Rev   
---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- -------- 
/dev/nvme0n1     2102352TSB10L3000020 Huawei-XSG1                              1           0.00   B / 107.37  GB    512   B +  0 B   1000001 
/dev/nvme0n2     2102352TSB10L3000020 Huawei-XSG1                              2           0.00   B / 107.37  GB    512   B +  0 B   1000001

执行multipath -ll观察路径状态,如下所示场景存储映射了两个NameSpace,对应主机两个NameSpace,每个NameSpace两条物理路径,状态均为live

[root@localhost /]# multipath -ll 
eui.71008e272305366ef03f95ce00000008 [nvme]:nvme0n1 NVMe,Huawei-XSG1,1000001 
size=209715200 features='n/a' hwhandler='n/a' wp=rw 
|-+- policy='n/a' prio=n/a status=n/a 
| `- 0:24704:1 nvme0c24704n1 0:0 n/a   n/a   live    
`-+- policy='n/a' prio=n/a status=n/a 
  `- 0:24578:1 nvme0c24578n1 0:0 n/a   n/a   live    
eui.71008e272305366ff03f956a00000009 [nvme]:nvme0n2 NVMe,Huawei-XSG1,1000001 
size=209715200 features='n/a' hwhandler='n/a' wp=rw 
|-+- policy='n/a' prio=n/a status=n/a 
| `- 0:24704:1 nvme0c24704n1 0:0 n/a   n/a   live    
`-+- policy='n/a' prio=n/a status=n/a 
  `- 0:24578:1 nvme0c24578n1 0:0 n/a   n/a   live

1、部分新版本操作系统(如SuSE12 SP5/15SP2、CentOS 8.3及后续版本)中默认禁用了外部动态库,其中包括libforeign-nvme.so动态库,没有加载libforeign-nvme.so动态库会导致无法查询nvme-multipath生成的设备参数,所以执行multipath -ll命令无回显。可以编辑multipath.conf并在defaults字段中添enable_foreign参数解决,举例如下:

2、截至当前最新版本,由于multipath自身bug,multipath -ll查看到不同NameSpace下面的逻辑路径相同,可以使用ls /sys/class/nvme/nvme*查看所有逻辑路径,如下图所示nvme1c2n1、nvme1c130n1、nvme1c258n1、nvme1c0n1分别为NameSpace nvme1n1下面的4条逻辑路径,以此类推。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值