11gR2 集群(CRS/GRID)新功能—— SCAN(Single Client Acce
發布時間:2022-08-26
在介紹SCAN之前,先簡單的回顧一下oracle關于IP地址的使用,在9i RAC時,oracle沒有自己的clusterware,主要依靠第三方的集群軟件(如IBM HACMP等等),客戶端主要是通過public IP來訪問數據庫(如果第三方集群軟件提供服動IP的話,也可以通過這個服動IP來訪問數據庫),當某一個節點已經出現故障無法對外提供服務時,如果客戶端繼續請求連接這個節點的public IP,那么連接請求會長時間沒有返回,最后要等到TCP-IP timeout (TCP-IP超時時間一般為10分鐘,不同OS這個值不同)才會返回一個超時信息,這對于實時性要求較高的應用來說是致命的問題,很多DBA都經歷過這樣的問題,從技術層面上來說,這是一個網絡層的問題,任何應用都要等待網絡層返回超時信息。為了解決這個問題,從oracle 10g
RAC開始,引入了一個新的功能叫VIP,這個功能類似于第三方集群軟件的浮動IP,簡單的說就是當public 網卡或者節點出現問題,VIP可以快速的failover到另外的節點,如果客戶端的連接請求被分配到這個VIP時,客戶端連接請求馬上就會遇到錯誤,因此會快速的跳過這個‘有問題的’VIP,而重新分配另一個VIP(這個功能是客戶端連接時的failover),最終連接到數據庫,這些對于應用來說是透明的,基本感覺不到連接的延時。
SCAN簡介
-------------------
從11gR2 Grid Infrastructure (CRS/clusterware)開始,引入了一個新功能叫SCAN (Single Client Access Name),SCAN是一個域名,可以解析至少1個IP,最多解析3個SCAN IP,客戶端可以通過這個SCAN 名字來訪問數據庫,SCAN的好處就是當集群中新增加了節點或者刪除了節點,不需要額外維護客戶端。在11gR2上,客戶端仍然可以繼續使用原有的 VIP,但是oracle推薦使用SCAN。
SCAN ip必須與public ip和VIP在一個子網,同時oracle推薦使用DNS或者GNS(11gR2
新功能)來解析SCAN,如果沒有使用DNS或者GNS的話,可以使用hosts文件,但是這個辦法不是oracle推薦的,因為這個方法只能定義一個 SCAN IP。
GRID集群中有2類資源是與SCAN有關的,一類是SCAN IP,另一類是SCAN Listener,SCAN IP和SCAN Listener是成對出現的,也就是說如果有3個SCAN IP,就會同時有3個SCAN Listene。SCAN IP就是DNS解析的IP地址,SCAN Listener的作用是接受客戶端的連接請求。查看SCAN IP信息和SCAN Listener信息的方法在下文介紹。
數據庫的初始化參數remote_listener默認被設置為SCAN Listener,目的是為了讓SCAN Listener可以監聽所有的實例,記錄所有實例的壓力,以便于按照負載均衡的方式來轉發客戶端的請求。
客戶端如何通過SCAN訪問數據庫
------------------------------------------------------
客戶端發出連接數據庫的請求,DNS將SCAN解析出對應的3個SCAN IP并返回給客戶端,
客戶端隨機的選擇其中一個SCAN IP地址,然后客戶端通過這個SCAN IP訪問對應的節點,當對應節點的SCAN Listener接受到請求后,SCAN Listener會選擇壓力最小的數據庫實例,然后壓力最小的數據庫實例對應的local listener的地址將會返回給客戶端,最終這個local listener為客戶端請求建立與數據庫的連接。
客戶端tnsnames.ora的配置
-------------------------------------------
RAC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac-cluster-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = rac)
) )
客戶端的連接方式:
$ sqlplsu <username>/<password>@RAC
EZconnet的連接仍然適用于SCAN
$ sqlplus <username>/<password>@rac-cluster-scan:1521/rac
常用命令
-----------------------
1. 查看SCAN配置信息
$ srvctl config scan
SCAN name: rac-cluster-scan, Network: 1/192.168.1.0/255.255.255.0/
SCAN VIP name: scan1, IP: /rac-cluster-scan/192.168.1.12
SCAN VIP name: scan2, IP: /rac-cluster-scan/192.168.1.13
SCAN VIP name: scan3, IP: /rac-cluster-scan/192.168.1.14
2. 查看SCAN Listener配置信息
$ srvctl config scan_listener
SCAN Listener LISTENER_SCAN1 exists. Port: TCP:1521
SCAN Listener LISTENER_SCAN2 exists. Port: TCP:1521
SCAN Listener LISTENER_SCAN3 exists. Port: TCP:1521
3. 查看SCAN的狀態
$ srvctl status scan
4. 查看SCAN listener的狀態
$ srvctl status scan_listener
RAC開始,引入了一個新的功能叫VIP,這個功能類似于第三方集群軟件的浮動IP,簡單的說就是當public 網卡或者節點出現問題,VIP可以快速的failover到另外的節點,如果客戶端的連接請求被分配到這個VIP時,客戶端連接請求馬上就會遇到錯誤,因此會快速的跳過這個‘有問題的’VIP,而重新分配另一個VIP(這個功能是客戶端連接時的failover),最終連接到數據庫,這些對于應用來說是透明的,基本感覺不到連接的延時。
SCAN簡介
-------------------
從11gR2 Grid Infrastructure (CRS/clusterware)開始,引入了一個新功能叫SCAN (Single Client Access Name),SCAN是一個域名,可以解析至少1個IP,最多解析3個SCAN IP,客戶端可以通過這個SCAN 名字來訪問數據庫,SCAN的好處就是當集群中新增加了節點或者刪除了節點,不需要額外維護客戶端。在11gR2上,客戶端仍然可以繼續使用原有的 VIP,但是oracle推薦使用SCAN。
SCAN ip必須與public ip和VIP在一個子網,同時oracle推薦使用DNS或者GNS(11gR2
新功能)來解析SCAN,如果沒有使用DNS或者GNS的話,可以使用hosts文件,但是這個辦法不是oracle推薦的,因為這個方法只能定義一個 SCAN IP。
GRID集群中有2類資源是與SCAN有關的,一類是SCAN IP,另一類是SCAN Listener,SCAN IP和SCAN Listener是成對出現的,也就是說如果有3個SCAN IP,就會同時有3個SCAN Listene。SCAN IP就是DNS解析的IP地址,SCAN Listener的作用是接受客戶端的連接請求。查看SCAN IP信息和SCAN Listener信息的方法在下文介紹。
數據庫的初始化參數remote_listener默認被設置為SCAN Listener,目的是為了讓SCAN Listener可以監聽所有的實例,記錄所有實例的壓力,以便于按照負載均衡的方式來轉發客戶端的請求。
客戶端如何通過SCAN訪問數據庫
------------------------------------------------------
客戶端發出連接數據庫的請求,DNS將SCAN解析出對應的3個SCAN IP并返回給客戶端,
客戶端隨機的選擇其中一個SCAN IP地址,然后客戶端通過這個SCAN IP訪問對應的節點,當對應節點的SCAN Listener接受到請求后,SCAN Listener會選擇壓力最小的數據庫實例,然后壓力最小的數據庫實例對應的local listener的地址將會返回給客戶端,最終這個local listener為客戶端請求建立與數據庫的連接。
客戶端tnsnames.ora的配置
-------------------------------------------
RAC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac-cluster-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = rac)
) )
客戶端的連接方式:
$ sqlplsu <username>/<password>@RAC
EZconnet的連接仍然適用于SCAN
$ sqlplus <username>/<password>@rac-cluster-scan:1521/rac
常用命令
-----------------------
1. 查看SCAN配置信息
$ srvctl config scan
SCAN name: rac-cluster-scan, Network: 1/192.168.1.0/255.255.255.0/
SCAN VIP name: scan1, IP: /rac-cluster-scan/192.168.1.12
SCAN VIP name: scan2, IP: /rac-cluster-scan/192.168.1.13
SCAN VIP name: scan3, IP: /rac-cluster-scan/192.168.1.14
2. 查看SCAN Listener配置信息
$ srvctl config scan_listener
SCAN Listener LISTENER_SCAN1 exists. Port: TCP:1521
SCAN Listener LISTENER_SCAN2 exists. Port: TCP:1521
SCAN Listener LISTENER_SCAN3 exists. Port: TCP:1521
3. 查看SCAN的狀態
$ srvctl status scan
4. 查看SCAN listener的狀態
$ srvctl status scan_listener
