8.10. 在 NFS 中启用 pNFS SCSI 布局
您可以将 NFS 服务器和客户端配置为使用 pNFS SCSI 布局访问数据。
先决条件
- 客户端和服务器必须能够向同一个块设备发送 SCSI 命令。就是说块设备必须位于共享的 SCSI 总线中。
- 块设备必须包含 XFS 文件系统。
- SCSI 设备必须支持 SCSI Persistent Reservations,如 SCSI-3 Ppriary Commands 规格中所述。
8.10.1. pNFS SCSI 布局
SCSI 布局基于 pNFS 块布局的工作。布局在 SCSI 设备中定义。它包含一系列固定大小的块来作为逻辑单元(LU),这些逻辑单元必须能够支持 SCSI 持久保留。LU 设备识别通过其 SCSI 设备识别。
在涉及长时间的单客户端访问文件的用例中,pNFS SCSI 表现良好。例如:邮件服务器或者虚拟机。
客户端和服务器之间的操作
当 NFS 客户端从文件读取或写入文件时,客户端会执行
LAYOUTGET
操作。服务器会使用文件在 SCSI 设备中的位置进行响应。客户端可能需要执行 GETDEVICEINFO
的额外操作,以确定要使用哪个 SCSI 设备。如果这些操作正常工作,客户端可以直接向 SCSI 设备发出 I/O 请求,而不是向服务器发送 READ
和 WRITE
操作。
客户端之间的错误或争用可能会导致服务器重新调用布局,或者不将它们发送给客户端。在这些情况下,客户端回退到向服务器发出
READ
和 WRITE
操作,而不是直接向 SCSI 设备发送 I/O 请求。
要监控操作,请参阅 第 8.10.6 节 “监控 pNFS SCSI 布局功能”。
设备保留
pNFS SCSI 通过分配保留来处理保护。在服务器向客户端发送布局之前,它会保留 SCSI 设备,以确保只有注册的客户端才可以访问该设备。如果客户端可以向那个 SCSI 设备发送命令,但没有在该设备上注册,那么该设备上的客户端的许多操作都会失败。例如,如果服务器没有向客户端提供该设备的布局,客户端上的 blkid 命令将无法显示 XFS 文件系统的 UUID。
服务器不会删除其自身的持久性保留。这样可在重启客户端和服务器后保护该设备中的文件系统中的数据。为了重新使用 SCSI 设备,您可能需要手动删除 NFS 服务器中的持久性保留。
8.10.2. 检查与 pNFS 兼容的 SCSI 设备
这个过程检查 SCSI 设备是否支持 pNFS SCSI 布局。
先决条件
- 安装 sg3_utils 软件包:
# yum install sg3_utils
过程 8.4. 检查与 pNFS 兼容的 SCSI 设备
- 在服务器和客户端中检查正确的 SCSI 设备支持:
# sg_persist --in --report-capabilities --verbose path-to-scsi-device
确保设置了 Persist Through Power Los Active (PTPL_A
)位。例 8.8. 支持 pNFS SCSI 的 SCSI 设备
以下是支持 pNFS SCSI 的 SCSI 设备的sg_persist
输出示例。PTPL_A
位报告1
。inquiry cdb: 12 00 00 00 24 00 Persistent Reservation In cmd: 5e 02 00 00 00 00 00 20 00 00 LIO-ORG block11 4.0 Peripheral device type: disk Report capabilities response: Compatible Reservation Handling(CRH): 1 Specify Initiator Ports Capable(SIP_C): 1 All Target Ports Capable(ATP_C): 1 Persist Through Power Loss Capable(PTPL_C): 1 Type Mask Valid(TMV): 1 Allow Commands: 1 Persist Through Power Loss Active(PTPL_A): 1 Support indicated in Type mask: Write Exclusive, all registrants: 1 Exclusive Access, registrants only: 1 Write Exclusive, registrants only: 1 Exclusive Access: 1 Write Exclusive: 1 Exclusive Access, all registrants: 1
其它资源
- sg_persist(8) man page
8.10.3. 在服务器中设置 pNFS SCSI
这个过程将 NFS 服务器配置为导出 pNFS SCSI 布局。
过程 8.5. 在服务器中设置 pNFS SCSI
- 在服务器中挂载在 SCSI 设备中创建的 XFS 文件系统。
- 将 NFS 服务器配置为导出 NFS 版本 4.1 或更高版本。在
/etc/nfs.conf
文件的[nfsd]
部分中设置以下选项:[nfsd] vers4.1=y
- 将 NFS 服务器配置为通过 NFS 导出 XFS 文件系统,使用
pnfs
选项:例 8.9. /etc/exports 中的条目导出 pNFS SCSI
/etc/exports
配置文件中的以下条目将挂载到/exported/directory/
的文件系统导出到allowed.example.com
客户端,来作为 pNFS SCSI 布局:/exported/directory allowed.example.com(pnfs)
其它资源
- 有关配置 NFS 服务器的详情请参考 第 8.6 节 “配置 NFS 服务器”。
8.10.4. 在客户端中设置 pNFS SCSI
这个过程将 NFS 客户端配置为挂载 pNFS SCSI 布局。
先决条件
- NFS 服务器被配置为通过 pNFS SCSI 导出 XFS 文件系统。请参阅 第 8.10.3 节 “在服务器中设置 pNFS SCSI”。
过程 8.6. 在客户端中设置 pNFS SCSI
- 在客户端中使用 NFS 版本 4.1 或更高版本挂载导出的 XFS 文件系统:
# mount -t nfs -o nfsvers=4.1 host:/remote/export /local/directory
不要在没有 NFS 的情况下直接挂载 XFS 文件系统。
其它资源
- 有关挂载 NFS 共享的详情请参考 第 8.2 节 “配置 NFS 客户端”。
8.10.5. 在服务器中释放 pNFS SCSI 保留
此流程释放 NFS 服务器在 SCSI 设备中拥有的持久保留。这可让您在不再需要导出 pNFS SCSI 时重新使用 SCSI 设备。
您必须从服务器中删除保留。它不能从不同的 IT Nexus 中删除。
先决条件
- 安装 sg3_utils 软件包:
# yum install sg3_utils
过程 8.7. 在服务器中释放 pNFS SCSI 保留
- 在服务器上查询现有保留:
# sg_persist --read-reservation path-to-scsi-device
例 8.10. 在 /dev/sda 上查询保留
# sg_persist --read-reservation /dev/sda LIO-ORG block_1 4.0 Peripheral device type: disk PR generation=0x8, Reservation follows: Key=0x100000000000000 scope: LU_SCOPE, type: Exclusive Access, registrants only
- 删除服务器上的现有注册:
# sg_persist --out \ --release \ --param-rk=reservation-key \ --prout-type=6 \ path-to-scsi-device
例 8.11. 删除 /dev/sda 上的保留
# sg_persist --out \ --release \ --param-rk=0x100000000000000 \ --prout-type=6 \ /dev/sda LIO-ORG block_1 4.0 Peripheral device type: disk
其它资源
- sg_persist(8) man page
8.10.6. 监控 pNFS SCSI 布局功能
您可以监控 pNFS 客户端和服务器是否交换正确的 pNFS SCSI 操作,或者它们是否回退到常规的 NFS 操作。
先决条件
- 配置了 pNFS SCSI 客户端和服务器。
8.10.6.1. 从使用 nfsstat 的服务器检查 pNFS SCSI 操作
这个过程使用
nfsstat
工具来监控服务器的 pNFS SCSI 操作。
过程 8.8. 从使用 nfsstat 的服务器检查 pNFS SCSI 操作
- 监控服务器中服务的操作:
# watch --differences \ "nfsstat --server | egrep --after-context=1 read\|write\|layout" Every 2.0s: nfsstat --server | egrep --after-context=1 read\|write\|layout putrootfh read readdir readlink remove rename 2 0% 0 0% 1 0% 0 0% 0 0% 0 0% -- setcltidconf verify write rellockowner bc_ctl bind_conn 0 0% 0 0% 0 0% 0 0% 0 0% 0 0% -- getdevlist layoutcommit layoutget layoutreturn secinfononam sequence 0 0% 29 1% 49 1% 5 0% 0 0% 2435 86%
- 客户端和服务器在以下情况下使用 pNFS SCSI 操作:
layoutget
、layoutreturn
和layoutcommit
计数器递增。这意味着服务器提供布局。- 服务器
读写
8.10.6.2. 使用 mountstats 从客户端检查 pNFS SCSI 操作
这个过程使用
/proc/self/mountstats
文件来监控客户端的 pNFS SCSI 操作。
过程 8.9. 使用 mountstats 从客户端检查 pNFS SCSI 操作
- 列出每个挂载的操作计数器:
# cat /proc/self/mountstats \ | awk /scsi_lun_0/,/^$/ \ | egrep device\|READ\|WRITE\|LAYOUT device 192.168.122.73:/exports/scsi_lun_0 mounted on /mnt/rhel7/scsi_lun_0 with fstype nfs4 statvers=1.1 nfsv4: bm0=0xfdffbfff,bm1=0x40f9be3e,bm2=0x803,acl=0x3,sessions,pnfs=LAYOUT_SCSI READ: 0 0 0 0 0 0 0 0 WRITE: 0 0 0 0 0 0 0 0 READLINK: 0 0 0 0 0 0 0 0 READDIR: 0 0 0 0 0 0 0 0 LAYOUTGET: 49 49 0 11172 9604 2 19448 19454 LAYOUTCOMMIT: 28 28 0 7776 4808 0 24719 24722 LAYOUTRETURN: 0 0 0 0 0 0 0 0 LAYOUTSTATS: 0 0 0 0 0 0 0 0
- 在结果中:
LAYOUT
统计指示客户端和服务器使用 pNFS SCSI 操作的请求。READ
和WRITE
统计指示客户端和服务器回退到 NFS 操作的请求。