1. 程式人生 > 其它 >11g rac配置scan ip(r6筆記第30天)

11g rac配置scan ip(r6筆記第30天)

如果是從10g轉戰11g rac就會發現很多不同之處,其中一個比較大的改變就是在11g中有了一個新特性scan,其實這是一個簡稱,完整的名稱為:SCAN(Single Client Access Name),但是單純根據簡稱理解為scan似乎也能說得通。 在10g中我們一般是這麼配置tns的。

racdb=
(DESCRIPTION  =
  (ADDRESS=  (PROTOCOL= TCP)(HOST=192.168.3.101)(PORT= 1521))
  (ADDRESS=  (PROTOCOL= TCP)(HOST=192.168.3.201)(PORT= 1521))
  (LOAD_BALANCE =  yes)
  (FAILOVER =  ON)
   (CONNECT_DATA  =
    (SERVER=  DEDICATED)
     (SERVICE_NAME  = racdb)
     (FAILOVER_MODE  =
       (TYPE=  SELECT)
       (METHOD=  BASIC)
       (RETRIES =  30)
       (DELAY =  5))))

但是到了11g中,無須我們這樣配置,檢視tnsnames.ora裡面就只有短短几行內容。

-bash-4.1$ cat tnsnames.ora
# tnsnames.ora Network Configuration File:  /u04/app/11.2.0/db/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration  tools.
RACDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan)(PORT = 1521))
     (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME =  RACDB)
    )
  )

整個配置一下子沒有了原來的那種高達上的感覺,一下感覺和單例項的資料庫配置沒有什麼兩樣。 這個時候就會在資料庫層面和客戶端層面之間添加了一個虛擬的轉換層,即我們所說的scan ip和scan ip listener 這個時候如果你去檢視listener會發現多了一個scan相關的listener -bash-4.1$ ps -ef|grep tns root 13 2 0 07:02 ? 00:00:00 [netns] grid 3086 1 0 07:17 ? 00:00:00 /u04/app/11.2.0/grid/bin/tnslsnr LISTENER -inherit grid 3090 1 0 07:17 ? 00:00:00 /u04/app/11.2.0/grid/bin/tnslsnr LISTENER_SCAN1 -inherit grid 3624 2377 0 07:32 pts/0 00:00:00 grep tns

這個時候c客戶端連線資料庫的過程就會是下面的方式 客戶端 -> scan listener -> local listener -> 對應的資料庫例項 用圖形顯示就是下面的形式

這個解析的過程是一個動態處理的過程,比如我們也可以在這個基礎上進行擴充套件,我們希望配備多個scan ip,也是支援的。

首先需要檢視scan的狀態 -bash-4.1$ lsnrctl status rac-scan

LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 16-AUG-2015 07:32:26

Copyright (c) 1991, 2011, Oracle. All rights reserved.

Connecting to (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.3.100)(PORT=1521))) STATUS of the LISTENER ------------------------ Alias LISTENER_SCAN1 Version TNSLSNR for Linux: Version 11.2.0.3.0 - Production Start Date 16-AUG-2015 07:17:10 Uptime 0 days 0 hr. 15 min. 17 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u04/app/11.2.0/grid/network/admin/listener.ora Listener Log File /u04/app/11.2.0/grid/log/diag/tnslsnr/rac1/listener_scan1/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN1))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.3.100)(PORT=1521))) Services Summary... Service "RACDB" has 2 instance(s). Instance "RACDB1", status READY, has 1 handler(s) for this service... Instance "RACDB2", status READY, has 1 handler(s) for this service... Service "RACDBXDB" has 2 instance(s). Instance "RACDB1", status READY, has 1 handler(s) for this service... Instance "RACDB2", status READY, has 1 handler(s) for this service... The command completed successfully 如果另外一個節點上沒有對應的scan程序,會有一些區別。 -bash-4.1$ lsnrctl status rac-scan

LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 16-AUG-2015 07:32:10

Copyright (c) 1991, 2011, Oracle. All rights reserved.

