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

RAC配置多个public网络

原创 老熊 2019-03-22
1013

问题描述

现在有一个需求,客户有两个网络,都需要连接数据库,需要配置两个public网络,请问如何配置。

专家解答

首先官方建议不要在安装Oracle时配置多个public网络,等集群安装完之后再通过命令去添加public网络,测试步骤如下,供参考:

先简单介绍一下用于演示的环境:11.2.0.1 grid infrastructure for linux 32bit,共2个节点,节点名是xty3和xty4,没有使用DNS(实际上在有DNS的环境下,也不太可能会有第2个public network),所以下面的演示是以没有DNS来配置的。Grid Infrastructure用的是oracle用户安装的(实际生产建议用单独的grid用户),而RDBMS软件也是用oracle安装的。目前的private network是192.168.153.0,对应的网卡设备名是en1,public network是192.168.0.0,对应的网卡设备名是en0,打算新增加的public network是192.168.76.0,对应的网卡设备名是en2。

先看看/etc/hosts文件的内容:

1.  127.0.0.1    localhost.localdomain localhost  
2.  ::1             localhost6.localdomain6 localhost6  
3.  192.168.0.134   xty3  
4.  192.168.0.144   xty4  
5.  192.168.153.134 xty3-priv  
6.  192.168.153.144 xty4-priv  
7.  192.168.0.135   xty3-vip  
8.  192.168.0.145   xty4-vip  
9.  192.168.0.155   xty-cluster-svip1

第1步,配置好新的public network的IP地址和网络路由。注意新的public network IP地址配好后,注意配置好网络路由。

第2步,在所有的节点上编辑/etc/hosts文件,增加如下内容:

1.  192.168.76.134   xty3-pub2  
2.  192.168.76.144   xty4-pub2  
3.  192.168.76.135   xty3-vip2  
4.  192.168.76.145   xty4-vip2  
5.  192.168.76.155   xty-cluster-svip2

192.168.76.134和192.168.76.144是两个节点上新的public network的public ip,192.168.76.135和192.168.76.145是相对应的VIP地址,而192.168.76.155则是准备要在新的public network上增加的SCAN IP。而xty-cluster-svip2则是新增的SCAN名字。

第3步,增加新的public network上的vip地址,这一步比较简单,用root用户执行下面的命令:

1.  srvctl add vip -n xty3 -k 2 -A xty3-vip2/255.255.255.0/eth2  
2.  srvctl add vip -n xty4 -k 2 -A xty4-vip2/255.255.255.0/eth2

在上述命令中,-n参数后面跟的是节点名(hostname); -k后面的参数表示第几个网络,这里是2,表示第2个public network。-A后面就是VIP地址的属性了,格式为"VIP地址名/子网/网卡设备名"。

然后用crsctl来检查,vip资源已经存在:

1.  [root@xty3 ~]# crsctl stat res -t | egrep "vip|network"  
2.  ora.net1.network  
3.  ora.net2.network  
4.  ora.scan1.vip  
5.  ora.xty3-vip2.vip  
6.  ora.xty3.vip  
7.  ora.xty4-vip2.vip  
8.  ora.xty4.vip  
9.    
10. [root@xty3 ~]# srvctl config vip -n xty3  
11. VIP exists.:xty3  
12. VIP exists.: /xty3-vip2/192.168.76.135/255.255.255.0/eth2  
13. VIP exists.:xty3  
14. VIP exists.: /xty3-vip/192.168.0.135/255.255.255.0/eth0  
15.   
16. [root@xty3 ~]# srvctl config vip -n xty4  
17. VIP exists.:xty4  
18. VIP exists.: /xty4-vip2/192.168.76.145/255.255.255.0/eth2  
19. VIP exists.:xty4  
20. VIP exists.: /xty4-vip/192.168.0.145/255.255.255.0/eth0

ora.net2.network,ora.xty3-vip2.vip,ora.xty4-vip2.vip都是新增的资源。然后使用下面的命令启动新增的VIP:

1.  [root@xty3 ~]# srvctl start vip -i xty3-vip2  
2.  [root@xty3 ~]# srvctl start vip -i xty4-vip2

使用ifconfig 命令也可以确认IP地址已经附加到了新增的public network上,即en2上。所以在这里,新增public network上的VIP配置成功。

第4步,我们来实现第3个需求,也就是在VIP地址上增加监听,这个步骤也很简单,用GI的用户(这个环境是oracle)执行下面的命令:

