跳转到内容

RAC 攻击 - Oracle 集群数据库实战/连接故障转移

来自 Wikibooks,开放的书籍,开放的世界


重要说明:此实验是针对 Oracle 11gR1 编写的,这里的信息在使用此版本和更旧版本时至关重要。它将演示故障转移是如何工作的以及在 TNSNAMES 中使用正确地址的重要性。但是,从 11gR2 开始,不应该使用节点 VIP 连接到数据库 - 始终应该使用 SCAN VIP。11gR2 客户端在单个 DNS 条目上返回多个 SCAN VIP 时内置了相同的故障转移功能。



  1. 在本地计算机上编辑实例客户端使用的 TNSNAMES.ORA 文件。添加两个名为 CFTESTCFTEST-NOVIP 的条目,它们连接到 RAC 服务,没有负载均衡。显式启用连接故障转移,即使它默认情况下已经启用。不要对第二个条目使用 VIP(这是错误的,但我们会测试它以查看会发生什么)。C:\instantclient_11_2> notepad c:\instantclient_11_2\tnsnames.ora CFTEST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = collabn1-vip)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = collabn2-vip)(PORT = 1521)) (LOAD_BALANCE = no) (FAILOVER = yes) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = RAC.vm.ardentperf.com) ) ) CFTEST-NOVIP = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = collabn1)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = collabn2)(PORT = 1521)) (LOAD_BALANCE = no) (FAILOVER = yes) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = RAC.vm.ardentperf.com) ) )
  2. collabn1 上检查侦听器到 RAC 服务的已建立连接数。从 Windows 连接到 CFTEST 和 CFTEST-NOVIP 多次,然后再次检查 lsnrctl 统计信息。来自 Windows 计算机的所有连接都附加到 collabn1 上的侦听器,但此侦听器将连接分散到两个实例之间。首先查看节点 1 上的已建立连接数。如果它们不全是零,则没问题。collabn1:/home/oracle[RAC1]$ lsnrctl services Service "RAC.vm.ardentperf.com" has 2 instance(s). Instance "RAC1", status READY, has 2 handler(s) for this service... Handler(s): "DEDICATED" 'established:0' refused:0 state:ready LOCAL SERVER "DEDICATED" 'established:0' refused:0 state:ready REMOTE SERVER (ADDRESS=(PROTOCOL=TCP)(HOST=collabn1.vm.ardentperf.com)(PORT=1521)) Instance "RAC2", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 state:ready REMOTE SERVER (ADDRESS=(PROTOCOL=TCP)(HOST=collabn2.vm.ardentperf.com)(PORT=1521)) 其次,依次连接到数据库,使用两个服务名称。您可以在检查连接所需时间后退出每个会话。所有会话都应该快速连接。计算您连接的次数。C:\instantclient_11_2> sqlplus sh/sh@CFTEST C:\instantclient_11_2> sqlplus sh/sh@CFTEST C:\instantclient_11_2> sqlplus sh/sh@CFTEST-NOVIP C:\instantclient_11_2> sqlplus sh/sh@CFTEST-NOVIP C:\instantclient_11_2> sqlplus sh/sh@CFTEST C:\instantclient_11_2> sqlplus sh/sh@CFTEST-NOVIP 第三,再次检查节点 1 上的侦听器连接。确保已建立的连接总数至少增加了与您连接的会话数相同的数量。(也就是说,确认您所有的会话都已连接到此节点。)可能还有更多连接;没问题。另外,请注意侦听器是如何将连接分配到两个实例的 - 即使我们的客户端只连接到一个节点上的侦听器。连接到每个实例的数量无关紧要;如果看不到 3 和 3 也没问题。collabn1:/home/oracle[RAC1]$ lsnrctl services Service "RAC.vm.ardentperf.com" has 2 instance(s). Instance "RAC1", status READY, has 2 handler(s) for this service... Handler(s): "DEDICATED" 'established:3' refused:0 state:ready LOCAL SERVER "DEDICATED" 'established:0' refused:0 state:ready REMOTE SERVER (ADDRESS=(PROTOCOL=TCP)(HOST=collabn1.vm.ardentperf.com)(PORT=1521)) Instance "RAC2", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:3 refused:0 state:ready REMOTE SERVER (ADDRESS=(PROTOCOL=TCP)(HOST=collabn2.vm.ardentperf.com)(PORT=1521))
  3. 在 VMware 控制台中,确保您已打开从 Windows 连接到的节点 collabn1。从 虚拟机 菜单中选择 关闭电源,模拟节点完全故障。


  4. 等待大约一分钟(以便集群可以检测到失败的节点)。然后,从 Windows 再次连接到 CFTEST 和 CFTEST-VIP 服务。当您使用 NOVIP 连接时会发生什么?C:\instantclient_11_2> sqlplus sh/sh@CFTEST C:\instantclient_11_2> sqlplus sh/sh@CFTEST C:\instantclient_11_2> sqlplus sh/sh@CFTEST-NOVIP C:\instantclient_11_2> sqlplus sh/sh@CFTEST-NOVIP C:\instantclient_11_2> sqlplus sh/sh@CFTEST C:\instantclient_11_2> sqlplus sh/sh@CFTEST-NOVIP



华夏公益教科书