天天看點

About Oracle 11gR2 Grid Infrastructure Single Client Access Name (SCAN)

Oracle11gR2Grid Infrastructure (CRS)中引入了Single Client Access Name (SCAN)來簡化用戶端對資料庫服務的通路,本文将詳細說明 SCAN的含義及其工作原理。

SCAN概念

  • Single client access name (SCAN)是提供給所有用戶端用于連接配接叢集的虛拟主機名稱(與10g和 11g R1中的 vip主機名稱相對應)。 
  • SCAN是 DNS或 Grid Naming Service (GNS)中注冊到 1-3個 IP位址的一個域名。
  • 預設情況下,SCAN名稱與叢集的名稱相同,且該名稱在同一企業内必須唯一。SCAN的預設值基于本地節點的名稱。SCAN名稱的長度最少1個字元,最多15個字元,必須包含字母和數字,不得以數字開頭,可以包含連字元(-)。如果要使用長度超過15字元的 SCAN,請在安裝 Grid Infrastructure時選擇“ Advanced installation”選項。
  • 要想成功安裝 Grid Infrasture,SCAN必須至少解析成一個 IP位址。
  • SCAN VIP位址必須與virtual IP位址和 public IP位址位于同一子網。
  • Oracle強烈建議不要再 hosts檔案中配置 SCAN VIP位址。如果使用 hosts檔案來解析 SCAN主機名,則該 SCAN hostname隻能解析成一個SCAN IP位址。
  • 如果使用 hosts檔案來解析SCAN主機名,則在 Grid Infrastructure安裝結束時會遇到類似如下Cluster Verification Utility故障。

Installation log -$ORACLE_BASE/oraInventory/logs/installActions{$TIMESTAMP}.log

INFO: PRVG-1101 : SCANname "cluscan.us.oracle.com" failed to resolve

INFO: ERROR:

INFO: PRVF-4664 : Found inconsistent name resolution entries for SCAN name "cluscan.us.oracle.com"

INFO: ERROR:

INFO: PRVF-4657 : Name resolution setup check for"scanclunm" (IP address: 10.4.0.202) failed

OR

PRCS-1016 : Failed to resolve Single Client Access Namecluscan.us.oracle.com

  • 出于高可用性和可擴充性的考慮, Oracle推薦配置使用 DNS循環解析将 SCAN解析成三個位址。
  • 因為 SCAN是與整個叢集而不是特定的節點關聯,使用 SCAN可以再無需重新配置用戶端的情況下友善地從叢集添加或删除節點。SCAN還增強了資料庫的位置無關性,使得用戶端配置部再依賴于運作特定資料庫的節點。
  • 用戶端仍然可以繼續使用之前版本的方法來通路叢集,不過 Oracle推薦用戶端使用 SCAN來通路叢集。使用SCAN的用戶端也可以使用 EZCONNECT方式來通路叢集。
  • Grid Infrastructure除了啟動所有節點上的本地監聽程式 LISTENER來監聽本地的VIP外,還會啟動SCAN listener LISTENER_SCAN1(一個叢集中最多3個)來監聽SCAN VIP;Oracle Database11gR2預設情況下會将local_listener設定成 local LISTENER,将remote_listener設定為 SCAN listener。
  • SCAN listener will be running off GRID_HOME, and by default, in 11gR2 local listener will be running off GRID_HOME as well.

 SCAN相關的常見問題

如何配置 SCAN和SCAN listener?

在“Typical installation”過程中,程式會提示您确認預設的Single Client Access Name (SCAN)。如果您更改預設的SCAN,則您要使用的 SCAN名稱必須保持唯一性。

如果 SCAN名稱解析成一個IP位址,則root腳本(root.sh or rootupgrade.sh)将根據 SCAN名稱解析的 IP位址數量來建立 SCAN VIP資源(ora.scan1.vip)以及相應SCAN listener資源(ora.LISTENER_SCAN1.lsnr)的數量。例如,如果SCAN名稱可以解析為 2個 IP位址,則将 root腳本就會建立兩個 SCAN VIP資源和兩個相應的SCAN listener資源。

SCAN VIP及相應的 SCAN listener成對工作,當SCAN VIP failover到其他節點,則相應的SCAN監聽程式也會 failover到同一節點。