Connecting to (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.3.100)(PORT=1521))) TNS-01189: The listener could not authenticate the user 我們來配置一下scan ip,使用srvctl config scan的方式可以得到當前的scan配置資訊,可以瞭解到scan目前的一些狀態,目前漂移在哪個節點上。

node1: -bash-4.1$ srvctl config scan SCAN name: rac-scan, Network: 1/192.168.3.0/255.255.255.0/eth0 SCAN VIP name: scan1, IP: /rac-scan/192.168.3.100

-bash-4.1$ srvctl status scan_listener SCAN Listener LISTENER_SCAN1 is enabled SCAN listener LISTENER_SCAN1 is running on node rac1

然後我們把scan_listener停掉,然後檢視狀態 -bash-4.1$ srvctl stop scan_listener -bash-4.1$ srvctl status scan_listener SCAN Listener LISTENER_SCAN1 is enabled SCAN listener LISTENER_SCAN1 is not running 接下來我們就需要在/etc/hosts裡面配置多個scan ip,比如我添加了192.168.3.110喝192.168.3.120這兩個ip /etc/hosts 192.168.3.100 rac-scan 192.168.3.110 rac-scan 192.168.3.120 rac-scan

然後使用srvctl modify的方式使其生效。 -bash-4.1$ srvctl modify scan -n rac-scan PRCS-1034 : Failed to modify Single Client Access Name rac-scan PRCR-1071 : Failed to register or update resource type ora.scan_vip.type CRS-0245: User doesn't have enough privilege to perform the operation 這個時候其實還是需要root許可權才能操作的,切換一下使用root -bash-4.1$ which srvctl /u04/app/11.2.0/db/product/11.2.0/dbhome_1/bin/srvctl -bash-4.1$ su - root Password: [root@rac1 ~]# /u04/app/11.2.0/db/product/11.2.0/dbhome_1/bin/srvctl modify scan -n rac-scan ****ORACLE_HOME environment variable is not set. ORACLE_HOME should be set to the main directory that contains Oracle products. Set and export ORACLE_HOME, then re-run. 不過這個時候也不是一帆風順,還是需要根據ORACLE_HOME來做修改,而且還是需要export的方式才可以。

[root@rac1 ~]# ORACLE_HOME=/u04/app/11.2.0/db/product/11.2.0/dbhome_1 [root@rac1 ~]# /u04/app/11.2.0/db/product/11.2.0/dbhome_1/bin/srvctl modify scan -n rac-scan ****ORACLE_HOME environment variable is not set. ORACLE_HOME should be set to the main directory that contains Oracle products. Set and export ORACLE_HOME, then re-run. [root@rac1 ~]# export ORACLE_HOME=/u04/app/11.2.0/db/product/11.2.0/dbhome_1 [root@rac1 ~]# /u04/app/11.2.0/db/product/11.2.0/dbhome_1/bin/srvctl modify scan -n rac-scan

[root@rac1 ~]# exit logout 修改完成,我們檢視scan ip的狀態,就會發現多了另外兩個ip -bash-4.1$ srvctl config scan SCAN name: rac-scan, Network: 1/192.168.3.0/255.255.255.0/eth0 SCAN VIP name: scan1, IP: /rac-scan/192.168.3.100 SCAN VIP name: scan2, IP: /rac-scan/192.168.3.110 SCAN VIP name: scan3, IP: /rac-scan/192.168.3.120 然後嘗試啟動scan_listener即可。 -bash-4.1$ srvctl start scan_listener

-bash-4.1$ srvctl start scan PRCC-1014 : scan1 was already running PRCR-1004 : Resource ora.scan1.vip is already running PRCR-1079 : Failed to start resource ora.scan1.vip CRS-5702: Resource 'ora.scan1.vip' is already running on 'rac2' 當然啟動之後我們也需要驗證,還是使用crs_stat來驗證 -bash-4.1$ crs_stat -t|grep scan ora.scan1.vip ora....ip.type ONLINE ONLINE rac2 ora.scan2.vip ora....ip.type ONLINE ONLINE rac1 ora.scan3.vip ora....ip.type ONLINE ONLINE rac1 scan ip的配置就完成了,應該比預想的要簡單一些吧。