尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Oracle RAC一键自动化部署:从原理到实践,基于OL8.8与11gR2的集群环境搭建

Oracle RAC一键自动化部署:从原理到实践,基于OL8.8与11gR2的集群环境搭建 1. 项目缘起为什么我们需要“一键安装”Oracle RAC在数据库运维和架构领域Oracle Real Application ClustersRAC一直是一个既让人向往又让人头疼的存在。向往的是它提供的高可用性、可扩展性和负载均衡能力是构建核心业务系统的基石头疼的是它的部署过程尤其是11gR2版本堪称一场对DBA知识、耐心和体力的综合考验。从操作系统参数调优、共享存储配置、网络规划到Grid Infrastructure和Database软件的静默安装、集群配置每一步都布满了“坑”。我记得早年第一次手动部署RAC光是阅读官方文档就花了一周实际搭建又用了三天期间各种报错、回滚最终成功时感觉像完成了一场马拉松。所以当看到“一键安装”这个概念时很多同行的第一反应可能是怀疑这真的能行吗会不会是个“玩具”只适用于最简单的测试环境实际上一个成熟、稳定的一键安装脚本其价值远不止是“省事”。它是对最佳实践的固化将无数前人踩过的坑、验证过的参数、优化过的步骤封装成可重复执行的自动化流程。对于新手它是一个绝佳的学习脚手架让你绕过繁琐的初始化直接接触到RAC的核心配置和运行原理对于老手它是一个高效的标准化工具能在几分钟内拉起一个符合规范的测试或开发环境极大提升工作效率。本次我们基于Oracle Linux 8.8和Oracle 11gR2231017补丁集来探讨这个“一键安装”方案。选择OL8.8是因为它作为Oracle官方优化的Linux发行版与Oracle软件的兼容性最好预配置了许多必要的内核参数和软件包。而11gR2虽然已非最新版本但在大量传统企业环境中依然服役其稳定性和广泛的生态支持使其学习、测试价值依然巨大。接下来我将带你深入这个“一键”过程的背后看看它究竟做了什么以及我们如何理解并掌控它。2. 环境奠基OL8.8系统准备与内核参数调优任何自动化脚本都离不开一个稳定、合规的基础操作系统环境。一键安装脚本的第一阶段通常就是完成系统的初始化配置。这部分如果手动操作极其繁琐且容易出错而脚本的价值在此凸显。2.1 操作系统安装与基础配置首先你需要准备至少两台虚拟机或物理服务器。对于RAC网络规划是关键。你需要至少配置两块网卡Public IP用于客户端访问和节点间通信通过SCAN IP。网卡名通常如ens192。Private IP专用于RAC节点间高速缓存融合Cache Fusion的内部心跳网络。网卡名通常如ens224。这部分网络要求低延迟、高带宽且最好与公网隔离。在安装Oracle Linux 8.8时建议选择“Minimal Install最小化安装”基础环境然后通过脚本或手动添加必要的软件包组如server with gui如果需要图形界面调试或development tools。脚本会自动处理这些依赖。安装完成后脚本会进行一系列主机配置主机名与Hosts文件为每个节点设置永久主机名如rac01rac02并在/etc/hosts文件中精确写入所有节点的Public IP、Private IP和虚拟IPVIP以及SCAN IP的映射。这里一个常见的坑是/etc/hosts中必须使用静态IP映射不能依赖DNS尤其是SCAN IP否则在安装Grid Infrastructure的root.sh阶段极有可能失败。# /etc/hosts 示例 (节点1视角) 192.168.1.101 rac01 192.168.1.102 rac02 192.168.1.201 rac01-priv 192.168.1.202 rac02-priv 192.168.1.151 rac01-vip 192.168.1.152 rac02-vip 192.168.1.100 rac-scan关闭防火墙与SELinux在实验和测试环境中为了减少复杂度脚本通常会停止并禁用firewalld并将SELinux设置为permissive模式。在生产环境中则需要更精细的防火墙规则和SELinux策略。systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i s/^SELINUX.*/SELINUXpermissive/ /etc/selinux/config2.2 内核参数与资源限制调优Oracle数据库对操作系统内核参数有明确要求。一键脚本会直接修改/etc/sysctl.conf文件应用Oracle推荐的最佳值。理解这些参数的意义比记住数值更重要kernel.sem信号量设置。semmsl表示一个信号量集合中信号量的最大数量semmns是系统范围内信号量总数的限制。Oracle需要较大的值来支持大量进程。kernel.shmall系统可用的共享内存总页数。kernel.shmmax单个共享内存段的最大字节数。kernel.shmmni系统范围内共享内存段标识符的最大数量。这些是Oracle SGA系统全局区使用共享内存的基础。fs.file-max系统级别最大文件句柄数。数据库会打开大量文件。net.core.rmem_default/net.core.wmem_default等网络参数优化节点间和客户端连接的网络性能。脚本应用后需要执行sysctl -p使配置生效。同样用户资源限制文件/etc/security/limits.conf也会被修改为Oracle安装用户通常是oracle和grid提升进程数、文件句柄数等限制防止运行时因资源不足而报错。2.3 用户、组与目录创建脚本会创建必要的操作系统用户和组。标准的做法是oinstall组作为Oracle软件的所有者主组。dba组用于数据库管理拥有SYSDBA权限。oper组用于数据库操作拥有SYSOPER权限。grid组Grid Infrastructure的管理组。asmadmin组ASM实例的管理组。asmoper组ASM实例的操作组。asmdba组允许数据库实例访问ASM存储的组。然后创建grid用户属于oinstallasmadminasmdba等组和oracle用户属于oinstalldba等组。接着创建标准的目录结构如/u01/app/grid/u01/app/oracle并设置正确的所有权和权限755。脚本还会配置grid和oracle用户的环境变量文件如.bash_profile设置ORACLE_BASEORACLE_HOMEPATHLD_LIBRARY_PATH等关键变量。注意不同的自动化脚本可能在用户/组命名和目录结构上略有差异。使用前务必阅读脚本的说明理解其设计规范避免与你自己已有的环境规范冲突。3. 存储与网络核心共享存储配置与ASM磁盘组搭建RAC的核心是共享存储。所有节点都必须能并发访问同一份数据库文件数据文件、控制文件、重做日志等。在11gR2时代Oracle强力推荐使用Automatic Storage ManagementASM来管理这些共享存储它相当于一个专为Oracle数据库设计的卷管理器提供了条带化、镜像等能力无需第三方集群文件系统。3.1 共享存储模拟与设备准备在虚拟化环境如VMware中我们通常用共享虚拟磁盘来模拟SAN存储。为每个节点添加多块磁盘并确保总线类型为SCSI且模式为“独立-持久”。最关键的一步是将每块磁盘的SCSI总线共享模式设置为“虚拟”这样所有节点才能同时看到同一块物理磁盘。脚本或手动操作需要在这些磁盘上创建分区并格式化为Oracle ASM所需的磁盘标签。常用工具是udev规则或ASMLib。现在更通用和推荐的是udev方式因为它不依赖额外驱动。脚本会帮我们生成类似如下的udev规则文件例如/etc/udev/rules.d/99-oracle-asmdevices.rules# 示例为磁盘 /dev/sdb1 创建 ASM 磁盘 OCR1 KERNELsd?1, SUBSYSTEMblock, PROGRAM/usr/lib/udev/scsi_id -g -u -d /dev/$parent, RESULT磁盘的SCSI ID, SYMLINKoracleasm/ocr1, OWNERgrid, GROUPasmadmin, MODE0660规则中通过scsi_id获取磁盘的唯一SCSI标识符来固定设备名防止重启后设备名如/dev/sdb变成/dev/sdc变化导致ASM无法启动。创建规则后执行udevadm trigger和udevadm settle来激活它们。此时你应该能在/dev/oracleasm/目录下看到符号链接。3.2 ASM磁盘组规划与创建ASM磁盘组是逻辑存储单元。一个标准的RAC环境至少需要两个磁盘组OCR/Voting Disk磁盘组用于存放Oracle集群注册表OCR和投票盘Voting Disk。这是集群的大脑必须保证高可用。强烈建议使用外部冗余External Redundancy并至少3块磁盘或者普通冗余Normal Redundancy并分布在不同的物理存储上。大小通常20-30GB足够。DATA磁盘组用于存放数据库文件数据文件、控制文件、重做日志等。根据数据量和性能要求选择冗余级别。在一键安装脚本中这部分通常在安装Grid Infrastructure的过程中通过ASM配置助手ASMCA的静默模式完成。脚本会准备好磁盘路径然后调用asmca命令或直接使用SQL语句创建磁盘组。例如一个静默创建磁盘组的命令可能如下# 假设磁盘路径为 /dev/oracleasm/ocr* 和 /dev/oracleasm/data* # 创建OCR磁盘组 (外部冗余) asmca -silent -createDiskGroup -diskGroupName OCRDG -disk /dev/oracleasm/ocr1,/dev/oracleasm/ocr2,/dev/oracleasm/ocr3 -redundancy EXTERNAL # 创建DATA磁盘组 (外部冗余) asmca -silent -createDiskGroup -diskGroupName DATA -disk /dev/oracleasm/data1 -redundancy EXTERNAL实操心得即使在测试环境也尽量遵循生产环境的磁盘组规划原则。例如不要把OCR/Voting Disk和数据库文件放在同一个物理磁盘上哪怕这个磁盘是虚拟的。这能帮你更好地理解RAC的存储架构。如果脚本默认只用一个磁盘组你可以尝试修改脚本将其拆分为两个这是一个很好的学习过程。4. Grid Infrastructure静默安装与集群配置这是“一键安装”中最核心、最复杂的一环。Grid InfrastructureGI包含了集群就绪服务Clusterware和ASM实例。它负责管理集群节点成员、心跳、故障转移和共享存储。4.1 响应文件准备与解压软件Oracle静默安装的精髓在于“响应文件”response file它是一个包含了所有安装选项和参数的配置文件。一键脚本的本质就是生成一个正确的响应文件然后调用runInstaller执行它。首先你需要从Oracle官网下载11gR2 Grid Infrastructure的安装包例如p13390677_112040_Linux-x86-64_3of7.zip等和最新的补丁集如231017。脚本通常会假设你已经将这些压缩包放在了指定目录如/u01/software。脚本会以grid用户身份将安装包解压到grid用户的ORACLE_HOME下。然后它会根据你之前配置的主机名、IP、扫描IP、磁盘组路径等信息动态生成或修改一个响应文件模板。这个文件通常叫grid_install.rsp。其中关键参数包括ORACLE_HOSTNAMErac01 INVENTORY_LOCATION/u01/app/oraInventory SELECTED_LANGUAGESen,zh_CN ORACLE_BASE/u01/app/grid ORACLE_HOME/u01/app/grid/product/11.2.0/grid INSTALL_TYPECRS_CONFIG DECLINE_SECURITY_UPDATEStrue CONFIGURE_ASMTRUE ASMSNMP_PASSWORDYourPassword123 ... CLUSTER_CONFIGURATIONNEW CLUSTER_NAMErac-cluster ... SCAN_NAMErac-scan SCAN_PORT1521 ...注意DECLINE_SECURITY_UPDATES设为true可以避免安装程序尝试连接Oracle更新服务器这在无外网环境是必须的。密码需要满足Oracle的复杂度要求。4.2 运行安装与执行root.sh生成响应文件后脚本会切换到grid用户进入解压后的安装目录执行静默安装命令./runInstaller -silent -ignorePrereq -responseFile /path/to/grid_install.rsp -waitforcompletion-silent静默模式。-ignorePrereq忽略一些检查谨慎使用需确保环境已满足要求。-waitforcompletion等待安装完成。安装程序会在后台进行链接、复制文件等操作。第一个关键点来了当安装程序提示需要以root身份运行脚本时脚本会自动或在提示下在第一个节点上运行$ORACLE_HOME/root.sh。这个脚本会配置OCR和Voting Disk启动集群服务。你必须密切观察这个脚本的输出它会将日志写入/u01/app/oraInventory/logs/。成功的关键标志是看到 “CRS-2672: Attempting to start ‘ora.cssdmonitor’ on ‘rac01’” 等一系列服务成功启动以及最后出现 “CRS-4256: Updating the profile” 和 “CRS-2673: Attempting to stop ‘ora.crsd’ on ‘rac01’” 后再启动最终提示root.sh执行成功。然后在第一个节点的root.sh成功完成后你必须在所有其他节点上依次运行相同的root.sh脚本。一键脚本会通过SSH免密登录自动在其他节点执行此操作。这是集群扩展的过程。4.3 验证集群状态在所有节点的root.sh都成功后Grid Infrastructure就安装完成了。你可以通过crsctl命令来检查集群状态# 以grid用户执行 crsctl check cluster -all # 检查集群资源状态 crsctl stat res -t你应该能看到所有节点都是ONLINE状态并且ora.asmora.cssdora.diskmon等核心资源都是ONLINE。同时ASM实例也应该已经启动。可以用sqlplus连接到ASM实例检查磁盘组sqlplus / as sysasm SQL SELECT name, state, total_mb, free_mb FROM v$asm_diskgroup;至此一个两节点的Oracle集群已经搭建完毕共享存储ASM也已就绪为数据库软件的安装铺平了道路。5. Oracle Database软件安装与RAC数据库创建在稳固的Grid Infrastructure之上安装数据库软件和创建数据库就相对直接了。这个过程同样通过响应文件进行静默安装。5.1 Database软件静默安装脚本会以oracle用户身份解压Database安装包例如p13390677_112040_Linux-x86-64_1of7.zip等到oracle用户的ORACLE_HOME路径下如/u01/app/oracle/product/11.2.0/dbhome_1。同样需要准备一个数据库软件安装的响应文件db_install.rsp。关键参数包括指定ORACLE_BASEORACLE_HOME以及选择安装企业版并且最重要的是指定CLUSTER_NODES这样安装程序才会把软件二进制文件推送到集群的所有节点上。oracle.install.optionINSTALL_DB_SWONLY UNIX_GROUP_NAMEoinstall INVENTORY_LOCATION/u01/app/oraInventory ORACLE_BASE/u01/app/oracle ORACLE_HOME/u01/app/oracle/product/11.2.0/dbhome_1 oracle.install.db.InstallEditionEE oracle.install.db.DBA_GROUPdba oracle.install.db.OPER_GROUPoper oracle.install.db.CLUSTER_NODESrac01,rac02 DECLINE_SECURITY_UPDATEStrue运行安装命令./runInstaller -silent -ignorePrereq -responseFile /path/to/db_install.rsp -waitforcompletion安装完成后同样需要在每个节点上以root身份运行$ORACLE_HOME/root.sh。这个脚本主要完成一些本地目录的权限设置。5.2 使用DBCA静默创建RAC数据库软件安装好后就可以创建数据库了。我们使用Database Configuration AssistantDBCA的静默模式。脚本会生成一个复杂的dbca.rsp响应文件或者直接使用带参数的dbca命令行。创建RAC数据库的关键在于指定-cluster参数和-nodelist。同时存储位置要指向我们之前创建的ASM磁盘组如DATA。一个简化的命令示例如下dbca -silent \ -createDatabase \ -templateName General_Purpose.dbc \ -gdbName orcl -sid orcl \ -characterSet AL32UTF8 \ -nationalCharacterSet AL16UTF16 \ -sysPassword SysPassword123 \ -systemPassword SystemPassword123 \ -emConfiguration NONE \ -storageType ASM \ -diskGroupName DATA \ -recoveryAreaDestination DATA \ -recoveryAreaSize 10240 \ -datafileDestination DATA \ -cluster \ -nodelist rac01,rac02 \ -databaseType MULTIPURPOSE \ -totalMemory 2048这个命令会创建一个名为orcl的数据库字符集为UTF-8使用DATA磁盘组并在rac01和rac02两个节点上创建实例。-emConfiguration NONE表示不配置Enterprise Manager以加快创建速度。创建过程可能需要十几到几十分钟。完成后你可以通过srvctl命令来管理数据库# 查看数据库配置 srvctl config database -d orcl # 查看数据库状态 srvctl status database -d orcl # 连接到任一节点的实例 sqlplus sys/SysPassword123rac01/orcl as sysdba如果看到两个实例都是OPEN状态那么恭喜你一个完整的Oracle 11gR2 RAC环境已经通过“一键”方式成功部署6. 安装后关键检查与常见问题定位脚本运行完毕并不意味着万事大吉。作为一名负责任的DBA必须进行安装后的健康检查。一键脚本可以帮你搭建环境但理解检查什么和为什么检查是运维能力的体现。6.1 集群与数据库健康检查清单集群层检查crsctl check cluster -all确认所有节点集群服务健康。crsctl stat res -t检查所有集群资源状态确保无OFFLINE或UNKNOWN状态的资源。特别关注ora.onsora.eons等。olsnodes -n列出集群节点及其编号。asmcmd lsdg检查ASM磁盘组挂载状态和空间使用情况。网络层检查crsctl stat res -t | grep -i net检查SCAN VIP、Node VIP等网络资源状态。从集群外使用tnsping或sqlplus连接SCAN IP和每个节点的VIP测试连通性。ssh gridrac01 date和ssh gridrac02 date测试节点间grid和oracle用户的SSH互信是否依然有效安装后有时会因密钥变更而失效。数据库层检查srvctl status database -d orcl确认所有实例运行。srvctl config database -d orcl核对数据库配置如SPFILE位置应在ASM中。连接到每个实例检查告警日志$ORACLE_BASE/diag/rdbms/orcl/instance_name/trace/alert_*.log查看有无ORA-错误。运行SELECT instance_name, status, thread#, open_mode FROM gv$instance;确认所有实例都已打开且线程正常。6.2 典型问题与排查思路即使是一键脚本也可能因环境细微差异而失败。以下是一些常见问题root.sh执行失败这是最高频的故障点。务必查看详细日志日志路径在屏幕输出或/u01/app/oraInventory/logs下。常见原因OCR/Voting Disk权限或路径错误检查ocrconfig和crsctl查询的磁盘路径是否与udev规则设置的符号链接一致权限是否为grid:asmadmin。网络问题私有网络不通会导致节点间通信失败。用ping和arp命令检查私有IP的连通性。时间不同步集群节点间时间差必须非常小通常要求NTP同步。用date命令检查并配置chronyd或ntpd。ASM实例无法启动检查crsctl stat res ora.asm -t。如果失败登录对应节点尝试手动启动srvctl start asm -n rac01。查看ASM实例的告警日志$ORACLE_BASE/diag/asm/asm/instance_name/trace/alert_*.log。常见原因是磁盘路径权限问题或磁盘头损坏。数据库实例无法在某个节点启动使用srvctl start instance -d orcl -i orcl2尝试单独启动。查看该实例的告警日志。常见原因是本地oracle用户的环境变量ORACLE_SID设置错误应为orcl2或者$ORACLE_HOME/dbs下的密码文件丢失/错误。客户端无法通过SCAN IP连接检查监听状态srvctl status listener。检查SCAN监听是否在所有节点运行lsnrctl status LISTENER_SCAN1。检查/etc/hosts或DNS确保SCAN名称能正确解析到三个IP如果你配置了多个SCAN IP。在服务器端用tnsping自检。经验之谈当遇到问题时不要急于重装。学会阅读日志是DBA的第一课。Oracle的错误信息通常很明确结合日志上下文和Metalink现在叫My Oracle Support上的知识库大部分问题都能找到解决方案。一键安装脚本的日志通常集中在/tmp或安装用户的家目录下以installActions*.log命名这是排查安装阶段问题的首要入口。7. 从“一键”到“精通”脚本的定制与原理深化使用一键脚本快速搭建环境是第一步但绝不能止步于此。真正的价值在于理解脚本背后的每一个步骤并能够根据实际需求进行定制和优化。7.1 解读与定制安装脚本一个优秀的一键安装脚本如GitHub上一些开源项目应该是结构清晰、注释良好的。你可以打开脚本文件通常是Shell脚本从头到尾读一遍。你会发现它主要做了以下几件事环境检查检查操作系统版本、内存、磁盘空间、软件包是否满足要求。参数配置读取用户输入的变量如主机名、IP、扫描名或者从配置文件中加载。系统配置自动修改sysctl.conflimits.conf/etc/hosts 配置SSH互信创建用户和目录。存储配置识别磁盘配置udev规则。软件安装解压安装包生成响应文件调用runInstaller。后期配置运行root.sh 创建磁盘组创建数据库。你可以尝试修改默认参数比如将默认的数据库名orcl改成你项目需要的名字修改字符集从AL32UTF8到ZHS16GBK调整SGA、PGA的内存大小。调整存储方案脚本可能默认只创建一个磁盘组。你可以研究脚本中创建ASM磁盘组的部分修改为创建OCRDG和DATADG两个磁盘组并指定不同的冗余级别。集成补丁研究如何将PSUPatch Set Update或OJVM补丁的安装集成到脚本中实现“安装即最新”。7.2 超越安装基础运维与监控环境搭建好后后续的运维才是重头戏。你需要掌握启停集群crsctl start/stop cluster -all与srvctl start/stop database -d orcl的区别与顺序。节点管理如何优雅地添加/删除一个RAC节点这比安装复杂得多。备份恢复在RAC环境下如何配置RMAN备份特别是针对ASM存储的备份策略。性能监控使用AWRASH报告以及GV$视图如GV$SESSIONGV$LOCK来监控跨实例的性能问题。故障模拟在测试环境中主动模拟网络中断、节点重启、存储路径失效等情况观察集群的故障转移Failover是否如预期工作。这是检验RAC高可用性的最好方法。通过“一键安装”入门再通过手动操作和原理学习来精通这才是利用自动化脚本提升个人技术能力的正确路径。它把你从重复的体力劳动中解放出来让你有更多时间聚焦于架构设计、性能优化和故障处理这些更有价值的工作上。
返回列表