网站首页 Cn029.Com - 西安网吧在线℡

Cn029.Com - 西安网吧在线℡ 西北地区网吧行业门户站点www.cn029.com,本站为您提供网吧维护,每日更新最新网吧技术,政策法规.为您提供各类网管软件,网吧软件,游戏更新软件,承接西部地区网吧维护,希望与您共同讨论网吧经营管理的经验!

投递文章  投稿指南 RSS订阅 西安网吧在线通告:
搜索: 您的位置西安网吧在线Linux-UxLinux精华 → 文章内容

在 Linux 和 FireWire 上构建您自己的 Oracle RAC 10g 第 2 版集群2

  作者:网络收集   来源:chinaunix.net   更新时间:2008-4-27 5:04:39   【 】  评论:0
11. 为 Oracle 配置 Linux 服务器
在集群中的所有节点上执行下列配置过程!
每次启动计算机时,都需要在集群中的每个节点上执行本节中的一些命令。本节详细介绍了如何设置共享内存、信号和文件句柄限制。
第 14 节
(“用于每个 RAC 节点的所有启动命令”)中包含有关如何将这些命令置于启动脚本 (/etc/sysctl.conf) 中的说明。
概述
本节主要介绍了如何配置两个 Linux 服务器:使每个服务器为 Oracle RAC 10g 安装做好准备。这包括验证足够的交换空间、设置共享内存和信号,以及最后如何设置操作系统的最大文件句柄数。
在本节中,您将注意到可以使用多种方法来配置(设置)这些参数。就本文而言,我将通过把所有命令置于 /etc/sysctl.conf 文件中使所有更改永久有效(通过重新引导)。
对交换空间的考虑因素
  • 安装 Oracle10g 第 2 版至少需要 512MB 内存。(注:安装期间交换容量不足会导致 Oracle Universal Installer“挂起”或“死机”)
  • 要检查您已经分配的内存/交换容量,键入: # cat /proc/meminfo | grep MemTotal
    MemTotal:1034352 kB
  • 如果您的内存少于 512MB(介于 RAM 与 SWAP 之间),您可以通过创建临时交换文件添加临时交换空间。这样,您就不必使用原始设备甚至更彻底地重建系统了。
    以 root 身份创建一个用作额外交换空间的文件,假设大小为 300MB:
    # dd if=/dev/zero of=tempswap bs=1k count=300000
    现在我们应该更改文件的权限:
    # chmod 600 tempswap
    最后我们将该“分区”格式化为交换分区,并将其添加到交换空间:
    # mke2fs tempswap
    # mkswap tempswap
    # swapon tempswap

    设置共享内存
    共享内存通过将通用的结构和数据放在共享内存段中,使得进程可以对它们进行访问。这是现有最快的进程间通信 (IPC) 方式,主要是因为数据在进程之间传递时没有涉及内核操作。不需要在进程间复制数据。
    Oracle 将共享内存用于它的共享全局区 (SGA),这是一个由所有的 Oracle 备份进程及前台进程共享的内存区域。为 SGA 分配足够的容量对于 Oracle 的性能非常重要,这是因为它负责保存数据库缓冲区高速缓存、共享 SQL、访问路径,等等。
    要确定所有共享内存的限制,使用以下命令:
    # ipcs -lm
    ------ Shared Memory Limits --------
    max number of segments = 4096
    max seg size (kbytes) = 32768
    max total shared memory (kbytes) = 8388608
    min seg size (bytes) = 1
    设置 SHMMAX
    SHMMAX 参数定义共享内存段的最大大小(以字节为单位)。Oracle SGA 由共享内存组成,且错误设置 SHMMAX 可能会限制 SGA 的大小。在设置 SHMMAX 时,切记 SGA 的大小应该适合于一个共享内存段。SHMMAX 设置不足可能会导致以下问题:
    ORA-27123:unable to attach to shared memory segment
    您可以通过执行以下命令确定 SHMMAX 的值: # cat /proc/sys/kernel/shmmax
    33554432
    SHMMAX 的默认值为 32MB。通常,这个值对于配置 Oracle SGA 而言太小了。我通常使用以下方法将 SHMMAX 参数设置为 2GB:
  • 可以通过使用以下命令直接更改 /proc 文件系统 (/proc/sys/kernel/shmmax) 来更改 SHMMAX 的默认设置,而不必重新引导计算机: # sysctl -w kernel.shmmax=2147483648
  • 然后,通过将该内核参数插入到 /etc/sysctl.conf 启动文件中,您可以使该更改永久有效: # echo "kernel.shmmax=2147483648" >> /etc/sysctl.conf

    设置 SHMMNI
    我们现在看一下 SHMMNI 参数。这个内核参数用于设置系统范围内共享内存段的最大数量。该参数的默认值是 4096。
    可以通过执行以下命令确定 SHMMNI 的值:
    # cat /proc/sys/kernel/shmmni
    4096
    SHMMNI 的默认设置应足以满足 Oracle RAC 10g 第 2 版安装的需要。
    设置 SHMALL
    最后,我们来看 SHMALL 共享内存内核参数。该参数控制系统一次可以使用的共享内存总量(以页为单位)。简言之,该参数的值始终应至少为:
    ceil(SHMMAX/PAGE_SIZE)
    SHMALL 的默认大小为 2097152,并可以使用以下命令进行查询: # cat /proc/sys/kernel/shmall
    2097152
    SHMALL 的默认设置应足以满足 Oracle RAC 10g 第 2 版安装的需要。
    (注:i386 平台上的 Red Hat Linux 中的页面大小为 4,096 字节。但您可以使用 bigpages,它支持更大内存页面的配置。)
    设置信号
    至此,您已经配置了共享内存设置,接下来将配置信号。对“信号”的最佳描述是,它是用于在共享资源(如共享内存)的进程(或进程中的线程)之间提供同步的计数器。UNIX System V 支持信号集,其中的每个信号都是一个计数信号。当应用程序请求信号时,它使用“集合”来完成此工作。
    要确定所有信号限制,使用以下命令:
    # ipcs -ls
    ------ Semaphore Limits --------
    max number of arrays = 128
    max semaphores per array = 250
    max semaphores system wide = 32000
    max ops per semop call = 32
    semaphore max value = 32767
    您还可以使用以下命令: # cat /proc/sys/kernel/sem
    250     32000   32      128
    设置 SEMMSL
    SEMMSL 内核参数用于控制每个信号集合的最大信号数。
    Oracle 建议将 SEMMSL 设置为 init.ora 文件(适用于 Linux 系统上所有数据库)中的最大 PROCESS 实例参数设置再加上 10。此外,Oracle 建议将 SEMMSL 设置为不小于 100。
    设置 SEMMNI
    SEMMNI 内核参数用于控制整个 Linux 系统中信号集的最大数量。Oracle 建议将 SEMMNI 设置为不小于 100。
    设置 SEMMNS
    SEMMNS 内核参数用于控制整个 Linux 系统中的信号(而非信号集)的最大数量。
    Oracle 建议将 SEMMNS 设置为系统上每个数据库的 PROCESSES 实例参数设置之和,加上最大的 PROCESSES 的两倍,最后为系统上的每个 Oracle 数据库加上 10。
    使用以下计算式确定可以在 Linux 系统上分配的信号的最大数量。它将是以下两者中较小的一个值:
    SEMMNS  — 或 — (SEMMSL * SEMMNI) 。
    设置 SEMOPM
    SEMOPM 内核参数用于控制每个 semop 系统调用可以执行的信号操作数。
    semop 系统调用(函数)能够使用一个 semop 系统调用完成多个信号的操作。一个信号集可以拥有每个信号集中最大数量的 SEMMSL,因此建议将 SEMOPM 设置为等于 SEMMSL。
    Oracle 建议将 SEMOPM 设置为不小于 100。
    设置信号内核参数
    最后,我们来看如何使用一些方法来设置所有信号参数。在下文中,我想更改(增加)的唯一参数是 SEMOPM。所有其他的默认设置可以完全满足我们的示例安装。
  • 可以通过使用以下命令直接更改 /proc 文件系统 (/proc/sys/kernel/sem) 来更改所有信号设置的默认设置,而不必重新引导计算机: # 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
    102563
    Oracle 建议将整个系统的文件句柄值至少设置为 65536。
  • 可以通过使用以下命令直接更改 /proc 文件系统 (/proc/sys/fs/file-max) 更改文件句柄最大数量的默认设置,不必重新引导计算机: # sysctl -w fs.file-max=65536
  • 然后,通过将该内核参数插入到 /etc/sysctl.conf 启动文件中,您可以使这种更改永久有效: # echo "fs.file-max=65536" >> /etc/sysctl.conf
    可以通过使用以下命令查询文件句柄的当前使用情况: # cat /proc/sys/fs/file-nr
    825     0       65536
    file-nr 文件显示了三个参数:分配的文件句柄总数、当前使用的文件句柄数以及可以分配的最大文件句柄数。
    (注:如果需要增大 /proc/sys/fs/file-max 中的值,请确保正确设置 ulimit。对于 2.4.20,通常将其设置为 unlimited。使用 ulimit 命令验证 ulimit 设置:
    # ulimit
    unlimited
    12. 配置 hangcheck-timer 内核模块
    在集群中的所有节点上执行下列配置过程!
    Oracle9i 第 1 版 (9.0.1) 和 Oracle9i 第 2 版 ( 9.2.0.1) 使用一个称为 watchdogd 的用户空间监视后台程序 监视集群的运行状况,并在出现故障时重新启动 RAC 节点。从 Oracle9i 第 2 版 (9.2.0.2) 开始(在 Oracle 10g 第 2 版中仍然存在),一个称为 hangcheck-timer 的 Linux 内核模块取代了监视后台程序,该模块更好地解决了可用性和可靠性问题。它将 hang-check 计时器加载到 Linux 内核中并检查系统是否挂起。它将设置一个计时器,并在特定的时间量之后检查该计时器。有一个用于检查挂起情况的可配置阈值,如果超过该阈值,计算机将重新启动。尽管 Oracle 集群件(集群管理器)操作不需要 hangcheck-timer 模块,但 Oracle 强烈建议使用它。
    hangcheck-timer.ko 模块
    hangcheck-timer 模块使用了一个基于内核的计时器,该计时器周期性地检查系统任务调度程序来捕获延迟,从而确定系统的运行状况。如果系统挂起或暂停,则计时器重置该节点。hangcheck-timer 模块使用时间戳计数器 (TSC) CPU 寄存器,该寄存器每接收到一个时钟信号就将计数加一。由于此寄存器由硬件自动更新,因此 TCS 提供了更精确的时间度量。
    关于 hangcheck-timer 项目的更多信息可在
    此处
    找到。
    安装 hangcheck-timer.ko 模块
    hangcheck-timer 最初只由 Oracle 提供;但是,从内核版本 2.4.9-e.12 和更高版本开始,此模块现在包含在 Red Hat Linux 中。如果您按照
    第 8 节
    (“获取并安装新的 Linux 内核/FireWire 模块”)中的步骤执行操作,则已经包含了 hangcheck-timer。使用以下命令确认:
    # find /lib/modules -name "hangcheck-timer.ko"
    /lib/modules/2.6.9-11.0.0.10.3.EL/kernel/drivers/char/hangcheck-timer.ko
    /lib/modules/2.6.9-22.EL/kernel/drivers/char/hangcheck-timer.ko
    在以上输出中,我们关注的是 /lib/modules/2.6.9-11.0.0.10.3.EL/kernel/drivers/char 目录中的 hangcheck 计时器对象 (hangcheck-timer.ko)。
    配置并加载 hangcheck-timer 模块
    hangcheck-timer 模块有两个关键的参数:
  • hangcheck-tick:此参数定义了系统运行状况检查的间隔时间。默认值为 60 秒;Oracle 建议将它设置为 30 秒。
  • hangcheck-margin:此参数定义了 hangcheck-timer 在重置 RAC 节点前所容许的最大挂起延迟。它定义了以秒为单位的误差幅度。默认值为 180 秒;Oracle 建议将它设置为 180 秒。 注意:这两个 hangcheck-timer 模块参数表示在该模块重置系统前 RAC 节点必须挂起的时长。当以下条件为真时将会重置节点: 系统挂起时间 > (hangcheck_tick + hangcheck_margin)
    配置 Hangcheck 内核模块参数
    每次加载 hangcheck-timer 内核模块(手动加载或由 Oracle 加载)时,它都需要知道对我们刚刚讨论的两个参数(hangcheck-tickhangcheck-margin) 所使用的值。这些值需要在每次重新启动 Linux 服务器后可用。为此,在 /etc/modprobe.conf 文件中创建一个具有正确值的条目,如下所示:
    # su -
    # echo "options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180" >> /etc/modprobe.conf
    每次加载 hangcheck-timer 内核模块时,它将使用由我在 /etc/modprobe.conf 文件中创建的条目定义的值。
    手动加载 Hangcheck 内核模块以进行测试
    Oracle 负责在需要时加载 hangcheck-timer 内核模块。因此,不必在任何启动文件(如 /etc/rc.local)中执行 hangcheck-timer 内核模块的 modprobe 或 insmod。
    我继续在 /etc/rc.local 文件中包含 hangcheck-timer 内核模块的 modprobe 完全只是出于个人习惯。有朝一日我将戒掉这个习惯,但请注意,启动过程中包含 hangcheck-timer 内核模块的 modprobe 并无害处。
    为了使自己保持清醒并能够在夜晚安睡,我始终按如下所示在每次启动时配置 hangcheck-timer 内核的加载:
    # echo "/sbin/modprobe hangcheck-timer" >> /etc/rc.local
    (注:您不必在每次重新启动后使用 modprobe 或 insmod 手动加载 hangcheck-timer 内核模块。Oracle 将在需要时自动加载 hangcheck-timer 模块。)
    现在,为了测试 hangcheck-timer 内核模块以验证它是否选取我们在 /etc/modprobe.conf 文件中定义的正确参数,使用 modprobe 命令。尽管可以通过向其传递相应的参数(如 insmod hangcheck-timer hangcheck_tick=30 hangcheck_margin=180)加载 hangcheck-timer 内核模块,但我们需要验证它是否选取了我们在 /etc/modprobe.conf 文件中设置的选项。
    要手动加载 hangcheck-timer 内核模块并验证它是否使用在 /etc/modprobe.conf 文件中定义的正确值,运行以下命令:
    # su -
    # modprobe hangcheck-timer
    # grep Hangcheck /var/log/messages | tail -2
    Sep 27 23:11:51 linux2 kernel:Hangcheck:starting hangcheck timer 0.5.0 (tick is 30 seconds, margin is 180 seconds)

    13. 配置 RAC 节点以进行远程访问
    在集群中的所有节点上执行下列配置过程!
    在 RAC 节点上运行 Oracle Universal Installer 时,它将使用 rsh(或 ssh)命令将 Oracle 软件复制到 RAC 集群中的所有其他节点上。运行 Oracle Installer (runInstaller) 的节点上的 oracle UNIX 帐户必须为 RAC 集群中的所有其他节点所信任。因此,您应该能够在将要从中运行 Oracle Installer 的 Linux 服务器上,不使用口令对集群中的所有其他 Linux 服务器运行 r* 命令(如 rsh、rcp 和 rlogin)。rsh 后台程序使用位于用户(oracle 的)主目录中的 /etc/hosts.equiv 文件或 .rhosts 文件验证用户。(正常的 RAC 操作不需要使用 rcp 和 rsh。但应为 RAC 和补丁集安装启用 rcp 和 rsh。)
    Oracle 在 Oracle RAC 10g 第 1 版中增加了一项支持,即可以将安全 Shell (SSH) 工具套件用于设置用户等效项。但本文使用较旧的方法 rcp 将 Oracle 软件复制到集群中的其他节点上。使用 SSH 工具套件时,可以使用 scp(与 rcp 相反)命令以非常安全的方式复制软件。
    首先,确保在 RAC 集群中的每个节点上都安装了 rsh RPM:
    # rpm -q rsh rsh-server
    rsh-0.17-25.3
    rsh-server-0.17-25.3
    根据以上信息,我们可以确认已经安装了 rsh 和 rsh-server。如果未安装 rsh,则可以从 RPM 所在的 CD 中运行以下命令: # su -
    # rpm -ivh rsh-0.17-25.3.i386.rpm rsh-server-0.17-25.3.i386.rpm
    要启用“rsh”和“rlogin”服务,必须将 /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
    注意:在以上示例中,第二个字段只允许 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
    # mv /usr/kerberos/bin/rsh /usr/kerberos/bin/rsh.original
    # mv /usr/kerberos/bin/rcp /usr/kerberos/bin/rcp.original
    # mv /usr/kerberos/bin/rlogin /usr/kerberos/bin/rlogin.original
    # which rsh
    /usr/bin/rsh
    现在,应从将要执行 Oracle 集群件和 10g RAC 安装的节点测试连接并运行 rsh 命令。我将使用节点 linux1 执行所有安装,因此我将从该节点运行以下命令: # su - oracle
    $ rsh linux1 ls -l /etc/hosts.equiv
    -rw-------  1 root  root  68 Sep 27 23:37 /etc/hosts.equiv
    $ rsh int-linux1 ls -l /etc/hosts.equiv
    -rw-------  1 root  root  68 Sep 27 23:37 /etc/hosts.equiv
    $ rsh linux2 ls -l /etc/hosts.equiv
    -rw-------  1 root  root  68 Sep 27 23:37 /etc/hosts.equiv
    $ rsh int-linux2 ls -l /etc/hosts.equiv
    -rw-------  1 root  root  68 Sep 27 23:37 /etc/hosts.equiv

    14. 适用于每个 RAC 节点的所有启动命令
    验证以下启动命令是否包含在集群中的所有节点上!
    至此,您已经详细了解了需要在 Oracle10g RAC 配置的所有节点上配置的参数和资源。在本部分中,我们将稍事调整,简要复述这些参数、命令和条目(在本文前面的章节中已提到过),当引导计算机时需要在每个节点上执行它们。
    对于以下的每个启动文件,都应将灰色的条目包含在每个启动文件中。
    /etc/modprobe.conf
    (所有要由内核模块使用的参数和值。)
    alias eth0 b44
    alias eth1 tulip
    alias snd-card-0 snd-intel8x0
    options snd-card-0 index=0
    alias usb-controller ehci-hcd
    alias usb-controller1 uhci-hcd
    options sbp2 exclusive_login=0
    alias scsi_hostadapter sbp2
    options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180
    /etc/sysctl.conf
    (我们需要调整互联的默认和最大发送缓冲区大小以及默认和最大的接收缓冲区大小。)该文件还包含那些负责配置由 Oracle 实例使用的共享内存、信号和文件句柄的参数。)
    # 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
    # +---------------------------------------------------------+
    # | SHARED MEMORY                                           |
    # +---------------------------------------------------------+
    kernel.shmmax=2147483648
    # +---------------------------------------------------------+
    # | SEMAPHORES                                              |
    # | ----------                                              |
    # |                                                         |
    # | SEMMSL_value  SEMMNS_value  SEMOPM_value  SEMMNI_value  |
    # |                                                         |
    # +---------------------------------------------------------+
    kernel.sem=250 32000 100 128
    # +---------------------------------------------------------+
    # | FILE HANDLES                                            |
    # ----------------------------------------------------------+
    fs.file-max=65536
    /etc/hosts
    (RAC 集群中的节点的所有计算机/IP 条目。)
    # Do not remove the following line, or various programs
    # that require network functionality will fail.
    127.0.0.1        localhost.localdomain   localhost
    # Public Network - (eth0)
    192.168.1.100    linux1
    192.168.1.101   linux2
    # Private Interconnect - (eth1)
    192.168.2.100   int-linux1
    192.168.2.101    int-linux2
    # Public Virtual IP (VIP) addresses for - (eth0)
    192.168.1.200    vip-linux1
    192.168.1.201    vip-linux2
    192.168.1.106    melody
    192.168.1.102    alex
    192.168.1.105    bartman
    /etc/hosts.equiv
    (允许以 oracle 用户帐户登录每个节点而不需要口令。)
    +linux1 oracle
    +linux2 oracle
    +int-linux1 oracle
    +int-linux2 oracle
    /etc/rc.local
    (加载 hangcheck-timer 内核模块。)
    #!/bin/sh
    #
    # This script will be executed *after* all the other init scripts.
    # You can put your own initialization stuff in here if you don't
    # want to do the full Sys V style init stuff.
    touch /var/lock/subsys/local
    # +---------------------------------------------------------+
    # | HANGCHECK TIMER                                         |
    # | (I do not believe this is required, but doesn't hurt)   |
    # ----------------------------------------------------------+
    /sbin/modprobe hangcheck-timer

    15. 检查 Oracle 10g 第 2 版的 RPM 程序包
    在集群中的所有节点上执行以下检查!
    安装 Linux O/S(CentOS Enterprise Linux 或 RHEL4)时,应确保安装了所有必需的 RPM。如果您遵循我所提供的 Linux 安装指导,则已经安装了所有内容,这时您将拥有所有必需的 RPM 程序包。但如果您执行了其他安装类型(例如,高级服务器),则可能缺少某些程序包并需要安装它们。所有必需的 RPM 都位于 Linux CD/ISO 上。
    检查必需的 RPM
    必须安装以下程序包(或更高版本):
    make-3.80-5
    glibc-2.3.4-2.9
    glibc-devel-2.3.4-2.9
    glibc-headers-2.3.4-2.9
    glibc-kernheaders-2.4-9.1.87
    cpp-3.4.3-22.1
    compat-db-4.1.25-9
    compat-gcc-32-3.2.3-47.3
    compat-gcc-32-c++-3.2.3-47.3
    compat-libstdc++-33-3.2.3-47.3
    compat-libstdc++-296-2.96-132.7.2
    openmotif-2.2.3-9.RHEL4.1
    setarch-1.6-1
    要查询程序包信息(例如,gcc 和 glibc-devel),使用“rpm -q  [, ]”命令,如下所示:
    # rpm -q gcc glibc-devel
    gcc-3.4.3-22.1
    glibc-devel-2.3.4-2.9
    如果需要安装以上任意程序包,使用“rpm -Uvh ”。例如,要安装 GCC 3.2.3-24 程序包,使用: # rpm -Uvh gcc-3.4.3-22.1.i386.rpm
    重新启动系统
    如果对 O/S 进行了任何更改,则在尝试安装任何 Oracle 组件之前应重新引导集群中的所有节点。!!!
    # init 6

    16. 安装和配置 OCFS2
    应在集群中的所有节点上执行本节中的大多数配置过程!但创建 OCFS2 文件系统应只在集群中的一个节点上执行。
    现在将安装 OCFS2。OCFS2 是一个集群文件系统,它允许集群中的所有节点通过标准文件系统接口并发访问设备。这样便可以对需要在集群中运行的应用程序进行轻松地管理。
    OCFS 第 1 版于 2002 年发布,使 Oracle RAC 用户可以运行集群化数据库而不必处理 RAW 设备。文件系统是为存储数据库相关文件如数据文件、控制文件、重做日志、归档日志等设计的。而 OCFS2 则是作为一个通用集群文件系统而设计的。使用它,用户不但可以在共享磁盘上存储与数据库相关的文件,而且还可以存储 Oracle 二进制文件和配置文件(共享的 Oracle Home),从而使 RAC 的管理变得更简单。
    在本指南中,您将使用 OCFS2 存储需要由 Oracle 集群件软件共享的两个文件。(除了这两个文件以外,您还将使用此空间存储所有 Oracle RAC 实例的共享 SPFILE。)
    有关适用于 Linux 的 OCFS2 的更多信息(包括安装说明),请参见
    本页面

    下载 OCFS
    首先,下载 OCFS2 发布版本。OCFS2 发布版本包含两组 RPM,即内核模块和工具。内核模块可以从
    http://oss.oracle.com/projects/ocfs2/files/
    下载,而工具可以从
    http://oss.oracle.com/projects/ocfs2-tools/files/
    下载。
    从关键的 OCFS2 内核模块(驱动程序)开始,下载相应的 RPM。从三个可用的内核模块(如下所示)中,下载与发布版本、平台、内核版本以及内核风格(smp、hugemem、psmp 等)匹配的内核模块。
    ocfs2-2.6.9-11.0.0.10.3.EL-1.0.4-1.i686.rpm -(适用于单处理器)


    ocfs2-2.6.9-11.0.0.10.3.ELsmp-1.0.4-1.i686.rpm -(适用于多处理器)


    ocfs2-2.6.9-11.0.0.10.3.ELhugemem-1.0.4-1.i686.rpm -(适用于 hugemem)

    而工具只需匹配平台和发布版本。您应下载 OCFS2 工具和 OCFS2 控制台应用程序。
    ocfs2-tools-1.0.2-1.i386.rpm
    -(OCFS2 工具)
    ocfs2console-1.0.2-1.i386.rpm
    -(OCFS2 控制台)
    尽管 OCFS2 控制台是可选的,但强烈建议使用它。ocfs2console 应用程序需要 e2fsprogs、glib2 2.2.3 或更高版本、vte 0.11.10 或更高版本、pygtk2 (EL4) 或 python-gtk (SLES9) 1.99.16 或更高版本、python 2.3 或更高版本以及 ocfs2-tools。
    如果您不确定所需的 OCFS2 驱动程序版本,则使用与您的内核版本匹配的 OCFS2 版本。要确定您的内核版本,执行以下命令:
    $ uname -a
    Linux linux1 2.6.9-11.0.0.10.3.EL #1 Tue Jul 5 12:20:09 PDT 2005 i686 i686 i386 GNU/Linux
    安装 OCFS2
    我将把 OCFS2 文件安装到两台单处理器计算机中。安装过程只需要您以 root 用户帐户在集群中的所有节点上运行以下命令即可:
    $ su -
    # rpm -Uvh ocfs2-2.6.9-11.0.0.10.3.EL-1.0.4-1.i686.rpm \
    ocfs2console-1.0.2-1.i386.rpm \
    ocfs2-tools-1.0.2-1.i386.rpm
    Preparing...                ########################################### [100%]
    1:ocfs2-tools            ########################################### [ 33%]
    2:ocfs2-2.6.9-11.0.0.10.3########################################### [ 67%]
    3:ocfs2console           ########################################### [100%]
    禁用 SELinux(只适用于 RHEL4 U2)
    向 RHEL4 U2 用户(CentOS 4.2 基于 RHEL4 U2)提供一个建议,即 OCFS2 当前无法在启用 SELinux 的情况下运行。如果您使用的是 RHEL4 U2(其中包括您,因为您在此处使用 CentOS 4.2),则您需要禁用 SELinux(使用工具 system-config-securitylevel)才能执行 O2CB 服务。
    要禁用 SELinux,运行“Security Level Configuration”GUI 实用程序:
    # /usr/bin/system-config-securitylevel &
    这将显示以下屏幕:

    图 6 Security Level Configuration 打开屏幕
    现在,单击 SELinux 选项卡并取消选中“Enabled”复选框。单击 [OK] 后,将显示一个警告对话框。只需单击“Yes”确认该警告。禁用 SELinux 选项后,屏幕现在应如下所示:

    图 7: 禁用了 SELinux
    集群中的两个节点上进行此更改后,将需要重新引导每个节点以实施更改:
    # init 6
    配置 OCFS2
    下一步是在集群中的每个节点上生成和配置 /etc/ocfs2/cluster.conf 文件。完成此操作最简单的方法是运行 GUI 工具 ocfs2console。在本节中,我们不但使用 ocfs2console 创建和配置 /etc/ocfs2/cluster.conf 文件,而且还创建和启动集群堆栈 O2CB。如果 /etc/ocfs2/cluster.conf 文件不存在(本示例中便是这种情况),ocfs2console 工具将创建该文件以及一个默认集群名为 ocfs2 的新集群堆栈服务 (O2CB)。您将需要以 root 用户帐户在集群的所有节点上执行该操作:
    $ su -
    # ocfs2console &
    这将显示如下所示的 GUI:

    图 8 ocfs2console GUI
    使用 ocfs2console GUI 工具执行以下步骤:
  • 选择 [Cluster] -> [Configure Nodes...]。这将启动 OCFS 集群堆栈(
    图 9
    )并显示“Node Configuration”对话框。
  • 在“Node Configuration”对话框上,单击 [Add] 按钮。

    • 这将显示“Add Node”对话框。
    • 在“Add Node”对话框中,输入集群中第一个节点的 Host nameIP address。将 IP Port 设置为默认值 7777。在我的示例中,我添加了两个节点,即使用 linux1 / 192.168.1.100 表示第一个节点,并使用 linux2 / 192.168.1.101 表示第二个节点。
    • 单击“Node Configuration”对话框上的 [Apply] — 所有节点现在将处于“Active”状态,如
      图 10
      所示。
    • 单击“Node Configuration”对话框上的 [Close]。

  • 确认所有值均正确后,使用 [File] -> [Quit] 退出应用程序。需要在集群的所有节点上执行该操作。

    图 9。启动 OCFS2 集群堆栈
    以下对话框显示了节点 linux1 和 linux2 的 OCFS2 设置:

    图 10 为 OCFS2 配置节点
    退出 ocfs2console 后,将获得一个类似如下所示的 /etc/ocfs2/cluster.conf。需要在集群中的所有节点上完成该过程,并且所有节点的 OCFS2 配置文件必须完全相同:
    node:
    ip_port = 7777
    ip_address = 192.168.1.100
    number = 0
    name = linux1
    cluster = ocfs2
    node:
    ip_port = 7777
    ip_address = 192.168.1.101
    number = 1
    name = linux2
    cluster = ocfs2
    cluster:
    node_count = 2
    name = ocfs2
    O2CB 集群服务
    在使用 OCFS2 执行任何操作(如格式化或挂载文件系统)之前,我们需要先运行 OCFS2 的集群堆栈 O2CB(它将是以上执行的配置过程的结果)。此堆栈包含以下服务:

    • NM:用于跟踪 cluster.conf 中的所有节点的节点管理器
    • HB:当节点加入或离开集群时向上/向下发出通知的心跳服务
    • TCP:处理节点之间的通信
    • DLM:用于跟踪所有锁、这些锁的所有者和状态的分布式锁管理器
    • CONFIGFS:在 /config 中挂载的用户空间驱动的配置文件系统
    • DLMFS:用户空间与内核空间 DLM 的接口

    已将以上所有集群服务打包到 o2cb 系统服务 (/etc/init.d/o2cb) 中。以下是 o2cb 系统服务的某些更有用的命令和选项的简要列表。

    • /etc/init.d/o2cb status Module "configfs":Not loaded
      Filesystem "configfs":Not mounted
      Module "ocfs2_nodemanager":Not loaded
      Module "ocfs2_dlm":Not loaded
      Module "ocfs2_dlmfs":Not loaded
      Filesystem "ocfs2_dlmfs":Not mounted注意,本示例未加载所有服务。我在执行“status”选项之前执行了“unload”。如果要在使用 ocfs2console 实用程序配置 OCFS 后立即检查 o2cb 服务的状态,则将加载所有这些服务。
    • /etc/init.d/o2cb load Loading module "configfs":OK
      Mounting configfs filesystem at /config:OK
      Loading module "ocfs2_nodemanager":OK
      Loading module "ocfs2_dlm":OK
      Loading module "ocfs2_dlmfs":OK
      Mounting ocfs2_dlmfs filesystem at /dlm:OK加载所有 OCFS 模块。
    • /etc/init.d/o2cb online ocfs2 Starting cluster ocfs2:OK以上命令将使我们创建的集群 ocfs2 处于联机状态。
    • /etc/init.d/o2cb offline ocfs2 Unmounting ocfs2_dlmfs filesystem:OK
      Unloading module "ocfs2_dlmfs":OK
      Unmounting configfs filesystem:OK
      Unloading module "configfs":OK以上命令将使我们创建的集群 ocfs2 处于脱机状态。
    • /etc/init.d/o2cb unload Cleaning heartbeat on ocfs2:OK
      Stopping cluster ocfs2:OK以上命令将卸载所有 OCFS 模块。

    将 O2CB 配置为在引导时启动
    您现在需要配置 OC2B 驱动程序的引导属性,以便在每次引导时将启动集群堆栈服务。需要在集群的两个节点上执行本节中的所有任务。
    注意:在撰写本指南时,OCFS2 包含一个错误,即不会在每次引导时加载驱动程序,即使将引导属性配置为执行此操作后也是如此。在尝试根据正式的 OCFS2 文档将引导属性配置为在每次引导时启动后,您在每次引导时将仍收到以下错误: ...
    Mounting other filesystems:
    mount.ocfs2:Unable to access cluster service
    Cannot initialize cluster mount.ocfs2:
    Unable to access cluster service Cannot initialize cluster [FAILED]
    ...Red Hat 更改了在 chkconfig-1.3.11.2-1 与 chkconfig-1.3.13.2-1 之间注册服务的方式。O2CB 脚本习惯使用前者。
    在尝试配置引导属性之前:

    • 删除 /etc/init.d/o2cb 中的以下几行 ### BEGIN INIT INFO
      # Provides:o2cb
      # Required-Start:
      # Should-Start:
      # Required-Stop:
      # Default-Start: 2 3 5
      # Default-Stop:
      # Description:Load O2CB cluster services at system boot.
      ### END INIT INFO
                  
    • 重新注册 o2cb 服务。 # chkconfig --del o2cb
      # chkconfig --add o2cb
      # chkconfig --list o2cb
      o2cb            0:off   1:off   2:on    3:on    4:on    5:on    6:off
      # ll /etc/rc3.d/*o2cb*
      lrwxrwxrwx  1 root root 14 Sep 29 11:56 /etc/rc3.d/S24o2cb -> ../init.d/o2cb该服务应为默认运行级别中的 S24o2cb。

    解决此错误后,您可以继续设置引导属性,如下所示:
    # /etc/init.d/o2cb offline ocfs2
    # /etc/init.d/o2cb unload
    # /etc/init.d/o2cb configure
    Configuring the O2CB driver.
    这将配置 O2CB 驱动程序的引导属性。以下问题将决定在引导时是否加载驱动程序。当前值将在方括号(“[]”)中显示。按  而不键入答案将保留该当前值。Ctrl-C 将终止。 Load O2CB driver on boot (y/n) [n]:y
    Cluster to start on boot (Enter "none" to clear) [ocfs2]:ocfs2
    Writing O2CB configuration:OK
    Loading module "configfs":OK
    Mounting configfs filesystem at /config:OK
    Loading module "ocfs2_nodemanager":OK
    Loading module "ocfs2_dlm":OK
    Loading module "ocfs2_dlmfs":OK
    Mounting ocfs2_dlmfs filesystem at /dlm:OK
    Starting cluster ocfs2:OK
    格式化 OCFS2 文件系统
    您现在可以使用在
    在共享 FireWire 存储设备上创建分区
    一节中创建的分区。(至少可以使用第一个分区!)
    如果 O2CB 集群处于脱机状态,则启动它。格式化操作要求集群处于联机状态,这是因为它需要确保在集群的某个节点上未挂载该卷。
    在本文档的前面部分中,我们在
    为 OCFS/集群件创建挂载点
    一节中创建了目录 /u02/oradata/orcl。本节包含用于创建和安装集群管理器 使用的文件系统 (/u02/oradata/orcl) 的命令。
    创建 OCFS2 文件系统
    与本节中其他任务不同,只能在 RAC 集群中的一个节点上创建 OCFS2 文件系统。您将只从 linux1 执行本节中的所有命令。
    注意,可以使用 GUI 工具 ocfs2console 或命令行工具 mkfs.ocfs2 创建和安装 OCFS2 文件系统。从 ocfs2console 实用程序中,使用菜单 [Tasks] - [Format]。
    参见下面有关如何使用命令行工具 mkfs.ocfs2 创建 OCFS2 文件系统的说明。
    要创建文件系统,使用 Oracle 可执行文件 mkfs.ocfs2。就本示例而言,我只从 linux1 以 root 用户帐户运行以下命令:
    $ su -
    # mkfs.ocfs2 -b 4K -C 32K -N 4 -L oradatafiles /dev/sda1
    mkfs.ocfs2 1.0.2
    Filesystem label=oradatafiles
    Block size=4096 (bits=12)
    Cluster size=32768 (bits=15)
    Volume size=1011675136 (30873 clusters) (246984 blocks)
    1 cluster groups (tail covers 30873 clusters, rest cover 30873 clusters)
    Journal size=16777216
    Initial number of node slots: 4
    Creating bitmaps:done
    Initializing superblock:done
    Writing system files:done
    Writing superblock:done
    Writing lost+found:done
    mkfs.ocfs2 successful
    挂载 OCFS2 文件系统
    现在已经创建了此文件系统,接下来我们便可以挂载它了。首先,使用命令行进行挂载,然后我将介绍如何将它包含在 /etc/fstab 中以在每次引导时挂载它。 您将需要以 root 用户帐户在 Oracle RAC 集群中的所有节点上挂载文件系统。
    首先,此处介绍了如何从命令行手动挂载 OCFS2 文件。注意,需要以 root 用户帐户执行该操作:
    $ su -
    # mount -t ocfs2 -o datavolume /dev/sda1 /u02/oradata/orcl
    如果挂载成功,您将只是获得提示。但您应运行以下检查来确保文件系统挂载正确。
    首先,使用 mount 命令确保成功挂载了新文件系统。应在 RAC 集群的所有节点上执行该操作:
    # mount
    /dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
    none on /proc type proc (rw)
    none on /sys type sysfs (rw)
    none on /dev/pts type devpts (rw,gid=5,mode=620)
    usbfs on /proc/bus/usb type usbfs (rw)
    /dev/hda1 on /boot type ext3 (rw)
    none on /dev/shm type tmpfs (rw)
    none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
    sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
    cartman:SHARE2 on /cartman type nfs (rw,addr=192.168.1.120)
    configfs on /config type configfs (rw)
    ocfs2_dlmfs on /dlm type ocfs2_dlmfs (rw)
    /dev/sda1 on /u02/oradata/orcl type ocfs2 (rw,_netdev,datavolume)
    注意:您将在此处使用 datavolume 选项挂载新文件系统。Oracle 数据库用户必须使用 datavolume 挂载选项安装任何将包含表决磁盘文件、集群注册表 (OCR)、数据文件、重做日志、归档日志以及控制文件的卷,以确保 Oracle 进程打开包含 o_direct 标志的文件。
    应使用该挂载选项挂载任何其他类型的卷,其中包括 Oracle home(本指南未使用它)。
    稍后(通常大约为五秒钟)将挂载该卷。它这样做是为了使心跳线程保持稳定。在未来的版本中,Oracle 计划增加对全局心跳(这将使大多数挂载瞬间完成)的支持。
    将 OCFS 配置为在启动时自动挂载
    让我们回顾一下到目前为止您已经执行的操作。您下载并安装了 OCFS2,它将用于存储集群管理器 文件所需的文件。安装后,您将 OCFS2 模块加载到内核中,然后对集群文件系统进行了格式化。最后,您挂载了新建的文件系统。本节将逐步完成在每次引导计算机时负责挂载新 OCFS2 文件系统的步骤。
    首先将以下行添加到 RAC 集群所有节点上的 /etc/fstab 文件中:
    /dev/sda1     /u02/oradata/orcl    ocfs2   _netdev,datavolume     0 0
    注意用于挂载此文件系统的 _netdev 选项。_netdev 挂载选项是 OCFS2 卷所必需的;它指示将在网络启动后挂载该卷以及在关闭网络前卸载该卷。
    现在,让我们确保已经加载了 ocfs2.ko 内核模块,并确保将在引导过程中安装文件系统。
    如果您遵循了本指南中的示例,则应已经启用了用于加载内核模块并安装 OCFS2 文件系统的操作。但您将仍以 root 用户帐户在 RAC 集群的所有节点上运行以下命令来检查这些选项:
    $ su -
    # chkconfig --list o2cb
    o2cb            0:off   1:off   2:on    3:on    4:on    5:on    6:off应把我以粗体标记的标志设置为“on”。
    检查新 OCFS2 文件系统的权限
    使用 ls 命令检查所有权。应把权限设置为 0775,且将所有者设置为“oracle”、将组设置为“dba”。如果集群中的某些节点未设置为该值(我就未设置为该值),则很有可能是所有节点之间的“oracle”UID(在本示例中为 175)和/或“dba”GID(在本示例中为 115)不相同。
    我们来先检查权限:
    # ls -ld /u02/oradata/orcl
    drwxr-xr-x  3 root root 4096 Sep 29 12:11 /u02/oradata/orcl正如在以上列表中所看到的,oracle 用户帐户(以及 dba 组)将无法写入此目录。我们来解决此问题: # chown oracle.dba /u02/oradata/orcl
    # chmod 775 /u02/oradata/orcl我们回过头来再次检查集群中每个节点的权限是否正确: # ls -ld /u02/oradata/orcl
    drwxrwxr-x  3 oracle dba 4096 Sep 29 12:11 /u02/oradata/orcl
    调整 O2CB 心跳阈值
    该部分对于在 FireWire 驱动器上配置由 Oracle 集群件使用的两个共享文件非常重要。在测试过程中,我能够安装和配置 OCFS2、格式化新卷并最后安装位于新 OCFS2 卷上的 Oracle 集群件(及其所需的两个共享文件,即表决磁盘和 OCR 文件)。我能够安装 Oracle 集群件并可以看到共享驱动器,但在评估过程中,当集群件软件在两个节点上运行大约 15 分钟后,我收到了许多锁定和挂起。挂起的节点总是变化不定(在我的示例中为 linux1 或 linux2)。此外,无论是 I/O 负载较高还是根本没有,对该节点崩溃(挂起)都没有影响。
    注意,您将创建的配置是一个非常低端的设置(配置了与 FireWire 驱动器有关的慢速磁盘访问)。这绝不是一个高端设置并易受虚假超时的影响。
    查看 OCFS2 的跟踪文件后,对表决磁盘的访问显然太慢(超过了 O2CB 心跳阈值)并导致 Oracle 集群件软件(以及节点)崩溃。
    我所使用的解决方案只是将 O2CB 心跳阈值从其默认设置 7 增大为 301(在某些情况下高达 900)。这是一个可配置参数,用于计算节点“隔离”自身所用的时间。
    首先,我们了解一下如何确定 O2CB 心跳阈值的当前设置。为此,可以查询 /proc 文件系统,如下所示:
    # cat /proc/fs/ocfs2_nodemanager/hb_dead_threshold
    7值为 7,但该值表示什么呢?其实,它用在以下公式中确定隔离时间(秒): [隔离时间(秒)] = (O2CB_HEARTBEAT_THRESHOLD - 1) * 2因此,如果 O2CB 心跳阈值为 7,则隔离时间将为: (7 - 1) * 2 = 12 秒如果您的 FireWire 磁盘较慢,则需要一个更大的阈值(准确来说是 600)。对于 600 秒,您将需要一个值为 301 的 O2CB_HEARTBEAT_THRESHOLD,如下所示: (301 - 1) * 2 = 600 秒
    现在我们了解一下如何将 O2CB 心跳阈值从 7 增大为 301。这需要在集群的两个节点上执行以下操作。首先需要修改文件 /etc/sysconfig/o2cb 并将 O2CB_HEARTBEAT_THRESHOLD 设置为 301:
    # O2CB_ENABELED:'true' means to load the driver on boot.
    O2CB_ENABLED=true
    # O2CB_BOOTCLUSTER:If not empty, the name of a cluster to start.
    O2CB_BOOTCLUSTER=ocfs2
    # O2CB_HEARTBEAT_THRESHOLD:Iterations before a node is considered dead.
    O2CB_HEARTBEAT_THRESHOLD=301
    修改文件 /etc/sysconfig/o2cb 后,您需要更改 o2cb 配置。同样,应在集群的所有节点上执行以下操作。
    # umount /u02/oradata/orcl/
    # /etc/init.d/o2cb unload
    # /etc/init.d/o2cb configure
    Load O2CB driver on boot (y/n) [y]:y
    Cluster to start on boot (Enter "none" to clear) [ocfs2]:ocfs2
    Writing O2CB configuration:OK
    Loading module "configfs":OK
    Mounting configfs filesystem at /config:OK
    Loading module "ocfs2_nodemanager":OK
    Loading module "ocfs2_dlm":OK
    Loading module "ocfs2_dlmfs":OK
    Mounting ocfs2_dlmfs filesystem at /dlm:OK
    Starting cluster ocfs2:OK您现在可以再次检查以确保这些设置应用于 o2cb 集群堆栈: # cat /proc/fs/ocfs2_nodemanager/hb_dead_threshold
    301
    重要注意事项: 用于 O2CB 心跳阈值的值 301 并不适用于本指南中列出的所有 FireWire 驱动器。使用以下图表确定应使用的 O2CB 心跳阈值。
    FireWire 驱动器
    O2CB 心跳阈值
    Maxtor OneTouch II 300GB USB 2.0 / IEEE 1394a 外置硬盘驱动器 - (E01G300)
    301
    Maxtor OneTouch II 250GB USB 2.0 / IEEE 1394a 外置硬盘驱动器 - (E01G250)
    301
    Maxtor OneTouch II 200GB USB 2.0 / IEEE 1394a 外置硬盘驱动器 - (E01A200)
    301
    由 F.A. Porsche 设计的 250GB LaCie 硬盘驱动器(采用 FireWire 400 接口)- (300703U)
    600
    由 F.A. Porsche 设计的 160GB LaCie 硬盘驱动器(采用 FireWire 400 接口)- (300702U)
    600
    由 F.A. Porsche 设计的 80GB LaCie 硬盘驱动器(采用 FireWire 400 接口)- (300699U)
    600
    ADS Technologies 推出的 Dual Link 驱动器套件(内含 FireWire) - (DLX185)
    901
    Maxtor OneTouch 250GB USB 2.0 / IEEE 1394a 外置硬盘驱动器 - (A01A250)
    600
    Maxtor OneTouch 200GB USB 2.0 / IEEE 1394a 外置硬盘驱动器 - (A01A200)
    600
    重新引导两个节点
    开始介绍下一节之前,最好在此时重新引导 RAC 集群的所有节点。当计算机启动时,确保加载了集群堆栈服务并安装了新的 OCFS2 文件系统:
    # mount
    /dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
    none on /proc type proc (rw)
    none on /sys type sysfs (rw)
    none on /dev/pts type devpts (rw,gid=5,mode=620)
    usbfs on /proc/bus/usb type usbfs (rw)
    /dev/hda1 on /boot type ext3 (rw)
    none on /dev/shm type tmpfs (rw)
    none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
    sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
    cartman:SHARE2 on /cartman type nfs (rw,addr=192.168.1.120)
    configfs on /config type configfs (rw)
    ocfs2_dlmfs on /dlm type ocfs2_dlmfs (rw)
    /dev/sda1 on /u02/oradata/orcl type ocfs2 (rw,_netdev,datavolume)还应确认 O2CB 心跳阈值的设置是否正确(设置为我们的新值 301): # cat /proc/fs/ocfs2_nodemanager/hb_dead_threshold
    301
    如何确定 OCFS2 版本
    要确定正在运行的 OCFS2 版本,使用:
    # cat /proc/fs/ocfs2/version
    OCFS2 1.0.4 Fri Aug 26 12:31:58 PDT 2005 (build 0a22e88ab648dc8d2a1f9d7796ad101c)
      
    17. 安装和配置自动存储管理 (ASMLib 2.0)
    应在所有节点上执行大多数安装和配置过程。但创建 ASM 磁盘将只需在集群中的单个节点上执行。
    在本节中,您将配置 ASM,以将其用作所有 Oracle 物理数据库文件(数据、联机重做日志、控制文件、归档重做日志)以及闪回恢复区的文件系统/卷管理器。
    Oracle 数据库 10g 第 1 版中引入了 ASM 特性,用于使管理员不必再管理单个文件和驱动器。ASM 内置在 Oracle 内核中。通过它,DBA 可以全天候管理 Oracle 集群实例的单个实例以集群实例的数千个磁盘驱动器。将把所有要用于 Oracle 的文件和目录包含在磁盘组中。ASM 跨所有可用磁盘驱动器并行执行负载平衡,以防止热点并最大限度地提高性能(甚至对于快速更改数据使用模式也是如此)。
    在该节中,我首先介绍 ASMLib 2.0 库及其用于 Linux 的关联驱动程序以及其他使用 Linux 配置 ASM 的方法。然后,我将介绍如何下载特定于您的 Linux 内核的 ASM 驱动程序(ASMLib 版本 2.0)。 最后,您将安装和配置 ASMLib 2.0 驱动程序,同时以一个如何创建 ASM 磁盘的演示结束本节。
    如果要了解有关 ASMLib 的详细信息,请访问
    www.oracle.com/technology/global/cn/tech/linux/asmlib/install.html

    使用 Linux 配置 ASM 的方法(仅供参考)
    最初开始编写本指南时,我希望集中介绍如何将 ASM 用于所有数据库文件。我很想知道在负载平衡和容错方面,ASM 与此测试 RAC 配置的协同工作性能如何。
    有两个不同方法可在 Linux 上配置 ASM:
  • 使用 ASMLib I/O 的 ASM:此方法使用 ASMLib 调用在由 ASM 管理的原始块设备上创建所有 Oracle 数据库文件。由于 ASMLib 使用块设备,因此该方法不需要原始设备。
  • 使用标准 Linux I/O 的 ASM:此方法使用标准 Linux I/O 系统调用在 ASM 管理的原始字符设备上创建所有 Oracle 数据库文件。您将需要为 ASM 使用的所有磁盘分区创建原始设备。
    我们将在此处介绍“使用 ASMLib I/O 的 ASM”。
    但在详细介绍 ASMLib 的安装和配置之前,我认为有必要简单介绍一下第二种方法“具有标准 Linux I/O 的 ASM”。如果要使用该方法(它是一个非常有效的解决方案,但并不是我将在此处实施的方法),则应注意在默认情况下 Linux 并不使用原始设备。必须使用原始驱动程序将要使用的每个 Linux 原始设备绑定到相应的块设备。例如,如果要使用我们已经创建的分区(/dev/sda2、/dev/sda3 和 /dev/sda4),则需要执行以下任务:
  • 编辑文件 /etc/sysconfig/rawdevices,如下所示: # raw device bindings
    # format:  
    #           
    # example:/dev/raw/raw1 /dev/sda1
    #          /dev/raw/raw2 8 5
    /dev/raw/raw2 /dev/sda2
    /dev/raw/raw3 /dev/sda3
    /dev/raw/raw4 /dev/sda4
    将在每次重新启动时创建原始设备绑定。
  • 然后,需要将所有原始设备的所有权更改为“oracle”用户帐户: # chown oracle:dba /dev/raw/raw2; chmod 660 /dev/raw/raw2
    # chown oracle:dba /dev/raw/raw3; chmod 660 /dev/raw/raw3
    # chown oracle:dba /dev/raw/raw4; chmod 660 /dev/raw/raw4
  • 最后一步是重新启动服务器以绑定设备或只重新启动 rawdevices 服务: # service rawdevices restart
    正如我在上面所提到的,以上示例只是演示有多个方法可以在 Linux 上使用 ASM。现在,我们继续介绍要在本文中使用的方法“使用 ASMLib I/O 的 ASM”。
    下载 ASMLib 2.0 程序包
    首先下载 ASMLib 2.0 库(从 OTN 中下载)和驱动程序(从我的网站中下载)。与 OCFS 一样,您需要下载用于 Linux 内核的版本以及计算机上的处理器数。假设您在单处理器计算机上使用内核 2.6.9-11.0.0.10.3.EL #1:
    # uname -a
    Linux linux1 2.6.9-11.0.0.10.3.EL #1 Tue Jul 5 12:20:09 PDT 2005 i686 i686 i386 GNU/Linux
    用于 Red Hat Enterprise Linux 4 AS 的 Oracle ASMLib 下载


  • oracleasm-2.6.9-11.0.0.10.3.EL-2.0.0-1.i686.rpm
    -(“up”内核的驱动程序)
    - 或 -

  • oracleasm-2.6.9-11.0.0.10.3.ELsmp-2.0.0-1.i686.rpm
    -(“smp”内核的驱动程序)

  • oracleasmlib-2.0.0-1.i386.rpm
    -(用户空间库)

  • oracleasm-support-2.0.0-1.i386.rpm
    -(驱动程序支持文件)
    安装 ASMLib 2.0 程序包
    需要在所有节点上以 root 用户帐户执行此安装:
    $ su -
    # rpm -Uvh oracleasm-2.6.9-11.0.0.10.3.EL-2.0.0-1.i686.rpm \
    oracleasmlib-2.0.0-1.i386.rpm \
    oracleasm-support-2.0.0-1.i386.rpm
    Preparing...                ########################################### [100%]
    1:oracleasm-support      ########################################### [ 33%]
    2:oracleasm-2.6.9-11.0.0.########################################### [ 67%]
    3:oracleasmlib           ########################################### [100%]
    配置和加载 ASMLib 2.0 程序包
    现在,您下载并安装了用于 Linux 的 ASMLib 程序包,接下来您需要配置并加载 ASM 内核模块。需要在所有节点上以 root 运行此任务:
    $ su -
    # /etc/init.d/oracleasm configure
    Configuring the Oracle ASM library driver.
    This will configure the on-boot properties of the Oracle ASM library
    driver.The following questions will determine whether the driver is
    loaded on boot and what permissions it will have.The current values
    will be shown in brackets ('[]').Hitting  without typing an
    answer will keep that current value.Ctrl-C will abort.
    Default user to own the driver interface []:oracle
    Default group to own the driver interface []:dba
    Start Oracle ASM library driver on boot (y/n) [n]:y
    Fix permissions of Oracle ASM disks on boot (y/n) [y]:y
    Writing Oracle ASM library driver configuration:[  OK  ]
    Creating /dev/oracleasm mount point:[  OK  ]
    Loading module "oracleasm":[  OK  ]
    Mounting ASMlib driver filesystem:[  OK  ]
    Scanning system for ASM disks:[  OK  ]
    为 Oracle 创建 ASM 磁盘

    第 10 节
    中,您创建了三个用于存储 Oracle 数据库文件(如联机重做日志、数据库文件、控制文件、归档重做日志文件)和闪回恢复区的 Linux 分区。
    以下是为 ASM 创建的分区列表:
    创建的 Oracle ASM 分区
    文件系统类型
    分区
    大小
    挂载点
    文件类型
    ASM
    /dev/sda2
    50GB
    ORCL:VOL1
    Oracle 数据库文件
    ASM
    /dev/sda3
    50GB
    ORCL:VOL2
    Oracle 数据库文件
    ASM
    /dev/sda4
    100GB
    ORCL:VOL3
    快速恢复区
    总计

    200GB


    本节中的最后一个任务是创建 ASM 磁盘。创建 ASM 磁盘只需要在一个节点上以 root 用户帐户执行。我将在 linux1 上运行这些命令。在其他节点上,您将需要执行 scandisk 以识别新卷。该操作完成时,应在所有节点上运行 oracleasm listdisks 命令以验证是否创建了所有 ASM 磁盘以及它们是否可用。
    $ su -
    # /etc/init.d/oracleasm createdisk VOL1 /dev/sda2
    Marking disk "/dev/sda2" as an ASM disk [  OK  ]
    # /etc/init.d/oracleasm createdisk VOL2 /dev/sda3
    Marking disk "/dev/sda3" as an ASM disk [  OK  ]
    # /etc/init.d/oracleasm createdisk VOL3 /dev/sda4
    Marking disk "/dev/sda4" as an ASM disk [ OK  ]
    注意:如果使用相同硬件(实际上是相同的共享驱动器)重复本指南,则在尝试创建 ASM 磁盘时可能会出现故障。如果确实遇到故障,则尝试使用以下命令列出所有 ASM 磁盘: # /etc/init.d/oracleasm listdisks
    VOL1
    VOL2
    VOL3
    您可以看到,结果表明我定义了三个卷。如果上次运行定义了三个卷,则继续执行操作并使用以下命令删除它们,然后使用以上的 (oracleasm createdisk) 命令再次创建它们: # /etc/init.d/oracleasm deletedisk VOL1
    Removing ASM disk "VOL1" [  OK  ]
    # /etc/init.d/oracleasm deletedisk VOL2
    Removing ASM disk "VOL2" [  OK  ]
    # /etc/init.d/oracleasm deletedisk VOL3
    Removing ASM disk "VOL3" [  OK  ]
    在集群中的所有其他节点上,必须执行磁盘扫描程序以识别新卷: # /etc/init.d/oracleasm scandisks
    Scanning system for ASM disks                              [  OK  ]
    我们现在可以使用以下命令在所有节点上以 root 用户帐户测试是否成功创建了 ASM 磁盘:
    # /etc/init.d/oracleasm listdisks
    VOL1
    VOL2
    VOL3
    18. 下载 Oracle 10g RAC 软件
    只需要在集群中的一个节点上执行以下下载过程!
    下一个逻辑步骤是安装 Oracle 集群件第 2 版 (10.2.0.1.0)、Oracle 数据库 10g 第 2 版 (10.2.0.1.0) 以及最终用于 Linux x86 软件的 Oracle 数据库 10g 随附 CD 第 2 版 (10.2.0.1.0)。但您必须先从 OTN 下载并提取所需的 Oracle 软件程序包。
    您将从 Oracle 下载所需的软件并将其提取到集群的一个 Linux 节点即 linux1 上。您将从此计算机执行所有安装。Oracle 安装将把所需的软件程序包复制到我们在
    第 13 节
    中设置的 RAC 配置中的所有其他节点上。
    以 oracle 用户帐户登录 Linux RAC 集群的某个节点。在该示例中,您将把所需的 Oracle 软件下载到 linux1 并将其保存到 /u01/app/oracle/orainstall。
    下载并提取软件
    首先,
    下载
    Oracle 集群件第 2 版 (10.2.0.1.0)、Oracle 数据库 10g 第 2 版 (10.2.0.1.0) 以及用于 Linux x86 的 Oracle 数据库 10g 随附 CD 第 2 版 (10.2.0.1.0) 软件。所有下载均在同一页面中提供。
    以 oracle 用户帐户将下载的三个程序包提取到临时目录。在该示例中,我将使用 /u01/app/oracle/orainstall。
    按如下所示提取 Oracle 集群件程序包:
    # su - oracle
    $ cd ~oracle/orainstall
    $ unzip 10201_clusterware_linux32.zip
    然后提取 Oracle 数据库软件: $ cd ~oracle/orainstall
    $ unzip 10201_database_linux32.zip
    最后,提取 Oracle 随附 CD 软件: $ cd ~oracle/orainstall
    $ unzip 10201_companion_linux32.zip



    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/53677/showart_459064.html
  • Tags: 网吧 硬件 价格 最新  
    责任编辑:Cn029.Com
  • 请文明参与讨论,禁止漫骂攻击。 用户名:新注册) 验证码: 验证码,看不清楚?请点击刷新验证码

    分 值:100分 85分 70分 55分 40分 25分 10分 0分

    评论总数:0条,平均得分:0[ 查看全部 ] 网友评论
    关于我们 - 联系我们 - 广告服务 - 法律声明 - RSS订阅 - 网站地图 - 返回顶部