12CR2 RAC安装避坑指南(Redhat7)

举报
Lucifer三思而后行 发表于 2021/10/28 09:55:26 2021/10/28
【摘要】 最新解决方案:Oracle集成基础安装包+补丁包 一、导读本文主要介绍Redhat7.6系统安装oracle 12201版本RAC的一些坑以及避坑方式。绝对干货满满,物超所值,欢迎补充和纠错。 二、环境介绍OS:_redhat 7.6 64位(3.10.0-957.el7.x86_64)ORACLE:_12CR2 RAC 三、避坑指南Notes:坑点主要位于Grid软件安装步骤中cvu的ch...

最新解决方案:Oracle集成基础安装包+补丁包

一、导读

本文主要介绍Redhat7.6系统安装oracle 12201版本RAC的一些坑以及避坑方式。绝对干货满满,物超所值,欢迎补充和纠错。

二、环境介绍

OS:_redhat 7.6 64位(3.10.0-957.el7.x86_64)

ORACLE:_12CR2 RAC

三、避坑指南

Notes:坑点主要位于Grid软件安装步骤中cvu的checkroot.sh执行

接下来是本篇文章的重点以及主旨,简单直接:

坑1:ASM device sharedness check

Shared Storage Accessibility:/dev/asm_ocr …FAILED (PRVG-11506)

可参照MOS文档:

12.2: PRVG-0802 : Storage type for path “/dev/mapper/asm011p1” could not be determined (Doc ID 2251322.1)

这里先不说解决方案,mos建议是打补丁:Apply patch 25784424, if CVU storage check fails for ASMLib paths 。

坑2:CLSRSC-400: A system reboot is required to continue installing.

此坑简直为巨坑无比,root.sh执行到进度14/19时,突然停止并且报错****CLSRSC-400,让我重启主机系统,重启之后安装已经终止了,无奈卸载重装依然报错。

可参照MOS文档:

ALERT: root.sh Fails With “CLSRSC-400” While Installing GI 12.2.0.1 on RHEL or OL with RedHat Compatible Kernel (RHCK) 7.3 (Doc ID 2284463.1)

这里先不说解决方案,mos建议是通过applyOneOffs打补丁:Interim patch 25078431 is required before installing 12.2 GI on Linux 7.3 (RedHat and OL7 with RHCK).

坑3:kgfnGetConnDetails requires 4 parameters at/u01/app/12.2.0/grid/lib/asmcmdbase.pm line 5704.

此坑是修复以上两个坑之后,root.sh执行到进度19/19时,突然停止,并报错如上,显示root.sh执行失败。

可参照MOS文档:

install.sh Hung And root.sh Is Failing At asmcmd lsdg --suppressheader While Installing A Zone With Clusterware (Doc ID 2414241.1)

ASMCMD Failing With "KGFNGETCONNDETAILS Requires 4 Parameters at <GI_HOME>/lib/asmcmdbase.pm (Doc ID 2748316.1)

解决方案:

/usr/bin/make -f /u01/app/12.2.0/grid/rdbms/lib/ins_rdbms.mk client_sharedlib libasmclntsh12.ohso libasmperl12.ohso ORACLE_HOME=/u01/app/12.2.0/grid

1.如果已经遇到该错误,那么执行以上命令之后,重新执行root.sh即可,如果提前看到了本文,请按方法2提前执行;

2.__出现执行root.sh提示框之时执行以上命令,需在两个节点以root身份执行该命令,GRID_HOME路径请根据实际情况填写

所有节点执行完之后,再执行root.sh

最后来总结以下坑1、2的解决方案

参考MOS文档:

How to Apply a Grid Infrastructure Patch Before Grid Infrastructure Configuration (before root.sh or rootupgrade.sh or gridsetup.bat) is Executed (Doc ID 1410202.1)

通过12C开始支持的 applyPSU 方式,提前给Grid软件打上最新的补丁,修复坑1,2的bug:

1.解压OPatch补丁包
$ su - grid -c "unzip /soft/p6880880_122010_Linux-x86-64.zip -d /u01/app/12.2.0/grid/"
Notes:选择A

2.查看OPatch补丁包版本
$ su - grid -c "/u01/app/12.2.0/grid/OPatch/opatch version"
OPatch Version: 12.2.0.1.24

3.解压最新PSU补丁
$ su - grid -c "unzip /soft/p32226491_122010_Linux-x86-64.zip -d /soft"

