前段时间进行11.2.0.4的实验,通过不断增加节点和删除节点来完成对RAC服务器的更换时,才偶然发现了一个现象,就是:
假如rac2节点关机,那么rac2-vip会飘到rac1上,此时rac1的public网卡共会有4个IP地址,
但是我通过rac2-vip连接,会报错无监听,那么高可用怎么办呢?
虽然11gR2有scan,我们直接连scan就行了,但是10g怎么办?
我是从11gR2开始学ORACLE的,总是下意识就认为连接串只有一个IP地址.
此时注意区分11gR2和10g的连接串的写法,我们常见的11gR2的连接串直接写的就是scanIP的地址,但是10g中是将所有的vip都写上的
这个是11gR2的样例
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.115.100)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
这个是10g的
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.115.100)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.115.101)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
现在写的是在10g中vip failover的情况:
- rac2 重启,rac2-vip被failover到rac1上
- rac1会发送ARP广播,告诉交换机,rac2-vip的mac地址变了
- 用户对rac2-vip的请求发送到rac1上
- 因为rac1有rac2-vip地址,那么数据包会顺利的通过数据链路层,网络层,传输层
- rac1上的监听只监听rac1的public-IP和rac1-vip,不监听rac2-vip,于是立刻返回错误给客户端
- 客户端立刻收到这个错误,立刻做failover,使用连接串中的另一个vip地址,重新发送rac1-vip的请求
- rac1-vip收到请求,监听通过,建立连接
那么既然这么费劲,既然是由客户端发现连接不通,进行的failover,那还要VIP干嘛?直接连IP不就好了?
直连IP利用的是TCP超时,这个是TCP/IP的机制,一般需要一定的时间才能返回无响应
连接VIP利用的应用层的立即响应,使得从发起会话到发现需要failover的这个过程时间极短,
11gR2也是同理,还是对10g的一些特性还是不深刻,要是用过10gRAC的可能直接就理解了,但是这个问题我现在才知道