Oracle RAC环境下vip/public/private IP的区别

在Oracle RAC环境下,每个节点都会有多个IP地址,分别为Public/Private/Vip,这三个IP到底有啥区别呢?分别用在那些场合呢?来看看老外的回答。
1. private IP address is used only for internal clustering processing (Cache Fusion)
私有IP用于心跳同步,这个对于用户层面,可以直接忽略,简单理解,这个Ip用来保证两台服务器同步数据用的私网IP。
2. VIP is used by database applications to enable fail over when one cluster node fails
虚拟IP用于客户端应用,以支持失效转移,通俗说就是一台挂了,另一台自动接管,客户端没有任何感觉。 这也是为什么要使用RAC的原因之一,另一个原因,我认为是负载均衡。
3. public IP adress is the normal IP address typically used by DBA and SA to manage storage, system and database.
公有IP一般用于管理员,用来确保可以操作到正确的机器,我更愿意叫他真实IP。

通过上述解释,不难理解作为一个DBA,在配置tnsnames.ora时, 有些场合是要使用的vip,而有些场合又必须使用public IP。 例如,当你在定位一个数据库的死锁时,使用public ip,可以确保连到你想处理的机器,相反此时使用虚拟ip时,会出现不确定性,因为服务器默认是开启负载均衡的,也就是有可能你想连A机,系统却给你分配了B机。
  
例如: 下面的例子就是使用的VIP

点击( 此处 )折叠或打开

  1. proddb =

  2.    ( DESCRIPTION =

  3.      ( ADDRESS = ( PROTOCOL = TCP ) ( HOST = 138 . * . 1 . 81 ) ( PORT = 1521 ) )

  4.      ( ADDRESS = ( PROTOCOL = TCP ) ( HOST = 138 . * . 1 . 82 ) ( PORT = 1521 ) )

  5.      ( LOAD_BALANCE = yes )

  6.      ( FAILOVER = ON )

  7.      ( CONNECT_DATA =

  8.        ( SERVER = DEDICATED )

  9.        ( SERVICE_NAME = proddb )

  10.        ( FAILOVER_MODE =

  11.          ( TYPE = SELECT )

  12.          ( METHOD = BASIC )

  13.          ( RETRIES = 30 )

  14.          ( DELAY = 5 )

  15.        )

  16.      )

  17. )

下面的例子就是使用的Public IP,指定连接1机,注意红色字体infodb1进一步限制连接的实例。

点击( 此处 )折叠或打开

  1. proddb1 =

  2. ( DESCRIPTION =

  3.      ( ADDRESS_LIST =

  4.        ( ADDRESS = ( PROTOCOL = TCP ) ( HOST = 138 . * . 1 . 83 ) ( PORT = 1521 ) )

  5.      )

  6.      ( CONNECT_DATA =

  7.        ( SERVICE_NAME = infodb )

  8.        ( INSTANCE_NAME = infodb1 )

  9.      )

  10.      ( HS = OK )

  11. )

在Oracle 11gR2以前,如果数据库采用了RAC架构,在客户端的tnsnames中,需要配置多个节点的连接信息,从而实现诸如负载均衡,failover等等RAC的特性。因此,当数据库RAC集群需要添加或删除节点时,需要及时对客户端机器的tns进行更新,以免出现安全隐患。

在11gR2中,为了简化该项配置工作,引入了SCAN(Single Client Access Name)的特性,该特性的好处在于,在数据库与客户端之间,添加了一层虚拟的服务层,就是所谓的scan ip以及scan ip listener,在客户端仅需要配置scan ip的tns信息,通过scan ip listener,连接后台集群数据库。这样,不论集群数据库是否有添加或者删除节点的操作,均不会对client产生影响。


下面,具体介绍下SCAN(Single Client Access Name)的架构以及配置。

首先,简要的看下在11gR2中,安装RAC发生的巨大变化,在10g以及11gR1的时代,安装RAC的步骤是先安装CRS,再安装DB,而到了11gR2的时代,crs与asm被集成在一起,合称为GRID,必须先安装GRID后,才能继续安装DB,否则,你就跟11gR2的RAC无缘咯.

   

