分类: LINUX
2008-04-28 22:24:52
调整网络设置
在 Oracle 9.2.0 .1 以及更高的版本中, Oracle 在 Linux 上使用 UDP 作为默认进行过程间通信 (IPC) ,如在 RAC 集群中的实例间进行 高速缓存合并 缓冲区传输。
Oracle 强烈建议将默认的和最大的发送缓冲区大小( SO_SNDBUF 套接字选项)调整为 256KB ,并将默认的和最大的接收缓冲区大小( SO_RCVBUF 套接字选项)调整为 256KB 。
接收缓冲区由 TCP 和 UDP 用于保留所接收的数据,直到应用程序读出这些数据为止。接收缓冲区不能溢出,因为不允许对等端发送超过缓冲区大小窗口的数据。这意味着如果数据包不适合于套接字接收缓冲区,它们将会被废弃。这种情况可能导致发送方发送量远远超过接收方的接收能力。
注意: 可以不必重新启动而在 /proc 文件系统中更改默认的和最大的窗口大小:
su - root
# Default setting in bytes of the socket receive buffer
sysctl -w net.core.rmem_default=262144
# Default setting in bytes of the socket send buffer
sysctl -w net.core.wmem_default=262144
# Maximum socket receive buffer size which may be set by using
# the SO_RCVBUF socket option
sysctl -w net.core.rmem_max=262144
# Maximum socket send buffer size which may be set by using
# the SO_SNDBUF socket option
sysctl -w net.core.wmem_max=262144
您应该通过将以下各行添加到 RAC 集群中每个节点的 /etc/sysctl.conf 文件中,使以上的更改永久有效:
net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=262144
net.core.wmem_max=262144
在 Linux 和 FireWire 上创建自己的 RAC 集群(续)
获取并安装合适的 Linux 内核
概述
接下来的步骤是获取并安装新的 Linux 内核,该内核利用多次登录,支持使用 IEEE1394 设备。在本文先前的版本中,包含有关于下载 Linux 内核的一个补丁版本并对其进行编译的步骤。由于 Oracle 的 Linux 项目开发组 的工作,已经不再需要这些步骤了。他们提供了一个 Red Hat Enterprise Linux 3.0 的预编译内核(它也可以与 Fedora 协同工作),只需下载并安装即可。本部分包含了下载和安装该内核的说明。不过,在开始详细说明如何执行这些操作之前,让我们先用一些时间来讨论在新内核中需要进行的更改。
尽管已经有了针对 Linux 的 FireWire 驱动程序,但它们常常不支持 共享 存储器。通常,当您登录到操作系统时,操作系统将驱动程序与该机器上具体的一个驱动器相连。这种实施方法根本不能用于我们的 RAC 配置。共享存储器(我们的 FireWire 硬盘驱动器)需要被多个节点所访问。我们需要使 FireWire 驱动程序能够提供对驱动器的非独占访问,以便多个服务器 — 即组成集群的节点 — 能够访问同一个存储器。通过在源代码中删除位掩码 ( 该掩码用于在登录期间识别机器 ) ,可以完成这项任务。这样可以对 FireWire 硬盘驱动器进行非独占的访问。集群中的所有其他节点在其登录会话期间,使用相同的经过修改的驱动程序登录到同一个驱动器,因此它们也具有对于该驱动器的非独占访问权。
可能我过早地提到了这个问题,但我希望在深入说明新的 Linux 内核安装细节之前先讨论几个主题。当我们安装新的 Linux 内核(支持对 FireWire 驱动器的多次登录)时,系统将会检测 FireWire 相连的驱动器并将其识别为 SCSI 设备。您将能够使用标准的操作系统工具对磁盘进行分区、创建文件系统等。对于 Oracle9 i RAC ,您必须为所有文件建立分区,并将原始设备绑定到这些分区。本文将利用逻辑卷管理器 (LVM) 在 FireWire 共享驱动器上建立所有所需的分区(通常称为 逻辑分区 )。
我们的实施方法描述了一个双节点集群(每个节点具有一个单独的处理器),每个服务器都运行 Red Hat Linux Fedora Core 1 。切记,在 两个 Linux 节点上都需要安装打过补丁的 Linux 内核。 Red Hat Linux Fedora Core 1 包含内核 linux- 2.4.22 -1.2115.nptl ;我们需要从以下 URL 处下载 Oracle 提供的 2.4.21-9.0.1 Linux 内核: 。
在集群的两个节点上执行以下过程:
• 下载以下的文件之一:
kernel- 2.4.21 -9.0.1.ELorafw1.i686.rpm — 用于单处理器
— 或者 —
kernel-smp- 2.4.21 -9.0.1.ELorafw1.i686.rpm — 用于多处理器
• 备份您的 GRUB 配置文件:
在大多数情况下,您要将 GRUB 用于引导加载器。在实际安装新内核之前,请确保备份您的 /etc/grub.conf 文件的一个拷贝:
# cp /etc/grub.conf /etc/grub.conf.original
• 以用户 root 安装新内核:
# rpm -ivh --force kernel- 2.4.21 -9.0.1.ELorafw1.i686.rpm — 用于单处理器
— 或者 —
# rpm -ivh --force kernel-smp- 2.4.21 -9.0.1.ELorafw1.i686.rpm — 用于多处理器
注意: 使用 RPM 来安装新内核还会利用合适的片段来更新您的 grub 或 lilo 配置。除非您希望保留旧的内核镜像,否则不需要向您的引导加载器配置中添加任何新的片段。
以下是我的 /etc/grub.conf 文件在内核安装之前和之后的清单。您可以看到,在我的安装中,我在 2.4.21 -9.0.1.ELorafw1 内核中加入了另一个片段。如果您愿意,可以更改新文件中的( default )项,这样新内核将成为启动的默认内核。在默认情况下,安装程序设置 default=1 ,继续将旧内核作为默认内核。
Fedora Core 1 的原始 /etc/grub.conf 文件
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:You have a /boot partition.This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/hda3
# initrd /initrd-version.img
#boot=/dev/hda
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Fedora Core ( 2.4.22 -1.2115.nptl)
root (hd0,0)
kernel /vmlinuz- 2.4.22 -1.2115.nptl ro root=LABEL=/ rhgb
initrd /initrd- 2.4.22 -1.2115.nptl.img
在安装内核后, Fedora Core 1 的新配置的 /etc/grub.conf 文件
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:You have a /boot partition.This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/hda3
# initrd /initrd-version.img
#boot=/dev/hda
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Fedora Core ( 2.4.21 -9.0.1.ELorafw1)
root (hd0,0)
kernel /vmlinuz- 2.4.21 -9.0.1.ELorafw1 ro root=LABEL=/ rhgb
initrd /initrd- 2.4.21 -9.0.1.ELorafw1.img
title Fedora Core ( 2.4.22 -1.2115.nptl)
root (hd0,0)
kernel /vmlinuz- 2.4.22 -1.2115.nptl ro root=LABEL=/ rhgb
initrd /initrd- 2.4.22 -1.2115.nptl.img
• 添加模块选项:
将以下各行添加到 /etc/modules.conf 中:
options sbp2 sbp2_exclusive_login=0
post-install sbp2 insmod sd_mod
post-remove sbp2 rmmod sd_mod
将串行总线模块 ( sbp2 ) 的参数 sbp2_exclusive_login 设置为零是非常重要的,以便允许多个主机并发地登录和访问 FireWire 磁盘。第二行确保 SCSI 磁盘驱动程序模块 ( sd_mod ) 也会被加载,因为 ( sbp2 ) 需要 SCSI 层。如果 ( sd_mod ) 加载,则会自动加载核心的 SCSI 支持模块 ( scsi_mod ) — 不必为它创建单独的项。
• 重新启动机器
重新启动您的机器,进入新的内核。请确保 firewire (ieee1394) pci 卡已插入到机器中!
• 加载 firewire 堆栈
在大多数情况下,在 /etc/rc.sysinit 文件中已经对 FireWire 堆栈加载进行了配置。该文件中所包含的用于加载 FireWire 堆栈的命令是:
# modprobe ohci1394
# modprobe sbp2
在 Red Hat 的旧版本中,情况有所不同,必须手动运行这些命令或者将其包含在启动文件中。在 Fedora Core 1 和更高版本中,这些命令已经包含在 /etc/rc.sysinit 文件中,并在每次启动时运行。
• 重新扫描 SCSI 总线
在内核的旧版本中,我需要运行 rescan-scsi-bus.sh 脚本来检测 FireWire 驱动器。此脚本的目的是通过使用以下命令为节点创建 SCSI 项:
echo "scsi add-single-device 0 0 0 0" > /proc/scsi/scsi
使用 Fedora Core 1 时,应该可以自动检测到磁盘。
• 检查 SCSI 设备
重新启动机器后,内核应该自动将磁盘检测为 SCSI 设备 ( /dev/sdXX ) 。本部分提供了几个命令,这些命令应该在集群的两个节点上运行,以确保成功地检测到 FireWire 驱动器。
在这个配置中,我同时在两个节点上执行以上的过程。在过程完成后,我关闭两台机器,首先启动 linux1 ,然后启动 linux2 。以下的命令和结果来自于我的 linux2 机器。同样,请确认您在两个节点上都运行了以下的命令,以确保两台机器都能登录到共享驱动器。