4.执行grid安装
$ ./gridSetup.sh -applyPSU /soft/32226491
Preparing the home to patch...
Applying the patch /soft/32226491/...
Successfully applied the patch.
The log can be found at: /u01/app/oraInventory/logs/GridSetupActions2021-04-01_04-18-54PM/installerPatchActions_2021-04-01_04-18-54PM.log
Launching Oracle Grid Infrastructure Setup Wizard...


5.安装grid成功之后查看补丁
$ opatch lspatches
26839277;DBWLM RELEASE UPDATE 12.2.0.1.0(ID:170913) (26839277)
32231681;ACFS JAN 2021 RELEASE UPDATE 12.2.0.1.210119 (32231681)
32253903;TOMCAT RELEASE UPDATE 12.2.0.1.0(ID:RELEASE) (32253903)
31802727;OCW OCT 2020 RELEASE UPDATE 12.2.0.1.201020 (31802727)
32228578;Database Jan 2021 Release Update : 12.2.0.1.210119 (32228578)
 
OPatch succeeded.

下一节主要介绍环境配置中需要注意的一些细节,请参考。

四、环境配置注意点

1.Reverse Path Filtering(rp_filter)

关于如何设置rp_filter,可以参照MOS文档和官方文档:

RAC and Oracle Clusterware Best Practices and Starter Kit (Linux) (Doc ID 811306.1)

https://docs.oracle.com/database/121/CWLIN/networks.htm#CWLIN481

对于Linux Kernels 2.6.31(包括例如Oracle Linux和RedHat)及更高版本,在反向路径过滤中已修复了一个错误。 由于此错误修复,可能会在多互连系统上阻止/丢弃互连数据包。 为避免这种情况,使用多个NIC进行专用互连的Oracle RAC系统现在需要rp_filter参数的特定设置。

例如,在eth1和eth2是专用互连NIC,而eth0是公用网络NIC的情况下,请设置/etc/sysctl.conf中的参数将专用地址的rp_filter设置为2(宽松过滤),将公用地址的rp_filter设置为1(严格过滤):

net.ipv4.conf.eth2.rp_filter = 2
net.ipv4.conf.eth1.rp_filter = 2
net.ipv4.conf.eth0.rp_filter = 1

**2.**Memlock&&HugePages

关于如何设置标准大页HugePages内存,可以参照MOS文档和官方文档:

What is Memlock and How to Calculate the Values for Memlock? (Doc ID 2511230.1)

https://docs.oracle.com/database/121/UNXAR/appi_vlm.htm#UNXAR402

一般在安装部署时,由于无法估算应用对标准大页的需要,因此通常是禁用HugePages内存,当禁用HugePages内存时,最大锁定内存限制应设置为至少3145728 KB(3 GB)。

cat <<EOF >>/etc/security/limits.conf
oracle   soft   memlock    3145728
oracle   hard   memlock    3145728
grid   soft   memlock    3145728
grid   hard   memlock    3145728
EOF

关于启用大页内存的一些限制:

a.自动内存管理(AMM)和HugePages不兼容。 使用AMM时,通过在/ dev / shm下创建文件来分配整个SGA内存。 当Oracle数据库通过AMM分配SGA时,不会保留HugePages。 要在Oracle Database 12c上使用HugePages,必须禁用AMM。

b.您必须取消设置MEMORY_TARGET和MEMORY_MAX_TARGET初始化参数。 例如,要取消设置数据库实例的参数,请使用命令ALTER SYSTEM RESET。

c.确保正确配置了HugePages,因为如果应用程序未使用过多的HugePages,则系统可能会耗尽内存。

d.如果实例启动时HugePages不足,并且初始化参数use_large_pages设置为only,则数据库无法启动,并且警报日志消息会提供有关Hugepages的必要信息。

在已知风险和限制条件下,如果要启用HugePages,通过以下步骤来看看如何设置hugepages,假设我们现在内存为256G:

1.运行以下命令以确定内核是否支持HugePages:
$ grep Huge /proc/meminfo

2.使用root用户编辑/etc/security/limits.conf文件中的memlock设置。 内存锁设置以KB为单位指定,启用HugePages内存时,最大锁定内存限制应设置为当前RAM的至少90%,禁用HugePages内存时,最大锁定内存限制应设置为至少3145728 KB3 GB)。 例如,我们是 256 GB RAM,则添加以下条目以增加最大的内存锁定地址空间:(256GB*0.9*1024*1024=241591910.4KB)

cat <<EOF >>/etc/security/limits.conf
oracle   soft   memlock    241591910
oracle   hard   memlock    241591910
grid   soft   memlock    241591910
grid   hard   memlock    241591910
EOF

