当前位置: 首页 > news >正文

SPDK NVMe-oF target多路功能介绍

基本概念

SPDK NVMe-oF target multi-path是基于NVMe协议的multi-path IO和namespace sharing功能。

NVMe multi-path IO指的是两个或多个完全独立的PCI Express路径存在于一个主机和一个命名空间。

而namespace 共享是两个或多个主机使用不同的NVMe控制器访问一个shared namespace。

Multi-path IO和namespace 共享需要NVM 子系统有两个以上的控制器。

两个主机同时访问一个shared namespace需要主机间的协调工作。

SPDK NVMe-oF target 的multi-path功能提供的是namespace的sharing功能。比如,多个客户端通过交换机能够同时发现,连接和操作SPDK NVMe-oFsubsystem下的namespace。这些namespace是可共享的。如图所示

图 1 SPDK NVMe-oF target namespace共享示例

NVMe-oF host1和host2能够同时通过交换机发现和连接到监听地址为192.168.12.11的SPDK NVMe-oF target subsystem1。两个host端可以同时对subsystem1下的namespace进行操作。

如果namespace不能共享,那么同时只能有一个NVMe-oF host连接到SPDK NVMe-oF target。

具体查看方法:

1. 运行SPDK NVMe-oF target 在目标机器端,子系统配置如下:

[Subsystem1]NQN nqn.2018-07.io.spdk:cnode1Listen RDMA 192.168.12.11:4420AllowAnyHost YesHost nqn.2016-06.io.spdk:initSN SPDK00000000000001MaxNamespaces 20Namespace Nvme0n1

2. 在客户端机器运行nvme命令发现和连接SPDK NVMe-oF target, 命令如下:

nvme discover -t rdma -a 192.168.12.11 -s 4420
nvme connect -t rdma -n "nqn.2016-06.io.spdk:cnode1" -a 192.168.12.11 -s 4420

3. 运行nvme id-ns命令, 参数是完整的nvme设备名, 比如/dev/nvme0n1:

nvme id-ns /dev/nvme0n1

在结果中, 我们就能看到如下内容:

nmic    : 0x1

nmic是Namespace Multi-Path I/O and Namespace sharing Capabilities的缩写。该值为1, 就表明这个namespace处于共享状态。

使用场景

在实际使用环境中,可以让SPDK NVMe-oF target子系统同时监听两个IP地址。客户端机器可以通过两个IP地址同时连接SPDK NVMe-oF target子系统。这样如果一个IP连接出现问题,比如网卡出现故障, 可以使用另外一个IP连接访问SPDK NVMe-oF target子系统。如下图所示:

图 2 使用多网络端口访问同一个subsystem

NVMe-oF host端使用192.168.11.0/24和192.168.12.0/24连接到SPDK NVMe-oF target的同一个subsystem。如果192.168.11.0/24的连接出现问题, 我们可以使用192.168.12.0/24的连接, 反之亦然。

具体操作步骤如下:

1. 运行SPDK NVMe-oF target 在目标机器端, 子系统配置如下:

[Subsystem1]
NQN nqn.2016-06.io.spdk:cnode1
Listen RDMA 192.168.11.11:4420
Listen RDMA 192.168.12.11:4420
AllowAnyHost Yes
Host nqn.2016-06.io.spdk:init
SN SPDK00000000000001
MaxNamespaces 20
Namespace Nvme0n1
Namespace Nvme1n1
Namespace Nvme2n1

2. 在客户机,首先查看一下系统的Linux 内核版本及配置。

从Linux 4.15开始,nvme驱动支持multipath功能。 但是需要在编译内核的时候,将NVME_MULTIPATH功能打开。接下来的步骤都是基于4.15以上的带有NVME_MULTIPATH功能的Linux内核。

运行如下命令发现SPDK NVMe-oF target子系统。

nvme discover -t rdma -a 192.168.11.11 -s 4420
nvme discover -t rdma -a 192.168.12.11 -s 4420

