《YH12:一篇文章讀懂SCAN》要點:
本文介紹了YH12:一篇文章讀懂SCAN,希望對您有用。如果有疑問,可以聯系我們。
單客戶端訪問名稱(SCAN)是Oracle RAC環境中使用的功能,為客戶端提供訪問集群中運行的任何Oracle數據庫的單一名稱. 用戶可以將SCAN視為RAC數據庫的集群別名. 使用SCAN的好處是,如果在集群中添加或刪除節點或數據庫,則客戶端的連接信息不需要更改.
SCAN首次引入了Oracle RAC 11g第2版,并在Oracle RAC 12c中提供了其他功能. 使用單一名稱訪問集群以連接到此集群中的數據庫,客戶端可以使用EZConnect和簡單的JDBC瘦URL來訪問集群中運行的任何數據庫,而與集群中運行的數據庫或服務器數量無關,集群中所請求的數據庫實際上是處于活動狀態的服務器.
在安裝與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,必須要求網絡管理員使用循環算法創建至少一個單一名稱,用于解析為三個IP地址. 考慮到負載均衡和高可用性要求,建議使用三個IP地址,無論集群中的服務器數量如何.
IP地址必須與集群中的默認公網位于同一子網. 該名稱的長度必須不超過15個字符,不包括域名,并且必須在沒有域后綴的情況下解析(例如:“sales1-scan”必須是可解析的而不是“scan1-can.example.com”) . 不能將IP分配給網絡接口.
可以使用“nslookup”檢查DNS中的SCAN配置. 如果DNS設置為向SCAN條目解析的IP提供循環訪問,則至少運行“nslookup”命令兩次以查看循環算法的工作. 結果應該是,每次“nslookup”將以不同的順序返回一組三個IP.
注意:如果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,只需要在訪問期間輸入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>.
在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的配置:
從上圖輸出可以看出,支持基于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標準命令,如下圖所示.
還要注意,將SCAN添加到網絡號2,不會在此網絡上自動創建SCAN偵聽器. 為了充分利用網絡號2上的SCAN,需要在此網絡上創建并啟動SCAN偵聽器.
現在已經創建了另一個SCAN設置,使用不同的子網進行公共通信,并創建了相應的節點VIP,節點偵聽器和SCAN偵聽器,將需要使用這些SCAN通知數據庫如何注冊. 數據庫實例注冊偵聽器,特別是SCAN偵聽器的原則與Oracle Database 12c相比,與Oracle Database 11.2版相比并沒有改變.
自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).
對于使用Oracle SQL * Net 11g第2版連接的客戶端,客戶端將通過DNS解析SCAN名稱來接收三個IP地址. 然后,客戶端將通過從DNS接收的列表,并嘗試通過接收到的IP之一進行連接. 如果客戶端收到錯誤,它會在向用戶或應用程序返回錯誤之前嘗試其他地址. 這類似于當客戶端連接字符串中提供地址列表時,客戶端連接故障轉移在以前版本中的工作原理.
當SCAN偵聽器接收到連接請求時,SCAN偵聽器將檢查提供所請求服務的最少加載的實例. 然后,它會將連接請求重新定向到運行最少加載實例的節點上的本地偵聽器. 隨后,客戶端將被給予本地偵聽器的地址. 本地偵聽器將最終創建與數據庫實例的連接.
文章來自微信公眾號:數據和云