3.内存锁设置后以oracle用户身份登录并运行ulimit -l命令以验证新的内存锁设置:
$ ulimit -l
241591910

4.运行以下命令以显示Hugepagesize变量的值:
$ grep Hugepagesize /proc/meminfo

5.通过Oracle官方文档提供的一个脚本,该脚本为当前共享内存段的大页配置计算推荐值:
a.创建shell脚本hugepages_settings.sh
b.添加以下脚本内容:
#!/bin/bash
#
# hugepages_settings.sh
#
# Linux bash script to compute values for the
# recommended HugePages/HugeTLB configuration
#
# Note: This script does calculation for all shared memory
# segments available when the script is run, no matter it
# is an Oracle RDBMS shared memory segment or not.
# Check for the kernel version
KERN=`uname -r | awk -F. '{ printf("%d.%d\n",$1,$2); }'`
# Find out the HugePage size
HPG_SZ=`grep Hugepagesize /proc/meminfo | awk {'print $2'}`
# Start from 1 pages to be on the safe side and guarantee 1 free HugePage
NUM_PG=1
# Cumulative number of pages required to handle the running shared memory segments
for SEG_BYTES in `ipcs -m | awk {'print $5'} | grep "[0-9][0-9]*"`
do
   MIN_PG=`echo "$SEG_BYTES/($HPG_SZ*1024)" | bc -q`
   if [ $MIN_PG -gt 0 ]; then
      NUM_PG=`echo "$NUM_PG+$MIN_PG+1" | bc -q`
   fi
done
# Finish with results
case $KERN in
   '2.4') HUGETLB_POOL=`echo "$NUM_PG*$HPG_SZ/1024" | bc -q`;
          echo "Recommended setting: vm.hugetlb_pool = $HUGETLB_POOL" ;;
   '2.6'|'3.8') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
    *) echo "Unrecognized kernel version $KERN. Exiting." ;;
esac
# End

c.授予shell脚本执行权限
$ chmod +x hugepages_settings.sh

d.运行hugepages_settings.sh脚本来计算hugepages配置的值:
$ ./hugepages_settings.sh
Notes:在运行此脚本之前,请确保运行使用大页面的所有应用程序。

6.设置以下内核参数,其中value是您在步骤5中确定的HugePages值:
# sysctl -w vm.nr_hugepages=value

7.要确保在系统重新启动后分配了HugePages,请将以下参数添加到/etc/sysctl.conf文件中,其中value是您在步骤5中确定的HugePages值:
vm.nr_hugepages=value
Notes:如果无法使用nr_hugepages设置HugePages分配,则可用内存可能会碎片化。 重新启动服务器,以使Hugepages分配生效。

8.运行以下命令以检查可用的大页面:
$ grep Huge /proc/meminfo

9.重新启动实例。

3.Transparent HugePages&&NUMA

为什么要把Transparent HugePages和NUMA放在一起讲呢?很简单,因为他们的配置方法是相同的,请参考MOS文档和官方文档:

**ALERT: Disable Transparent HugePages on SLES11, RHEL6, RHEL7, OL6, OL7, and UEK2 and above (Doc ID 1557478.1)    **

https://docs.oracle.com/database/121/UNXAR/appi_vlm.htm#UNXAR428

关于透明大页,oracle的建议:如果您正在运行RedHat / OEL 6/7,SLES 11/12或UEK2内核,请确保禁用“透明HugePages”以防止性能问题和节点/实例驱逐。

关闭透明大页有两种方式,分别为:

a.在/etc/rc.local中添加以下行并重新启动服务器(尽管不建议使用rc.local,但仍可以在Redhat 7上完成此操作),该方法linux6和7通用:

root用户下:
cat <<EOF >> /etc/rc.local
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
   echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
   echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
EOF

Notes:redhat7需要授予rc.local执行权限:
chmod +x /etc/rc.local

b.将以下内容添加到/etc/default/grub(到/boot/grub/grub.conf的符号链接)的内核引导行中,然后重新引导服务器(这是首选方法),但只支持linux7以上:

这里禁用numa也是同样的设置方式:

1.添加关闭命令到/etc/grub.conf文件中,添加在quiet后面:
sed -i 's/quiet/quiet transparent_hugepage=never numa=off/' /etc/default/grub

2.重新引导服务器
a.MBR分区
$ grub2-mkconfig -o /etc/grub2.cfg

b.GPT分区表
$grub2-mkconfig -o /etc/grub2-efi.cfg

