創(chuàng)新互聯(lián)建站專注于鎮(zhèn)沅企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),商城系統(tǒng)網(wǎng)站開(kāi)發(fā)。鎮(zhèn)沅網(wǎng)站建設(shè)公司,為鎮(zhèn)沅等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站設(shè)計(jì),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)
[root@ebsdb1 etc]# crsctl check crs
CRS-4638: Oracle High Availability Services is online
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
根據(jù)以上輸出,集群大概可分為 4 個(gè)層次:
層次 1 : OHAS 層面,負(fù)責(zé)集群的初始化資源和進(jìn)程。
層次 2 : CSS 層面,負(fù)責(zé)構(gòu)建集群并保證集群的一致性。
層次 3 : CRS 層面,負(fù)責(zé)管理集群的各種應(yīng)用程序資源。
層次 4 : EVM 層面,負(fù)責(zé)在集群節(jié)點(diǎn)間傳遞集群事件。
接下來(lái)詳細(xì)地介紹每一個(gè)層面的啟動(dòng)過(guò)程:
該層面主要負(fù)責(zé)啟動(dòng)集群的初始化資源和進(jìn)程,具體的過(guò)程如下:
1./etc/inittab 中的以下行被調(diào)用
$cat /etc/inittab|grep init.d | grep –v grep
h2:35:respawn:/etc/init.d/init.ohasd run >/dev/null 2>&1 2.
操作系統(tǒng)進(jìn)程
init.ohasd run
被啟動(dòng),該進(jìn)程負(fù)責(zé)啟動(dòng)
ohasd.bin
守護(hù)進(jìn)程
[root@ebsdb1 etc]# ps -ef | grep ohasd | grep -v grep
root3813 1 0 Feb03 ? 00:00:00 /bin/sh /etc/init.d/init.ohasd run
root56333 1 0 Feb03 ? 01:03:52 /ebsdb/grid/11.2.0/bin/ohasd.bin reboot
而 init.ohasd 在啟動(dòng) ohasd.bin 守護(hù)進(jìn)程之前需要執(zhí)行以下的操作。
1) 集群自動(dòng)啟動(dòng)是否被禁用
2) GI home 所在文件系統(tǒng)是否被正常掛載
3) 管道文件( npohasd )是否能夠被訪問(wèn)
[grid@ebsdb1 ~]$ ls -l /var/tmp/.oracle
total 4
srwxr-xr-x 1 grid oinstall 0 Feb 3 10:41 mDNSd
-rwxrwxrwx 1 grid oinstall 6 Feb 3 10:41 mdnsd.pid
prwxrwxrwx 1 root root0 Oct 26 15:43 npohasd
對(duì)于 ohasd.bin 進(jìn)程,他需要經(jīng)過(guò)以下過(guò)程才能夠正常運(yùn)行。
1) 確認(rèn) OLR 存在,而且能夠被正常訪問(wèn)
[grid@ebsdb1 ~]$ ls -l $GRID_HOME/cdata/
total 2928
drwxr-xr-x 2 grid oinstall 4096 Feb 14 10:21 ebsdb1
-rw------- 1 root oinstall 272756736 Feb 14 15:02 ebsdb1.olr
drwxrwxr-x 2 grid oinstall 4096 Jan 25 13:11 ebsdb-cluster
drwxr-xr-x 2 grid oinstall 4096 Oct 26 15:38 localhost
2) ohasd 所使用的套接字文件( socket file )存在
[grid@ebsdb1 ~]$ ls -l /var/tmp/.oracle/*HAS*
srwxrwxrwx 1 root root 0 Feb 3 10:41 /var/tmp/.oracle/sebsdb1DBG_OHASD
srwxrwxrwx 1 root root 0 Feb 3 10:41 /var/tmp/.oracle/sOHASD_IPC_SOCKET_11
-rwxrwxrwx 1 root root 0 Oct 26 15:43 /var/tmp/.oracle/sOHASD_IPC_SOCKET_11_lock
srwxrwxrwx 1 root root 0 Feb 3 10:41 /var/tmp/.oracle/sOHASD_UI_SOCKET
3) ohasd 對(duì)應(yīng)的日志文件能夠被正常訪問(wèn)
[grid@ebsdb1 11.2.0]$ ls -l $GRID_HOME/log/ebsdb1/ohasd
total 106192
-rw-r--r-- 1 root root 10579981 Feb 12 16:01 ohasd.l01
-rw-r--r-- 1 root root 10520765 Feb 5 20:22 ohasd.l02
-rw-r--r-- 1 root root 10547596 Jan 24 14:24 ohasd.l03
-rw-r--r-- 1 root root 10544559 Jan 22 18:01 ohasd.l04
-rw-r--r-- 1 root root 10546879 Jan 20 21:42 ohasd.l05
-rw-r--r-- 1 root root 10551400 Jan 19 01:21 ohasd.l06
-rw-r--r-- 1 root root 10552985 Jan 17 04:50 ohasd.l07
-rw-r--r-- 1 root root 10550884 Jan 15 08:21 ohasd.l08
-rw-r--r-- 1 root root 10548055 Jan 13 11:52 ohasd.l09
-rw-r--r-- 1 root root 10548999 Jan 11 15:09 ohasd.l10
-rw-r--r-- 1 root root 3171780 Feb 14 17:03 ohasd.log
-rw-r--r-- 1 root root 1260 Feb3 10:41 ohasdOUT.log
如果發(fā)現(xiàn) init.ohasd 進(jìn)程沒(méi)有出現(xiàn),那么說(shuō)明操作系統(tǒng)進(jìn)程沒(méi)有成功地調(diào)用 /etc/init.d/init.ohasd run 命令,比較常見(jiàn)的原因可能如下:
原因 1 :操作系統(tǒng)運(yùn)行在了錯(cuò)誤的 runlevel (可使用 who –r 查看當(dāng)前的運(yùn)行級(jí)別)
原因
2:/etc/rc
原因 3 : GI 的自動(dòng)啟動(dòng)功能被關(guān)閉( crsctl disable crs )
而對(duì)應(yīng)的解決辦法如下:
辦法 1 :重新啟動(dòng)操作系統(tǒng)到正確的運(yùn)行級(jí)別
辦法 2 :手工運(yùn)行 init.ohasd 腳本(例如: nohup /etc/init.d/ohasd run & )
辦法 3 :?jiǎn)?dòng) GI 自動(dòng)啟動(dòng)功能( crsctl enable crs )
如果發(fā)現(xiàn) init.ohasd 已經(jīng)啟動(dòng),但是 ohasd.bin 沒(méi)有被正常啟動(dòng),比較常見(jiàn)的原因如下:
原因 1 : OLR 不能被訪問(wèn)或者已經(jīng)丟失。
原因 2 : ohasd 對(duì)應(yīng)的套接字文件無(wú)法訪問(wèn)或者已經(jīng)丟失
原因 3 : ohasd 對(duì)應(yīng)的日志文件無(wú)法被訪問(wèn)
而對(duì)應(yīng)的解決辦法如下:
辦法 1: 從 OLR 備份中恢復(fù) OLR (默認(rèn)情況下,在集群安裝結(jié)束后, OLR 會(huì)備份 <$GRID_HOME/cdata/< 節(jié)點(diǎn)名 >/backup_< 時(shí)間 >.olr> )
ocrconfig –local –restore
辦法 2 :重新啟動(dòng) GI ,以便重建套接字文件
crsctl stop crs
crsctl start crs
辦法 3 :修改 ohasd 日志文件的屬性,確認(rèn)它能夠被訪問(wèn)到
-rw-r--r-- 1 root root 3171780 Feb 14 17:03 ohasd.log
當(dāng)然,如果遇到了其他問(wèn)題,那就需要查看 ohasd.log 來(lái)進(jìn)行問(wèn)題分析了
3.ohasd.bin 開(kāi)始啟動(dòng)集群的初始化資源和進(jìn)程
根據(jù)前面的介紹, ohasd.bin 會(huì)啟動(dòng) 4 個(gè)代理進(jìn)程來(lái)啟動(dòng)所有的集群初始化資源。
oraagnet :?jiǎn)?dòng) ora.asm 、 ora.evmd 、 ora.gipcd 、 ora.gpnpd 、 ora.mdnsd 等
orarootagent :?jiǎn)?dòng) ora.crsd 、 ora.ctssd 、 ora.cluster_interconnect.haip 、 ora.crf 、 ora.diskmon 等
cssdagnet :?jiǎn)?dòng) ora.cssd
cssdmonitor :?jiǎn)?dòng) ora.cssdmonitor
如果對(duì)應(yīng)的代理進(jìn)程無(wú)法啟動(dòng)的話,那么以上的集群初始化資源也就無(wú)法啟動(dòng),而代理進(jìn)程無(wú)法啟動(dòng)的主要原因有以下兩種:
原因 1 :代理進(jìn)程對(duì)應(yīng)的二進(jìn)制文件損壞
原因 2 :代理進(jìn)程的日志文件無(wú)法訪問(wèn)
[grid@ebsdb1 oraagent_grid]$ ls -l $GRID_HOME/log/ebsdb1/agent/ohasd/oraagent_grid
total 109976
……
-rw-r--r-- 1 grid oinstall 6895201 Feb 14 19:28 oraagent_grid.log
……
[grid@ebsdb1 oracssdagent_root]$ ls -l $GRID_HOME/log/ebsdb1/agent/ohasd/orarootagent_root
total 112468
……
-rw-r--r-- 1 root root 9467315 Feb 14 19:30 orarootagent_root.log
……
[grid@ebsdb1 oraagent_grid]$ ls -l $GRID_HOME/log/ebsdb1/agent/ohasd/oracssdagent_root
total 852
-rw-r--r-- 1 root root 865091 Feb 14 16:04 oracssdagent_root.log
[grid@ebsdb1 oracssdagent_root]$ ls -l $GRID_HOME/log/ebsdb1/agent/ohasd/oracssdmonitor_root
total 844
-rw-r--r-- 1 root root 856526 Feb 14 19:25 oracssdmonitor_root.log
對(duì)應(yīng)的解決辦法如下:
辦法 1 :將有問(wèn)題節(jié)點(diǎn)的代理進(jìn)程二進(jìn)制文件和健康節(jié)點(diǎn)的文件進(jìn)行比較,發(fā)現(xiàn)不同后,把健康節(jié)點(diǎn)的文件復(fù)制到問(wèn)題節(jié)點(diǎn)的對(duì)應(yīng)位置。
辦法 2 :確認(rèn)代理進(jìn)程的日志文件能夠被對(duì)應(yīng)的用戶訪問(wèn)。
4. 集群的初始化資源開(kāi)始啟動(dòng)
雖然 ohasd 的代理進(jìn)程會(huì)同時(shí)啟動(dòng)所有的集群初始化資源,但是它們之間還是有依賴關(guān)系的,集群初始化資源的啟動(dòng)依賴關(guān)系如下:
有些對(duì)集群不重要的初始化資源,在上圖中并沒(méi)有顯示
從上面的途中大家可以看到 gipcd 、 gpnpd 、 mdnsd 負(fù)責(zé)完成集群的 bootstrap 過(guò)程; cssdagent 和 cssdmonitor 負(fù)責(zé)啟動(dòng)和監(jiān)控 cssd 守護(hù)進(jìn)程;而集群的其他初始化資源都要依賴于 cssd 。
下面對(duì)集群的 bootstrap 過(guò)程進(jìn)行簡(jiǎn)單的介紹(詳細(xì)的過(guò)程在 css 管理中)
1) mdnsd 守護(hù)進(jìn)程被啟動(dòng),并啟動(dòng) mdns 服務(wù),以便 gpnpd 能夠通過(guò) mdns 在節(jié)點(diǎn)之間傳輸 gpnp profile 文件。
2) gpnpd 守護(hù)進(jìn)程被啟動(dòng), gpnpd 開(kāi)始讀取本地節(jié)點(diǎn)的 gpnp profile ,之后和遠(yuǎn)程節(jié)點(diǎn)的 gpnpd 守護(hù)進(jìn)程通信,以便獲得集群中最新的 gpnp profile 信息。
3) gpnpd 啟動(dòng)完畢,向本地節(jié)點(diǎn)的其他集群初始化資源提供 gpnp profile 服務(wù)。
4) gipcd 守護(hù)進(jìn)程被啟動(dòng),從 gpnpd 守護(hù)進(jìn)程獲得集群的私網(wǎng)信息,并和遠(yuǎn)程節(jié)點(diǎn)的 gpipcd 守護(hù)進(jìn)程通信,最后開(kāi)監(jiān)控本地節(jié)點(diǎn)的私網(wǎng)。
5) cssdagent 代理進(jìn)程啟動(dòng) ocssd.bin 守護(hù)進(jìn)程。
6) cssdmonitor 守護(hù)進(jìn)程啟動(dòng),并開(kāi)始監(jiān)控 ocssd.bin 守護(hù)進(jìn)程的狀態(tài)。
在整個(gè)過(guò)程中,可能導(dǎo)致集群的 bootstrap 過(guò)程無(wú)法成功的主要原因如下。
原因 1 :集群中有其他的 mdns 軟件運(yùn)行,這會(huì)導(dǎo)致 GI 的 mdnsd 服務(wù)無(wú)法正常工作。
原因 2 : gpnp profile 文件中的信息出現(xiàn)錯(cuò)誤,這會(huì)導(dǎo)致集群的 bootstrap 過(guò)程無(wú)法完成。
[grid@ebsdb1 peer]$ gpnptool get
或
[grid@ebsdb1 peer]$
cat $GRID_HOME/gpnp/
原因 3 :節(jié)點(diǎn)之間的網(wǎng)絡(luò)通信存在問(wèn)題,這會(huì)導(dǎo)致 gpnp profile 無(wú)法正常傳輸。
原因 4 : gpnp 的一些線程被掛起,這會(huì)導(dǎo)致 gpnpd 守護(hù)進(jìn)程無(wú)法成功完成啟動(dòng)任務(wù)。
原因 5 :集群的私網(wǎng)網(wǎng)卡出現(xiàn)問(wèn)題,這會(huì)導(dǎo)致 gipcd 無(wú)法和其他節(jié)點(diǎn)的 gipcd 進(jìn)行通信或者集群沒(méi)有可用的私網(wǎng)進(jìn)行通信。
原因 6 : gipcd 存在問(wèn)題,這會(huì)導(dǎo)致它錯(cuò)誤地認(rèn)為集群私網(wǎng)網(wǎng)卡存在問(wèn)題。
原因 7 :以上守護(hù)進(jìn)程的套接字文件丟失。
對(duì)應(yīng)的解決方法如下。
方法 1 :停止并禁用其他的 mdns 軟件。
方法 2 :如果 gpnp profile 只是在集群的某一個(gè)節(jié)點(diǎn)上出現(xiàn)了錯(cuò)誤,可以從集群的其他節(jié)點(diǎn)將其復(fù)制過(guò)來(lái)。如果集群所有幾點(diǎn)的 gpnp pfile 都出現(xiàn)了問(wèn)題,那么就需要使用 gpnp 工具來(lái)進(jìn)行修正。
下面的例子演示了如何使用 gpnp tool 修改 gpnp profile 中集群的私網(wǎng)信息。
1) 檢查當(dāng)前的 gpnp profile ,確認(rèn) gpnpd 能夠通過(guò) mdns 找到集群的其他節(jié)點(diǎn)。
[grid@ebsdb1 peer]$ gpnptool get
[grid@ebsdb1 peer]$ gpnptool find
2) 創(chuàng)建一個(gè)工作路徑以用于編輯 gpnp profile
mkdir /home/grid/gpnp
export GPNPDIR=/home/grid/gpnp
$GRID_HOME/bing/gpnptool get -o=$GPNPDIR/profile.original
3) 創(chuàng)建一個(gè)用于修改的 gpnp profile 副本
cp $GPNPDIR/profile.original $GPNPDIR/p.xml
4) 查看 gpnp profile 的序列號(hào)和私網(wǎng)信息
$gpnptool getpval -p=$GPNPDIR/p.xml -prf_sq -o-
$gpnptool getpval -p=$GPNPDIR/p.xml -net -o-
5) 修改集群私網(wǎng)的網(wǎng)卡信息
gpnptool edit -p=$GPNPDIR/p.xml -o=$GPNPDIR/p.xml -ovr -prf_sq=< 當(dāng)前序列號(hào) +1> -net< 私網(wǎng)編號(hào) >:net_ada=< 私網(wǎng)網(wǎng)卡名 >
例如:
gpnptool edit -p=$GPNPDIR/p.xml -o=$GPNPDIR/p.xml -ovr -prf_sq=9 -net2:net_ada=eth2
6) 確認(rèn)之前的修改
gpnptool sign -p=$GPNPDIR/p.xml -o=$GPNPDIR/p.xml -ovr -w=cw-fs:peer
7) 將修改后的 gpnp profile 應(yīng)用到 gpnpd 守護(hù)進(jìn)程中。
gpnptool put -p=$GPNPDIR/p.xml
8) 將改變后的 gpnp profile 推送到集群的其他節(jié)點(diǎn)
gpnptool find -c=< 集群名 >
gpnptool rget -c=< 集群名 >
方法 3 :確認(rèn)件私網(wǎng)通信正常(例如:使用 ping 、 traceroute 等命令確認(rèn)集群私網(wǎng)的連通性)
方法
4
:在操作系統(tǒng)層面重新啟動(dòng)
gpnp
守護(hù)進(jìn)程,例如:
kill -9
當(dāng) gpnpd 守護(hù)進(jìn)程被總之之后,對(duì)應(yīng)的 ohasd 代理進(jìn)程 oraagent 會(huì)及時(shí)發(fā)現(xiàn)這一情況,并啟動(dòng)新的 gpnpd 守護(hù)進(jìn)程。
方法 5 :確認(rèn)集群私網(wǎng)通信正常(例如:使用 ping 、 traceroute 等命令確認(rèn)集群私網(wǎng)的連通性)
方法
6
:在操作系統(tǒng)層面重新啟動(dòng)
gipcd
守護(hù)進(jìn)程,例如:
kill -9
當(dāng) gipcd 守護(hù)進(jìn)程被總之之后,對(duì)應(yīng)的 ohasd 代理進(jìn)程 oraagent 會(huì)及時(shí)發(fā)現(xiàn)這一情況,并啟動(dòng)新的 gipcd 守護(hù)進(jìn)程。
方法 7 :重新啟動(dòng) GI ,以便重建套接字文件。
crsctl stop crs
crsctl start crs