Oracle

如何從 HOST 連接到 Oracle RAC

  • November 26, 2021

對於一個大學項目,我必須設置一個 RAC 實例和一個應用程序,我已經設法通過使用這個影片指南使用虛擬機來配置我的 RAC 實驗室,現在我只需要編寫一個應用程序來連接到我的 RAC 實例但是…我不知道該怎麼做!我想我必須連接到 SCAN 網路?但是我已經在每台機器的網路適配器中將其配置為專用網路…我沒有配置 DNS(我被卡了 4 天,影片指南實際上並沒有顯示如何配置它),所以現在我在我編寫節點應用程序之前,嘗試從 DBeaver 連接到這個數據庫。

這是關於我的實驗室的一些資訊。

我有兩個實例:node1 和 node。 在此處輸入圖像描述

服務狀態:

$ /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)))

對於這些配置中的每一個,都有它們有意義的情況。

引用自:https://dba.stackexchange.com/questions/303142