1.  [oracle@xty3 root]$ srvctl add listener -l LISTENER_N2 -s -p 1521 -k 2  
2.  [oracle@xty3 root]$ srvctl config listener  -a  
3.  Name: LISTENER  
4.  Network: 1, Owner: oracle  
5.  Home: <crs home="">  
6.    /oracle/app/grid on node(s) xty4,xty3  
7.  End points: TCP:1521  
8.  Name: LISTENER_N2  
9.  Network: 2, Owner: oracle  
10. Home: </crs><crs home="">  
11.   /oracle/app/grid on node(s) xty4,xty3  
12. End points: TCP:1521  
13. </crs>

启动并检查新增加的监听:

1.  [oracle@xty3 root]$ srvctl start listener -l LISTENER_N2  
2.  [oracle@xty3 root]$ lsnrctl status listener_n2  
3.    
4.  LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 24-APR-2012 21:07:44  
5.    
6.  Copyright (c) 1991, 2009, Oracle.  All rights reserved.  
7.    
8.  Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_N2)))  
9.  STATUS of the LISTENER  
10. ------------------------  
11. Alias                     LISTENER_N2  
12. Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production  
13. Start Date                24-APR-2012 21:04:14  
14. Uptime                    0 days 0 hr. 3 min. 30 sec  
15. Trace Level               off  
16. Security                  ON: Local OS Authentication  
17. SNMP                      OFF  
18. Listener Parameter File   /oracle/app/grid/network/admin/listener.ora  
19. Listener Log File         /oracle/app/grid/log/diag/tnslsnr/xty3/listener_n2/alert/log.xml  
20. Listening Endpoints Summary...  
21.   (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_N2)))  
22.   (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.76.135)(PORT=1521)))  
23. The listener supports no services  
24. The command completed successfully

可以看到,监听LISTENER_N2增加成功。增加监听也可以使用netca图形界面操作,但还是命令行操作快捷。不过从上面的输出可以看到,新的public network上的监听并没有监听到相对应的public固定IP。实际上他们监听hostname对应的IP地址。这是由BUG 8678541引起,在11.2.0.2及以上版本中已经修复。

第5步,我们来实现第2个需求,也就是增加SCAN IP,实际上在GI中,只能有一个SCAN,所以新增加的“SCAN IP”,实际上应称为“Application IP”,用两种方法,先介绍简单的,用root命令执行:

1.  [root@xty3 ~]# appvipcfg create -network=2 -ip=192.168.76.155 -vipname=xty-cluster-svip2 -user=root  
2.  Production Copyright 2007, 2008, Oracle.All rights reserved  
3.  2012-04-24 21:29:23: Skipping type creation  
4.  2012-04-24 21:29:23: Create the Resource  
5.  2012-04-24 21:29:23: Executing cmd: /oracle/app/grid/bin/crsctl add resource xty-cluster-svip2 -type app.appvip.type -attr USR_ORA_VIP=192.168.76.155,START_DEPENDENCIES=hard(ora.net2.network) pullup(ora.net2.network),STOP_DEPENDENCIES=hard(ora.net2.network),ACL='owner:root:rwx,pgrp:root:r-x,other::r--,user:root:r-x'

然后查看并启动资源:

1.  [root@xty3 ~]# crsctl stat res -t | grep svip2  
2.  xty-cluster-svip2  
3.  [root@xty3 ~]# crsctl start resource xty-cluster-svip2  
4.  CRS-2672: Attempting to start 'xty-cluster-svip2' on 'xty3'  
5.  CRS-2676: Start of 'xty-cluster-svip2' on 'xty3' succeeded

使用ifconfig命令可以确认IP地址已经加到新的public network上了,由于这个是类似”SCAN IP“的地址,只能在一个节点上起。我们可以用下面的命令来调整这个IP到另一个节点上:

1.  [root@xty3 ~]# crsctl relocate resource xty-cluster-svip2  
2.  CRS-2673: Attempting to stop 'xty-cluster-svip2' on 'xty3'  
3.  CRS-2677: Stop of 'xty-cluster-svip2' on 'xty3' succeeded  
4.  CRS-2672: Attempting to start 'xty-cluster-svip2' on 'xty4'  
5.  CRS-2676: Start of 'xty-cluster-svip2' on 'xty4' succeeded  
6.  [root@xty3 ~]# crsctl stat res xty-cluster-svip2 -p | grep -i type  
7.  TYPE=app.appvip.type  
8.  [root@xty3 ~]# crsctl stat type app.appvip.type  
9.  TYPE_NAME=app.appvip.type  
10. BASE_TYPE=cluster_resource

这个实现”SCAN IP“功能的application ip,不属于VIP,也不属于SCAN,因此这个资源是srvctl不能管理的。

下面介绍用第2种方法来实现新的public network上的"SCAN IP"。
把上面建好的资源xty-cluster-svip2停掉并删除:

