為什麼有些客戶沒有用11gR2 RAC中scan ip連線資料庫

selectshen發表於2015-05-19
如果說scan可以負載均衡,可以故障轉換,這些之前版本都已經做到了,感覺不算它的優勢.個人感覺它的優勢是提供統一的名稱來連線資料庫,而且在新增刪除節點的時候不用修改客戶端.
最近發現很多客戶都沒有用scan ip,都還是用的vip,主要有三個原因:
1.資料庫是之前版本升級上來的,之前用vip已經很穩定,不願做無收益的修改.
2.客戶端的tnsnames.ora配置要根據不同的應用模組設定不同的vip順序.
3.需要TAF功能.
除了第一個原因合理外,二和三都是可以透過配置server-side TAF來進行service的優先順序設定和TAF設定來實現.
以下是配置server-side TAF:
##資料庫名:rac11g2 例項名:rac11g21,rac11g22,
##要建的服務名:ractest1,ractest2
##1.使用srvctl命令建service資源
[oracle@rh5806 ~]$ srvctl add service -d rac11g2 -s ractest1 -r rac11g21 -a rac11g22 -P BASIC -y automatic -e SELECT -z 5 -w 180
##2.檢視service資源ractest1的狀態
[oracle@rh5806 ~]$ srvctl status service -d rac11g2 -s ractest1
Service ractest1 is not running.
##3.開啟service資源ractest1的狀態
[oracle@rh5806 ~]$ srvctl start service -d rac11g2 -s ractest1
##4.檢視service資源ractest1的配置資訊
[oracle@rh5806 ~]$ srvctl config service -d rac11g2 -s ractest1

Service name: ractest1
Service is enabled
Server pool: rac11g2_ractest1
Cardinality: 1
Disconnect: false
Service role: PRIMARY
Management policy: AUTOMATIC
DTP transaction: false
AQ HA notifications: false
Failover type: SELECT
Failover method: NONE
TAF failover retries: 5
TAF failover delay: 180
Connection Load Balancing Goal: LONG
Runtime Load Balancing Goal: NONE
TAF policy specification: BASIC
Edition:
Preferred instances: rac11g21
Available instances: rac11g22
--透過lsnrctl status 可以看到在例項rac11g21節點上多出一個ractest1的服務
Service "ractest1" has 1 instance(s).
  Instance "rac11g21", status READY, has 1 handler(s) for this service...

##5.相同的方法建service資源ractest2
[oracle@rh5806 ~]$ srvctl add service -d rac11g2 -s ractest2 -r rac11g22 -a rac11g21 -P BASIC -y automatic -e SELECT -z 5 -w 180
[oracle@rh5806 ~]$ srvctl start service -d rac11g2 -s ractest2
##此時可以透過配置客戶端測試是否按優先順序連線.
--以下是測試客戶端的tnsnames.ora
56_118_ractest1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.118)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ractest1)
    )
  )
56_118_ractest2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.118)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ractest2)
    )
  )

##測試serice資源的TAF功能
[root@rh5806 ~]# ifdown eth0

--此時可以看到service資源已經飄移到例項rac11g22上,也可以透過crs_stat -t或者lsnrctl status檢視
[oracle@rh5807 ~]$ srvctl status service -d rac11g2 -s ractest1
Service ractest1 is running on instance(s) rac11g22
--此時透過客戶端連線56_118_ractest1,連線的已經是例項rac11g22了.

##測試節點恢復後,service資源ractest1的狀態
[root@rh5806 ~]# ifup eth0
--此時需要把service資源relocate回來
[oracle@rh5807 ~]$ srvctl relocate service -h

Temporarily relocates service from one node of the cluster to another.
Usage: srvctl relocate service -d -s {-i -t | -c -n } [-f]
    -d       Unique name for the database
    -s              Service name
    -i             Old instance name
    -t             New instance name
    -c         Node name to relocate service from
    -n          Node name to relocate service to
    -f                       Disconnect all sessions during stop or relocate service operations
    -h                       Print usage

[oracle@rh5807 ~]$ srvctl relocate service -d rac11g2 -s ractest1 -i rac11g22 -t rac11g21

##以下是刪除不再用的service資源
[oracle@rh5807 ~]$ srvctl stop service -d rac11g2 -s ractest1
[oracle@rh5807 ~]$ srvctl remove service -d rac11g2 -s ractest1

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

相關文章