1. 程式人生 > >YH12:一篇文章讀懂SCAN

YH12:一篇文章讀懂SCAN

單客戶端訪問名稱(SCAN)是Oracle RAC環境中使用的功能,為客戶端提供訪問叢集中執行的任何Oracle資料庫的單一名稱。 使用者可以將SCAN視為RAC資料庫的叢集別名。 使用SCAN的好處是,如果在叢集中新增或刪除節點或資料庫,則客戶端的連線資訊不需要更改。

SCAN首次引入了Oracle RAC 11g第2版,並在Oracle RAC 12c中提供了其他功能。 使用單一名稱訪問叢集以連線到此叢集中的資料庫,客戶端可以使用EZConnect和簡單的JDBC瘦URL來訪問叢集中執行的任何資料庫,而與叢集中執行的資料庫或伺服器數量無關,叢集中所請求的資料庫實際上是處於活動狀態的伺服器。

SCAN

使用SCAN的網路需求

在安裝與Oracle Database 11. 2或更高版本一起分發的Oracle Grid Infrastructure的過程中定義了預設的SCAN配置。 Oracle Grid Infrastructure是一個包含Oracle Clusterware和Oracle Automatic Storage Management的Oracle Home。

必須首先安裝Oracle Grid Infrastructure才能使用Oracle RAC 11.2或更高版本。 在Oracle Grid Infrastructure安裝的面試階段,系統將提示需要提供SCAN名稱。 有兩個選項用於定義掃描:

1.使用公司DNS(域名服務)定義SCAN

2.使用Oracle網格命名服務(GNS)定義SCAN

使用公司DNS定義SCAN

對於使用公司的DNS定義SCAN,必須要求網路管理員使用迴圈演算法建立至少一個單一名稱,用於解析為三個IP地址。 考慮到負載均衡和高可用性要求,建議使用三個IP地址,無論叢集中的伺服器數量如何。

IP地址必須與叢集中的預設公網位於同一子網。 該名稱的長度必須不超過15個字元,不包括域名,並且必須在沒有域字尾的情況下解析(例如:“sales1-scan”必須是可解析的而不是“scan1-can.example.com”) 。 不能將IP分配給網路介面。

IP地址

可以使用“nslookup”檢查DNS中的SCAN配置。

如果DNS設定為向SCAN條目解析的IP提供迴圈訪問,則至少執行“nslookup”命令兩次以檢視迴圈演算法的工作。 結果應該是,每次“nslookup”將以不同的順序返回一組三個IP。

nslookup

注意:如果DNS伺服器沒有返回一組三個IP,如上圖所示或不迴圈,請諮詢網路管理員啟用此類設定。 DNS級別的迴圈允許跨叢集中的SCAN偵聽器之間的連線請求負載平衡。 SCAN作為一個整體不需要,並且沒有這樣的設定將不會阻止連線請求到另一個SCAN偵聽器的故障切換,以防列表中的第一個SCAN偵聽器關閉。

Oracle客戶端通常處理叢集中SCAN偵聽器之間的連線請求的故障轉移。 Oracle資料庫11.2或更高版本的Oracle客戶端不需要任何特殊配置來提供此類故障轉移。較老的客戶需要考慮額外的配置。因此,建議使用SCAN連線到資料庫的客戶端的最小版本是Oracle Database 11.2或更高版本。

使用客戶端DNS快取可能會產生DNS覆蓋不會從DNS伺服器發生的錯誤印象。 (DNS不返回一組三個IP,如上圖所示)。客戶端DNS快取通常用於最小化對外部DNS伺服器的DNS請求以及最小化DNS解析時間。這是一個帶有本地專案的簡單遞迴DNS伺服器。

如果客戶端DNS無法設定為在本地提供迴圈或無法禁用,則使用JDBC:thin connect的Oracle客戶端通常將嘗試連線到列表中首先返回的SCAN-IP和SCAN偵聽器。這基本上禁用了來自這些客戶端的叢集中的SCAN偵聽器之間的連線請求負載平衡,但不影響整個SCAN功能。基於Oracle呼叫介面(OCI)的資料庫訪問驅動程式將應用內部迴圈演算法,在這種情況下不需要考慮。

