Jumbo Frames and RAC tips
概述
默认情况下,以太网的可变帧大小最大为 1,500 字节。最大传输单元 (MTU) 定义此上限并默认为 1,500 字节限制。如果通过网络发送数据,数据将被分成不大于 MTU 帧大小的片段。马上,我们可以看到 Oracle RAC 集群互连的 MTU 限制问题。许多 Oracle 数据库都配置了 8KB 的数据库块大小。如果出于缓存融合的目的需要通过专用网络传输一个块,则 8KB 块将被分成六个帧。即使块大小为 2KB,块也会被分成两个帧。到达目的地时,这些部件需要重新组装起来。去把事情弄得更糟, db_block_size参数由 db_file_multiblock_read_count参数初始化 。 一次采用 128 个块的 8KB 块大小导致需要传输 1 兆字节的数据。
巨型帧允许最大 9,000 字节的 MTU 值。遗憾的是,并非所有平台都允许使用巨型帧。不仅操作系统需要支持Jumbo Frames,服务器中的网卡和私有网络后面的网络交换机也需要支持Jumbo Frames。当今的许多 NIC 和交换机都支持巨型帧,但巨型帧不是 IEEE 标准,因此,可能存在不同的实现,但可能无法很好地协同工作。并非所有配置都支持更大的 MTU 大小。配置网络片段时,请务必记住路由中任何组件的最小 MTU 是从 A 点到 B 点的最大 MTU。您可以将网卡配置为支持 9000 字节,但如果交换机配置为MTU 为 1,500 字节,则不会使用 Jumbo Frames。Infiniband 支持最大 65,000 字节的巨型帧。
解决方案
提供有关如何在网络交换机中启用巨型帧的指导超出了本书的范围。您应该与他们的网络管理员交谈,后者可能需要查阅交换机供应商的文档以了解更多详细信息。在 OS 网络接口端,很容易配置更大的帧大小。以下示例来自 Oracle Linux 6。首先,我们需要确定哪个设备用于 Cluster Interconnect。
[root@host01 ~]$ oifcfg getif
eth0 192.168.56.0 全球 公共
eth1 192.168.10.0 全局 cluster_interconnect
eth1设备支持私有网络。 现在我们配置更大的 MTU 大小。
[root@host01 ~]# ifconfig eth1 mtu 9000
[root@host01 ~]# vi /etc/sysconfig/network-scripts/ ifcfg-eth1
在 ifcfg-eth1文件中,添加了一行内容为 ?MTU=9000? 这样设置在服务器重新启动时仍然存在。
验证接口以确保使用更大的 MTU。
[root@host01 ~]# ifconfig ?a
eth0 链路封装:以太网 HWaddr 08:00:27:98:EA:FE
inet地址:192.168.56.71 广播:192.168.56.255 掩码:255.255.255.0
inet6 地址:fe80::a00:27ff:fe98:eafe/64 范围:链接
向上广播运行多播MTU:1500指标:1
RX 数据包:3749 错误:0 丢弃:0 溢出:0 帧:0
TX 数据包:3590 错误:0 丢弃:0 溢出:0 运营商:0
碰撞:0 txqueuelen:1000
RX 字节:743396 (725.9 KiB) TX 字节:623620 (609.0 KiB)
eth1 链路封装:以太网 HWaddr 08:00:27:54:73:8F
inet地址:192.168.10.1 广播:192.168.10.255 掩码:255.255.255.0
inet6 地址:fe80::a00:27ff:fe54:738f/64 范围:链接
向上广播运行多播MTU:9000指标:1
RX 数据包:268585 错误:0 丢弃:0 溢出:0 帧:0
TX packets:106426 errors:0 dropped:0 overruns:0 carrier:0
碰撞:0 txqueuelen:1000
RX 字节:1699904418 (1.5 GiB) TX 字节:77571961 (73.9 MiB)
请注意,设备eth1具有较大的 MTU 设置。 traceroute实用程序可用于验证最大可能的数据包大小。
[root@host01 ~]# traceroute host02-priv ?mtu
traceroute 到 host02-priv (192.168.10.2),最多 30 跳,9000 字节数据包
1 host02-priv.localdomain (192.168.10.2) 0.154 毫秒 F=9000 0.231 毫秒 0.183 毫秒
接下来,沿路由发送一个 9,000 字节的数据包。?F 选项确保数据包不会被分成更小的帧。
[root@host01 ~]# traceroute -F host02-priv 9000
traceroute 到 host02-priv (192.168.10.2),最多 30 跳,9000 字节数据包
1 host02-priv.localdomain (192.168.10.2) 0.495 毫秒 0.261 毫秒 0.141 毫秒
该路由成功运行。
现在一个大一个字节的数据包沿着路由发送。
[root@host01 ~]# traceroute -F host02-priv 9001
指定的 packetlen 9001 太大
traceroute 实用程序的错误显示 9,001 字节的数据包太大。这些步骤验证巨型帧是否正常工作。让我们验证更改是否提高了集群互连上的可用带宽。为此,使用了 iperf实用程序。iperf实用程序可以使用 ?l 参数强制指定数据包长度。公共接口没有为巨型帧配置,并且没有应用程序连接到节点,因此公共网络可以用作基线。
[root@host02 ~]# iperf -c host01 -l 9000
---------------------------------------------- ----------
客户端连接到 host01,TCP 端口 5001
TCP 窗口大小:22.9 KB(默认)
---------------------------------------------- ----------
[ 3]本地192.168.56.72端口18222与192.168.56.71端口5001相连
[ ID] 间隔 传输 带宽
[ 3] 0.0-10.0 秒923 MBytes 774 Mbits/秒
对启用巨型帧的专用网络重复相同的测试。
[root@host02 ~]# iperf -c host01-priv -l 9000
---------------------------------------------- ----------
客户端连接到 host01-priv,TCP 端口 5001
TCP 窗口大小:96.1 KB(默认)
---------------------------------------------- ----------
[ 3]本地192.168.10.2端口40817与192.168.10.1端口5001相连
[ ID] 间隔 传输 带宽
[ 3] 0.0-10.0 秒1.28 GBytes 1.10 Gbits/秒
在这里我们看到带宽从 774 Mbs/秒增加到 1.10 Gbs/秒,增加了 42%!对于同样的 10 秒间隔,传输的字节数从 923 兆字节增加到 1.28 GB,增加了 65%!
如果 Oracle RAC 系统为集群互连使用以太网(Gig-E 或 10Gig-E),则建议为专用网络利用巨型帧。为公共网络接口使用巨型帧的情况不太常见。巨型帧要求端到端的所有网络组件都支持更大的 MTU 大小。在某些情况下,诊断巨型帧在系统中不起作用的问题可能很棘手,但即便如此,付出的努力也是值得的
微信赞赏
支付宝赞赏