在 RHEL 5.5 下安装 Oracle RAC

news/2024/7/10 4:13:32 标签: oracle, application, path, library, 数据库, date

分别在 rac1 和 rac2 两个节点上执行以下命令:

# groupadd -g 500 oinstall
# groupadd -g 501 dba
# useradd -u 504 -g oinstall -G dba -d /home/oracle -m oracle
# passwd oracle

2. 配置 Secure Shell 的等效性

在 rac1节点上执行:

[oracle@rac1 ~]$ mkdir ~/.ssh
[oracle@rac1 ~]$ chmod 700 ~/.ssh
[oracle@rac1 ~]$ ssh-keygen -t rsa
[oracle@rac1 ~]$ ssh-keygen -t dsa

在 rac2 节点上执行:

[oracle@rac2 ~]$ mkdir ~/.ssh
[oracle@rac2 ~]$ chmod 700 ~/.ssh
[oracle@rac2 ~]$ ssh-keygen -t rsa
[oracle@rac2 ~]$ ssh-keygen -t dsa

在 rac1 节点上执行:

[oracle@rac1 ~]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[oracle@rac1 ~]$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

提示:下列命令会提示你输入 rac2 的 oracle 密码,按照提示输入即可,如果失败可重新尝试执行命令。

在 rac1 节点上执行:

[oracle@rac1 ~]$ scp ~/.ssh/authorized_keys rac2:~/.ssh/authorized_keys

在 rac2 节点上执行:

[oracle@rac2 ~]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[oracle@rac2 ~]$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
[oracle@rac2 ~]$ scp ~/.ssh/authorized_keys rac1:~/.ssh/authorized_keys

在 rac1 节点上执行:

[oracle@rac1 ~]$ ssh rac1 date
[oracle@rac1 ~]$ ssh rac2 date
[oracle@rac1 ~]$ ssh rac1-priv date
[oracle@rac1 ~]$ ssh rac2-priv date

在 rac2 节点上执行:

[oracle@rac2 ~]$ ssh rac1 date
[oracle@rac2 ~]$ ssh rac2 date
[oracle@rac2 ~]$ ssh rac1-priv date
[oracle@rac2 ~]$ ssh rac2-priv date

3. 配置网络

[root@rac1 ~]# cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost

10.10.6.203 rac1.company.com.cn rac1
10.10.6.204 rac1-vip
192.168.122.101 rac1-priv

10.10.6.207 rac2.company.com.cn rac2
10.10.6.208?? rac2-vip
192.168.122.102 rac2-priv

[root@rac2 ~]# cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost

10.10.6.203 rac1.company.com.cn rac1
10.10.6.204 rac1-vip
192.168.122.101 rac1-priv

10.10.6.207 rac2.company.com.cn rac2
10.10.6.208?? rac2-vip
192.168.122.102 rac2-priv

4. 同步时间

[root@rac1 ~]# crontab -l
0 6 * * * /usr/sbin/ntpdate 10.1.4.30 ; /sbin/hwclock -w? > /dev/null 2>&1

[root@rac2 ~]# crontab -l
0 6 * * * /usr/sbin/ntpdate 10.1.4.30 ; /sbin/hwclock -w? > /dev/null 2>&1

5. 配置内核参数

分别在 rac1 和 rac2 两个节点上将下列内容添加到 /etc/sysctl.conf 中去,然后分别在 shell 下运行 “sysctl -p” 命令。

kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 262144
net.core.rmem_max = 1048576
net.core.wmem_default = 262144
net.core.wmem_max = 1048576

6. 设置用户限制

  1. 在 rac1 和 rac2 两个节点上将下列内容添加到 /etc/security/limits.conf 文件中:

    oracle soft nproc 2047
    oracle hard nproc 16384
    oracle soft nofile 1024
    oracle hard nofile 65536

  2. 分别在 rac1 和 rac2 两个节点上将下列内容添加到 /etc/pam.d/login 文件中:

    session required /lib/security/pam_limits.so

  3. 分别在 rac1 和 rac2 两个节点上将下列内容添加到 /etc/profile 文件中:

    if [ $USER = "oracle" ]; then
    if [ $SHELL = "/bin/ksh" ]; then
    ulimit -p 16384
    ulimit -n 65536
    else
    ulimit -u 16384 -n 65536
    fi
    fi

