您好,登錄后才能下訂單哦!
這篇文章主要講解了“怎么實現Oracle集群自啟動”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么實現Oracle集群自啟動”吧!
我們先看如下部分:
Oracle 10G:
cat /etc/inittab h2:35:respawn:/etc/init.d/init.evmd run >/dev/null 2>&1 </dev/null h3:35:respawn:/etc/init.d/init.cssd fatal >/dev/null 2>&1 </dev/null h4:35:respawn:/etc/init.d/init.crsd run >/dev/null 2>&1 </dev/null
Oracle 11G:
cat /etc/inittab h2:35:respawn:/etc/init.d/init.ohasd run >/dev/null 2>&1 </dev/null
在Oracle10g版本中,系統啟動時由init進程根據/etc/inittab配置文件來派生出集群的高可用守護進程,在Oracle 11g中,init僅派生出init.ohasd,然后由init.ohasd啟動ohasd.bin實現集群的自啟動。
另外,由于RedHat Linux 6.x棄用了inittab文件,目前配置init.ohasd進程的文件由/etc/inittab變為/etc/init/oracle-ohasd.conf。
[root@rac1 init]# cat /etc/rc.d/init.d/oracle-ohasd.conf # Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. # # Oracle OHASD startup start on runlevel [35] stop on runlevel [!35] respawn exec /etc/init.d/init.ohasd run >/dev/null 2>&1 </dev/null [root@rac1 ]#
在Red Hat 7.*以上版本中,init.ohasd腳本配置又一次發生變化,init.ohasd以service形式配置在/etc/systemd/system下。
Red Hat Linux 7.* #cat /etc/systemd/system/oracle-ohasd.service # Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. # # Oracle OHASD startup [Unit] Description=Oracle High Availability Services After=syslog.target network-online.target remote-fs.target [Service] ExecStart=/etc/init.d/init.ohasd run >/dev/null 2>&1 </dev/null ExecStop=/etc/init.d/init.ohasd stop >/dev/null 2>&1 </dev/null TimeoutStopSec=60min Type=simple Restart=always # Do not kill any processes except init.ohasd after ExecStop, unless the # stop command times out. KillMode=process SendSIGKILL=yes [Install] WantedBy=multi-user.target graphical.target
大部分資料在介紹集群自啟動時,均是按照以上方式來介紹的,但這種描述方式并不準確,實際上Oracle集群自啟動是由init.ohasd和ohasd兩個腳本相互配合來完成集群的自啟動,這兩個腳本均位于/etc/rc.d/init.d目錄下。
如下:
Red Hat Linux 7.* #cat /etc/systemd/system/oracle-ohasd.service # Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. # # Oracle OHASD startup [root@rac1 init.d]# pwd /etc/rc.d/init.d [root@rac1 init.d]# ls -ltr *ohasd* -rwxr-xr-x. 1 root root 6835 Aug 29 09:57 ohasd -rwxr-xr-x. 1 root root 9076 Aug 29 10:40 init.ohasd [root@rac1 init.d]#
init.ohasd
通過對init.ohasd腳本的分析,該腳本主要有兩個作用,第一個作用為創建名為npohasd的命名管道文件,并在init.ohasd運行過程中始終read該命名管道文件,以此作為標記,該作用為init.ohasd最重要的作用,因為當命名管道文件未被read標記時集群無法啟動),第二個作用,init.ohasd作為ohasd.bin的高可用守護進程而存在,當ohasd.bin進程異常終止時,由init.ohasd再次啟動ohasd.bin,來實現ohasd.bin進程的高可用,而ohasd.bin進程是集群的高可用進程,當集群資源意外終止時由ohasd.bin所屬的agent進程負責重新啟動相應資源,同時ohasd.bin也是負責整個集群啟動的進程。(集群并非由init.ohasd腳本啟動,init.ohasd做集群啟動時的前期準備工作)
ohasd
ohasd腳本是在系統啟動時,真正啟動集群的腳本,集群安裝完畢后,ohasd腳本被軟連接到/etc/rc.d下面的相關啟動級別目錄中(/etc/rc.d/rc[0-6].d/*),系統啟動時,執行不同級別的腳本程序,啟動級別為3時/etc/rc.d/rc3.d/S96ohasd被執行,此時ohasd腳本調用$ORACLE_HOME/bin/crsctl腳本來啟動集群。
ohasd腳本在執行時會判斷/var/tmp/.oracle目錄是否存在,如果/var/tmp/.oracle不存在,將會創建/var/tmp/.oracle目錄,并將.oracle目錄權限置為01777 ,/var/tmp/.oracle目錄中存放著集群啟動及正常運行時所產生的套接字以及命名管道文件。
如下為/etc/rc.d/rc[0-6]/*中ohasd腳本的軟連接情況:
[root@rac1 ~]# ls -ltr /etc/rc.d/rc[0-6].d/*ohasd* lrwxrwxrwx. 1 root root 17 Feb 21 2018 /etc/rc.d/rc5.d/S96ohasd -> /etc/init.d/ohasd lrwxrwxrwx. 1 root root 17 Feb 21 2018 /etc/rc.d/rc6.d/K15ohasd -> /etc/init.d/ohasd lrwxrwxrwx. 1 root root 17 Feb 21 2018 /etc/rc.d/rc4.d/K15ohasd -> /etc/init.d/ohasd lrwxrwxrwx. 1 root root 17 Feb 21 2018 /etc/rc.d/rc2.d/K15ohasd -> /etc/init.d/ohasd lrwxrwxrwx. 1 root root 17 Feb 21 2018 /etc/rc.d/rc1.d/K15ohasd -> /etc/init.d/ohasd lrwxrwxrwx. 1 root root 17 Feb 21 2018 /etc/rc.d/rc0.d/K15ohasd -> /etc/init.d/ohasd lrwxrwxrwx. 1 root root 17 Mar 26 01:40 /etc/rc.d/rc3.d/S96ohasd -> /etc/init.d/ohasd [root@rac1 ~]#
init.ohasd/ohasd何時被調用
1)開機BIOS自檢,且根據BIOS中配置的啟動設備讀取MBR并加載Bootloader程序。
2)加載并執行引導程序GRUB。
3)GRUB根據配置加載內核映像。
4)內核啟動(根文件系統掛載,內核執行/sbin/init)。
5)Init依據/etc/inittab中配置運行級別進行系統的初始化(初始化腳本: /etc/rc.d/rc.sysinit)。/etc/init/*內配置文件生效是在該步進行
6)根據不同的運行級別,啟動相應服務 (服務程序腳本位于/etc/rc.d/rc[0-6].d中)。
Linux系統在啟動時大概可以分為6步,init.ohasd和ohash是在第5步和第6步來被調用啟動集群。
當系統啟動到第5步的時候,init進程會掃描/etc/init/下面的所有配置文件,關于Oracle集群,init進程會根據/etc/init/oracle-ohasd.conf中的內容派生init.ohasd進程(由init.ohasd發出read命名管道文件npohasd的命令)。
系統啟動到第6步時,根據系統的不同啟動級別,/etc/rc.d/rc[0-6].d/*中的腳本程序被執行,此時ohasd調用$ORACLE_HOME/bin/crsctl腳本,由crsctl負責集群的啟動。
在/etc/oracle/scls_scr/[SID]/root/目錄中有一個配置文件ohasdstr,當ohasd腳本被調用時會讀取ohasdstr文件,根據ohasdstr文件中記錄的enable/disable來判斷集群是否隨系統啟動而自啟動。
如何避免集群隨系統啟動而自啟動?正確的做法是通過"crsctl disable/enable crs"的方式來控制集群是否隨系統啟動而自啟動,"crsctl disable/enable crs"實際上就是修改配置文件ohasdstr。
如下:
#cat /etc/oracle/scls_scr/qdata1/root/ohasdstr enable [root@qdata1 /root] #crsctl disable crs CRS-4621: Oracle High Availability Services autostart is disabled. [root@qdata1 /root] #cat /etc/oracle/scls_scr/qdata1/root/ohasdstr disable [root@qdata1 /root] #crsctl enable crs CRS-4622: Oracle High Availability Services autostart is enabled. [root@qdata1 /root] #cat /etc/oracle/scls_scr/qdata1/root/ohasdstr enable [root@qdata1 /root] #
當然,我們也可以直接手工修改ohasdstr文件。
另外,也有些資料在介紹禁止集群自啟動時,采用注釋掉oracle-ohasd.conf中派生init.ohasd部分,此時系統啟動時init進程無法派生init.ohash腳本,但這種方式為取巧方式,直接將init.ohasd的運行進行禁止,這種方式并不建議,如果init.ohasd腳本未啟動,npohasd命名管道文件不會被創建,并且不會被read,當需要使用’crsctl start crs’手工啟動集群時,由于命名管道為被read,此時集群無法啟動,這種情況下我們可以手工執行"exec /etc/init.d/init.ohasd run",然后再使用’crsctl start crs’命令來啟動集群。
順便說一下,在/etc/oracle/scls_scr/[SID]/root/目錄中還有一個ohasdrun配置文件,該文件是控制init.ohasd是否實現ohasd.bin高可用的配置文件,上面我們說過init.ohasd腳本其中一個作用是實現ohasd.bin進程的高可用,init.ohasd就是通過ohasdrun這個配置文件來判斷當ohasd.bin進程異常終止時,是否啟動ohasd.bin進程。
init.ohasd/ohasd丟失后如何處理
init.ohasd/ohasd兩個腳本是在集群安裝配置時執行root.sh過程中,由$GRID_HOME/crs/init/目錄中復制而來,當腳本init.ohasd/ohasd丟失后可以從$GRID_HOME/crs/init中重新復制,并將/etc/init.d中的init.ohasd/ohasd權限置為755即可。
感謝各位的閱讀,以上就是“怎么實現Oracle集群自啟動”的內容了,經過本文的學習后,相信大家對怎么實現Oracle集群自啟動這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。