client-->scan listener(scan ip)-->local listener(vip)-->local instance
client-->RAC listener(vip或public ip)-->local instance
RAC查看SCAN ip是多少的方法
/ect/hosts或srvctl config scan
RAC查看SCAN ip在哪个机器上的方法
srvctl status scan
一般单机的lsnrctl status只有一个host信息,而rac实例会出现两个host信息,一个值为127.0.0.1或PUBLIC IP,另一个为VIP
出现127.0.0.1而不是PUBLIC IP原因:ping 服务器名对应的是127.0.0.1而不是PUBLIC IP,造成这样现象的原因是/etc/hosts文件中服务器名对应IP为127.0.0.1的那一行放在了服务器名对应IP为PUBLIC IP的那一行的上面导致。
因为动态配置时listener中默认用host=服务器名,/ets/hosts谁在上面那就谁是服务器名的IP。/ets/hosts标准顺序应该为127.0.0.1放在PUBLIC IP下面
RAC一个节点宕机后,VIP会漂移
出现了这样的情况,testdb01宕机后,testdb02执行ifconfig发现两个节点的VIP和scan ip都出现在了testdb02上。但是节点2执行lsnrctl status发现还是只有节点2自己的VIP和scan ip,也就是说外部还是无法通过节点1的VIP连接DB,因为节点1实例已经宕机了。VIP的原理就是这样,节点A宕机后,vip会漂移到另一台正常的节点B上,但是该VIP不会出现在节点B的监听信息中,该VIP虽然存在但是无法对外服务了。
实验过的:当节点没有宕机,仅仅关闭节点的监听或仅仅关闭节点的DB,VIP不会漂移。只有宕机了才会漂移
SCAN IP迁移和LISTENER_SCAN1监听器
现象1
安装好一套RAC并完全启动(含DB、ASM、LISTENER都启动了),刚开始发现只有节点1的/u01/app/grid/network/admin/listener.ora中具有LISTENER_SCAN1的监听器,节点2没有。且root用户下ifconfig发现节点SCAN IP在节点1下面,节点2下面没有SCAN IP。
现象2
当节点1宕机后,发现节点2下面
/u01/app/grid/network/admin/listener.ora自动修改了,里面有了LISTENER_SCAN1的监听器的信息,且节点2的root用户下ifconfig发现SCAN IP的信息了
结论:通过以上现象了解到,SCAN IP会漂移,且哪个节点有了SCAN IP,则其grid用户下的/u01/app/grid/network/admin/listener.ora文件中就有LISTENER_SCAN1的监听器,当下次SCAN IP漂移到了其他节点,原来节点上的/u01/app/grid/network/admin/listener.ora文件中的LISTENER_SCAN1的监听器还在,不会自动删除,也就是说虽然SCAN IP漂移了,但是/u01/app/grid/network/admin/listener.ora文件中的LISTENER_SCAN1信息还在
深入理解
其实RAC中每台节点服务器只有一个网卡也可以实现RAC,在这些网卡上虚拟出多个网卡,只要这样网卡连接的交换机有多个网段,不同的网段分配给不同的虚拟网卡,这样就实现了private ip和public ip和vip之间的通信,而现实环境中交换机上是可以配置有多个网段的
RAC各IP是否都可以用来建立连接的案例
客户端tns的配置如下
MIOA =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.98.20.202)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.98.20.204)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = MIOA)
(FAILOVER_MODE=
(TYPE = session)
(METHOD = basic)
(RETRIES = 180)
(DELAY = 5)
)
)
)
服务端/etc/hosts配置如下
#Public ip eth0
10.98.20.202 node1
10.98.20.204 node2
#Private ip eth1
150.150.1.3 node1-priv
150.150.1.4 node2-priv
#Virtual ip
10.98.20.205 node1-vip
10.98.20.206 node2-vip
#Scan ip
10.98.20.207 rac-scan
服务器端两个实例lsnrctl status显示IP,service名称是MIOA
实例1
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.98.20.202)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.98.20.205)(PORT=1521)))
实例2
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.98.20.204)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.98.20.206)(PORT=1521)))
SCAN IP显示在第一个节点
[oracle@node1 ~]$ srvctl status scan
SCAN VIP scan1 is enabled
SCAN VIP scan1 is running on node node1
[oracle@node1 ~]$ ssh mdsdb04
Last login: Fri Aug 12 09:41:55 2016 from node1
[oracle@node2 ~]$ srvctl status scan
SCAN VIP scan1 is enabled
SCAN VIP scan1 is running on node node1
客户端通过TNS连接情况
第一次
sqlplus system/123456@MIOA
select instance_name和show parameter instance_name都是第一个节点的实例名
第二次,不关闭第一次的连接,再开一个链接
sqlplus system/123456@MIOA
select instance_name和show parameter instance_name都是第二个节点的实例名
第三次
sqlplus system/m1oa_+14@10.98.20.202:1521/MIOA
select instance_name和show parameter instance_name都是第一个节点的实例名
第四次
sqlplus system/m1oa_+14@10.98.20.204:1521/MIOA
select instance_name和show parameter instance_name都是第二个节点的实例名
第五次
sqlplus system/m1oa_+14@10.98.20.205:1521/MIOA
select instance_name和show parameter instance_name都是第一个节点的实例名
第六次
sqlplus system/m1oa_+14@10.98.20.206:1521/MIOA
select instance_name和show parameter instance_name都是第二个节点的实例名
第七次
sqlplus system/m1oa_+14@10.98.20.207:1521/MIOA
ORA-12545: 因目标主机或对象不存在, 连接失败
结论:TNS配置负载均衡模式时,会自动分配到不同的节点,SCAN IP虽然存在,按个人安装RAC不使用DNS的方法,发现SCAN IP并不能被使用,因为lsnrctl status并没有出现SCAN IP。