NVMe over TCP
NVMe over TCP 为 initiator 和 target 提供网络附加的 NVMe 存储访问,具备可配置的 IP 地址、端口、密码以及基于主机的访问控制。示例演示了如何从 RouterOS 客户端向服务器挂载磁盘,包括 Linux 客户端的设置步骤。
NVMe over TCP
信息
此功能需要 Storage 软件包。 nvme-tcp 允许在 initiator 侧通过网络访问存储,将其作为 NVMe 块设备使用。在 target 侧,该设备可以是 hdd/ssd/nvme,甚至可以是 raid 阵列。
属性
| 属性 | 说明 |
|---|---|
| nvme-tcp-address | NVMe over TCP target 的 IP 地址。(主机设备 IP) |
| nvme-tcp-export | 在主机设备上禁用/启用 NVMe over TCP |
| nvme-tcp-host-name | 此属性指定 NVMe over TCP initiator 的主机名。它可用于识别和认证目的 |
| nvme-tcp-name | 此属性指定 NVMe over TCP target 的名称或用于引用的连接名称(必须与主机 slot 名称相同) |
| nvme-tcp-password s**ensitive | 此属性用于指定认证 NVMe over TCP 连接的密码,确保访问安全。 |
| nvme-tcp-port | 此属性指定 NVMe over TCP target 用于监听来自 initiator 的传入连接的网络端口。NVMe over TCP 流量的默认端口为 4420。 |
| nvme-tcp-server-allow-host-name | 此属性指定 NVMe over TCP 服务器是否允许来自特定主机名的连接,提供了一种基于主机的访问控制机制。 |
| nvme-tcp-server-password sensitive | 此属性指定 NVMe over TCP 服务器的密码,用于认证连接到 target 的 initiator。 |
| nvme-tcp-server-port | 此属性指定 NVMe over TCP 服务器用于接受来自 initiator 的连接的网络端口。 |
示例
挂载磁盘
在本示例中,一台 RouterOS 设备用作存储服务器(Host),另一台 RouterOS 设备需要通过挂载网络存储设备(Client)。
-
在 Host 上使用以下命令:
/disk/set disk1 nvme-tcp-export=yes nvme-tcp-port=4420 -
在 Client 上使用以下命令:
/disk/add type=nvme-tcp nvme-tcp-address=192.168.1.1 nvme-tcp-name=disk1 -
你的 Client 现在将看到一个实际上是使用 NVMe over TCP 通过网络挂载的磁盘。
Linux 客户端
使用以下命令在 Linux Client 上设置 NVMe over TCP。
-
加载内核模块。
modprobe nvme_tcp -
发现现有的 NVMe over TCP 挂载。
nvme discover -t tcp -a 192.168.1.1 -s 4420#OUTPUT: Discovery Log Number of Records 1, Generation counter 2 =====Discovery Log Entry 0====== trtype: tcp adrfam: ipv4 subtype: nvme subsystem treq: not specified, sq flow control disable supported portid: 4420 trsvcid: 4420 subnqn: disk1 traddr: 10.155.166.7 sectype: none -
连接到 NVMe over TCP 挂载。
nvme connect -t tcp -a 192.168.1.1 -s 4420 -n disk1 -
现在块设备应该可用了。
ls /dev/nvme*#OUTPUT: /dev/nvme0 /dev/nvme0n1 /dev/nvme-fabrics -
现在你可以像使用 Linux Client 上任何其它块设备一样使用已挂载的块设备。
如果你想断开已挂载的块设备:
nvme disconnect -d /dev/nvme0
将文件挂载为块设备
在本示例中,一台 RouterOS 设备用作存储服务器(Host),另一台 RouterOS 设备需要通过挂载网络存储设备(Client)。
警告
当你不想把整块磁盘分配给 Client,而只想把磁盘大小的一部分提供给 Client 时,这种设置很有用。挂载文件而非磁盘,其性能会低于使用 NVMe over TCP 挂载磁盘(或分区)。
-
在 Host 上使用以下命令创建一个将用作块设备的文件:
/disk/add type=file file-path=disk1/BIGFILE.img file-size=10G slot=blockdevice1 /disk/set blockdevice1 nvme-tcp-export=yes -
在 Client 上使用以下命令将该文件挂载为块设备:
/disk/nvme-discover 192.168.1.1 /disk/add nvme-tcp-address=192.168.1.1 nvme-tcp-name=blockdevice1 type=nvme-tcp /disk/format blockdevice1 file-system=ext4 -
你的 Client 现在将看到一块名为
blockdevice1的新磁盘,尽管在 Server 上该存储设备实际上是一个文件。
提示
如果你想在 Linux Client 上挂载该块设备,请查看 Linux 客户端 部分。
挂载 RAID 阵列
在本示例中,一台 RouterOS 设备用作存储服务器(Host),另一台 RouterOS 设备需要通过挂载网络存储设备(Client),同时还提供数据冗余。
-
在 Host 上设置一个 RAID,例如:
/disk/add raid-device-count=8 raid-type=6 slot=RAID6_array type=raid /disk/set disk1 raid-master=RAID6_array raid-role=0 /disk/set disk2 raid-master=RAID6_array raid-role=1 /disk/set disk3 raid-master=RAID6_array raid-role=2 /disk/set disk4 raid-master=RAID6_array raid-role=3 /disk/set disk5 raid-master=RAID6_array raid-role=4 /disk/set disk6 raid-master=RAID6_array raid-role=5 /disk/set disk7 raid-master=RAID6_array raid-role=6 /disk/set disk8 raid-master=RAID6_array raid-role=7 /disk/set RAID6_array nvme-tcp-export=yes -
在 Client 上使用以下命令:
/disk/add type=nvme-tcp nvme-tcp-address=192.168.1.1 nvme-tcp-name=RAID6_array -
你的 Client 现在将看到一块磁盘,但它实际上是一个高冗余的 RAID 阵列。
提示
如果你想在 Linux Client 上挂载该块设备,请查看 Linux 客户端 部分。
危险
不要将来自不同 RouterOS 设备的多块磁盘挂载到 Linux Client 上,并将它们组成软件 RAID 配置(例如 mdadm)。虽然这种配置确实提供了一定的冗余,但你可以预期会出现异常延迟问题甚至超时。建议在你的 RouterOS 上创建 RAID 阵列,并将该 RAID 阵列作为块设备导出给你的 Linux Client。