暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle RAC集群SCAN IP思路链

IT界数据库架构师的漂泊人生 2020-12-14
2708

O 的RAC 从8I 开始起步的,然后 9I 10G 11G 12C。目前使用的最多是11G RAC ! 刚开始使用PUBLIC IP和SID 对外提供服务。到了10G的时候出现了VIP,VIP可以漂移到别的节点上的,一当所在的节点宕机了,这不是指数据库挂了,而是服务器都挂了。监控节点是否挂的是CRS集群软件。这个跟KEEP ALIVE软件功能差不多,在VIP上面。VIP的实现完成了RAC高可用了,而11G 出现了SCAN IP和 SCAN 监听. 如今又多了一层监听。 本来官方说是解决RAC集群添加节点时候,要去修改客户端的配置。

在9I的时候 客户端配置TNS_NAME.ORA 

开启FAILOVER= ON LOADBLOANCE =YES 

然后在下面配置两个PUBIC IP 。如果是FAILOVER还需要配具体参数。

FAIL OVER 实现高可用,LOADBLANCE实现负载均衡。


ORACLE发展思路是,把这些在服务端进行实现。10G 只要配1个IP就行了,就可以实现高可用,那就是VIP。可负载均衡就无法实现,还得配两个VIP。

当然添加节点后,去修改应用服务器下的WEB CONFIG 却是是麻烦事情。


所以增加了个SCAN IP 来解决这个麻烦事情。

然它不当是解决了这个麻烦事情,提供了便利。同时也解决了负载均衡的问题。

先客户端或者是应用端。配置好了域名解析服务,比如说RAC-DB:1521 

那么它会去找局域网中的DNS服务器,帮忙解析下,给它一个IP。


这个IP 就是SCAN IP。


应用获得了SCAN IP 然后向 这个IP 发出连接请求,给出IP 端口和服务名。


然后 SCAN LISTENER_x 收到了请求 然后结合自己身上的信息,把请求再转给VIP


监听VIP 地址的监听器收到了转发请求后,就根据自身的信息 关联到数据库实例上。


一般连接请求是: 应用->DNS->SCAN LISTENER ->LOCAL LISTENER ->DB。


本地监听就是LOCAL LISTENER 一般情况下有动态注册和静态注册两种。

liunx grid] lsnrctl status 

  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.0.8.192)(PORT=1521)))

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.0.8.194)(PORT=1521)))

Services Summary...

Service "+ASM" has 1 instance(s).

  Instance "+ASM2", status READY, has 1 handler(s) for this service...

Service "orcl" has 1 instance(s).

  Instance "orcl2", status READY, has 1 handler(s) for this service...

Service "mysqllink" has 1 instance(s).

  Instance "mysqllink", status UNKNOWN, has 1 handler(s) for this service...

The command completed successfully


其中READY 是动态注册的,是DB实例自己启动后5秒才注册进去。

UNKNOWN 是静态注册,就是人工修改LISNTER.ORA

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.8.192)(PORT = 1521))

    )

  )


