zoukankan      html  css  js  c++  java
  • 为11gR2 Grid Infrastructure增加新的public网络

    在某些环境下,运行11.2版本的RAC数据库的服务器上,连接了多个public网络,那么就会有如下的需求:

    1. 给其他的,或者说是新的public网络增加新的VIP地址。
    2. 在新的public网络上增加SCAN VIP.
    3. 在新的VIP地址上配置监听
    4. 在新的SCAN VIP地址上配置监听

    实际上从11.2版本开始,grid infrastructure(以下可能会简写为GI)就是一个完整的clusterware,不仅仅是用于数据库,也可以用作应用软件的高可用性。上述的4个需求中,第1个是毫无疑问需要的;第2个需求对运行在grid infrastructure上的应用是必要的;第3个需求在运行在grid infrastructure上的数据库来说是必要的;第4个需求,是针对数据库的,这个需求有点难度,因为在一套grid infrastructure中只能允许有一个SCAN LISTENER的存在,由于可以不通过SCAN IP而是直接通过VIP地址连接数据库,所以这个新的SCAN监听可以不需要,但是为了完整,我们可以用变通的方法来实现。

    下面我们用一个实例来演示如何实现上述的所有需求。

    先简单介绍一下用于演示的环境: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参数。这个参数的设置,举例如下:

    1. alter system set LISTENER_NETWORKS='((NAME=network1)(LOCAL_LISTENER=192.168.0.135:1521)(REMOTE_LISTENER=xty-cluster-svip1:1521))','((NAME=network2)(LOCAL_LISTENER=192.168.76.135:1521)(REMOTE_LISTENER=xty-cluster-svip2:1521))' sid='inst1';  
    2.   
    3. alter system set LISTENER_NETWORKS='((NAME=network1)(LOCAL_LISTENER=192.168.0.145:1521)(REMOTE_LISTENER=xty-cluster-svip1: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 [ID 1063571.1]》

  • 相关阅读:
    hdu acm 2844 Coins 解题报告
    hdu 1963 Investment 解题报告
    codeforces 454B. Little Pony and Sort by Shift 解题报告
    广大暑假训练1 E题 Paid Roads(poj 3411) 解题报告
    hdu acm 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
    hdu acm 1114 Piggy-Bank 解题报告
    poj 2531 Network Saboteur 解题报告
    数据库范式
    ngnix 配置CI框架 与 CI的简单使用
    Vundle的安装
  • 原文地址:https://www.cnblogs.com/yaoyangding/p/14206113.html
Copyright © 2011-2022 走看看