如何從 HOST 連接到 Oracle RAC
對於一個大學項目,我必須設置一個 RAC 實例和一個應用程序,我已經設法通過使用這個影片指南使用虛擬機來配置我的 RAC 實驗室,現在我只需要編寫一個應用程序來連接到我的 RAC 實例但是…我不知道該怎麼做!我想我必須連接到 SCAN 網路?但是我已經在每台機器的網路適配器中將其配置為專用網路…我沒有配置 DNS(我被卡了 4 天,影片指南實際上並沒有顯示如何配置它),所以現在我在我編寫節點應用程序之前,嘗試從 DBeaver 連接到這個數據庫。
這是關於我的實驗室的一些資訊。
服務狀態:
$ /crsctl check crs CRS-4638: Oracle High Availability Services is online CRS-4537: Cluster Ready Services is online CRS-4529: Cluster Synchronization Services is online CRS-4533: Event Manager is online
掃描配置?
$ ./srvctl config scan SCAN name: node-scan, Network: 1 Subnet IPv4: 192.168.24.0/255.255.255.0/enp0s3, static Subnet IPv6: SCAN 1 IPv4 VIP: 192.168.24.41 SCAN VIP is enabled. SCAN 2 IPv4 VIP: 192.168.24.42 SCAN VIP is enabled. SCAN 3 IPv4 VIP: 192.168.24.43 SCAN VIP is enabled.
掃描監聽器
$ ./srvctl config scan_listener SCAN Listeners for network 1: Registration invited nodes: Registration invited subnets: Endpoints: TCP:1521 SCAN Listener LISTENER_SCAN1 exists SCAN Listener is enabled. SCAN Listener LISTENER_SCAN2 exists SCAN Listener is enabled. SCAN Listener LISTENER_SCAN3 exists SCAN Listener is enabled.
由於沒有 DNS,我必須像這樣為兩個節點配置 /etc/host。
# Default 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 # Public 192.168.24.1 node1.localdomain node1 192.168.24.2 node2.localdomain node2 # Private 192.168.10.1 node-priv.localdomain node1-priv 192.168.10.2 node2-priv.localdomain node2-priv # Virtual 192.168.24.31 node1-vip.localdomain node1-vip 192.168.24.32 node2-vip.localdomain node2-vip # SCAN 192.168.24.41 node-scan.localdomain node-scan 192.168.24.42 node-scan.localdomain node-scan 192.168.24.43 node-scan.localdomain node-scan
如果您有 DNS,那麼想法是在 DNS 伺服器上以循環方式配置三個 IP 地址。如果Oracle客戶端想通過掃描DNS名稱連接,他會得到一個隨機順序的三個IP列表,他會一個一個地嘗試,直到成功。這使得 SCAN 偵聽器高可用,如果一個掃描偵聽器程序關閉,其他兩個可能仍然可用。集群注意沒有所有偵聽器僅在一個節點上執行。在客戶端到達 SCAN 偵聽器後,此偵聽器會將其轉發到集群節點之一的 vip-listener。
我沒有 DNS,你有很多可能性:
如果可能,您可以定義通常由客戶端的 DNS 伺服器提供的 fail_over/load_balance 功能:
sales.example.com =(DESCRIPTION= (ADDRESS_LIST= (LOAD_BALANCE=on)(FAILOVER=ON) (ADDRESS=(PROTOCOL=tcp)(HOST=133.22.67.192)(PORT=1521)) (ADDRESS=(PROTOCOL=tcp)(HOST=133.22.67.193)(PORT=1521)) (ADDRESS=(PROTOCOL=tcp)(HOST=133.22.67.194)(PORT=1521))) (CONNECT_DATA=(SERVICE_NAME= salesservice.example.com)))
這裡的 IP 地址是 SCAN 偵聽器地址。此範例來自 Oracle 白皮書Oracle 單客戶端訪問名稱 (SCAN),2013 年 6 月,第 12p 頁。我已經在這個答案中引用的這篇論文可能對你也有幫助。
但您也可以只連接一個 SCAN IP 地址,例如 133.22.67.192。當然,如果此 IP 已關閉,您將無法連接。
sales.example.com =(DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=133.22.67.192)(PORT=1521)) (CONNECT_DATA=(SERVICE_NAME= salesservice.example.com)))
您也可以直接連接到節點 VIP,但是如果伺服器關閉,您將沒有負載平衡或故障轉移,例如
sales.example.com =(DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=133.22.67.111)(PORT=1521)) (CONNECT_DATA=(SERVICE_NAME= salesservice.example.com)))
如果使用,您可以避免 SCAN 偵聽器並且仍然具有負載平衡和故障轉移
sales.example.com =(DESCRIPTION= (ADDRESS_LIST= (LOAD_BALANCE=on)(FAILOVER=ON) (ADDRESS=(PROTOCOL=tcp)(HOST=133.22.67.111)(PORT=1521)) (ADDRESS=(PROTOCOL=tcp)(HOST=133.22.67.112)(PORT=1521))) (CONNECT_DATA=(SERVICE_NAME= salesservice.example.com)))
對於這些配置中的每一個,都有它們有意義的情況。