SID_LIST_LISTENER =

  (SID_LIST =

     (SID_DESC =

        (GLOBAL_DBNAME = orcl)

        (ORACLE_HOME = u01/app/oracle/product/11.2.0/dbhome_1)

        (SID_NAME = orcl2)

      )

这样子 我们在监听配置文件上要求监听监听的IP地址 端口,对应的服务名 GLOBAL_DBNAME = ORCL 

实例名:SID_NAME 然后是ORACLE_HOME目录。

这样本地监听就 知道我要监听 哪些,然后如何跟DB实例关联起来。


动态注册 是DB实例 PMON进程 向本地监听器,把服务注册到默认IP 默认端口。


如果要 动态注册改变IP 端口这些的话,那要设置参数:local_listener

(ADDRESS=(PROTOCOL=TCP)(HOST=10.0.8.194)(PORT=1522))

实际上就是让本地监听 同时监听 这个IP 这个端口的请求。

服务名来自 SERVICE_NAMES


这样我们解决了本地监听,和DB实例之间的关联关系。假如这个知识要点不懂得话,可以留言。


接下讲SCAN IP和SCAN LISTENER 

RAC集群里面可以有3个SCAN IP  对应也必须有3个SCAN LISTENER 。SCAN IP 有人说是SCAN VIP ,它也像VIP样漂移。


除了两个概念外,还有个SCAN NAME。  

它是对应DNS的 也对应我们实验中的/ETC/HOSTS

[oracle@rac02 log]$ srvctl config scan

SCAN name: rac-scan, Network: 1/10.0.8.0/255.255.255.0/em1


修改,启停都要涉及到它,每次都要带上它。列如

./srvctl stop scan_listener
./srvctl stop scan
./srvctl status scan_listener

./srvctl modify scan -n rac-scan
./srvctl modify scan_listener -u

./srvctl start scan
./srvctl start scan_listener
./srvctl status scan
./srvctl config scan
./srvctl status scan_listener


通过上面我们可以添加剩余两个SCAN VIP 它会自动扫描/etc/hosts/z中

的 rac-scan 对应的Ip


这样 SCAN NAME +SCAN IP + SCAN LISTENER  三者关联起来了。


前面 应用程序  使用SCAN NAME 通过DNS 获得SCAN IP,就跟SCAN LISTENER 关联起来了。


第三个 SCAN LISTENER 如何跟LOCAL LISTENER 关联呢?

那么就是REMOTE_LISTENER 参数 这个参数必须设置 SCAN NAME 外加端口 比如: rac-scan:1521


这个参数是远程监听的意思,向远程监听注册本实例上的服务。其实本地监听,也可以单独放在一个独立的服务器上,然后使用这个参数向其注册。那么SCAN LISTENER 也是远程监听啦!

如果给的是SCAN NAME 那该怎么获得监听所在的服务器IP呢?

一般通过 TNSNAME.ORA,etc/hosts, etc/resolv.conf 来获得。

这个动态注册,除了向远程监听器注册本实例的服务外,还要把自己的IP地址和端口告诉监听器啊?

下面TNS_NAME.ORA配置

  SQL> show parameter listener

  

  NAME                                 TYPE        VALUE

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

  local_listener                       string

  remote_listener                      string      remote_lsnr_gobo4

  more $ORACLE_HOME/network/admin/tnsnames.ora

  remote_lsnr_gobo4 =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.61)(PORT = 1521))

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.62)(PORT = 1521))

    )


那还得设置LOCAL_LISTENER ,这个参数除了向本地监听器注册监听IP,端口外,还要向远程监听器注册。通过这个参数的IP和端口。远程监听器和本地监听关联上了。

LSNRCTL> set current_listener LISTENER_SCAN1

Current Listener is LISTENER_SCAN1

LSNRCTL> service

Connecting to 

(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1)))

Services Summary...

Service "orcl" has 1 instance(s).

  Instance "orcl2", status READY, has 1 handler(s) for this service...

    Handler(s):

      "DEDICATED" established:0 refused:0 state:ready

         REMOTE SERVER

         (ADDRESS=(PROTOCOL=TCP)(HOST=10.0.8.194)(PORT=1521))

The command completed successfully


负载均衡:

如果SCAN LISTENER 一个服务下面注册了多个实例的话,那么它就开启了负载均衡的功能。

  1. [grid@vmac2 ~]$ lsnrctl status LISTENER_SCAN1

  2. Service "orcl" has 2 instance(s).

  3.   Instance "orcl1", status READY, has 1 handler(s) for this service...

  4.   Instance "orcl2", status READY, has 1 handler(s) for this service...


  5. 同时CRS的后台进程ONS,会采集各个节点的负载状况,通知SCAN Listener,以便SCAN Listener根据负载情况,将新连接分配到当前负载最低的节点上。


最后修改时间:2020-12-15 10:51:53
文章转载自IT界数据库架构师的漂泊人生,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论