对于一个大学项目,我必须设置一个 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。
Oracle 客户端首先对 SCAN 地址执行 DNS 查找。它将以随机顺序获取所有 3 个 IP。它将选择第一个。(PS:由于某些版本的 Oracle 客户端不使用 OS 提供的解析器,而是使用嵌入式解析器)。
然后 Oracle 客户端连接到在第一个 IP 上运行的 SCAN 侦听器之一。
扫描侦听器以重定向消息响应,指向一个 VIP 侦听器。通常它会将您重定向到负载最少的节点。AFAIK 在这种情况下,重定向消息不包含 VIP,而是包含 VIP 的主机名。
然后 Oracle 客户端通过 DNS 解析这个 VIP 名称,并连接到 VIP 侦听器并执行身份验证。
PS:尝试将所有 IP 输入到客户端机器上的 /etc/hosts 中。也许它会起作用。两个节点集群有 7 个 IP,而不是将它们全部放入客户端(以及两个数据库节点)上的 /etc/hosts 中。
如果您有 DNS,那么想法是在 DNS 服务器上以循环方式配置三个 IP 地址。如果Oracle客户端想通过扫描DNS名称连接,他会得到一个随机顺序的三个IP列表,他会一个一个地尝试,直到成功。这使得 SCAN 侦听器高可用,如果一个扫描侦听器进程关闭,其他两个可能仍然可用。集群注意没有所有侦听器仅在一个节点上运行。在客户端到达 SCAN 侦听器后,此侦听器会将其转发到集群节点之一的 vip-listener。
我没有 DNS,你有很多可能性:
如果可能,您可以定义通常由客户端的 DNS 服务器提供的 fail_over/load_balance 功能:
这里的 IP 地址是 SCAN 侦听器地址。此示例来自 Oracle 白皮书Oracle 单客户端访问名称 (SCAN),2013 年 6 月,第 12p 页。我已经在这个答案中引用的这篇论文可能对你也有帮助。
但您也可以只连接一个 SCAN IP 地址,例如 133.22.67.192。当然,如果此 IP 已关闭,您将无法连接。
您也可以直接连接到节点 VIP,但是如果服务器关闭,您将没有负载平衡或故障转移,例如
如果使用,您可以避免 SCAN 侦听器并且仍然具有负载平衡和故障转移
对于这些配置中的每一个,都有它们有意义的情况。