當SCAN VIPfailover發生時,始終會選擇運作SCAN VIP最少的節點,例如,在一個 4節點的叢集中,如果 SCAN VIP運作在節點、節點2和節點3上,則當節點 3 down 掉時,節點3上的SCAN VIP 及相應的SCAN listener就會 failover到節點4上,因為其他兩個節點的每個節點上已經運作了一個SCAN VIP。

我們還可以使用“srvctl”來添加/修改SCAN vip和 listener。

是否仍然需要在每個節點上配置 locallistener?

回答是“是”,我們仍然需要在每個節點配置獨立的 local listener。SCAN listener 并沒有取代每個節點上的 local listener。

在 11g R2的 GI中,叢集中的所有節點上會運作3個新的 scan listener,如果叢集節點超過3個,則隻會在其中3個節點上運作 SCAN listener,無論叢集有多少節點,最多也隻會有3個 scan listener。資料庫通過 remote_listener 初始化參數注冊到 SCAN listener中。如果叢集中任意一個 scan listener挂掉,都會在一個新的節點上自動重新開機。

SCAN的工作原理

About Oracle 11gR2 Grid Infrastructure Single Client Access Name (SCAN)

在用戶端送出請求時,在SCAN VIP位址及端口上進行監聽的SCANlistener就會代表用戶端建立連接配接。因為叢集上的所有服務都已注冊到 SCAN listener中, SCAN listener就會将負載最少的節點(每個scan listener會實時更新叢集的負載統計資訊)上的 local listener的位址傳回給用戶端。最後,用戶端就與通過傳回的提供服務的節點上的 local listener與服務建立連接配接。所有這些操作對于用戶端來說都會透明的,用戶端無需進行任何明确的配置。

$ SRVCTL STATUSSCAN_LISTENER

SCAN ListenerLISTENER_SCAN1 is enabled

SCAN listenerLISTENER_SCAN1 is running on node TEST1

SCAN ListenerLISTENER_SCAN2 is enabled

SCAN listenerLISTENER_SCAN2 is running on node TEST2

SCAN ListenerLISTENER_SCAN3 is enabled

SCAN listenerLISTENER_SCAN3 is running on node TEST3

可否用 '/etc/hosts'來解析 SCAN而不用 DNS或 GNS?

Oracle強烈建議不要在 hosts檔案中配置SCAN VIP 位址。但是可以使用hosts檔案來解析SCAN名稱,隻不過隻能解析成一個SCAN IP位址。

如果使用 hosts檔案來解析 SCAN名稱,則在安裝結束時會遇到ClusterVerification Utility失敗錯誤,詳細資訊請見metalink文章 NOTE 887471.1 。

可否使用之前的連接配接方式(VIP)來進行用戶端連接配接?

用戶端仍舊可以使用之前版本的連接配接方式(VIP)來通路叢集。

Oracle強烈建議用戶端使用 SCAN來通路叢集。使用 SCAN的用戶端也可以 EZCONNECT方式來通路叢集。

是否必須要使用 SCAN?

強烈建議而已,并非必須。

是否支援删除 SCAN?

SCAN Oracle 11gR2 Grid Infrastructure的一個元件,不支援删除SCAN。

Sample TNS entry for SCAN

TEST.ORACLE.COM =

(DESCRIPTION=

(ADDRESS=(PROTOCOL=tcp)(HOST=SCAN-TEST.ORACLE.COM)(PORT=1521))

(CONNECT_DATA=(SERVICE_NAME=11GR2TEST.ORACLE.COM))

)

Sample TNS Entry without SCAN

TEST.ORACLE.COM =

(DESCRIPTION=

(ADDRESS_LIST=

(ADDRESS=(PROTOCOL=tcp)(HOST=TEST1-vip.ORACLE.COM)(PORT=1521))

(ADDRESS=(PROTOCOL=tcp)(HOST=TEST2-vip.ORACLE.COM)(PORT=1521))

)

(CONNECT_DATA=(SERVICE_NAME=11GR2TEST.ORACLE.COM))

)

轉載請注明作者出處及原文連結,否則将追究法律責任:

作者:xiangsir

原文連結:http://blog.csdn.net/xiangsir/article/details/9224479

QQ:444367417

MSN:[email protected]

繼續閱讀