為11gR2 Grid Infrastructure增加新的public網路

strivechao發表於2019-06-20

在某些環境下,執行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]》

--The End


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25469263/viewspace-2648156/,如需轉載,請註明出處,否則將追究法律責任。

相關文章