Notes:需要注意系统主分区的引导方式,MBR还是GPT,可以通过fdisk -l查看主分区的Disk label type值。

3.重启服务器

4.查看配置是否生效
$ cat /proc/cmdline

4.Disk I/O Scheduler

关于设置Disk I/O Scheduler,可参考官方文档:

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/ladbi/setting-the-disk-io-scheduler-on-linux.html#GUID-B59FCEFB-20F9-4E64-8155-7A61B38D8CDF

为了获得Oracle ASM的最佳性能,Oracle建议您使用Deadline I/O Scheduler。

在每个群集节点上,输入以下命令以验证是否配置了Deadline disk I/O调度程序以供使用:

# cat /sys/block/${ASM_DISK}/queue/scheduler
noop [deadline] cfq

在此示例中,默认磁盘 I/O 调度程序为Deadline,而ASM_DISK为Oracle自动存储管理(Oracle ASM)磁盘设备。

如果输出为空

_Notes:_在某些虚拟环境(VM)和特殊设备(例如快速存储设备)上,上述命令的输出可能为空。 操作系统或VM绕过内核 I/O 调度,并将所有 I/O 请求直接提交给设备。 在这种环境下,请勿更改 I/O Scheduler设置。

接下来,我们来设置一下Disk I/O Scheduler:

1.使用文本编辑器为Oracle ASM设备创建一个UDEV规则文件,将以下行添加到规则文件并保存: 
# cat<<EOF >/etc/udev/rules.d/60-oracle-schedulers.rules
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline"
EOF

2.如果是RAC集群,需要将规则文件复制到集群上的所有其他节点。 例如:
$ scp 60-oracle-schedulers.rules root@node2:/etc/udev/rules.d/

3.加载规则文件并重新启动UDEV服务
# udevadm control --reload-rules

4.验证磁盘 I/O 调度程序已设置为Deadline
# cat /sys/block/${ASM_DISK}/queue/scheduler

5.ORACLE_HOSTNAME环境变量

可参照官方文档:

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/ladbi/setting-the-oracle_hostname-environment-variable.html#GUID-27DFE5F2-8AAE-4085-8A63-CC6C94F73AA0

您必须设置ORACLE_HOSTNAME环境变量才能在多别名计算机上安装Oracle数据库。 多别名计算机是多个别名解析到的计算机。

具有多个别名的计算机是在单个IP地址下向命名服务注册的计算机,但是它将多个别名解析为该地址。 命名服务将这些别名中的任何一个解析到同一台计算机。 在此类计算机上安装Oracle数据库之前,请将Oracle安装所有者环境变量ORACLE_HOSTNAME设置为要使用其主机名的计算机。

cat <<EOF >> /home/oracle/.bash_profile
$ ORACLE_HOSTNAME=somehost.example.com
$ export ORACLE_HOSTNAME
EOF

6.AVAHI daemon&&NOZEROCONF

关于配置AVAHI daemon&&NOZEROCONF,可以参照MOS文档和官方文档:

**RAC and Oracle Clusterware Best Practices and Starter Kit (Linux) (Doc ID 811306.1)    **

**CSSD Fails to Join the Cluster After Private Network Recovered if avahi Daemon is up and Running (Doc ID 1501093.1)    **

https://en.wikipedia.org/wiki/Zero-configuration_networking

1.关闭并禁用avahi-daemon服务
systemctl stop avahi-daemon.socket
systemctl stop avahi-daemon.service
systemctl disable avahi-daemon.service
ps -ef|grep avahi-daemon

2.On Oracle Linux/Redhat Linux, "NOZEROCONF=yes" must be included in /etc/sysconfig/network  
echo "NOZEROCONF=yes" >> /etc/sysconfig/network

3.Once avahi is disabled, restart the stack or reboot the node.

7./dev/shm

关于/dev/shm可参考mos文档:

**Bug 25907259 - Linux:RHEL7: cvu reports /dev/shm not mounted when it is mounted (Doc ID 25907259.8)    **

**Bug 21441387 - CVU reports /dev/shm as NOT mounted when it is mounted (PRVE-0421) (Doc ID 21441387.8)    **

Rediscovery Notes
If /dev/shm mount check is performed on RHEL7
 
Workaround
ignore error messages
cat <<EOF >> /etc/fstab
tmpfs /dev/shm tmpfs size=4G 0 0
EOF
mount -o remount /dev/shm

Notes:_Mos建议我们可以忽略该提示,这里我们可以手动添加到fstab文件中,即可。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。