1.什麼是ONShtml
ONS(Oracle Notification Service)是Oracle Clusterware 實現FAN Event Push模型的基礎。
在傳統模型中,客戶端須要按期檢索服務器來判斷服務端的狀態,本質上是一個PULL模型。ORACLE10
引入了一種全新的PUSH機制--FAN(Fast Application Notification),當服務端發生某些事件時,服務器
會主動的通知客戶端這種變化,這樣客戶端就能儘早得知服務器端變化。而這種機制就是依賴ONS實現的。
一般使用onsctl命令管理配置ONS,使用onsctl命令以前,須要先配置ONS服務。node
2.OSN配置內容服務器
須要注意的是在RAC環境中,使用的是$CRS_HOME下的ONS,而不是$ORACLE_HOME下的ONS。
配置文件位於$CRS_HOME/opmn/conf/ons.config。oracle
[root@rac3 conf]# pwd /opt/ora10g/product/10.2.0/crs_1/opmn/conf [root@rac3 conf]# ls ons.config [root@rac3 conf]# cat ons.config localport=6100 remoteport=6200 loglevel=3 useocr=on
咱們對這個文件的參數進行說明:app
<1>localport:這個參數表明本地監聽端口,這裏的"本地"特指127.0.0.1這個迴環地址,用來和運行在本地的客戶端進行通訊。
<2>remoteport:這個參數表明的遠程監聽端口,也就是除了127.0.0.1之外的全部本機IP地址,用來和遠程的客戶端進行通訊。
<3>loglevel:Oracle容許跟蹤ONS進程的運行,並把日誌記錄到本地文件中。這個參數用來定義ONS進程要記錄的日誌級別, 從1~9,缺省值爲3。
<4>logfile:這個參數和loglevel參數一塊兒使用,用於定義ONS進程日誌文件的位置,缺省是 $CRS_HOME/opmn/logs/opmn.log。
<5>nodes和useocr:這兩個參數共同決定了本機的ONS daemon要和哪些節點上的ONS daemon進行通訊。tcp
在這些參數中,localport和remoteport兩個參數是必須的。能夠經過netstat命令來比較一下這兩個端口的使用方式:測試
[root@rac3 bin]# netstat -ano|grep 6100 tcp 0 0 127.0.0.1:6100 0.0.0.0:* LISTEN off (0.00/0/0) tcp 0 0 127.0.0.1:6100 127.0.0.1:32852 ESTABLISHED off (0.00/0/0) tcp 0 0 127.0.0.1:32840 127.0.0.1:6100 ESTABLISHED keepalive (7063.32/0/0) tcp 0 0 127.0.0.1:32852 127.0.0.1:6100 ESTABLISHED keepalive (7188.42/0/0) tcp 0 0 127.0.0.1:6100 127.0.0.1:32840 ESTABLISHED off (0.00/0/0) udp 0 0 192.168.2.103:61008 0.0.0.0:* off (0.00/0/0)0/0) [root@rac3 bin]# netstat -ano|grep 6200 tcp 0 0 0.0.0.0:6200 0.0.0.0:* LISTEN off (0.00/0/0) tcp 0 0 192.168.1.103:32836 192.168.1.104:6200 ESTABLISHED off (0.00/0/0)
對比能夠看到Oracle在127.0.0.1這個地址上監聽6100這個端口,而在0.0.0.0(即所其餘地址)上監聽6200端口,這正好對應了咱們/opt/ora10g/product/10.2.0/crs_1/opmn/conf/ons.config中的配置this
在這裏還須要注意的是useocr參數,該參數取值爲ON或OFF。若是useocr是ON,說明與ONS進行通訊的遠程節點信息就保存在OCR中,若是是OFF,說明與ONS進行通訊的遠程節點信息就取nodes中的配置。
nodes參數值格式: hostname/ip:port[,hostname/ip:port] 例如:nodes=dbs:6200,dbp:6200
當useocr參數爲ON時,與ONS進行通訊的遠程節點信息就保存在OCR中,那麼這個信息就保存在OCR的DATABASE.ONS_HOSTS這個鍵下。spa
咱們能夠把這個鍵導出來:.net
[root@rac3 bin]# ./ocrdump -xml /home/oracle/ons_info.xml -keyname DATABASE.ONS_HOSTS [root@rac3 bin]# cat /home/oracle/ons_info.xml <OCRDUMP> <TIMESTAMP>01/28/2015 10:46:35</TIMESTAMP> <COMMAND>./ocrdump.bin -xml /home/oracle/ons_info.xml -keyname DATABASE.ONS_HOSTS </COMMAND> <KEY> <NAME>DATABASE.ONS_HOSTS</NAME> <VALUE_TYPE>UNDEF</VALUE_TYPE> <VALUE><![CDATA[]]></VALUE> <USER_PERMISSION>PROCR_ALL_ACCESS</USER_PERMISSION> <GROUP_PERMISSION>PROCR_READ</GROUP_PERMISSION> <OTHER_PERMISSION>PROCR_READ</OTHER_PERMISSION> <USER_NAME>oracle</USER_NAME> <GROUP_NAME>oinstall</GROUP_NAME> <KEY> <NAME>DATABASE.ONS_HOSTS.rac3</NAME> --節點 <VALUE_TYPE>ORATEXT</VALUE_TYPE> <VALUE><![CDATA[rac3]]></VALUE> <USER_PERMISSION>PROCR_ALL_ACCESS</USER_PERMISSION> <GROUP_PERMISSION>PROCR_READ</GROUP_PERMISSION> <OTHER_PERMISSION>PROCR_READ</OTHER_PERMISSION> <USER_NAME>oracle</USER_NAME> <GROUP_NAME>oinstall</GROUP_NAME> <KEY> <NAME>DATABASE.ONS_HOSTS.rac3.PORT</NAME> --節點對應的端口 <VALUE_TYPE>ORATEXT</VALUE_TYPE> <VALUE><![CDATA[6200]]></VALUE> <USER_PERMISSION>PROCR_ALL_ACCESS</USER_PERMISSION> <GROUP_PERMISSION>PROCR_READ</GROUP_PERMISSION> <OTHER_PERMISSION>PROCR_READ</OTHER_PERMISSION> <USER_NAME>oracle</USER_NAME> <GROUP_NAME>oinstall</GROUP_NAME> </KEY> </KEY> <KEY> <NAME>DATABASE.ONS_HOSTS.rac4</NAME> --節點 <VALUE_TYPE>ORATEXT</VALUE_TYPE> <VALUE><![CDATA[rac4]]></VALUE> <USER_PERMISSION>PROCR_ALL_ACCESS</USER_PERMISSION> <GROUP_PERMISSION>PROCR_READ</GROUP_PERMISSION> <OTHER_PERMISSION>PROCR_READ</OTHER_PERMISSION> <USER_NAME>oracle</USER_NAME> <GROUP_NAME>oinstall</GROUP_NAME> <KEY> <NAME>DATABASE.ONS_HOSTS.rac4.PORT</NAME> --端口 <VALUE_TYPE>ORATEXT</VALUE_TYPE> <VALUE><![CDATA[6200]]></VALUE> <USER_PERMISSION>PROCR_ALL_ACCESS</USER_PERMISSION> <GROUP_PERMISSION>PROCR_READ</GROUP_PERMISSION> <OTHER_PERMISSION>PROCR_READ</OTHER_PERMISSION> <USER_NAME>oracle</USER_NAME> <GROUP_NAME>oinstall</GROUP_NAME> </KEY> </KEY> </KEY> </OCRDUMP>
3.配置ONS
配置ONS時咱們能夠直接編輯ONS的配置文件來修改配置(useocr=OFF時),若是ONS節點通訊的配置信息放在了OCR中(useocr=ON時),可使用root身份執行racgons命令進行配置。
注意:racgons命令必須用root身份執行,若是使用oracle身份執行這個命令,不會提示任何錯誤信息,可是也不會更改任何配置。
---添加配置:
[root@rac3 bin]# ./racgons add_config rac3:6300 rac4:6300 [root@rac3 bin]# ./ocrdump -xml /home/oracle/ons_info2.xml -keyname DATABASE.ONS_HOSTS [root@rac3 bin]# cat /home/oracle/ons_info2.xml <OCRDUMP> <TIMESTAMP>01/28/2015 10:56:30</TIMESTAMP> <COMMAND>./ocrdump.bin -xml /home/oracle/ons_info2.xml -keyname DATABASE.ONS_HOSTS </COMMAND> <KEY> <NAME>DATABASE.ONS_HOSTS</NAME> <VALUE_TYPE>UNDEF</VALUE_TYPE> <VALUE><![CDATA[]]></VALUE> <USER_PERMISSION>PROCR_ALL_ACCESS</USER_PERMISSION> <GROUP_PERMISSION>PROCR_READ</GROUP_PERMISSION> <OTHER_PERMISSION>PROCR_READ</OTHER_PERMISSION> <USER_NAME>oracle</USER_NAME> <GROUP_NAME>oinstall</GROUP_NAME> <KEY> <NAME>DATABASE.ONS_HOSTS.rac3</NAME> <VALUE_TYPE>ORATEXT</VALUE_TYPE> <VALUE><![CDATA[rac3]]></VALUE> <USER_PERMISSION>PROCR_ALL_ACCESS</USER_PERMISSION> <GROUP_PERMISSION>PROCR_READ</GROUP_PERMISSION> <OTHER_PERMISSION>PROCR_READ</OTHER_PERMISSION> <USER_NAME>oracle</USER_NAME> <GROUP_NAME>oinstall</GROUP_NAME> <KEY> <NAME>DATABASE.ONS_HOSTS.rac3.PORT</NAME> <VALUE_TYPE>ORATEXT</VALUE_TYPE> <VALUE><![CDATA[6200 6300]]></VALUE> --能夠看到增長了6300端口 <USER_PERMISSION>PROCR_ALL_ACCESS</USER_PERMISSION> <GROUP_PERMISSION>PROCR_READ</GROUP_PERMISSION> <OTHER_PERMISSION>PROCR_READ</OTHER_PERMISSION> <USER_NAME>oracle</USER_NAME> <GROUP_NAME>oinstall</GROUP_NAME> </KEY> </KEY> <KEY> <NAME>DATABASE.ONS_HOSTS.rac4</NAME> <VALUE_TYPE>ORATEXT</VALUE_TYPE> <VALUE><![CDATA[rac4]]></VALUE> <USER_PERMISSION>PROCR_ALL_ACCESS</USER_PERMISSION> <GROUP_PERMISSION>PROCR_READ</GROUP_PERMISSION> <OTHER_PERMISSION>PROCR_READ</OTHER_PERMISSION> <USER_NAME>oracle</USER_NAME> <GROUP_NAME>oinstall</GROUP_NAME> <KEY> <NAME>DATABASE.ONS_HOSTS.rac4.PORT</NAME> <VALUE_TYPE>ORATEXT</VALUE_TYPE> <VALUE><![CDATA[6200 6300]]></VALUE> --能夠看到增長了6300端口 <USER_PERMISSION>PROCR_ALL_ACCESS</USER_PERMISSION> <GROUP_PERMISSION>PROCR_READ</GROUP_PERMISSION> <OTHER_PERMISSION>PROCR_READ</OTHER_PERMISSION> <USER_NAME>oracle</USER_NAME> <GROUP_NAME>oinstall</GROUP_NAME> </KEY> </KEY> </KEY> </OCRDUMP>
----刪除配置
[root@rac3 bin]# ./racgons remove_config rac3:6300 rac4:6300 racgons: Existing key value on rac3 = 6200 6300. racgons: rac3:6300 removed from OCR. racgons: Existing key value on rac4 = 6200 6300. racgons: rac4:6300 removed from OCR. [root@rac3 bin]# ./ocrdump -xml /home/oracle/ons_info3.xml -keyname DATABASE.ONS_HOSTS [root@rac3 bin]# cat /home/oracle/ons_info3.xml <OCRDUMP> <TIMESTAMP>01/28/2015 11:01:13</TIMESTAMP> <COMMAND>./ocrdump.bin -xml /home/oracle/ons_info3.xml -keyname DATABASE.ONS_HOSTS </COMMAND> <KEY> <NAME>DATABASE.ONS_HOSTS</NAME> <VALUE_TYPE>UNDEF</VALUE_TYPE> <VALUE><![CDATA[]]></VALUE> <USER_PERMISSION>PROCR_ALL_ACCESS</USER_PERMISSION> <GROUP_PERMISSION>PROCR_READ</GROUP_PERMISSION> <OTHER_PERMISSION>PROCR_READ</OTHER_PERMISSION> <USER_NAME>oracle</USER_NAME> <GROUP_NAME>oinstall</GROUP_NAME> <KEY> <NAME>DATABASE.ONS_HOSTS.rac3</NAME> <VALUE_TYPE>ORATEXT</VALUE_TYPE> <VALUE><![CDATA[rac3]]></VALUE> <USER_PERMISSION>PROCR_ALL_ACCESS</USER_PERMISSION> <GROUP_PERMISSION>PROCR_READ</GROUP_PERMISSION> <OTHER_PERMISSION>PROCR_READ</OTHER_PERMISSION> <USER_NAME>oracle</USER_NAME> <GROUP_NAME>oinstall</GROUP_NAME> <KEY> <NAME>DATABASE.ONS_HOSTS.rac3.PORT</NAME> <VALUE_TYPE>ORATEXT</VALUE_TYPE> <VALUE><![CDATA[6200 ]]></VALUE> --能夠看到6300端口已被刪除 <USER_PERMISSION>PROCR_ALL_ACCESS</USER_PERMISSION> <GROUP_PERMISSION>PROCR_READ</GROUP_PERMISSION> <OTHER_PERMISSION>PROCR_READ</OTHER_PERMISSION> <USER_NAME>oracle</USER_NAME> <GROUP_NAME>oinstall</GROUP_NAME> </KEY> </KEY> <KEY> <NAME>DATABASE.ONS_HOSTS.rac4</NAME> <VALUE_TYPE>ORATEXT</VALUE_TYPE> <VALUE><![CDATA[rac4]]></VALUE> <USER_PERMISSION>PROCR_ALL_ACCESS</USER_PERMISSION> <GROUP_PERMISSION>PROCR_READ</GROUP_PERMISSION> <OTHER_PERMISSION>PROCR_READ</OTHER_PERMISSION> <USER_NAME>oracle</USER_NAME> <GROUP_NAME>oinstall</GROUP_NAME> <KEY> <NAME>DATABASE.ONS_HOSTS.rac4.PORT</NAME> <VALUE_TYPE>ORATEXT</VALUE_TYPE> <VALUE><![CDATA[6200 ]]></VALUE> --能夠看到6300端口已被刪除 <USER_PERMISSION>PROCR_ALL_ACCESS</USER_PERMISSION> <GROUP_PERMISSION>PROCR_READ</GROUP_PERMISSION> <OTHER_PERMISSION>PROCR_READ</OTHER_PERMISSION> <USER_NAME>oracle</USER_NAME> <GROUP_NAME>oinstall</GROUP_NAME> </KEY> </KEY> </KEY> </OCRDUMP>
4.onsctl命令
用onsctl命令能夠啓動、中止、調試ONS,並從新載入配置文件,其命令格式以下:
[root@rac3 bin]# ./onsctl -help usage: ./onsctl start|stop|ping|reconfig|debug start - Start opmn only. stop - Stop ons daemon ping - Test to see if ons daemon is running debug - Display debug information for the ons daemon reconfig - Reload the ons configuration help - Print a short syntax description (this). detailed - Print a verbose syntax description.
注意:ONS進程運行,並不必定表明ONS正常工做,須要使用ping命令來確認。
<1>在OS級別查看進程狀態
[root@rac3 bin]# ps -ef|grep ons |grep -v grep oracle 27813 1 0 10:31 ? 00:00:00 /opt/ora10g/product/10.2.0/crs_1/opmn/bin/ons -d oracle 27814 27813 0 10:31 ? 00:00:00 /opt/ora10g/product/10.2.0/crs_1/opmn/bin/ons -d
從輸出信息可見ONS進程正常運行。
<2>確認ONS服務狀態
[root@rac3 bin]# ./onsctl ping Number of onsconfiguration retrieved, numcfg = 2 onscfg[0] {node = rac3, port = 6200} Adding remote host rac3:6200 onscfg[1] {node = rac4, port = 6200} Adding remote host rac4:6200 ons is running ...
從輸出信息可見ONS進程正常運行。
<3>中止ons服務
[root@rac3 bin]# ./onsctl stop onsctl: shutting down ons daemon ... Number of onsconfiguration retrieved, numcfg = 2 onscfg[0] {node = rac3, port = 6200} Adding remote host rac3:6200 onscfg[1] {node = rac4, port = 6200} Adding remote host rac4:6200 [root@rac3 bin]# [root@rac3 bin]# ./onsctl ping Number of onsconfiguration retrieved, numcfg = 2 onscfg[0] {node = rac3, port = 6200} Adding remote host rac3:6200 onscfg[1] {node = rac4, port = 6200} Adding remote host rac4:6200 ons is not running ... ---從這裏看確認中止成功
<4>啓動ons服務
[root@rac3 bin]# ./onsctl start Number of onsconfiguration retrieved, numcfg = 2 onscfg[0] {node = rac3, port = 6200} Adding remote host rac3:6200 onscfg[1] {node = rac4, port = 6200} Adding remote host rac4:6200 Number of onsconfiguration retrieved, numcfg = 2 onscfg[0] {node = rac3, port = 6200} Adding remote host rac3:6200 onscfg[1] {node = rac4, port = 6200} Adding remote host rac4:6200 onsctl: ons started --啓動成功 [root@rac3 bin]# [root@rac3 bin]# ./onsctl ping Number of onsconfiguration retrieved, numcfg = 2 onscfg[0] {node = rac3, port = 6200} Adding remote host rac3:6200 onscfg[1] {node = rac4, port = 6200} Adding remote host rac4:6200 ons is running ... --從這裏看確認啓動成功
<5>使用debug選項查看詳細信息
[root@rac3 bin]# ./onsctl debug Number of onsconfiguration retrieved, numcfg = 2 onscfg[0] {node = rac3, port = 6200} Adding remote host rac3:6200 onscfg[1] {node = rac4, port = 6200} Adding remote host rac4:6200 HTTP/1.1 200 OK Content-Length: 1355 Content-Type: text/html Response: ======== ONS ======== Listeners: NAME BIND ADDRESS PORT FLAGS SOCKET ------- --------------- ----- -------- ------ Local 127.000.000.001 6100 00000142 7 Remote 192.168.001.103 6200 00000101 8 Request No listener Server connections: -----該命令最有意義的是可以顯示全部鏈接。 ID IP PORT FLAGS SENDQ WORKER BUSY SUBS ---------- --------------- ----- -------- ---------- -------- ------ ----- 1 192.168.001.104 6200 00010005 0 1 0 Client connections: ID IP PORT FLAGS SENDQ WORKER BUSY SUBS ---------- --------------- ----- -------- ---------- -------- ------ ----- Pending connections: ID IP PORT FLAGS SENDQ WORKER BUSY SUBS ---------- --------------- ----- -------- ---------- -------- ------ ----- 0 127.000.000.001 6100 00000812 0 1 0 0 127.000.000.001 6100 00000812 0 1 0 0 127.000.000.001 6100 00020812 0 1 0 Worker Ticket: 0/0, Idle: 360 THREAD FLAGS -------- -------- f7f86ba0 00000012 f6dd1ba0 00000012 f63d0ba0 00000012 Resources: Notifications: Received: 0, in Receive Q: 0, Processed: 0, in Process Q: 0 Pools: Message: 24/25 (1), Link: 25/25 (1), Subscription: 0/0 (0)
##===========================================================
延伸:
在對以上ons進行配置測試後,使用crs_stat -t 命令發現集羣中一個節點 ons啓動不起來
[oracle@rac3 ~]$ crs_stat -t Name Type Target State Host ------------------------------------------------------------ ora....SM1.asm application ONLINE ONLINE rac3 ora....C3.lsnr application ONLINE ONLINE rac3 ora.rac3.gsd application ONLINE ONLINE rac3 ora.rac3.ons application ONLINE OFFLINE ora.rac3.vip application ONLINE ONLINE rac3 ora....SM2.asm application ONLINE ONLINE rac4 ora....C4.lsnr application ONLINE ONLINE rac4 ora.rac4.gsd application ONLINE ONLINE rac4 ora.rac4.ons application ONLINE ONLINE rac4 ora.rac4.vip application ONLINE ONLINE rac4 ora.racdb.db application ONLINE ONLINE rac4 ora....b1.inst application ONLINE ONLINE rac3 ora....b2.inst application ONLINE ONLINE rac4
--查看日誌
[oracle@rac3 racg]$ tail -f ora.rac3.ons.log .......................................... RCV: Permission denied Communication error with the OPMN server local port. Check the OPMN log files RCV: Permission denied Communication error with the OPMN server loca 2015-01-28 13:34:25.867: [ RACG][2540408064] [29681][2540408064][ora.rac3.ons]: l port. Check the OPMN log files RCV: Permission denied -----一直提示權限被拒絕 Communication error with the OPMN server local port. Check the OPMN log files Number of onsconfiguration retrieved, numcfg = 2 onscfg[0] {node = rac3, port = 6200} Adding remote host rac3:6200 o 2015-01-28 13:34:25.867: [ RACG][2540408064] [29681][2540408064][ora.rac3.ons]: nscfg[1] {node = rac4, port = 6200} Adding remote host rac4:6200 onsctl: ons failed to start --致使ons啓動失敗,但onsctl ping顯示ons正在運行 2015-01-28 13:34:26.077: [ RACG][2540408064] [29681][2540408064][ora.rac3.ons]: RCV: Permission denied Communication error with the OPMN server local port. Check the OPMN log files
--可是確認ons服務已啓動
[root@rac3 bin]# ./onsctl ping Number of onsconfiguration retrieved, numcfg = 2 onscfg[0] {node = rac3, port = 6200} Adding remote host rac3:6200 onscfg[1] {node = rac4, port = 6 2015-01-28 13:34:26.077: [ RACG][2540408064] [29681][2540408064][ora.rac3.ons]: 200} Adding remote host rac4:6200 ons is not running ...
從新./onsctl stop 後 ./onsctl start也能夠正常關閉和啓動,但日誌裏看到的都是啓動不起來
--單獨啓動的時候
[oracle@rac3 ~]$ crs_start ora.rac3.ons Attempting to start `ora.rac1.ons` on member `rac3` Start of `ora.rac3.ons` on member `rac3` failed. rac4 : CRS-1019: Resource ora.rac3.ons (application) cannot run on rac4
驗證了ons的配置權限也沒有發現問題,重啓了虛擬機嘗試,發現ons在兩個節點正常啓動,問題解決。
如今懷疑多是權限問題沒有檢查到或ons進程僵死,啓動新的可以啓動,日誌裏仍是報錯信息。
(通常狀況下,暫時的關閉和啓動ons資源對系統影響不是太大,由於該資源主要和load balance 、 failover 有關)
[oracle@rac3 ~]$ crs_stat -t Name Type Target State Host ------------------------------------------------------------ ora....SM1.asm application ONLINE ONLINE rac3 ora....C3.lsnr application ONLINE ONLINE rac3 ora.rac3.gsd application ONLINE ONLINE rac3 ora.rac3.ons application ONLINE ONLINE rac3 ora.rac3.vip application ONLINE ONLINE rac3 ora....SM2.asm application ONLINE ONLINE rac4 ora....C4.lsnr application ONLINE ONLINE rac4 ora.rac4.gsd application ONLINE ONLINE rac4 ora.rac4.ons application ONLINE ONLINE rac4 ora.rac4.vip application ONLINE ONLINE rac4 ora.racdb.db application ONLINE ONLINE rac4 ora....b1.inst application ONLINE ONLINE rac3 ora....b2.inst application ONLINE ONLINE rac4
相似問題itpub上的帖子:http://www.itpub.net/thread-1283253-1-1.html
ps -ef|grep ons
致謝:本文檔參考了張曉明<<大話Oracle RAC>>