在RHEL7上安装Oracle RAC 19c

RAC是Oracle数据库集群,允许用户在多个服务器上运行Oracle数据库,提供水平扩展性和故障转移。本文档的目的是介绍在RHEL7 Linux 64位上部署基于最新19c版本RAC环境的过程。

Oracle RAC环境的安装不同于单节点数据库环境安装,RAC环境安装首先需要安装Grid Infrastructure,再安装Oracle数据库软件。因此安装过程分两部分介绍。

安装前准备

请注意对所有需要成员节点进行同样的配置。

检查硬件环境

对硬件环境要求如下:

  1. 显示器至少需要支持1024X768分辨率。
  2. 需要网络连接,为了配置RAC环境,至少需要2块网卡共9个IP,其中:2个私有IP,2个公共IP,2个虚拟IP,3个SCAN(单客户机访问名)IP。
  3. 至少8GB内存以完成安装,建议16GB。

本文采用的环境配置如下:

  • 2台虚拟机安装RHEL7.9。
  • 每台虚拟机配备4CPU,16GB内存,2网卡。
  • 每台虚拟机独立磁盘1块80G。共享磁盘3快,每块20G。

网络规划:

  • Public IP:192.168.90.71、192.168.90.73
  • Private IP:172.1.1.2、172.1.1.3
  • Virtual IP:192.168.90.72、192.168.90.74
  • SCAN IP:192.168.90.75、192.168.90.76、192.168.90.77

主机名:

  • Public IP: zoradb1、zoradb2
  • Private IP: zoradb1、zoradb2
  • Virtual IP: zoradb1-vip、zoradb2-vip
  • SACN IP: zoradbc1-scan
    域名均在dns服务器中配置了解析,其中SCAN配置了3个IP。

检查操作系统

操作系统需要符合以下要求:

  1. 安装OpenSSH服务。
  2. 系统内核需要在3.10.0-862.11.6.el7.x86_64及以上版本。
  3. 关闭Transparent HugePages。

调整操作系统配置

关闭Transparent HugePages

Oracle推荐在安装前关闭Transparent HugePages,方法如下:

编辑/etc/default/grub,在GRUB_CMDLINE_LINUX=行末尾加入transparent_hugepage=never
示例如下:

GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=rootvg/root rd.lvm.lv=rootvg/swap rhgb quiet transparent_hugepage=never"

重新生成grub启动配置文件:

[root@zoradb1]# grub2-mkconfig -o /boot/grub2/grub.cfg

设置Clock Source

Oracle推荐在虚拟机环境下设置clock source到tsc来获得更好的性能,方法如下:

编辑/etc/default/grub,在GRUB_CMDLINE_LINUX=行末尾加入clocksource=tsc

示例如下:

GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=rootvg/root rd.lvm.lv=rootvg/swap rhgb quiet transparent_hugepage=never clocksource=tsc"

重新生成grub启动配置文件:

[root@zoradb1]# grub2-mkconfig -o /boot/grub2/grub.cfg

配置和检查主机名解析

编辑所有节点的/etc/hosts文件,将所有节点的主机名与IP写入:

oradb1        192.168.90.71
oradb1-vip    192.168.90.72
oradb2        192.168.90.73
oradb2-vip    192.168.90.74

关闭avahi-daemon服务

[root@zoradb1]# systemctl stop avahi-daemon
[root@zoradb1]# systemctl disable avahi-daemon

配置NOZEROCONF

编辑/etc/sysconfig/network,加入:

NOZEROCONF=yes

安装依赖包

可以通过光盘中的软件源直接安装:

安装grid需要:

[root@zoradb1]# yum -y install bc binutils compat-libcap1 elfutils-libelf elfutils-libelf-devel fontconfig-devel gcc-c++ glibc glibc-devel ksh libaio libaio-devel libX11 libXau libXi libXtst libXrender libXrender-devel libgcc libstdc++ libstdc++-devel libxcb make smartmontools sysstat

安装oracle数据库需要:

