Chinaunix首页 | 论坛 | 博客
  • 博客访问: 101454334
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: LINUX

2008-04-28 22:26:45

 
文章来源数据库在线 作者Jeffrey …

设置信号内核参数

最后,我们来看如何使用一些方法来设置所有的信号参数。在下文中,我想更改(增加)的唯一参数是 SEMOPM 。所有其他的默认设置可以完全满足我们的示例安装。

  • 您可以通过直接更改 /proc 文件系统,不必重新启动机器而更改所有信号设置的默认设置。我使用的方法是将以下命令放入 /etc/rc.local 启动文件中:

# echo "250 32000 100 128" > /proc/sys/kernel/sem

  • 您还可以使用 sysctl 命令来更改所有信号设置的值:

# sysctl -w kernel.sem="250 32000 100 128"

  • 最后,您可以通过将该内核参数插入到 /etc/sysctl.conf 启动文件中,使这种更改永久有效:

# echo "kernel.sem=250 32000 100 128" >> /etc/sysctl.conf

设置文件句柄

在配置我们的 Red Hat Linux 服务器时,确保文件句柄的最大数量足够大是非常关键的。文件句柄设置表示您在 Linux 系统中可以打开的文件数量。

使用以下命令来确定整个系统中文件句柄的最大数量:

# cat /proc/sys/fs/file-max

32768

Oracle 建议将整个系统的文件句柄值至少设置为 65536 。

  • 通过直接更改 /proc 文件系统,您可以不必重新启动机器而改变文件句柄最大数量的默认设置。我使用的方法是将以下命令置于 /etc/rc.local 启动文件中:

# echo "65536" > /proc/sys/fs/file-max

  • 您还可以使用 sysctl 命令来更改 SHMMAX 的值:

# sysctl -w fs.file-max=65536

  • 最后,您可以通过将该内核参数插入到 /etc/sysctl.conf 启动文件中,使这种更改永久有效:

# echo "fs.file-max=65536" >> /etc/sysctl.conf

注意: 您可以使用以下命令来查询文件句柄的当前使用情况:

# cat /proc/sys/fs/file-nr

613 95 32768

file-nr 文件显示了三个参数:

  • 分配的文件句柄总数
  • 当前使用的文件句柄数
  • 可以分配的最大文件句柄数

注意: 如果您需要增加 /proc/sys/fs/file-max 中的值,则要确保正确地设置 ulimit 。对于 2.4.20 ,通常将其设置为 unlimited 。使用 ulimit 命令来验证 ulimit 设置:

# ulimit

unlimited

配置 hangcheck-timer 内核模块

Oracle 9.0.1 和 9.2.0.1 使用一个称为 watchdogd 的用户空间监视后台程序来监视集群的状态情况,并在发生故障时重新启动 RAC 模式。但是,从 Oracle 9.2.0.2 开始,一个称为 hangcheck-timer 的 Linux 模块取代了此后台程序,该模块更好地解决了可用性和可靠性的问题。 hangcheck-timer 被加载到内核中并检查系统是否挂起。它将设置一个定时器,并在特定的时间量之后检查该定时器。有一个用于检查挂起情况的可配置阈值,如果超过该值机器将重新启动。虽然 Oracle Cluster Manager 的操作不需要 hangcheck-timer 模块,但 Oracle 高度建议使用它。

hangcheck-timer.o 模块

hangcheck-timer 模块使用了一个基于内核的定时器,该定时器周期性地检查系统任务调度程序,以捕获延迟,从而确定系统的健康情况。如果系统挂起或暂停,则定时器重启该节点。 hangcheck-timer 模块使用了时间标记计数器 (TSC) CPU 寄存器,这是一个在每次时钟信号时递增的计数器。 TCS 提供了更为精确的时间量度,因为该寄存器是由硬件自动更新的。

有关 hangcheck-timer 项目的详细信息,请单击 此处

安装 hangcheck-timer.o 模块

hangcheck-timer 通常与 Oracle 一同提供,但是,现在从内核版本 2.4.9 -e.12 起,该模块与 Red Hat Linux AS 包含在一起。如果您按照 “ 获取和安装合适的 Linux 内核 ” 中的步骤执行,则已经包含了 hangcheck-timer 。使用以下命令来确认您已经包含了该模块:

# find /lib/modules -name "hangcheck-timer.o"

