欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-06 19:59:01
...

一、导读

本文主要介绍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)

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

可参照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,让我重启主机系统,重启之后安装已经终止了,无奈卸载重装依然报错。

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

可参照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执行失败。

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

可参照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 KB(3 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/grub.conf(到/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 [email protected]:/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)    

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

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文件中,即可。

 

上一篇: 面试表达

下一篇: 省略形式