时至今日经过反复的试验终于配置RAC成功现在把详细的操作步骤贴出来供大家参考希望能让同样对RAC的配置存在困惑的兄弟少走一些不必要的弯路也希望朋友们发现有不足之处多多指正共同进步
环境
VMWARE SERVER ORALCE G系统平台为红帽企业版基于RAW设备的的RAC磁盘阵列用模拟共享存储替代节点为两个
节点信息IP PRIVIP VIP HOSTNAME
RAC
RAC
配置系统
包括安装和创建共享存储步骤省略只要相应的开发包要装齐全句OK相信大家既然能玩RAC这些肯定不在话下接下来是系统相关的操作
() 增加ORACLE用户及其组
命令
/usr/sbin/groupadd oinstall
/usr/sbin/groupadd dba
/usr/sbin/useradd m g oinstall G dba oracle
id oracle
这里需要注意的用户 ID 和组 ID 在所有集群主机上必须相同
设置 oracle 帐户的口令
# passwd oracle
Changing password for user oracle
New password:
Retype new password:
passwd:all authentication tokens updated successfully
()创建挂载点
以 root 用户身份执行以下命令
mkdir p /u/app/oracle
chown R oracle:oinstall /u/app/oracle
chmod R /u/app/oracle
()配置内核参数
以 root 用户身份登录并在每个主机上配置 Linux 内核参数
cat >> /etc/nf >>EOF
kernelshmall =
kernelshmmax =
kernelshmmni =
kernelsem =
fsfilemax =
netipvip_local_port_range =
rermem_default=
rewmem_default=
rermem_max=
rewmem_max=
EOF
/sbin/sysctl p
内核参数具体数值请根据系统环境自行设置本例为测试环境
()配置LIMIT
Oracle 建议对每个 Linux 帐户可以使用的进程数量和打开文件的数量设置限制要进行这些更改以 root 用户身份剪切和粘贴下列命令
cat >> /etc/security/nf >>EOF
oracle soft nproc
oracle hard nproc
oracle soft nofile
oracle hard nofile
EOF
()配置 Hangcheck 计时器所有 RHEL 版本
modprobe hangchecktimer hangcheck_tick= hangcheck_margin=
cat >> /etc/rcd/rclocal >>EOF
modprobe hangchecktimer hangcheck_tick= hangcheck_margin=
EOF
()配置 /etc/hosts
有些 Linux 发行版本将主机名与回送地址 () 相关联 如果出现这种情况则从回送地址中删除主机名
用于此指南的 /etc/hosts 文件
localhostlocaldomain localhost
racpriv
racpriv
rac
rac
racvip
racvip
此处需要注意的问题是回环地址中不要出现主机名称再一个是本机的公网IP必须和VIP在一个网段(也有可能是局域网)在设置IP时同网段的IP网关一定要是同一个
以上六步操作需要在所有节点上操作
()为用户等效性配置 SSH
在每个主机上以 oracle 用户身份登录
$ mkdir ~/ssh
$ chmod ~/ssh
$ /usr/bin/sshkeygen t rsa
这些操作会在/home/oracle/ssh/生成id_dsapub文件我们把id_dsapub复制到一个名称为authorized_keys(这个文件需要自己先创建)
以下l两步操作只在RAC上
ssh rac cat /home/oracle/ssh/id_dsapub >> /home/oracle/ssh/authorized_keys
ssh rac cat /home/oracle/ssh/id_rsapub >> /home/oracle//ssh/authorized_keys
把生成的authorized_keys拷贝到RAC的/home/oracle/ssh/下
()测试连通性
如果一切均设置正确则您现在就可以使用 ssh 在其他集群主机上不必输入口令而登录执行程序和复制文件了 通过在远程集群主机上运行诸如 date 等简单命令来验证用户等效性
ssh rac date
ssh rac date
ssh racpriv date
ssh racpriv date
以上SSH命令需要在两个节点上依次执行
测试每个方向上所有服务器的连通性是非常重要的 这样会确保当 OUI 在 CRS 和数据库软件安装期间试图复制文件时不会出现类似以下的消息 该消息只有在远程节点上第一次执行操作时才会出现因此通过测试连通性您不仅确保了远程操作的正常运行还完成了初始的安全密钥交换
()准备共享磁盘(原始设备)在此我们为两个共享磁盘SDBSDC
在集群文件系统和 ASM 可用之前原始分区是为 Oracle RAC 配置共享磁盘存储的唯一选择 由于这种技术经历长时间的考验因此它们构成了一个构建 RAC 集群的非常坚实的平台
但是原始分区有很多缺点 主要是它们必须接受每个磁盘可使用 个分区的限制Linux 强制的 个原始设备的限制以及额外的管理任务和所需计划 对于单实例环境而言逻辑卷管理器 (LVM) 可以减少管理工作并在存储布局方面提供更多灵活性 不幸的是LVM 不能识别集群因此在 RAC 环境中不支持它的使用
在使用原始分区时通常最好选择一组标准的分区大小即某个基本大小的倍数 这就在存储布局方面提供了更大的灵活性并且在需要重新调整 I/O 时便于将分区重新配给其他磁盘我为本示例选择了标准的分区大小 MBMBMB 和 MB
为进一步简化管理每个共享磁盘将拥有相同的分区布局其中包含某种标准化的分区大小 在单个磁盘上能够创建的可用分区的最大数量是 因此要谨慎地计划分区布局 下表显示了本指南中用于原始分区示例的分区布局
分区 类型 大小
SDB的分区的规划
主分区
主分区
主分区
扩展分区
逻辑型
逻辑型
逻辑型
逻辑型
逻辑型
逻辑型
逻辑型
逻辑型
逻辑型
逻辑型
逻辑型 任意
逻辑型 任意
SDC分区的划分
主分区
主分区
主分区
Syncing disks
以上分区操作只需在一个节点上进行即可
在其他主机上运行 partprobe 使内核与所做的更改同步
# partprobe
下表列出了最小的 RAC 数据库所需的每个分区 最小分区大小已经映射到为本示例所选择的标准分区大小 在本示例中使用了两个共享磁盘 (/dev/sdb and /dev/sdc) (请注意SLES 为原始设备使用了一种不同的命名标准
目的最小大小 (MB)标准化大小 (MB)磁盘设备原始设备
Oracle CRS Voting/dev/sdb/dev/raw/raw
SPFILE /dev/sdb/dev/raw/raw
Oracle Cluster Registry/dev/sdb/dev/raw/raw
EXAMPLE 表空间/dev/sdb/dev/raw/raw
USERS 表空间/dev/sdb/dev/raw/raw
控制文件 /dev/sdb/dev/raw/raw
重做日志 _/dev/sdb/dev/raw/raw
重做日志 _/dev/sdb/dev/raw/raw
UNDOTBS 表空间/dev/sdb/dev/raw/raw
SYSTEM 表空间/dev/sdb/dev/raw/raw
TEMP 表空间/dev/sdb/dev/raw/raw
SYSAUX 表空间/dev/sdb/dev/raw/raw
UNDOTBS 表空间/dev/sdb/dev/raw/raw
重做日志 _/dev/sdb /dev/raw/raw
口令文件/dev/sdc/dev/raw/raw
控制文件 /dev/sdc/dev/raw/raw
重做日志 _/dev/sdc/dev/raw/raw
以下命令需要在两个节点上操作
将以下各行添加到每个集群节点上的 /etc/sysconfig/rawdevices
/dev/raw/raw/dev/sdb
/dev/raw/raw/dev/sdb
/dev/raw/raw/dev/sdb
/dev/raw/raw/dev/sdb
/dev/raw/raw/dev/sdb
/dev/raw/raw/dev/sdb
/dev/raw/raw/dev/sdb
/dev/raw/raw/dev/sdb
/dev/raw/raw/dev/sdb
/dev/raw/raw/dev/sdb
/dev/raw/raw/dev/sdb
/dev/raw/raw/dev/sdb
/dev/raw/raw/dev/sdb
/dev/raw/raw/dev/sdb
/dev/raw/raw/dev/sdc
/dev/raw/raw/dev/sdc
/dev/raw/raw /dev/sdc
为每个节点上的 CRS 原始设备设置所有权和权限 这些文件的所有权和权限必须按照所示内容进行准确地设置(安装指南和版本说明都是不正确的) 如果不这样做则导致 CRS 安装失败 如果需要在 CRS 安装失败后进行清理请参见 MetaLink 说明
chown root:oinstall /dev/raw/raw[]
chmod /dev/raw/raw[]
为每个节点上的数据库原始设备设置所有权和权限
chown oracle:oinstall /dev/raw/raw[]
chown oracle:oinstall /dev/raw/raw[]
chmod /dev/raw/raw[]
chmod /dev/raw/raw[]
(注意 RHEL 对原始设备的实施方法与以前的版本不同 每次启动原始设备服务时都会重新创建 /dev/raw/raw* 设备文件删除任何现有的非默认所有权或权限 当原始设备与 Oracle 搭配使用时有几种方法可以解决这个问题 最简单的方法是将 oracle 帐户添加到 disk 组(例如 usermod –G dbadisk oracle) 或者您可以创建一个启动脚本在系统启动时更改原始设备的所有权和权限)
重新启动原始设备服务
RHEL/
/sbin/service rawdevices restart
下表显示了每个原始设备以及我们要为其关联的文件名 (实际上我希望将 spfile 和口令文件与 $ORACLE_HOME/dbs 中的位置相关联但是由于在安装的这个阶段该目录尚不存在因此我暂时选择了 /u/oradata/dbname 中的位置 在安装完成后如果您愿意可以将这些原始设备的符号链接重新定位到 $ORACLE_HOME/dbs 目录)
目的 原始设备 文件名
oracle CRS voting /dev/raw/raw /u/oracrs/votecrs
SPFILE/dev/raw/rawu/oradata/gemni/spfilegemniora
Oracle Cluster Registry/dev/raw/raw/u/oracrs/ocrcrs
EXAMPLE 表空间/dev/raw/raw/u/oradata/gemni/example_dbf
USERS 表空间/dev/raw/raw/u/oradata/gemni/users_dbf
控制文件 /dev/raw/raw/u/oradata/gemni/controlctl
重做日志 _/dev/raw/raw/u/oradata/gemni/redo_log
重做日志 _/dev/raw/raw/u/oradata/gemni/redo_log
UNDOTBS 表空间/dev/raw/raw/u/oradata/gemni/undo_dbf
SYSTEM 表空间/dev/raw/raw/u/oradata/gemni/system_dbf
TEMP 表空间/dev/raw/raw/u/oradata/gemni/temp_dbf
SYSAUX 表空间/dev/raw/raw/u/oradata/gemni/sysaux_dbf
UNDOTBS 表空间/dev/raw/raw/u/oradata/gemni/undo_dbf
重做日志 _/dev/raw/raw/u/oradata/gemni/redo_log
口令文件/dev/raw/raw/u/oradata/gemni/orapwgemni
控制文件 /dev/raw/raw/u/oradata/gemni/controlctl
重做日志 _/dev/raw/raw/u/oradata/gemni/redo_log
以 root 用户身份创建用于符号链接的目录 在本示例中数据库名是 gemni
CRS 文件
mkdir p /u/oracrs
chown R oracle:oinstall /u/oracrs
chmod R /u/oracrs
数据库文件
mkdir p /u/oradata/gemni /u/oradata/gemni
chown R oracle:oinstall /u[]/oradata
chmod R /u[]/oradata
现在以oracle用户登陆只需创建目录和链接即可
ln s /dev/raw/raw /u/oracrs/votecrs
ln s /dev/raw/raw /u/oradata/gemni/spfilegemniora
ln s /dev/raw/raw /u/oracrs/ocrcrs
ln s /dev/raw/raw /u/oradata/gemni/example_dbf
ln s /dev/raw/raw /u/oradata/gemni/users_dbf
ln s /dev/raw/raw /u/oradata/gemni/controlctl
ln s /dev/raw/raw /u/oradata/gemni/redo_log
ln s /dev/raw/raw /u/oradata/gemni/redo_log
ln s /dev/raw/raw /u/oradata/gemni/undo_dbf
ln s /dev/raw/raw /u/oradata/gemni/system_dbf
ln s /dev/raw/raw /u/oradata/gemni/temp_dbf
ln s /dev/raw/raw /u/oradata/gemni/sysaux_dbf
ln s /dev/raw/raw /u/oradata/gemni/undo_dbf
ln s /dev/raw/raw /u/oradata/gemni/redo_log
ln s /dev/raw/raw /u/oradata/gemni/orapwgemni
ln s /dev/raw/raw /u/oradata/gemni/controlctl
ln s /dev/raw/raw /u/oradata/gemni/redo_log
最后我们需要为数据库配置助手 (DBCA) 创建原始设备映射文件 此文件将您已创建的原始设备与 DBCA 将要用于创建数据库的名称相关联 剪切和粘贴以下各行为本示例创建映射文件
cat > $HOME/nf << EOF
system=/u/oradata/gemni/system_dbf
sysaux=/u/oradata/gemni/sysaux_dbf
example=/u/oradata/gemni/example_dbf
users=/u/oradata/gemni/users_dbf
temp=/u/oradata/gemni/temp_dbf
undotbs=/u/oradata/gemni/undo_dbf
undotbs=/u/oradata/gemni/undo_dbf
redo_=/u/oradata/gemni/redo_log
redo_=/u/oradata/gemni/redo_log
redo_=/u/oradata/gemni/redo_log
redo_=/u/oradata/gemni/redo_log
control=/u/oradata/gemni/controlctl
control=/u/oradata/gemni/controlctl
spfile=/u/oradata/gemni/spfilegemniora
pwdfile=/u/oradata/gemni/orapwgemni
EOF
然后将 DBCA_RAW_CONFIG 环境变量导出并指向此文件export DBCA_RAW_CONFIG=$HOME/nf
现在您已准备就绪可以安装 Oracle CRS安装 Oracle 数据库软件并创建 Oracle RAC 数据库了
安装ORACLE CRS(即CLUSTER软件)
在此需要注意的有两点一两个节点系统时间一定要相同不然会报错二一定要建立用户等效性并在次会话执行安装不然也会报错三再以ROOT用户执行脚本时一定要安顺序一个节点执行完再一个节点切勿同时执行
以 oracle 用户身份登录并建立节点间的用户等效性
exec /usr/bin/sshagent $SHELL
/usr/bin/sshadd
Enter passphrase for /home/oracle/ssh/id_rsa:
Identity added: /home/oracle/ssh/id_rsa (/home/oracle/ssh/id_rsa)
Identity added: /home/oracle/ssh/id_dsa (/home/oracle/ssh/id_dsa)
设置 ORACLE_BASE 和 ORACLE_HOME 环境变量
export ORACLE_BASE=/u/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product//crs_
RHEL and SLES Only
export LD_ASSUME_KERNEL=
Welcome单击 Next Specify Inventory Directory and Credentials — 默认值应该就是正确的确保 inventory 目录位于 ORACLE_BASE 目录中(例如 /u/app/oracle/oraInventory)并且操作系统组是oinstall在安装节点 (ds) 上运行 orainstRootsh(确保在 /etc/hosts 中而不仅仅是在 DNS 中配置了您的主机)
Specify File Locations — 确认默认值后继续 Language Selection — 确认默认值后继续 Cluster Configuration — 输入集群名(或接受默认的crs)
Private Interconnect Enforcement — 为每个接口指定接口类型(公共专用或不使用)
Oracle Cluster Registry — 在 clusterSpecify OCR Location 中(例如 /u/oracrs/ocrcrs)为每个节点输入公共节点名和专用节点名 Voting Disk — 输入 voting disk 名(例如 /u/oracrs/votecrs)
在集群的其余节点上运行 orainstRootsh
Summary — 在出现提示时单击 Install从安装节点开始每次在一个节点上运行 Oracle CRS 主目录中的 rootsh(例如 /u/app/oracle/product//crs_/rootsh) 不要同时运行这些脚本 等一个脚本结束后再启动另一个
CRS 安装结束
从 $ORACLE_BASE/product//crs_/bin 目录中运行 olsnodes 验证安装已成功例如
$ cd $ORACLE_BASE/product//crs_/bin
$ olsnodes
ds
ds
Once CRS 已安装并运行现在可以安装 Oracle RAC 软件的其余部分了
安装ORALCE软件创建数据库
设置 ORACLE_BASE 和 ORACLE_HOME 环境变量
export ORACLE_BASE=/u/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product//db_
仅针对 RHES 和 SLES
export LD_ASSUME_KERNEL=
仅针对 RHEL Oracle g OUI 将检查操作系统版本以确认是否支持该版本 到 Oracle 数据库 为止安装程序尚不支持 RHEL 作为一种变通方法在运行 runInstaller 之前按照以下步骤操作
cp /etc/redhatrelease /etc/redhatreleaseorig
cat > /etc/redhatrelease << EOF
Red Hat Enterprise Linux AS release (Taroon)
EOF
从 db CD 运行 runInstaller
Welcome — 单击 Next
Specify File Locations — 确认默认值后继续
Specify Hardware Cluster Installation Mode — 选择 Cluster Installation 并选择集群中的其他节点
Select Installation Type — Enterprise Edition Productspecific Prerequisite Checks — 全部选 OKSLES 选 OK 以忽略 openmotif 警告 选择数据库配置 — 选择Do not create a starter database (我们将在一个单独的步骤中使用数据库配置助手 (DBCA) 来创建数据库)
总结在以 root 用户身份登录时从安装节点开始每次在一个主机上运行 Oracle 数据库主目录中的 rootsh(例如 /u/app/oracle/product//db_/rootsh) 不要同时运行这些脚本 等一个脚本结束后再启动另一个
DBCA创建数据库
$ dbca
Welcome — 选择Oracle Real Application Clusters database
Operations — 创建数据库
Node Selection — 单击 Select All(ds 和 ds)
Database Templates — 通用
Database Identification — 全局数据库名
Management Options — 利用 Enterprise Manager 配置数据库使用数据库控制进行数据库管理
Database Credentials — 为所有帐户使用相同的口令输入口令并再次确认
Storage Options — 原始设备指定原始设备映射文件 (/home/oracle/nf)
Recovery Configuration — 单击 Next
Database Content — 示例模式
初始化参数 — 内存典型
Database Storage — 单击 Next
Create Options — 选择Create Database
Summary — 检查总结信息并单击 OK
至此安装完毕可以从客户端连接节点测试以下为客户端的连接RAC节点TNSNAMEORA文件的内容
GEMNI =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = ))
(ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = ))
(LOAD_BALANCE = yes)
(FAILOVER = ON)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = )
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
)
)
)