[root@zoradb1]# yum -y install bc binutils elfutils-libelf elfutils-libelf-devel fontconfig-devel glibc glibc-devel ksh libaio libaio-devel libXrender libX11 libXau libXi libXtst libgcc libnsl librdmacm libstdc++ libstdc++-devel libxcb libibverbs make smartmontools sysstat compat-libcap1

需要单独安装compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm,该rpm包在XN_Study\Installer\Database\RPMS目录中

将包上传至/tmp下,进行安装:

[root@zoradb1]# yum install /tmp/compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm

调整内核参数

建立/etc/sysctl.d/97-oracle-database-sysctl.conf文件,写入一下内容:

fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 8328456192
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576

应用配置:

[root@zoradb1]# /sbin/sysctl --system

检查:

[root@zoradb1]# /sbin/sysctl -a
建议做完本步骤后重新启动一次服务器。

检查磁盘I/O调度程序

为了获得Oracle ASM的最佳性能,Orale建议使用Deadline I/O调度程序。

检查方法:

[root@zoradb1]# for i in sd{b,c,d}; do echo $i: `cat /sys/block/$i/queue/scheduler`; done
请自行替换中括号中盘符。

如果结果是deadline则代表检查通过。

如果不是deadline,则需要创建udev规则文件。

[root@zoradb1]#  vi /etc/udev/rules.d/60-oracle-schedulers.rules

添加如下内容:

ACTION=="add|change", KERNEL=="sd[b-d]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline"

替换完成后,应用规则。

[root@zoradb1]#  udevadm control --reload-rules

设置SSH超时

防止Oracle Clusterware安装在AttachHome操作期间失败,修改/etc/ssh/sshd_config配置,将超时等待时间设为无限制:

LoginGraceTime 0

配置时间同步服务

Oracle Clusterware 要求在所有集群节点上设置相同的时区环境变量。在安装过程中,安装过程会在运行 Oracle Universal Installer (OUI) 的节点上获取 Grid 安装所有者的时区 (TZ) 环境变量设置,并将所有节点上的该时区值用作默认 TZ 环境变量设置由 Oracle Clusterware 管理的所有进程。时区默认值用于数据库、Oracle ASM 和任何其他托管进程。您有两种时间同步选项:

  1. 操作系统配置的网络时间协议 (NTP),例如chronyd或ntpd
  2. Oracle 集群时间同步服务

Oracle 集群时间同步服务专为集群服务器无法访问 NTP 服务的组织而设计。如果您使用 NTP,那么 Oracle 集群时间同步守护进程 (ctssd) 将以观察者模式启动。如果您没有 NTP 守护程序,则以ctssd主动模式启动并在集群成员之间同步时间,而无需联系外部时间服务器。
如果您的服务器上有 NTP 守护程序,但无法将它们配置为与时间服务器同步时间,并且您想使用集群时间同步服务在集群中提供同步服务,则停用并卸载 NTP。
当安装程序发现 NTP 协议不活跃时,集群时间同步服务以主动模式安装,并跨节点同步时间。如果发现配置了 NTP,则集群时间同步服务以观察者模式启动,集群内的 Oracle 集群件不执行活动时间同步。

简而言之:Oracle会检查当前服务器上是否有时间同步服务(NTPD或Chronyd),如果有则ctssd以观察者模式启动。如果没有则使用ctssd保证所有节点之间的时间同步。如果时间同步服务运行但无法与上游时间服务器联系(如内网环境且没有自有NTP服务器)的情况下,请关闭时间同步服务,采用ctssd保证节点之间的时间同步。
RAC节点之间的时间同步十分重要,务必保证所有节点时间一致。

配置网络

将Public IP和Private IP分别配置在所有节点的对应网卡上。且在DNS或其他名称服务中配置对应的名称解析服务。

配置ASM磁盘所需参数

配置udev规则

对于使用ASM管理的磁盘来说,需要一种能够用于一致性标识磁盘设备及其正确的所属关系和权限的手段(也就是盘符和物理设备一一对应)。Oracle使用ASMLib来执行这个任务,但这种方式增加了管理的复杂性,所以一直不很流行。

作为替代手段,我们可以使用Linux自身的udev来执行这个任务。udev可以定义规则,确保盘符和物理设备对应,且设备访问权限符合要求。