/lib/modules/ 2.4.21 -9.0.1.ELorafw1/kernel/drivers/char/hangcheck-timer.o

配置和加载 hangcheck-timer 模块

对于 hangcheck-timer 模块有两个关键的参数。

  • hangcheck-tick :此参数定义了检查系统健康情况的间隔时段。其默认值为 60 秒。 Oracle 建议将其设置为 30 秒。
  • hangcheck-margin :此参数定义了 hangcheck-timer 在重启 RAC 节点前所容许的最大挂起延迟。它定义了以秒为单位的错误余量。其默认值为 180 秒。 Oracle 建议将其设置为 180 秒。

这两个参数需要与 Cluster Manager 的 $ORACLE_HOME/oracm/admin/cmcfg.ora 文件中的 MissCount 参数协同使用。

注意: 这两个 hangcheck-timer 模块参数说明在该模块重启系统前 RAC 节点必须挂起多长时间。当以下条件为真时将会重启节点:

系统挂起时间 > (hangcheck_tick + hangcheck_margin)

现在让我们来讨论如何加载该模块。您可以通过使用以下命令,利用正确的参数设置来手动地加载该模块:

# su -

# /sbin/insmod hangcheck-timer hangcheck_tick=30 hangcheck_margin=180

# grep Hangcheck /var/log/messages*

/var/log/messages.1:Apr 30 20:51:47 linux2 kernel:Hangcheck:
starting hangcheck timer 0.8.0 (tick is 30 seconds, margin is 180 seconds).

/var/log/messages.1:Apr 30 20:51:47 linux2 kernel:Hangcheck:Using TSC.

将以上的 “ insmod ” 命令放在您的 /etc/rc.local 文件中!

虽然手动加载模块的方法(如上所示)可以有效工作,但我们需要一种在每次重新启动节点时利用正确参数来加载该模块的方法。我们通过在 /etc/modules.conf 文件中创建项目来完成此任务。将以下的行添加到 /etc/modules.conf 文件中:

# su -

# echo "options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180" >> /etc/modules.conf

现在,为测试模块,可使用 modprobe 命令。您可以运行 modprobe 命令,利用在 /etc/modules.conf 文件中定义的、经过配置的参数来手动加载 hangcheck-timer 模块:

# su -

# modprobe hangcheck-timer

# grep Hangcheck /var/log/messages*

/var/log/messages.1:Apr 30 20:51:47 linux2 kernel:
Hangcheck:starting hangcheck timer 0.8.0 (tick is 30 seconds, margin is 180 seconds).

/var/log/messages.1:Apr 30 20:51:47 linux2 kernel:
Hangcheck:Using TSC.

注意: 您不必在每次重新启动后都运行 modprobe 。 hangcheck-timer 模块将会在需要时由内核加载(自动进行)。

为远程访问配置 RAC 节点

当在一个 RAC 节点上运行 Oracle Installer 时,它将使用 rsh 命令把 Oracle 软件复制到 RAC 集群中的所有其他节点。在运行 Oracle Installer 的节点上的 oracle UNIX 帐号 ( runIntaller ) 必须为您 RAC 集群中的所有其他节点所信任。这意味着您应该能够在此 RAC 节点上不需要口令而根据其他 RAC 节点来运行 r* 命令,如 rsh 、 rcp 和 rlogin 等。 rsh 后台程序使用在用户 (oracle) 的主目录中所找到的 /etc/hosts.equiv 文件和 .rhosts 文件来验证用户。不幸的是,它不支持 SSH 。

首先,让我们确认已经在 RAC 集群中的每个节点上安装了 rsh RPM :

# rpm -q rsh rsh-server

rsh-0.17-19

rsh-server-0.17-19

根据以上情况,我们可以了解到已经安装了 rsh 和 rsh-server 。

注意: 如果没有安装 rsh ,则运行以下命令:

# su -

# rpm -ivh rsh-0.17-5.i386.rpm rsh-server-0.17-5.i386.rpm

要启动 “rsh” 服务,必须将 /etc/xinetd.d/rsh 文件中的 “disable” 属性设置为 “ no ” ,并且必须刷新 xinetd 。通过运行以下命令可以完成此工作:

# su -

# chkconfig rsh on

# chkconfig rlogin on

# service xinetd reload

Reloading configuration:[ OK ]