使用Oracle GNS 定義SCAN

使用Oracle GNS定義SCAN,只需要在訪問期間輸入SCAN名稱。 在叢集配置的某個階段,當使用基於IPv6的IP地址與Oracle RAC 12c時,將從DHCP服務或使用“無狀態地址自動配置”(SLAAC)獲取三個IP地址(使用GNS,但假設使用某些在公共網路上進行動態IP分配的形式)來建立掃描。 然後由GNS2提供SCAN名稱解析。

在安裝時沒有DNS伺服器可用的解決方法

Oracle通用安裝程式(OUI)在Oracle Grid Infrastructure安裝期間強制提供預設的SCAN解決方案,因為在叢集中建立Oracle RAC 11.2版或更高版本的資料庫時,SCAN概念是必不可少的。用於建立資料庫的所有Oracle Database 11.2版或更高版本的工具(例如資料庫配置助手(DBCA)或網路配置助手(NetCA))將承擔其存在。因此,在提供合適的SCAN解析度之前,OUI不會允許繼續進行安裝。

但是,為了克服安裝要求而不設定基於DNS的SCAN解決方案,可以使用基於hosts-file的解決方法。在這種情況下,將使用典型的主機檔案條目將SCAN解析為只有1個IP地址和一個IP地址。不可能模擬DNS伺服器使用本地主機檔案的迴圈解析度。作業系統執行的主機檔案查詢將僅返回與該名稱匹配的第一個IP地址。也不能在一個條目(主機檔案中的一行)中執行此操作。因此將僅為叢集建立1個SCAN。 這種情況下,必須更改叢集中所有節點上的hosts檔案。

強烈建議在升級或初始安裝後不久,啟用上述任一種SCAN配置。為了使叢集知道修改的SCAN配置,請刪除hosts檔案中的條目,然後在叢集中的一個節點上以root使用者執行:srvctl modify scan -n <scan_name>。

使用Oracle Grid Infrastructure 12.1進行SCAN配置

在11.2的版本中,SCAN的使用仍有一些不足之處,根據客戶要求和反饋,Oracle Grid Infrastructure 12c的SCAN上做了增強,包括以下內容:

1. SCAN和Oracle Clusterware管理的VIP現在支援基於IPv6的IP地址

2. SCAN預設情況下僅限於從叢集中的節點接受服務註冊

3. SCAN支援叢集中的多個子網(每個子網一個SCAN)

只有預設的SCAN(在預設網路,通常為網路號1)可以在基於OUI的Oracle Grid Infrastructure安裝過程中進行安裝和配置。 作為安裝後任務,需要啟用叢集中的多個子網支援。

這些增強功能需要更改SCAN和SCAN_LISTENER的配置:

SCAN

從上圖輸出可以看出,支援基於IPv6的IP 是Oracle Grid Infrastructure 12c SCAN中的一個基本概念。 上圖未使用基於IPv6的IP地址,並且在分配給網路介面卡(NIC)eth0的第一個網路上的叢集中僅部署了一個SCAN,還顯示了SCAN中新安全功能的跟蹤 預設情況下,Oracle Grid Infrastructure 12c中的SCAN將僅接受作為SCAN偵聽器分配到的叢集一部分的資料庫例項的註冊。

注意:為了僅允許資料庫例項註冊叢集中託管的資料庫,使用其分配的SCAN的資料庫例項的預設註冊將使用專用互連。

如果由於某種原因 – 無法訪問或不使用為叢集定義的專用互連的資料庫需要向相應的SCAN偵聽器註冊,則可以修改SCAN偵聽器以允許在每個(命名的)節點上進行其他註冊或子網基礎,如下圖所示。

啟用多子網掃描支援