7. 使用 HugePage 内存技术

分别在 rac1 和 rac2 两个节点上将下列内容添加到 /etc/security/limits.conf 文件中:

Oracle soft memlock 3145728
Oracle hard memlock 3145728

8. 配置 hangcheck-timer 模块

hangcheck-timer 是 Linux 提供的一个内核级的 IO-Fencing 模块, 这个模块会监控 Linux 内核运行状态,如果长时间挂起,这个模块会自动重启系统。 这个模块在 Linux 内核空间运行,不会受系统负载的影响。这个模块会使用 CPU 的 Time Stamp Counter 寄存器,这个寄存器的值会在每个时钟周期自动增加, 因此使用的是硬件时间,所以精度更高。配置这个模块需要2个参数:hangcheck_tick 和 hangcheck_margin。

hangcheck_tick 参数用于定义多长时间检查一次,缺省值是30秒。有可能内核本身很忙,导致这个检查被推迟,该模块还允许定义一个延迟上限,就是 hangcheck_margin,它的缺省值是180秒。hangcheck-timer 模块会根据 hangcheck_tick 参数定时检查内核。只要2次检查的时间间隔小于 hangcheck_tick 与 hangchec_margin 之和,都会认为内核运行正常,否则就意味着运行异常,这个模块会自动重启系统。

CRS 本身还有一个 MissCount 参数,可以通过“crsctl get css miscount”命令查看。

当 RAC 节点间的心跳信息丢失时, Clusterware 必须确保在进行重构时,故障结点确实是 Dead 状态,否则节点仅是临时负载过高导致心跳丢失,然后其他结点开始重构,但是结点没有重启,这样会损坏数据库。 因此 MissCount 必须大于 hangcheck_tick 与 hangcheck_margin 两个参数之和。

在 rac1 和 rac2 两个节点上都应执行如下操作,以 rac1 节点上的操作为例:

[root@rac1 ~]# find /lib/modules -name “hangcheck-timer.ko”
/lib/modules/2.6.18-164.el5/kernel/drivers/char/hangcheck-timer.ko
/lib/modules/2.6.18-164.el5xen/kernel/drivers/char/hangcheck-timer.ko

[root@rac1 ~]# modprobe hangcheck-timer

[root@rac1 ~]# vi /etc/rc.d/rc.local
modprobe hangcheck-timer

[root@rac1 ~]# vi /etc/modprobe.conf
options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180

[root@rac1 ~]# grep Hangcheck /var/log/messages | tail -2
Sep 7 19:53:03 rac1 kernel: Hangcheck: starting hangcheck timer 0.9.0 (tick is 180 seconds, margin is 60 seconds).
Sep 7 19:53:03 rac1 kernel: Hangcheck: Using monotonic_clock().

9. 划分网络共享存储

[root@rac1 ~]# fdisk -l
Disk /dev/cciss/c0d0: 146.7 GB, 146778685440 bytes
255 heads, 32 sectors/track, 35132 cylinders
Units = cylinders of 8160 * 512 = 4177920 bytes

Device Boot Start End Blocks Id System
/dev/cciss/c0d0p1 * 1 25 101984 83 Linux
/dev/cciss/c0d0p2 26 35132 143236560 8e Linux LVM

Disk /dev/sda: 149.9 GB, 149999992832 bytes
255 heads, 63 sectors/track, 18236 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 1 3000 24097468+ 83 Linux
/dev/sda2 3001 6000 24097500 83 Linux
/dev/sda3 6001 9000 24097500 83 Linux
/dev/sda4 9001 12000 24097500 83 Linux

