原文 http://blog.csdn.net/tianlesoftware/article/details/5874093
Oracle RAC 添加节点,操作也简单。 官网的操作说明如下:
http://www.oracle.com/technology/global/cn/pub/articles/vallath-nodes.html
假设已经有了2个节点的RAC,节点分别为rac1 和 rac2,其平台是raw + ASM + Oracle 10g +redhat 5.4 , 我们现在在这个集群上添加一个节点rac3. 步骤和2个节点的RAC 安装差不多。
2个节点的RAC 安装,参考:
Redhat 5.4 + ASM + RAW+ Oracle 10g RAC 安装文档
http://blog.csdn.net/tianlesoftware/archive/2010/09/09/5872593.aspx
Rac1 , rac2 和rac3 节点的信息规划如下:
服务器主机名 | rac1 | rac2 | rac3 |
公共IP地址(eth0) | 10.85.10.1 | 10.85.10.2 | 10.85.10.5 |
虚拟IP地址(eth0) | 10.85.10.3 | 10.85.10.4 | 10.85.10.6 |
私有IP地址(eth1) | 192.168.1.200 | 192.168.1.201 | 192.168.1.202 |
ORACLE RAC SID | rac1 | rac2 | Rac3 |
集群实例名称 | Rac | ||
OCR(oracle集群注册表) | /dev/raw/raw1 /dev/sdb1 200M /dev/raw/raw2 /dev/sdb2 200M | ||
表决磁盘(voting disk) | /dev/raw/raw3 /dev/sdc1 200M /dev/raw/raw4 /dev/sdc2 200M /dev/raw/raw5 /dev/sdc3 200M | ||
ASM | /dev/sdd1 10G VOL1 for Oracle Data /dev/sdd1 5G VOL2 for flash_recovery_area | ||
数据库备份 | /dev/sde1 10G (mkfs -t ext3 /dev/sde1) |
一. 安装前准备及OS安装配置
同2个节点的类似,装好虚拟操作系统,配置好硬盘,网关,IP地址,建立用户等效性,建立用户并创建相关目录,修改linux 参数等。
1.1 安装好虚拟机,并在配置文件里添加如下信息:
ethernet1.present = "TRUE"
ethernet1.allowGuestConnectionControl = "FALSE"
ethernet1.features = "1"
ethernet1.wakeOnPcktRcv = "FALSE"
ethernet1.networkName = "Bridged"
ethernet1.addressType = "generated"
scsi1.present = "TRUE"
scsi1.virtualDev = "lsilogic"
scsi1.sharedBus = "virtual"
scsi1:1.present = "TRUE"
scsi1:1.mode = "independent-persistent"
scsi1:1.filename = "F:/VM/racshare/ocr.vmdk"
scsi1:1.deviceType = "disk"
scsi1:2.present = "TRUE"
scsi1:2.mode = "independent-persistent"
scsi1:2.filename = "F:/VM/racshare/votingdisk.vmdk"
scsi1:2.deviceType = "disk"
scsi1:3.present = "TRUE"
scsi1:3.mode = "independent-persistent"
scsi1:3.filename = "F:/VM/racshare/asm4data.vmdk"
scsi1:3.deviceType = "disk"
scsi1:4.present = "TRUE"
scsi1:4.mode = "independent-persistent"
scsi1:4.filename = "F:/VM/racshare/backup.vmdk"
scsi1:4.deviceType = "disk"
disk.locking = "false"
diskLib.dataCacheMaxSize = "0"
diskLib.dataCacheMaxReadAheadSize = "0"
diskLib.DataCacheMinReadAheadSize = "0"
diskLib.dataCachePageSize = "4096"
diskLib.maxUnsyncedWrites = "0"
1.2 配置raw3的2个网卡的固定IP,hostname, gateway,也可以在安装系统时指定。
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth1
/etc/sysconfig/network
[root@rac3 network-scripts]# more /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=10.85.10.5
NETMASK=255.255.255.0
NETWORK=10.85.10.253
ONBOOT=yes
TYPE=Ethernet
[root@rac3 network-scripts]# more /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=static
IPADDR=192.168.1.202
NETMASK=255.255.255.0
NETWORK=192.168.1.1
ONBOOT=yes
TYPE=Ethernet
--修改主机名
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=rac3
注:需要重启才能生效
修改完之后重启生效:
/etc/rc.d/init.d/network restart 重新启动
1.3 同步时间:
在rac3 上添加任务,每一分钟和rac1进行一次时间同步。
[root@rac3~]# crontab -l
*/1 * * * * rdate -s 10.85.10.1
rac 对节点间时间较敏感,如果不同步在安装clusterware 时后会报错,而且在安装vipca 的时候也会报错。 具体时间同步参考我的blog:
Linux 时间同步配置
http://blog.csdn.net/tianlesoftware/archive/2010/02/21/5315587.aspx
linux 下修改日期和时间
http://blog.csdn.net/tianlesoftware/archive/2009/11/13/4808096.aspx
1.4. 修改解析文件: /etc/hosts
每个节点都要设置成如下模式:
[root@rac3 network-scripts]# more /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost
10.85.10.1 rac1
10.85.10.2 rac2
10.85.10.5 rac3
192.168.1.200 rac1-priv
192.168.1.201 rac2-priv
192.168.1.202 rac3-priv
10.85.10.3 rac1-vip
10.85.10.4 rac2-vip
10.85.10.6 rac3-vip
1.5 建立用户及用户等效性
-- 建立用户和相关组
[root@rac3 ~]# groupadd oinstall
[root@rac3 ~]# groupadd dba
[root@rac3 ~]# useradd -g oinstall -G dba oracle
[root@rac3 ~]# passwd oracle
-- 建立用户等效性
[root@rac3 /]# su - oracle
[oracle@rac3 ~]$ mkdir ~/.ssh
[oracle@rac3 ~]$ chmod 700 ~/.ssh
[oracle@rac3 ~]$ ssh-keygen -t rsa
[oracle@rac3 ~]$ ssh-keygen -t dsa
-- 将rac1上将authorized_keys 文件copy到raw3
[oracle@rac3 ~]$ scp rac1:~/.ssh/authorized_keys ~/.ssh/authorized_keys
-- 将rac3的id_rsa.pub 和id_dsa.pub 写入authorized_keys
[oracle@rac3 ~]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[oracle@rac3 ~]$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
-- 将rac3上最新的authorized_keys 文件copy到rac1 和rac2上
[oracle@rac3 ~]$ scp ~/.ssh/authorized_keys rac1:~/.ssh/authorized_keys
[oracle@rac3 ~]$ scp ~/.ssh/authorized_keys rac2:~/.ssh/authorized_keys
-- 在三个节点上用Oracle用户分别ssh 所有节点
[oracle@rac3 ~]$ ssh rac1 date
[oracle@rac3 ~]$ ssh rac1-priv date
[oracle@rac3 ~]$ ssh rac2 date
[oracle@rac3 ~]$ ssh rac2-priv date
[oracle@rac3 ~]$ ssh rac3 date
[oracle@rac3 ~]$ ssh rac3-priv date
1.6 创建目录结构
[root@rac3 ~]# mkdir -p /u01/app/oracle
[root@rac3 ~]# chown -R oracle:oinstall /u01
[root@rac3 ~]# chmod -R 777 /u01
1.7 修改linux 系统参数
[root@rac3 ~]# more /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=262144
net.core.wmem_max=262144
kernel.shmall = 78643200
kernel.shmmax = 314572800
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
# sysctl -p 立刻生效
vi /etc/sysconfig/limits.conf
--使用HugePage 内存技术,添加下面2行
Oracle soft memlock 5242880
Oracle hard memlock 524280
--进程句柄数量
oracle soft nproc 2047
oracle hard nproc 16384
-- 文件句柄
oracle soft nofile 65536
oracle hard nofile 65536
将下面一行添加到/etc/pam.d/login文件中:
session required /lib/security/pam_limits.so
1.8 配置 hangcheck-timer 模块
--查看模块位置
[root@rac3 ~]# find /lib/modules -name "hangcheck-timer.ko"
/lib/modules/2.6.9-78.EL/kernel/drivers/char/hangcheck-timer.ko
/lib/modules/2.6.9-78.ELsmp/kernel/drivers/char/hangcheck-timer.ko
--配置系统启动时自动加载模块,在/etc/rc.d/rc.local 中添加如下内容
[root@rac3 ~]# modprobe hangcheck-timer
[root@rac3 ~]# more /etc/rc.d/rc.local
touch /var/lock/subsys/local
modprobe hangcheck-timer
-- 配置hangcheck-timer参数, 在/etc/modprobe.conf 中添加如下内容:
[root@rac3 ~]# more /etc/modprobe.conf
options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180
--确认模块加载成功:
[root@rac3 ~]# grep Hangcheck /var/log/messages | tail -2
Sep 9 02:09:08 rac3 kernel: Hangcheck: starting hangcheck timer 0.9.0 (tick is 180 seconds, margin is 60 seconds).
Sep 9 02:09:08 rac3 kernel: Hangcheck: Using monotonic_clock().
1.9 配置raw 设备
因为是添加节点,所以这些设备都是已经分配好的,我们只需要把他们添加到参数中即可。操作系统是redhat 5.4,在raw 的配置和redhat 4有点区别。
1)修改/etc/udev/rules.d/60-raw.rules 文件
添加如下内容:
ACTION=="add", KERNEL=="sdb1",RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add", KERNEL=="sdb2",RUN+="/bin/raw /dev/raw/raw2 %N"
ACTION=="add", KERNEL=="sdc1",RUN+="/bin/raw /dev/raw/raw3 %N"
ACTION=="add", KERNEL=="sdc2",RUN+="/bin/raw /dev/raw/raw4 %N"
ACTION=="add", KERNEL=="sdc3",RUN+="/bin/raw /dev/raw/raw5 %N"
ACTION=="add",KERNEL=="raw[1-5]", OWNER="oracle", GROUP="oinstall", MODE="660"
2)重启服务:
[root@rac3 ~]# start_udev
Starting udev: [ OK ]
3)查看raw设备:
[root@rac3 ~]# ls -lrt /dev/raw
total 0
crw-rw---- 1 oracle oinstall 162, 2 Sep 9 02:15 raw2
crw-rw---- 1 oracle oinstall 162, 1 Sep 9 02:15 raw1
crw-rw---- 1 oracle oinstall 162, 5 Sep 9 02:15 raw5
crw-rw---- 1 oracle oinstall 162, 4 Sep 9 02:15 raw4
crw-rw---- 1 oracle oinstall 162, 3 Sep 9 02:15 raw3
1.10 安装ASM包,配置ASM,并搜索ASM
--在rac3上安装 ASMLibs, tools, support 三个rpm文件
# rpm -ivh *.rpm --nodeps --force
-- 运行 /etc/init.d/oracleasm configure
回答 oracle , dba, y, y 就可以了
-- linux 挂在windows 共享的盘
1. 启动nfs服务: service nfs start
2. mount -o username=share,password=share //10.85.10.80/RAC /mnt
-- 查看ASM 磁盘
[root@rac3 asm]# /etc/init.d/oracleasm listdisks
VOL1
VOL2
1.11 用oracle 用户,修改ORACLE 参数文件 /home/oracle/.bash_profile, 添加以下内容:
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=rac3
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
二.安装Clusterware
Oracle 集群件已经安装在集群上;这里的任务是将新节点添加到集群配置中。要执行该任务,需要执行 Oracle 提供的名为 addnode 的实用程序,该工具位于 Clusterware 的主 oui/bin 目录中。Oracle 集群件有两个文件(Oracle 集群信息库 (OCR) 和 Oracle 集群同步服务 (CSS) 表决磁盘),它们包含有关该集群以及由 Oracle 集群件管理的应用程序的信息。这些文件需要使用关于新节点的信息进行更新。集群件安装过程的第一步是验证新节点是否准备好进行安装。
2.1 验证硬件和操作系统配置已经完成
[oracle@rac1 bin]$ pwd
/u01/app/oracle/product/crs/bin
[oracle@rac1 bin]$ ./cluvfy stage -post hwos -n rac1,rac3
2.2 在安装集群之前检查节点列表中的所有节点
[oracle@rac1 bin]$ ./cluvfy stage -pre crsinst -n rac1,rac3
这里会检查相关的包,如果有缺少的,到这个网站搜索,下载后打上即可:
2.3 用Xmanager 连接到rac1,用Oracle用户运行$ORA_CRS_HOME/oui/bin/addNode.sh 命令。运行命令之前先指定export DISPLAY=10.85.10.80:0.0
若在此处报错:
Exception java.lang.NullPointerException occurred..
java.lang.NullPointerException
at oracle.sysman.oii.oiic.OiicAddNodeSession.initialize(OiicAddNodeSession.java:564)
at oracle.sysman.oii.oiic.OiicAddNodeSession.<init>(OiicAddNodeSession.java:135)
at oracle.sysman.oii.oiic.OiicSessionWrapper.createNewSession(OiicSessionWrapper.java:860)
at oracle.sysman.oii.oiic.OiicSessionWrapper.<init>(OiicSessionWrapper.java:186)
at oracle.sysman.oii.oiic.OiicInstaller.init(OiicInstaller.java:481)
at oracle.sysman.oii.oiic.OiicInstaller.runInstaller(OiicInstaller.java:928)
at oracle.sysman.oii.oiic.OiicInstaller.main(OiicInstaller.java:866)
这个错误是由于/etc/oraInst.loc 的权限问题造成,切换root用户,给777权限即可:
[root@rac2 oraInventory]# ls -al /etc/oraInst.loc
-rwxr-x--- 1 root root 63 Aug 5 19:34 /etc/oraInst.loc
[root@rac2 oraInventory]# chmod 777 /etc/oraInst.loc
[root@rac2 oraInventory]# ls -alrt /etc/oraInst.loc
-rwxrwxrwx 1 root root 63 Aug 5 19:34 /etc/oraInst.loc
2.4 在界面上下一步,会提示输入新节点的名称。填写完之后进入安装。
2.5 当需要的所有集群件组件从 orc1 复制到 orc3 之后,OUI 将提示用root用户在对应的节点上执行三个文件
/u01/app/oracle/oraInventory/orainstRoot.sh -- >rac3
/u01/app/oracle/product/crs/install/rootaddnode.sh àrac1
/u01/app/oracle/product/crs/root.sh à rac3
在执行root.sh 脚本的时候,最后会调用vipca命令。 提示如下:
Running vipca(silent) for configuring nodeapps
IP address "rac2-vip" has already been used. Enter an unused IP address.
产生错误“rac2-vip’ has already been used”,因为 VIP 已经在所有节点(而非 rac3)上进行了配置。我们手动执行 VIPCA(虚拟 IP 配置助手)即可。用Xmanager 工具连到新节点,在root用户下执行vipca。
[root@rac3 ~]# cd /u01/app/oracle/product/crs/bin/
[root@rac3 bin]# ./vipca
完成 Oracle 集群件安装后,将在其各自目录中创建下列文件。
集群件文件:
[root@rac3 /]# ls -ltr /etc/init.d/init.*
-r-xr-xr-x 1 root root 3190 Sep 9 03:52 /etc/init.d/init.evmd
-r-xr-xr-x 1 root root 35394 Sep 9 03:52 /etc/init.d/init.cssd
-r-xr-xr-x 1 root root 4714 Sep 9 03:52 /etc/init.d/init.crsd
-r-xr-xr-x 1 root root 1951 Sep 9 03:52 /etc/init.d/init.crs
使用以下条目更新了操作系统提供的 inittab 文件。
[root@rac3 /]# tail -5 /etc/inittab
# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon
h1:35:respawn:/etc/init.d/init.evmd run >/dev/null 2>&1 </dev/null
h2:35:respawn:/etc/init.d/init.cssd fatal >/dev/null 2>&1 </dev/null
h3:35:respawn:/etc/init.d/init.crsd run >/dev/null 2>&1 </dev/null
使用 olsnodes 命令验证集群件是否注册了所有节点
[oracle@rac3 bin]$ olsnodes
rac2
rac1
rac3
使用 crs_stat 命令验证是否启动了集群服务。
[oracle@rac3 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
ora.rac3.gsd application ONLINE ONLINE rac3
ora.rac3.ons application ONLINE ONLINE rac3
ora.rac3.vip application ONLINE ONLINE rac3
三.安装Oracle 软件
Oracle 已经提供了一个新的称为 addNode.sh 的可执行文件,它位于 $ORACLE_HOME/oui/bin 目录。 用Oracle 用户执行该脚本。
我们用x manager 连接上rac1,在运行这个脚本。运行脚本之前不要忘记指定DISPLAY 变量
[oracle@rac1 bin]$ export DISPLAY=10.85.10.80:0.0
在安装窗口上选中要安装的节点,然后安装即可。
安装最后会提示执行如下脚本:
/u01/app/oracle/product/10.2.0/db_1/root.sh à rac3
执行后,确定,安装结束。
四. netca 创建监听
注:创建数据库过程应该遵循这个顺序: 先配置监听, 再配置ASM 实例, 最后创建数据库实例, 这样可以减少出错的概率。
1. oracle rac3上运行 netca
2 选择 Listener configuration, 只选择rac3 这个节点,创建监听
3.添加一个LISTEN, 1521 port ,然后结束配置 ,监听配置成功后, 添加结点上的Listener Application Resource 注册到CRS中, 这样CRS 就可以监控Listener 的运行状态。 我们可以通过 crs_stat -t -v 查看Listener 状态。
五.创建ASM 实例
1. 用Xmanager 连上rac1 或者 rac2上, 运行DBCA 命令
2. 选择 configure Automatic Storage Management,
3. 选择rac1和rac3结点,这里rac1是必选的,作为父节点,然后向rac3进行extend。在rac3上安装asm实例。
4. 输入之前asm实例的密码。
5. 创建完成。
ASM 的相关信息参考blog:
Oracle ASM 详解
http://blog.csdn.net/tianlesoftware/archive/2010/02/21/5314541.aspx
六. 用DBCA添加新实例
在rac1上,用Oracle 用户连接Xmanager。 进入$ORACLE_HOME/bin目录,运行DBCA。记得指定DISPLAY 变量。
Oracle Real Application Cluster database à Instance Management à Add an Instance –> 下一步,选择实例名。
然后就是下一步, TAF Policy选择Basic。 这个服务在RAC 的Failover中会用到,如果在这里没有配置,也可以通过dbca命令, 选择 Services Management 来进行配置。
Oracle RAC Failover 详解
http://blog.csdn.net/tianlesoftware/archive/2010/03/03/5340788.aspx
然后开始创建数据库。
七.验证添加的节点
[root@rac2 bin]# ./crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora.rac.db application ONLINE ONLINE rac1
ora....oltp.cs application ONLINE ONLINE rac1
ora....ac1.srv application ONLINE ONLINE rac2
ora....ac2.srv application ONLINE ONLINE rac1
ora....ac3.srv application ONLINE ONLINE rac3
ora....c1.inst application ONLINE ONLINE rac2
ora....c2.inst application ONLINE ONLINE rac1
ora....c3.inst application ONLINE ONLINE rac3
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
ora....SM3.asm application ONLINE ONLINE rac3
ora....C3.lsnr application ONLINE ONLINE rac3
ora.rac3.gsd application ONLINE ONLINE rac3
ora.rac3.ons application ONLINE ONLINE rac3
ora.rac3.vip application ONLINE ONLINE rac3