而被11gR2引入的SCAN,就是包含在安装grid的过程中。SCAN的定义,有两种途径:
    1. 在DNS中定义域名。
    2. 通过oracle提供的Grid Naming Server(GNS)实现DHCP自定义。

    如果通过dns来定义,则 需要在网络中定义3个SCAN IP地址 指向同一个域名,这3个ip地址必须处于同一个子网内,同时域名不能太长,否则您打字也麻烦不是 。另外,SCAN IP是由oracle clusterware管理的,因此在主机的集群软件(如IBM HACMP,HP SERVICE GUARD)中不能将此ip配置进去,类似于10g中的vip,在grid安装前,此IP是无法ping通的。

      例:     scan-ip.linuxidc.com   IN A 192.168.1.111
                                 IN A 192.168.1.112
                                 IN A 192.168.1.113
    如果使用GNS的方式,则必须有DHCP服务,在cluster的配置过程中,将会自动向DHCP服务器申请3个IP地址作为SCAN IP使用。


 除了SCAN IP, 在cluster的配置过程中 ,SCAN IP LISTENER服务也会被建立, 每个SCAN IP对应一个SCAN IP LISTENER ,并且,为了提升高可用性, 3个SCAN IP以及其对应的SCAN IP LISTENER将被独立的分配到各个节点上。 如果cluster中其中某个运行scan ip的节点出现异常,则其余两个正常的scan ip节点将自动接管。 注意,此处有个注意点,如果客户端是11gR2的版本,
则客户端只需在tns中配置域名解析 ,即可实现failover,如果客户端版本低于11gR2,则无法通过域名解析出3个SCAN IP地址,因此如果要实现failover,必须在客户端的tns中配置3个SCAN IP的地址进行解析,这也是为何oracle强烈建议在使用11gR2数据库时,客户端也最好使用11gR2的原因。
    范例:
 

点击( 此处 )折叠或打开

  1. $srvctl config scan_listener

  2.      SCAN Listener LISTENER_SCAN1 exists . Port : TCP : 1521

  3.      SCAN Listener LISTENER_SCAN2 exists . Port : TCP : 1521

  4.      SCAN Listener LISTENER_SCAN3 exists . Port : TCP : 1521


点击( 此处 )折叠或打开

  1. $srvctl config scan

  2.     SCAN name : scan - ip , Network : 1 / 192 . 168 . 1 . / 255 . 255 . 255 . /

  3.     SCAN VIP name : scan1 , IP : / scan - ip . linuxidc . com / 192 . 168 . 1 . 111

  4.     SCAN VIP name : scan2 , IP : / scan - ip . linuxidc . com / 192 . 168 . 1 . 112

  5.     SCAN VIP name : scan3 , IP : / scan - ip . linuxidc . com / 192 . 168 . 1 . 113

    上面介绍了11gR2中 SCAN IP的配置,以及 SCAN IP LISTENER的配置及其作用。下面,我们来详细了解下,SCAN IP在数据库中的配置方法,以及如何用SCAN IP,配置oracle所谓的自动负载平衡。
    
    看了上面SCAN IP介绍,相信很多朋友都有这样一个疑问,既然SCAN IP是跟数据库instance无关的,例如一个12节点的RAC或者24节点的RAC,都只有3个SCAN IP,并且SCAN IP是随机分布在各个instance的,那么,SCAN IP LISTENER如何监听各个节点的数据库呢,同时,该怎么配置哪个instance去哪个SCAN IP LISTENER注册呢。
    
    首先,补充一个概念,在11gR2中,SCAN IP是作为一个新增IP出现的,原有的CRS中的VIP仍然存在,从这里,就能看出一点端倪,在11gR2的RAC架构中,SCAN IP并非独立存在的,而是和原有的 VIP结合在一起的。那么他们是如何工作的呢,先来看下下面这个工作原理图:

这里的Listener指的是vip,scan不是趴在vip上,而是当客户端请求的时候,scan_ip看哪个服务器闲置,此时就分配给哪个vip。

点击( 此处 )折叠或打开

[ grid @ node1 admin ] $ crs_stat - t

Name                  Type             Target    State   Host

------------------------------------------------------------

ora . . . . ROUP . dg     ora . . . . up . type      ONLINE ONLINE node1

ora . . . . ER . lsnr     ora . . . . er . type      ONLINE ONLINE node1

ora . . . . N1 . lsnr     ora . . . . er . type      ONLINE ONLINE node1

ora . . . . VOTE . dg     ora . . . . up . type      ONLINE ONLINE node1

ora . . . . VERY . dg     ora . . . . up . type      ONLINE ONLINE node1

ora . asm            ora . asm . type         ONLINE ONLINE node1