Disk /dev/sdb: 149.9 GB, 149999992832 bytes
255 heads, 63 sectors/track, 18236 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sdb1 1 3000 24097468+ 83 Linux
/dev/sdb2 3001 6000 24097500 83 Linux
/dev/sdb3 6001 9000 24097500 83 Linux
/dev/sdb4 9001 12000 24097500 83 Linux
[root@testrac1 rac]#

[root@rac2 ~]# partprobe

10. 安装与配置 ocfs2

实践中,我使用 ocfs2 来作为保存 OCR 与 Voting Disks 的文件系统。

[root@rac1 ~]# rpm -Uvh ocfs2*

[root@rac1 ~]# vi /etc/ocfs2/cluster.conf

node:
ip_port = 7777
ip_address = 192.168.122.101
number = 0
name = testrac1
cluster = ocfs2

node:
ip_port = 7777
ip_address = 192.168.122.102
number = 1
name = testrac2
cluster = ocfs2

cluster:
node_count = 2
name = ocfs2

[root@rac1 ~]# /etc/init.d/o2cb offline ocfs2
[root@rac1 ~]# /etc/init.d/o2cb upload
[root@rac1 ~]# /etc/init.d/o2cb configure
[root@rac1 ~]# reboot

在 rac1 节点:

[root@rac1 ~]# mkfs.ocfs2 -b 4k -C 32K -N 4 -L oracrsfiles /dev/sdb1

在 rac1 和 rac2 节点上,以 rac1 上的操作为例:

[root@rac1 ~]# mount -t ocfs2 -o datavolume, nointr /dev/sdb1 /ocfs
[root@rac1 ~]# vi /etc/fstab
/dev/sdb1 /ocfs ocfs_netdev,datavolume,nointr 0 0

11.安装配置 oracleasm

[root@rac1 ~]# rpm -Uvh oracleasm*
[root@rac1 ~]# /etc/init.d/oracleasm createdisk VOL1 /dev/sdb2
[root@rac1 ~]# /etc/init.d/oracleasm createdisk VOL2 /dev/sdb3
[root@rac1 ~]# /etc/init.d/oracleasm createdisk VOL3 /dev/sdb4

我没有使用 raw 分区来配置共享存储从而存储 OCR 和 Voting Disks 或数据库文件,如果你对这方面感兴趣请参考这篇 文章

12. 修改用户配置文件

在 rac1 和 rac2 两个节点上都应执行如下操作,以 rac1 节点上的操作为例(两个节点仅 ORACLE_SID 变量不同):

# User specific environment and startup programs

PATH=$PATH:$HOME/bin
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export ORA_CRS_HOME=$ORACLE_BASE/product/crs
export ORACLE_SID=racdb1
export PATH=.:${PATH}:$HOME/bin:$ORACLE_HOME/bin
export PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
export PATH=${PATH}:$ORACLE_BASE/common/oracle/bin
export ORACLE_TERM=xterm
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ORA_NLS10=$ORACLE_HOME/nls/data
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
export CLASSPATH=$ORACLE_HOME/JRE
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib
export THREADS_FLAG=native
export TEMP=/tmp
export TMPDIR=/tmp

13. 安装与配置 Oracle Clusterware

你只需要按照官方文档一步一步操作,最后分别在 rac1 和 rac2 两个节点上以 root 身份依次执行 orainstRoot.sh 和 root.sh 脚本,Clusterware 安装结束后,可以确认一下:

$ /u01/app/oracle/product/crs/bin/olsnodes -n
rac1
rac2

$ ls -l /etc/init.d/init.*
-r-xr-xr-x 1 root root 1951 Oct 4 14:21 /etc/init.d/init.crs*
-r-xr-xr-x 1 root root 4714 Oct 4 14:21 /etc/init.d/init.crsd*
-r-xr-xr-x 1 root root 35394 Oct 4 14:21 /etc/init.d/init.cssd*
-r-xr-xr-x 1 root root 3190 Oct 4 14:21 /etc/init.d/init.evmd*

检查 CRS 安装启动情况:用 root 用户执行:

$CRS_HOME/bin/crsctl check crs

CSS appears healthy

CRS appears healthy

EVM appears healthy

表明 CRS 安装完成,并且启动成功。

[root@rac1 bin]# ./crs_stat -t -v

Name Type R/RA F/FT Target State Host
———————————————————————-
ora.rac1.gsd application 0/5 0/0 ONLINE ONLINE rac1
ora.rac1.ons application 0/3 0/0 ONLINE ONLINE rac1
ora.rac1.vip application 0/0 0/0 ONLINE ONLINE rac1
ora.rac2.gsd application 0/5 0/0 ONLINE ONLINE rac2
ora.rac2.ons application 0/3 0/0 ONLINE ONLINE rac2
ora.rac2.vip application 0/0 0/0 ONLINE ONLINE rac2

注:如果 Clusterware 安装失败,再次运行安装程序,里面可以把之前的安装删除掉,删除之后在进行安装。

14. 安装 Oracle 数据库

在 rac1 节点上安装 Oracle 数据库软件,OUI 会自动将相关的软件文件拷贝到 rac2 节点上去,所以这部分的安装过程跟单机安装 Oracle 的过程基本一致,只是在安装模式的选择上勾选 Cluster Installation,另外就是在最后阶段需要根据 UI 界面的提示信息分别在两个节点上执行相关 shell 脚本。

15. 使用 netca 创建监听

  1. oracle 用户在 rac1 节点上运行 netca
  2. 选择所有节点
  3. 选择 Listener configuration
  4. 添加一个 LISTENER,端口号1521 ,然后结束配置。

监听配置成功后, 2个节点上的 Listener 都会作为 Application Resource 注册到 CRS 中, 这样 CRS  就可以监控Listener 的运行状态。 我们可以通过 crs_stat -t -v 查看 Listener 状态。tnsnames.ora 配置文件内容如下:

RACDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = racdb)
)
)

LISTENERS_RACDB =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))
)

RACDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = racdb)
(INSTANCE_NAME = racdb1)
)
)

RACDB2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = testrac2-vip)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = racdb)
(INSTANCE_NAME = racdb2)
)
)

16. 创建 ASM 实例

  1. 运行 DBCA 命令
  2. 选择 configure Automatic Storage Management, 来创建 ASM 实例。
  3. 选择所有节点。
  4. 输入密码。RAC 的 spfile 必须放在共享目录下。 参数文件我们选择第一个 initialization parameter。
  5. 修改 ASM 参数: asm_diskstring = ORCL:VOL*,这样能让 Oracle 自动发现这些硬盘。
  6. ASM 实例创建完后,用 Create New 来创建 ASM 磁盘组。 我们用 VOL1 来创建一个 DATA 组, VOL2 创建FLASH_RECOVERY_AREA 组。
    注意: Redundancy 一般选 external 就是也就是不考虑冗余,假如选 normal 则是 mirror,至少要一个 FailGroup。选 High 就是 triple mirror,3倍镜像,需要三个 FailGroup。
  7. 创建完成后,能看到组的状态是 Mount,ASM 组必须 mount 之后才能使用。
    注意: ASM 对应的device 需要oracle 用户的权限,如: 

    chown oracle:oinstall /dev/mapper/device_name

17. 使用 dbca 创建 RAC 数据库

  1. oracle 用户运行 dbca
  2. 选择 custom database
  3. 输入数据库的全局名,比如 racdb
  4. 输入系统的角色建立密码
  5. 选择 ASM 来存储, 分别选择我们刚创建的 DATA 和 FLASH_RECOVERY_AREA 组。
  6. Database Services 这里,你选择 Add 你一个新的 service, 随便叫名字,比如 racdb。然后选择 TAF Policy,是 Basic。 这个服务在 RAC 的 Failover 中会用到,如果在这里没有配置,也可以通过 dbca 命令, 选择 Services Management 来进行配置。 具体参考 Blog:Oracle RAC Failover 详解
  7. 开始创建数据库

