最佳实践 Block Storage for Classic
请遵循我们的最佳实践,以最大限度地提高存储性能,避免应用程序停机。
最佳实践 1-清除路径
要实现最大 IOPS,需要落实足够的网络资源。
-
在专用 VLAN 上运行存储流量。 通过软件防火墙运行存储流量会延长等待时间,并对存储器性能产生负面影响。 最好是在绕过防火墙的 VLAN 上运行存储流量。 有关更多信息,请参阅 将存储流量路由到其自己的 VLAN 接口。
-
尽可能 避免将存储流量路由到网关设备。 将存储流量路由到网关设备时,可能会增加存储流量的等待时间,或者如果网关设备中的防火墙配置错误,可能会导致存储流量中断。 当需要在单个 (非集群) 网关设备上进行诸如重新启动之类的维护时,尤其会发生存储器中断。 如果存储流量必须通过网关设备进行路由,请确保网关设备至少具有10 Gbps的接口,否则网关设备可能会成为网络瓶颈。
-
使用更快的 NIC。 吞吐量限制是在 LUN 级别设置的,更快的接口不会增加该限制。 但是,通过速度较慢的以太网连接,您的带宽可能会成为实现最佳性能级别的潜在障碍。
-
选择更高的带宽。 以太网连接速度必须快于卷的预期最大吞吐量。一般情况下,不要指望以太网连接饱和到超过可用带宽的 70%。
例如,如果您有 6,000 IOPS 并且使用的是 16 KB 块大小,那么卷可以处理约 94 MBps 的吞吐量。然而,当您的服务器尝试使用最大可用吞吐量时,如果您的卷的以太网连接速度为1 Gbps,就会成为瓶颈。 这是因为1-Gbps以太网连接的理论极限(每秒125 MB)的70%仅允许每秒88 MB。
最佳实践 2-设置多条路径以实现冗余
Block Storage for Classic 基于经过验证的同类最佳企业级硬件和软件,可提供高可用性和正常运行时间。 数据以冗余方式存储在 HA 配对节点上的多个物理磁盘上。 每个存储节点都有多条到其自己的固态驱动器及其合作伙伴节点的 SSD 的路径。 此配置可防止路径故障和控制器故障,因为节点仍可访问其合作伙伴的磁盘以实现持续生产力。 事实上,系统可以同时丢失集群中的多个磁盘,而不会降低客户性能或数据丢失的不利风险。 冗余网络端口和路径可防止跨云连接的网络故障。
-
请勿通过 802.3ad LACP 端口通道运行 iSCSI 流量。 链路聚集控制协议 (LACP) 不是具有 iSCSI的建议配置。
-
使用多路径输入/输出 (MPIO) 框架来实现 I/O 均衡和冗余。 MPIO 是一个框架,用于为与存储设备的连接配置负载均衡和故障转移过程。 多路径解决方案使用冗余物理路径组件 (例如适配器,电缆和网络交换机) 在服务器和存储设备之间创建逻辑路径。 每个 Storage Node 都有多条到 SSD 驱动器的路径。 主机需要一种方法来在路径之间传播 I/O 负载,并处理从一条路径到另一条路径的内部故障转移。 在这种情况下,MPIO 将发挥作用,服务器将看到没有 MPIO 的同一磁盘的多个实例。
通过 MPIO 配置,具有多个 NIC 的服务器可以跨所有可用接口将 I/O 传输和接收到相应的支持 MPIO 的存储设备。 这种配置提供了冗余,即使一个或多个网络组件发生故障导致路径中断,也能确保存储流量保持稳定。 多路径逻辑将备用路径用于 I/O,以便应用程序仍可访问其数据。 如果服务器具有两个 1-Gb NIC,而存储服务器具有两个 1-Gb NIC,那么理论上最大吞吐量约为 200 MB/s。
虽然可以只使用一个路径连接 Block Storage for Classic,但重要的是在两个路径上建立连接,以确保服务不会中断。 如果未正确配置 MPIO,那么当发生网络中断或 IBM Cloud® 团队执行维护时,存储设备可能断开连接并显示为脱机。
-
必要时添加 iSCSI 多会话。 每个目标有多个会话 (MS/T) 是 Oracle记录的存储性能调整策略。 通过使用MS/T并创建多个TCP连接,您可以更好地利用网络堆栈。 您可以通过使用多个发送和接收线程来提高性能。
通过 iscsiadm CLI 添加持久 iscsi 多会话。
-
列出现有会话。
iscsiadm -m session
-
使用以下命令修改会话数。 当重新引导主机时,此配置更改是持久的。
iscsiadm -m node -T <IQN> -p <IP> --op update -n node.session.nr_sessions -v <TOTAL_SESSION>
以下示例显示将另外三个会话 (总共四个) 添加到目标门户网站 161.26.115.77:3260。
iscsiadm -m node -T iqn.1992-08.com.netapp:stfdal1306 -p 161.26.115.77:3260 --op update -n node.session.nr_sessions -v 4
-
登录门户网站以建立额外的会话。
iscsiadm -m node -T iqn.1992-08.com.netapp:stfdal1306 -p 161.26.115.77:3260 -l
-
列出会话以查看针对单个门户网站 IP 添加的会话。
iscsiadm -m session
-
使用会话标识代替以下命令中的 X,从 iSCSI 会话注销。
iscsiadm -m session -r X -u
-
最佳实践 3-优化主机和应用程序
-
使用最能满足您需求的 I/O 调度程序。 I/O 调度程序有助于优化磁盘访问请求。 传统上,它们通过合并 I/O 请求来实现优化。 通过在磁盘的类似部分对请求进行分组,磁带机不需要经常“查找”,从而缩短磁盘操作的总体响应时间。 在现代 Linux 实现上,提供了多个 I/O 调度程序选项。 每个调度程序都有自己独特的方法来调度磁盘访问请求。
-
截止期限 是 Red Hat 7.9上的缺省 I/O 调度程序,通常不需要将其更改为其他 I/O 调度程序。 这是一个面向等待时间的调度程序,它通过创建单独的读队列和单独的写队列来工作。 每个 I/O 请求都有一个与之关联的时间戳记,供内核在到期时间内使用。 虽然此调度程序还尝试根据最有效的排序为队列提供服务,但到期时间充当每个 I/O 请求的“截止期限”。 当 I/O 请求达到其截止期限时,会将其推送到最高优先级。
-
无操作 (NOOP) 是传递到它的 I/O 的基本调度程序。 此调度程序将所有 I/O 请求放入 FIFO (先进先出) 队列中。 它是一个有用的工具,用于检查其他调度程序的复杂 I/O 调度决策是否导致 I/O 性能回归。 建议使用此调度程序来设置本身执行 I/O 调度的设备,例如智能存储器或多路径环境中的设备。 如果在主机上选择更复杂的调度程序,那么主机的调度程序和存储设备的调度程序可以相互竞争并降低性能。 存储设备通常可以确定如何调度 I/O 的最佳方式。 有关如何检查和配置 I/O 调度程序的更多信息,请参阅 Red Hat的 How to use the NOOP or None IO Schedulers。
-
完全公平排队 (CFQ) 使用电梯和请求合并,这比 NOOP 或截止期限调度程序复杂一些。 它是许多 Linux 发行版的标准调度程序。 它在分配时间片以将磁盘用于每个队列之前,会将操作发出的同时请求分组到一系列每个进程池中。
如果您的工作负载由交互式应用程序主导,那么用户可能会抱怨具有许多 I/O 操作的数据库性能不振。 在此类环境中,与写操作相比,读操作发生的频率要高得多,而应用程序更有可能等待读取数据。 您可以检查默认的IO调度程序设置,并尝试不同的调度程序,以优化您的特定工作负载。
-
-
调整 I/O 队列深度。 将
/etc/iscsi/iscsid.conf node.session.queue_depth
从缺省值 32 更改为 64。 大多数主机总线适配器 (HBA) 的缺省队列深度约为 32,这通常足以生成高达目标最大 IOPS。 如果只有一个路径到达卷,那么这就是IOPS的最大值。 然而,相同容量但包含2个或更多会话的卷,每秒能够向目标卷传输更多的I/O存储吞吐量。 增加 I/O 深度的反面是会增加延迟。 要消除等待时间,请启用巨型帧。 有关主机队列深度建议的更多信息,请参阅 调整主机队列设置。 -
启用巨型帧,并将其配置为从源设备 > 交换机 > 路由器 > 交换机 > 目标设备的整个网络路径上相同。 如果整个链设置不相同,那么缺省为沿链的最低设置。IBM Cloud® 当前已将网络设备设置为 9,000。 为了获得最佳性能,所有客户设备都需要设置为相同的9000值。
在主机上将 MTU 设置为 9000 具有以下优点:
- 可以在更少的帧中传输数据。
- 可以更快地传输数据,因为更少的包需要更少的字节的格式信息存储在包头中。
- 通过减少用于包处理的 CPU 周期数和指令数来增加吞吐量。
- 巨型帧提供了较少的机会,使包无法按顺序到达或丢失,从而减少了重新传输。 减少重新传输意味着在 TCP 恢复中花费的时间更少。 结果是吞吐量更高。
-
遵循特定于 VMware 的最佳实践进行团队合作。 如果计划使用团队合作来提高对存储阵列的网络访问可用性,那么必须对共享虚拟 IP 地址的两个端口关闭交换机上的端口安全性。 此端口安全设置的目的是防止 IP 地址欺骗。 因此,许多网络管理员都会启用此设置。 如果不进行更改,那么端口安全性设置将阻止虚拟 IP 从一个交换机端口故障转移到另一个交换机端口,并且团队无法从一条路径故障转移到另一条路径。 对于大多数 LAN 交换机,将在端口级别上启用端口安全性,因此可以为每个端口设置开启或关闭。