1.  [root@xty3 ~]# crsctl stop res xty-cluster-svip2  
2.  CRS-2673: Attempting to stop 'xty-cluster-svip2' on 'xty4'  
3.  CRS-2677: Stop of 'xty-cluster-svip2' on 'xty4' succeeded  
4.  [root@xty3 ~]# crsctl delete res xty-cluster-svip2

然后执行下面的命令生成现有的SCAN IP的属性:

1.  [root@xty3 ~]# crsctl stat res ora.scan1.vip -p > /tmp/1.txt

接着手工修改一下/tmp/1.txt文件,下面列出修改的部分:

1.  NAME=ora.n2_scan1.vip  
2.  SCAN_NAME=xty-cluster-svip2  
3.  DESCRIPTION=Oracle SCAN VIP resource on network2  
4.  SCAN_NAME=xty-cluster-svip2  
5.  START_DEPENDENCIES=hard(ora.net2.network) dispersion:active(type:ora.scan_vip.type) pullup(ora.net2.network)  
6.  STOP_DEPENDENCIES=hard(ora.net2.network)  
7.  USR_ORA_VIP=192.168.76.155

然后配置SCAN并启动:

1.  [root@xty3 ~]# crsctl add resource ora.n2_scan1.vip -type ora.scan_vip.type -file /tmp/1.txt  
2.  [root@xty3 ~]# srvctl config scan       
3.  SCAN name: xty-cluster-svip2, Network: 2/192.168.76.0/255.255.255.0/eth2  
4.  SCAN VIP name: n2_scan1, IP: /xty-cluster-svip2/192.168.76.155  
5.  SCAN VIP name: scan1, IP: /xty-cluster-svip1/192.168.0.155  
6.  [root@xty3 ~]# crsctl start resource ora.n2_scan1.vip  
7.  CRS-2672: Attempting to start 'ora.n2_scan1.vip' on 'xty3'  
8.  CRS-2676: Start of 'ora.n2_scan1.vip' on 'xty3' succeeded  
9.    
10. [root@xty3 ~]# crsctl relocate resource ora.n2_scan1.vip  
11. CRS-2673: Attempting to stop 'ora.n2_scan1.vip' on 'xty3'  
12. CRS-2677: Stop of 'ora.n2_scan1.vip' on 'xty3' succeeded  
13. CRS-2672: Attempting to start 'ora.n2_scan1.vip' on 'xty4'  
14. CRS-2676: Start of 'ora.n2_scan1.vip' on 'xty4' succeeded

注意第2种方法使用的SCAN VIP资源的名字跟第1种方法不一样,在实际使用中,可以根据需要选择即可。不过注意在第2种方法中不要用ora.scan1_n2.vip这样的名字,否则srvctl查看这个资源时会出错。
看上去srvctl显示的结果有点异常,只有一个SCAN Name,是新加的那个。不过至少可以用srvctl看到了,并且这也是可以理解的,因为目前就只能支持一个SCAN Name,在本文仅处于研究的目的,所以这种方法不建议使用于生产,建议使用上面的第1种方法。

到目前为止,新的public network上的SCAN已经增加成功。

第6步,在新配的SCAN VIP上配置一个SCAN LISTENER。注意不能使用srvctl add listener命令来配置,因为这种方式实际上是在所有的节点上都加了可同时启动的监听,需要增加的是scan listener。不过srvctl add scan_listener是不会成功的,因为它会检测到在1521端口上已经有了SCAN Listener,即使是在高版本的GI中,这个命令增加了-k 参数指定network,也是会报错的。因此只能使用类似上面第2种增加SCAN VIP的方法来增加新的SCAN Listener,不过这次需要用GI的安装用户(此环境是oracle用户)来执行操作:

1.  [oracle@xty3 root]$ crsctl stat res  ora.LISTENER_SCAN1.lsnr -p > /tmp/2.txt

修改/tmp/2.txt文件,修改的行如下:

1.  NAME=ora.LISTENER_N2_SCAN1.lsnr  
2.  DESCRIPTION=Oracle SCAN listener resource on network 2  
3.  START_DEPENDENCIES=hard(ora.n2_scan1.vip) dispersion:active(type:ora.scan_listener.type) pullup(ora.n2_scan1.vip)  
4.  STOP_DEPENDENCIES=hard(intermediate:ora.n2_scan1.vip)

然后配置SCAN Listener并启动:

1.  [oracle@xty3 root]$ crsctl add resource ora.listener_n2_scan1.lsnr -type ora.scan_listener.type -file /tmp/2.txt  
2.  [oracle@xty3 root]$ srvctl config scan_listener  
3.  SCAN Listener LISTENER_N2_SCAN1 exists. Port: TCP:1521  
4.  SCAN Listener LISTENER_SCAN1 exists. Port: TCP:1521  
5.    
6.  [oracle@xty3 root]$ crsctl start resource ora.LISTENER_N2_SCAN1.lsnr  
7.  CRS-2672: Attempting to start 'ora.LISTENER_N2_SCAN1.lsnr' on 'xty4'  
8.  CRS-2676: Start of 'ora.LISTENER_N2_SCAN1.lsnr' on 'xty4' succeeded

可以看到新增的SCAN Listener成功在节点xty4上启动,当然在之前的操作步骤中,新的SCAN VIP即N2_SCAN2是启动到了xty4上,所以这个监听也会在xty4上。

我们把新的SCAN VIP调整到节点xty3上:

1.  [root@xty3 ~]# crsctl relocate resource ora.n2_scan1.vip -f  
2.  CRS-2673: Attempting to stop 'ora.LISTENER_N2_SCAN1.lsnr' on 'xty4'  
3.  CRS-2677: Stop of 'ora.LISTENER_N2_SCAN1.lsnr' on 'xty4' succeeded  
4.  CRS-2673: Attempting to stop 'ora.n2_scan1.vip' on 'xty4'  
5.  CRS-2677: Stop of 'ora.n2_scan1.vip' on 'xty4' succeeded  
6.  CRS-2672: Attempting to start 'ora.n2_scan1.vip' on 'xty3'  
7.  CRS-2676: Start of 'ora.n2_scan1.vip' on 'xty3' succeeded  
8.  CRS-2672: Attempting to start 'ora.LISTENER_N2_SCAN1.lsnr' on 'xty3'  
9.  CRS-2676: Start of 'ora.LISTENER_N2_SCAN1.lsnr' on 'xty3' succeeded  
10. [root@xty3 ~]# su oracle  
11. [oracle@xty3 root]$ lsnrctl status LISTENER_N2_SCAN1  
12.   
13. LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 24-APR-2012 23:29:49  
14.   
15. Copyright (c) 1991, 2009, Oracle.  All rights reserved.  
16.   
17. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_N2_SCAN1)))  
18. STATUS of the LISTENER  
19. ------------------------  
20. Alias                     LISTENER_N2_SCAN1  
21. Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production  
22. Start Date                24-APR-2012 23:29:32  
23. Uptime                    0 days 0 hr. 0 min. 17 sec  
24. Trace Level               off  
25. Security                  ON: Local OS Authentication  
26. SNMP                      OFF  
27. Listener Parameter File   /oracle/app/grid/network/admin/listener.ora  
28. Listener Log File         /oracle/app/grid/log/diag/tnslsnr/xty3/listener_n2_scan1/alert/log.xml  
29. Listening Endpoints Summary...  
30.   (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_N2_SCAN1)))  
31.   (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.76.155)(PORT=1521)))  
32. The listener supports no services  
33. The command completed successfully

至此所有的操作已经完成。然后重启一下所有节点的crs,验证一下重启后是否正常。在关闭第1个节点的crs之后,第2个节点上顺利接管了所有的VIP地址,并且所有的SCAN Listener也运行到了节点2上。然后重启两个节点的crs后,一切看起来比较正常。唯一的不足是由于BUG 8678541引起的问题,使新的public network的VIP地址上的监听,监听到了错误的IP地址上。

以上的操作全部是针对Grid Infrastructure,不过在数据库上,还需要调整参数LISTENER_NETWORKS,而不能使用local_listener和remote_listener参数。这个参数的设置,举例如下:

alter system set LISTENER_NETWORKS='((NAME=network1)(LOCAL_LISTENER=192.168.0.135:1521)(REMOTE_LISTENER=xty-clustersvip1:1521))','((NAME=network2)(LOCAL_LISTENER=192.168.76.135:1521)(REMOTE_LISTENER=xty-cluster-svip2:1521))' sid='inst1';  
    
alter system set LISTENER_NETWORKS='((NAME=network1)(LOCAL_LISTENER=192.168.0.145:1521)(REMOTE_LISTENER=xty-clustersvip1:1521))','((NAME=network2)(LOCAL_LISTENER=192.168.76.145:1521)(REMOTE_LISTENER=xty-cluster-svip2:1521))' sid='inst2';

实际上Grid Infrastructure已经是一个完整的clusterware,完全可以通过自定义的脚本来增加自己想要的资源,以实现高可用性。


MOS上也有相应的文档:

How to Configure   A Second Listener on a Separate Network in 11.2 Grid Infrastructure (Doc ID   1063571.1)

最后修改时间:2019-04-14 10:49:55
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论