可以直接复制执行下面的命令生成所需的udev规则(把mydevs中的内容改成实际需要配置asm的盘符):

[root@zoradb1]# mydevs="sdb sdc sdd" ; export count=0 ; for mydev in $mydevs; do ((count+=1)) ; /lib/udev/scsi_id -g -u /dev/$mydev | awk '{print "ACTION==\"add|change\", ENV{ID_SERIAL}==\""$1"\", SYMLINK+=\"oracleasm/disk"ENVIRON["count"]"\", OWNER=\"grid\", GROUP=\"asmadmin\", MODE=\"0660\""}' ; done

将输出的规则写入:/etc/udev/rules.d/96-oracle-asm.rules

使规则生效:

[root@zoradb1]# udevadm control --reload-rules
[root@zoradb1]# udevadm trigger --type=devices --action=change
只需要在单个节点执行,输出的规则需要复制到所有节点。

建立所需用户和组

创建Oracle Inventory Group

[root@zoradb1]# /usr/sbin/groupadd -g 54321 oinstall

创建操作系统权限组

  • 创建OSASM
[root@zoradb1]# /usr/sbin/groupadd -g 54329 asmadmin

  • ASM创建OSDBAOSOPER
[root@zoradb1]# /usr/sbin/groupadd -g 54327 asmdba
[root@zoradb1]# /usr/sbin/groupadd -g 54328 asmoper

为数据库安装创建所需组

  • OSDBA
/usr/sbin/groupadd -g 54322 dba

  • OSOPER
/usr/sbin/groupadd -g 54323 oper

  • BACKUPDBA
/usr/sbin/groupadd -g 54324 backupdba

  • OSDGDBA
/usr/sbin/groupadd -g 54325 dgdba

  • OSKMDBA
/usr/sbin/groupadd -g 54326 kmdba

  • OSRACDBA
/usr/sbin/groupadd -g 54330 racdba

创建Oracle软件所有者用户

/usr/sbin/useradd -u 54321 -g oinstall -G dba,asmdba,backupdba,dgdba,kmdba,racdba oracle
/usr/sbin/useradd -u 54331 -g oinstall -G dba,asmdba,backupdba,dgdba,kmdba,racdba grid
对于集群中的所有节点,用户的ID和组ID必需相同!

创建必要的目录

mkdir -p  /u01/app/19.0.0/grid
mkdir -p /u01/app/grid
mkdir -p /u01/app/oracle

配置目录权限

chown -R grid:oinstall /u01
chown oracle:oinstall /u01/app/oracle
chmod -R 775 /u01/

最小权限和目录参考命令

groupadd -g 54421 oinstall
groupadd -g 54422 dba
useradd -u 54321 -g oinstall -G dba oracle
useradd -u 54322 -g oinstall -G dba grid
mkdir -p  /u01/app/19.0.0/grid
mkdir -p /u01/app/grid
mkdir -p /u01/app/oracle
chown -R grid:oinstall /u01
chown oracle:oinstall /u01/app/oracle
chmod -R 775 /u01/

标准权限和目录参考命令

groupadd -g 54321 oinstall
groupadd -g 54322 dba
groupadd -g 54323 oper
groupadd -g 54324 backupdba
groupadd -g 54325 dgdba
groupadd -g 54326 kmdba
groupadd -g 54327 asmdba
groupadd -g 54328 asmoper
groupadd -g 54329 asmadmin
groupadd -g 54330 racdba
useradd -u 54322 -g oinstall -G asmadmin,asmdba,asmoper,racdba grid
useradd -u 54321 -g oinstall -G dba,backupdba,dgdba,kmdba,asmdba,racdba,asmoper,oper oracle
mkdir -p /u01/app/19.0.0/grid
mkdir -p /u01/app/grid
mkdir -p /u01/app/oracle/product/19.0.0/dbhome_1
chown -R grid:oinstall /u01
chmod -R 775 /u01/
chown oracle:oinstall /u01/app/oracle

调整用户umask

编辑home/oracle/.bash_profilehome/grid/.bash_profile,加入:

umask 022

防止终端输出命令引起安装错误

编辑/home/oracle/.bashrc/home/grid/.bashrc,加入:

