一、導讀
本文主要介紹Redhat7.6系統安裝oracle 12201版本RAC的一些坑以及避坑方式,絕對干貨滿滿,物超所值,歡迎補充和糾錯,
二、環境介紹
OS:redhat 7.6 64位(3.10.0-957.el7.x86_64)
ORACLE:12CR2 RAC
三、避坑指南
Notes:坑點主要位于Grid軟體安裝步驟中cvu的check和root.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 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/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檔案中,即可,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/271912.html
標籤:其他
上一篇:能讓你在睡夢中驚醒的Zabbix 監控平臺配置郵件告警機制
下一篇:Linux環境下安裝JDK