18. 检查与测试

[root@rac1 bin]# ./srvctl status database -d rac
Instance rac2 is running on node rac1
Instance rac1 is running on node rac2

[root@rac1 bin]# ./crs_stat -t
Name Type Target State Host
————————————————————
ora.rac.db application ONLINE ONLINE rac1
ora….oltp.cs application ONLINE ONLINE rac2
ora….ac1.srv application ONLINE ONLINE rac2
ora….ac2.srv application ONLINE ONLINE rac1
ora….c1.inst application ONLINE ONLINE rac2
ora….c2.inst application ONLINE ONLINE rac1
ora….SM2.asm application ONLINE ONLINE rac1
ora….C1.lsnr application ONLINE ONLINE rac1
ora.rac1.gsd application ONLINE ONLINE rac1
ora.rac1.ons application ONLINE ONLINE rac1
ora.rac1.vip application ONLINE ONLINE rac1
ora….SM1.asm application ONLINE ONLINE rac2
ora….C2.lsnr application ONLINE ONLINE rac2
ora.rac2.gsd application ONLINE ONLINE rac2
ora.rac2.ons application ONLINE ONLINE rac2
ora.rac2.vip application ONLINE ONLINE rac2


http://www.niftyadmin.cn/n/1552398.html

相关文章

【Verilog HDL】FPGA-testbench基础知识

🎉欢迎来到FPGA专栏~testbench基础知识 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒🍹 ✨博客主页:小夏与酒的博客 🎈该系列文章专栏:FPGA学习之旅 文章作者技术和水平有限,如果文中出现错误,希望大家能…

故障排除:enq: TX - index contention (文档 ID 2331575.1)

适用于: Oracle Database - Enterprise Edition - 版本 10.2.0.1 到 11.2.0.4 [发行版 10.2 到 11.2]本文档所含信息适用于所有平台目标 本文档的目的是帮助诊断" enq: TX - index contention"问题 解决方案 当运行 OLTP 系统时,当应用程序并发很高时&…

Oracle 中的 DUAL 表详解

1. DUAL 表的用途DUAL 是 Oracle 中的一个实际存在的表,任何用户均可读取,常用在没有目标表的 select 语句块中: –查看当前连接用户 SQL> select user from dual; USER —————————— SYSTEM –查看当前日期、时间 SQL> select sysdate fr…

Oracle RAC/Clusterware 多种心跳heartbeat机制介绍 RAC超时机制分析

转自https://blog.csdn.net/cscscscsc/article/details/55853121ORACLE RAC中最主要存在2种clusterware集群件心跳 & RAC超时机制分析: 1、Network Heartbeat 网络心跳 每秒发生一次; 10.2.0.4以后网络心跳超时misscount为60s,;11.2以后…

VCS维护手册

1 常用命令介绍 对VCS的常用命令进行介绍,便于工程师进行日常维护。本手册描述的命令仅供参考,具体描述请以Veritas公司提供的相关资料为准。 VCS的安装和命令都在下列目录下:sbin, /usr/sbin, /opt/VRTS/bin,和/opt/VRTSvcs/bin …

便捷的日志收集和分析工具TFA

转自https://blogs.oracle.com/database4cn/tfa 1. 便捷的日志收集和分析工具Trace File Analyzer 客户在和技术支持的工程师解决GI(RAC)问题的时候,一个最大的问题就是及时的收集各个节点上和问题相关的日志和诊断数据,特别是收集…

RHCS 排错常用命令

1.1. 群集状态查看(clustat) The clustat command displays the status of the cluster. It shows membership information, quorum view, and the state of all configured user services. The clustat command displays cluster status only from the viewpoint of the clus…

跳过数据文件与跳过表空间

您有一个数据库,其中有一个或多个数据文件处于脱机状态,并且无法recovery,因为归档日志所需的文件不再存在。 当您使用rman resotre和recovery此类数据库时,Rman恢复会要求提供脱机文件所需的归档日志,因为目前Rman没有…