if [ -t 0 ]; then
    stty intr ^C
fi

配置用户资源限制

编辑/etc/security/limits.conf,加入:

grid soft nofile 1024
grid hard nofile 65536
grid soft nproc 2047
grid hard nproc 16384
grid soft stack 10240
grid hard stack 32768
#64位系统最大128GB,32位系统最大3GB,达不到最大大小的配置为内存的90%,单位KB。
grid soft memlock 14491594
#64位系统最大128GB,32位系统最大3GB,达不到最大大小的配置为内存的90%,单位KB。
grid hard memlock 14491594

oracle soft nofile 1024
oracle hard nofile 65536
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768
#64位系统最大128GB,32位系统最大3GB,达不到最大大小的配置为内存的90%,单位KB。
oracle soft memlock 14491594
#64位系统最大128GB,32位系统最大3GB,达不到最大大小的配置为内存的90%,单位KB。
oracle hard memlock 14491594

准备安装文件

将从Oracle Database Grid Infrastructure 19.3.0.0.0 for Linux x86-64.zip中解压出的文件复制到/u01/app/19.0.0/grid,目录中应该有类似如下文件:

配置环境变量

修改/home/grid/.bash_profile,加入:

export ORACLE_HOME=/u01/app/19.0.0/grid
export PATH=$ORACLE_HOME/bin:$PATH

修改/home/oracle/.bash_profile,加入:

export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH

Grid Infrastructure安装步骤

使用grid用户登录服务器

打开ssh客户端,使用grid用户登录服务器。

配置DISPLAY变量

配置DISPLAY变量为ssh客户端的IP,如:

export DISPLAY=192.168.90.2:0.0
DISPLAY变量指定图形界面显示在哪个IP的SSH客户端上,可自行查找“X11重定向”相关知识进行理解。

切换至安装目录

cd $ORACLE_HOME

运行安装程序

./gridSetup.sh

如果一切顺利,安装程序将使用图形方式在本地启动。

完成Grid Infrastructure软件安装

Orale Database安装步骤

Oracle RAC数据库的安装步骤基本同单节点类似,可参考在RHEL7上安装OracleDatabaseEnterprise19c

已知问题

安装程序中文显示方块

安装程序使用java启动,Oracle集成的jre环境中缺少中文字体,解决方法:

将计算机上的微软雅黑字体文件msyh.ttc复制到$ORACLE_HOME/jdk/jre/lib/fonts/fallback,如果没有该目录可以自行建立,再次启动安装程序即可。

Grid Infrastructure安装提示INS-08101错误

修改$ORACLE_HOME/cv/admin/cvu_config,取消CV_ASSUME_DISTID行注释,改成CV_ASSUME_DISTID=OEL7.8

Grid Infrastructure安装提示INS-06006错误

OpenSSH 8.0以上版本有此问题,因为scp命令前后文件名格式不一致(引号问题)。可以取消scp命令的严格文件名检查,安装完毕后改回即可。修改方法:

cp -p /usr/bin/scp /usr/bin/scp-original
echo "/usr/bin/scp-original -T \$*" > /usr/bin/scp
cat /usr/bin/scp
/usr/bin/scp-original -T $*

改回:

rm /usr/bin/scp
mv /usr/bin/scp-original /usr/bin/scp

Grid Infrastructure安装过程中,配置ASM找不到磁盘,提示Error 49802 initializing ADR

修改$ORACLE_HOME/install/orabasetab,将/u01/app/19.0.0/grid:/u01/app/oracle:OraGI19Home1:N:改为/u01/app/19.0.0/grid:/u01/app/grid:OraGI19Home1:N:

Grid Infrastructure安装过程中,先决条件检查提示/dev/shm检查项目未通过。

点击“详细信息”,显示PRVE-0421错误。

因为在RHEL7中,/dev/shm挂载呗定义在/usr/lib/dracut/modules.d/99base/init.sh文件中。该检查项可忽略。

Grid Infrastructure安装后,最终检查无法通过,提示没有NTP服务。

使用chronyd作为NTP服务时可能出现该问题,如果确认chrony工作正常,可以忽略。

上一篇
下一篇