ora . eons                 ora . eons . type        ONLINE ONLINE node1

ora . gsd            ora . gsd . type         ONLINE ONLINE node1

ora . . . . network     ora . . . . rk . type       ONLINE ONLINE node1

ora . . . . SM1 . asm     application         ONLINE ONLINE node1

ora . . . . E1 . lsnr     application         ONLINE ONLINE node1

ora . node1 . gsd      application         ONLINE ONLINE node1

ora . node1 . ons      application         ONLINE ONLINE node1

ora . node1 . vip      ora . . . . t1 . type       ONLINE ONLINE node1

ora . . . . SM2 . asm     application         ONLINE ONLINE node2

ora . . . . E2 . lsnr     application         ONLINE ONLINE node2

ora . node2 . gsd      application         ONLINE ONLINE node2

ora . node2 . ons      application         ONLINE ONLINE node2

ora . node2 . vip       ora . . . . t1 . type       ONLINE ONLINE node2

ora . oc4j                ora . oc4j . type        ONLINE ONLINE node2

ora . ons            ora . ons . type         ONLINE ONLINE node1

ora . prod . db        ora . . . . se . type       ONLINE ONLINE node1

ora . . . . ry . acfs     ora . . . . fs . type       ONLINE ONLINE node1

ora . scan1 . vip       ora . . . . ip . type       ONLINE ONLINE node1

此时scan_ip在node1上,当node1实例关闭,就会出现在2节点上了。
关闭prod1实例。

点击( 此处 )折叠或打开

SQL > shutdown immediate ;

Database closed .

Database dismounted .

ORACLE instance shut down .




从这个原理图,可以看出,scan ip其实是oracle在客户端与数据库之间,新加的一个连接层,当有客户端访问时,连接到 SCAN IP LISTENER, 而SCAN IP LISTENER接收到连接请求时,会根据 LBA 算法(所谓LBA算法,就是least loaded instance),将该客户端的连接请求,转发给对应的instance上的VIP LISTENER,从而完成了整个客户端与服务器的连接过程。简化如下:
    client -> scan listener -> local listener(vip)  -> local instance

    了解了这个过程以后,对SCAN IP的整体架构,就全部清楚了。剩下的,我们再来讲一些技术细节。
    SCAN IP 和 SCAN LISTENER是独立于RAC的各个节点的,而每个节点的 VIP , VIP LISTENER是跟instance绑定的,每个节点的VIP LISTENER,会监听自己所属节点的instance。

    因此,在数据库中,我们需要设置remote_listener参数,这个参数设置很有讲究,因为scan ip有3个,scan listener也有三个,但是他们对应的是同一个域名,因此,在数据库中,我们需要使用easy connect naming method方式,就是在sqlnet.ora的配置文件中,必须有NAMES.DIRECTORY_PATH=(tnsnames,ezconnect)存在。

    另外,配置remote_listener的方式也有讲究,以前的版本中,我们通常是在tnsnames.ora中写好remote_listener的地址以及端口,但是对于scan listener,不能这么做,必须按照标准格式,设置成REMOTE_LISTENER=SCAN:PORT的形式,以我的测试系统为例,就是 REMOTE_LISTENER=scan-ip.linuxidc.com:1521,而不需要在tnsnames.ora中进行额外设置。

    经过以上设置后,RAC数据库的每个节点的PMON进程,会用广播的方式向每个SCAN LISTENER进行注册,同时CRS的后台进程ONS,会采集各个节点的负载状况,通知scan listener,以便scan listener根据负载情况,将新连接分配到当前负载最低的节点上。
    

点击( 此处 )折叠或打开

  1. SQL > show parameter listener


  2. NAME                 TYPE      VALUE

  3. ------------------------------------ ----------- ------------------------------

  4. listener_networks    string

  5. local_listener       string     ( DESCRIPTION = ( ADDRESS_LIST = ( ADDRESS = ( PROTOCOL = TCP ) ( HOST = node1 - vip ) ( PORT = 1521 ) ) ) )

  6. remote_listener      string     rac_scan : 1521

我当前两个节点的remote_listener都是rac_scan:1521当用要DNS配置时,不同节点就可以设置成不通的remote_listener

    以上,就是11gR2 RAC中,新增的SCAN IP 以及 SCAN LISTENER的全部内容了。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29990276/viewspace-1321006/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29990276/viewspace-1321006/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值