為了在叢集中的多個子網上使用SCAN,必須首先啟用叢集中多個子網的使用,這通常是安裝後任務,包括以下步驟:

1、在(公共)網路上建立附加子網

2、將節點VIP分配給新建立的子網

3、為新建立的子網建立一個節點偵聽器

4、使用一個或兩個選項建立掃描

步驟1假設要麼有多個網路介面卡(NIC),打算用於Oracle RAC叢集中的公共網路通訊,或者有一個要與來自多個網路的IP一起使用的介面地址。 兩者都可以各種方式建立,而在任一情況下,Oracle Clusterware層應該能夠看到由oifcfg命令確定的多個介面,如下圖所示。

步驟2到4使用Oracle Clusterware標準命令,如下圖所示。

Oracle Clusterware

還要注意,將SCAN新增到網路號2,不會在此網路上自動建立SCAN偵聽器。 為了充分利用網路號2上的SCAN,需要在此網路上建立並啟動SCAN偵聽器。

SCAN

現在已經建立了另一個SCAN設定,使用不同的子網進行公共通訊,並建立了相應的節點VIP,節點偵聽器和SCAN偵聽器,將需要使用這些SCAN通知資料庫如何註冊。 資料庫例項註冊偵聽器,特別是SCAN偵聽器的原則與Oracle Database 12c相比,與Oracle Database 11.2版相比並沒有改變.

使用SCAN配置Oracle資料庫

自Oracle Database 11.2以來,SCAN是Oracle RAC資料庫配置的重要組成部分,因此,假設使用標準Oracle工具(例如DBCA)建立資料庫,則REMOTE_LISTENER引數將預設設定為SCAN。這允許例項向SCAN Listeners註冊為遠端監聽器,以提供有關例項提供哪些服務的資訊,當前負載以及關於應將多少個傳入連線引導到例項的建議。

在這種情況下,必須考慮LOCAL_LISTENER引數。 LOCAL_LISTENER引數應設定為node-VIP。如果需要完全合格的域名,請確保將LOCAL_LISTENER設定為完全限定的域名(例如node-VIP.example.com)。預設情況下,在叢集配置期間,將在叢集中的每個節點上建立節點偵聽器。如果要在叢集中使用多個子網,則應在初始安裝後配置其他節點VIP,如本文“啟用多子網路支援掃描”一節中所述。

從Oracle Grid Infrastructure 11g Release 2開始,節點偵聽器用完了Oracle Grid Infrastructure主站,並使用指定的埠監聽節點VIP(預設埠為1521)。

與以前的資料庫版本不同,不建議將REMOTE_LISTENER引數設定為伺服器端TNSNAMES別名,將主機解析為地址列表條目中的SCAN(例如:HOST = sales1- scan),但使用簡化的“SCAN:埠“語法,如下圖所示。

注意:如果使用簡單的連線命名方法,則可能需要修改SQLNET.ORA,以確保在指定用於客戶端名稱解析查詢的命名方法的順序時,EZCONNECT在列表中(NAMES.DIRECTORY_PATH =(tnsnames ,ldap,ezconnect)。

SCAN實現客戶端負載均衡

對於使用Oracle SQL * Net 11g第2版連線的客戶端,客戶端將通過DNS解析SCAN名稱來接收三個IP地址。 然後,客戶端將通過從DNS接收的列表,並嘗試通過接收到的IP之一進行連線。 如果客戶端收到錯誤,它會在向用戶或應用程式返回錯誤之前嘗試其他地址。 這類似於當客戶端連線字串中提供地址列表時,客戶端連線故障轉移在以前版本中的工作原理。

當SCAN偵聽器接收到連線請求時,SCAN偵聽器將檢查提供所請求服務的最少載入的例項。 然後,它會將連線請求重新定向到執行最少載入例項的節點上的本地偵聽器。 隨後,客戶端將被給予本地偵聽器的地址。 本地偵聽器將最終建立與資料庫例項的連線。

文章來自微信公眾號:資料和雲