要使得 “oracle”UNIX 用户帐号在 RAC 节点中获得信任,需要创建 /etc/hosts.equiv 文件:

# su -

# touch /etc/hosts.equiv

# chmod 600 /etc/hosts.equiv

# chown root.root /etc/hosts.equiv

现在将所有 RAC 节点添加到类似于以下示例的 /etc/hosts.equiv 文件中:

# cat /etc/hosts.equiv

+linux1 oracle

+linux2 oracle

+int-linux1 oracle

+int-linux2 oracle

请确保您的 RAC 集群中的所有节点上都存在 /etc/hosts.equiv 文件!

注意: 在以上示例中,第二个字段只允许 oracle 用户帐号在所指定的节点上运行 rsh 命令。由于安全原因, /etc/hosts.equiv 文件应该由 root 所拥有,并应该将权限设置为 600 。实际上,某些系统只有在该文件的所有者为 root 并且权限被设置为 600 时才接受此文件的内容。

注意: 在尝试测试您的 rsh 命令之前,请确保您正在使用正确版本的 rsh 。在默认情况下, Red Hat Linux 将 /usr/kerberos/sbin 放在 $PATH 变量的前面。这会导致执行 rsh 的 Kerberos 版本。

我通常会重命名 rsh 的 Kerberos 版本,以便使用正常的 rsh 命令。使用以下命令:

# su -

# which rsh

/usr/kerberos/bin/rsh

# cd /usr/kerberos/bin

# mv rsh rsh.original

# which rsh

/usr/bin/rsh

您现在应该测试您的连接并根据每个 RAC 来运行 rsh 命令。我使用节点 linux1 来执行安装。

# su - oracle

$ rsh int-linux1 ls -l /etc/hosts.equiv

-rw------- 1 root root 68 May 2 14:45 /etc/hosts.equiv

$ rsh int-linux2 ls -l /etc/hosts.equiv

-rw------- 1 root root 68 May 2 14:45 /etc/hosts.equiv

用于每个 RAC 节点的所有启动命令(用于两个节点)

到现在为止,我们已经详细讨论了在我们的 Oracle9 i RAC 配置中需要在两个节点上进行配置的参数和资源。在本部分中,我们将稍事调整,简要复述这些参数、命令和项目(在本文前面的章节中已出现),当启动机器时需要在每个节点上执行它们。

在本部分中,我提供了到目前为止我们已经讨论过的所有命令、参数和项目,它们需要被包括在 RAC 集群中每个 Linux 节点的所有启动脚本中。以下的每个启动文件中,对于那些为建立成功运行的 RAC 节点而应当在每个文件中包含的项目,都用粗体显示。

文件: /etc/modules.conf —

需要配置的所有内核参数和模块。

alias eth0 tulip

alias usb-controller usb-uhci

alias usb-controller1 ehci-hcd

alias ieee1394-controller ohci1394

alias sound-slot-0 cmpci

options sbp2 sbp2_exclusive_login=0

post-install sbp2 insmod sd_mod

post-remove sbp2 rmmod sd_mod

post-install sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -L >/dev/null 2>&1 || :

pre-remove sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -S >/dev/null 2>&1 || :

alias eth1 8139too

options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180

文件: /etc/sysctl.conf

我们希望为互联而调整默认的和最大的发送缓冲区大小以及默认的和最大的接收缓冲区大小。

# Kernel sysctl configuration file for Red Hat Linux

#

# For binary values, 0 is disabled, 1 is enabled.See sysctl(8) and

# sysctl.conf(5) for more details.

# Controls IP packet forwarding

net.ipv4.ip_forward = 0

# Controls source route verification

net.ipv4.conf.default.rp_filter = 1

# Controls the System Request debugging functionality of the kernel

kernel.sysrq = 0

# Controls whether core dumps will append the PID to the core filename.

# Useful for debugging multi-threaded applications.

kernel.core_uses_pid = 1

# Default setting in bytes of the socket receive buffer

net.core.rmem_default=262144

 

# Default setting in bytes of the socket send buffer

net.core.wmem_default=262144

 

# Maximum socket receive buffer size which may be set by using

# the SO_RCVBUF socket option

net.core.rmem_max=262144

 

# Maximum socket send buffer size which may be set by using

# the SO_SNDBUF socket option

net.core.wmem_max=262144

阅读(281) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~