两个命令有相同的输出:

Discovery Log Number of Records 2, Generation counter 5
=====Discovery Log Entry 0======
trtype:  rdma
adrfam:  ipv4
subtype: nvme subsystem
treq:    not specified
portid:  0
trsvcid: 4420
subnqn:  nqn.2016-06.io.spdk:cnode1
traddr:  192.168.12.11
rdma_prtype: not specified
rdma_qptype: connected
rdma_cms:    rdma-cm
rdma_pkey: 0x0000
=====Discovery Log Entry 1======
trtype:  rdma
adrfam:  ipv4
subtype: nvme subsystem
treq:    not specified
portid:  1
trsvcid: 4420
subnqn:  nqn.2016-06.io.spdk:cnode1
traddr:  192.168.11.11
rdma_prtype: not specified
rdma_qptype: connected
rdma_cms:    rdma-cm
rdma_pkey: 0x0000

3. 然后使用如下命令连接到子系统。

nvme connect -n nqn.2016-06.io.spdk:cnode1 -t rdma -a 192.168.11.11
nvme connect -n nqn.2016-06.io.spdk:cnode1 -t rdma -a 192.168.12.11

4. 运行”nvme list”命令可以得到如下结果。

Node             SN                   Model                                    Namespace Usage                      Format           FW Rev
---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme0n1     SPDK00000000000001   SPDK bdev Controller                     1           2.00  TB /   2.00  TB    512   B +  0 B   18.10
/dev/nvme0n2     SPDK00000000000001   SPDK bdev Controller                     2           1.60  TB /   1.60  TB    512   B +  0 B   18.10
/dev/nvme0n3     SPDK00000000000001   SPDK bdev Controller                     3         800.17  GB / 800.17  GB    512   B +  0 B   18.10

这样我们就可以在两条路径上对磁盘进行操作了。如果没有使用Linux内核的nvme multipath功能,运行”nvme list”命令会得到6个node, 因为每条路径3个node,总共2条路径。我们同样也能采用传统的multipath服务,来实现host端的multipath功能。本文不讨论如何使用传统的multipath服务。

http://www.lryc.cn/news/236834.html

相关文章:

  • ADAudit Plus:助力企业安全的权威选择
  • sqli-labs关卡18(基于http头部报错盲注)通关思路
  • uni-app顶部导航栏背景色如何设置,微信小程序返回键设置
  • 基于多种设计模式重构代码(工厂、模板、策略)
  • boomYouth
  • 关于这个“这是B站目前讲的最好的【Transformer实战】教程!“视频的目前可以运行的源代码GPU版本
  • STM32定时器输入捕获测量高电平时间
  • 开源WIFI继电器之硬件电路
  • 远程执行ssh脚本
  • excel导入 Easy Excel
  • html实现图片裁剪处理(附源码)
  • 前端语言报错
  • 详细讲解什么是观察者模式
  • 镭速,克服UDP传输缺点的百倍提速传输软件工具
  • Semi-Supervised Multi-Modal Learning with Balanced Spectral Decomposition
  • 3296:【例50.2】 计算书费《信息学奥赛一本通编程启蒙(C++版)》
  • 统一身份认证平台之SSO建设
  • 【开题报告】基于SpringBoot的膳食营养健康网站的设计与实现
  • 超五类网线和六类网线的相同点和区别
  • Linux--初识和基本的指令(1)
  • 万宾科技智能井盖传感器,提升市政井盖健康
  • transformer学习资料
  • 一起学docker系列之四docker的常用命令--系统操作docker命令及镜像命令
  • MySQL 的执行原理(三)
  • 一道好题——分治
  • 庖丁解牛:NIO核心概念与机制详解 02 _ 缓冲区的细节实现
  • Python itertools模块中的combinations() 函数用法
  • 在线预览excel,luckysheet在vue项目中的使用
  • 【python】OpenCV—Image Pyramid(8)
  • vue3父组件提交校验多个子组件