oracle 11g racscan IP 方法

zhengbao_jun發表於2013-11-04
SCAN概念
先介紹一下什麼叫SCAN,SCAN(Single Client Access Name)是Oracle從11g R2開始推出的,客戶端可以通過SCAN特性負載均衡地連線到RAC資料庫。SCAN提供一個域名來訪問RAC,域名可以解析1個到3個(注意,最多3個)SCAN IP,我們可以通過DNS或者GNS來解析實現。其中DNS大家都很熟悉,這裡不多說。GNS(Grid Naming Service)則是Oracle 11g R2的新功能,可以通過DHCP服務為節點和SCAN分配VIP和SCAN IP。另外還有個優點是,對於新加入叢集的節點,它會自動分配VIP地址,更新叢集資源,客戶端依然通過SCAN特性負載均衡地連線到新增叢集節點上。DNS和GNS配置與解析相關內容在下面還有說明。
除了DNS和GNS解析方法外,SCAN也可以使用hosts檔案來解析,但用過的人都知道,此方法不僅在安裝RAC的時候產生問題,後期使用也是存在問題的,比如SCAN域名只能定義一個SCAN IP。所以這種方法也是Oracle不推薦使用的。但儘管如此,我見過很多生產上依然這樣使用,也就是廢棄了11g的新特性SCAN,而是依然採用VIP連線方式。

備註:有人可能會注意到《此方法不僅在安裝RAC的時候產生問題》這句,RAC安裝的時候的確會報錯,但這並不影響後期Oracle的使用。

SCAN最明顯的優點就是,當叢集中新增加了節點或者刪除了節點,不需要額外維護客戶端。

PUBLIC IP, PRIVATE IP, VIP, SCAN VIP, GNS VIP, LOCAL_LISTENER, REMOTE_LISTENER , LOCAL LISTENER, SCAN LISTENER
在RAC部署的時候,我們都會接觸到PUBLIC IP、PRIVATE I、VIP等等,那下面就針對它們進行介紹。
PUBLIC IP : 這是我們網路卡上配置的真實IP地址,我們稱為公共IP,這個IP的存在關係到下面介紹的VIP能不能正確漂在其所在網路卡上。注意,PUBLIC IP是不提供給客戶端去連線配置的,這並不是說通過PUBLIC IP無法連線例項,而是它會存在節點伺服器當機的時候所有向它請求的客戶端都會有等待現象並且最後得到超時資訊的缺點。

PRIVATE IP : 稱為私網IP(私有IP),它是用於心跳同步的,也就是保證兩臺伺服器資料同步。說道私網IP,我簡單說下Oracle另一個高可用性連線特性 – HAIP。其實Cache Fusion會消耗節點伺服器很大的私網資源,另外,私網間無法通訊還會引起brain split(腦裂),以前為解決這種問題,我們可以採用網路卡bonding技術,而Oracle在11g R2的時候HAIP技術來實現,HAIP(Highly Available Virtual IP)用於節點間的私網通訊,支援同時使用多個網路連線來滿足網路卡間的負載均衡,並且還提高了Cache Fusion資源通訊能力。HAIP技術並不是主要內容,所以在這裡點到為止。

VIP : RAC的每個節點都需要有一個虛擬IP,這就是VIP。VIP需要和PUBLIC IP同一個子網,它們是由GI的Clusterware來管理的。VIP在其節點伺服器發生故障的時候會自動漂移到另外正常的節點伺服器上,如果RAC是多個節點執行的,那具體漂移到哪個活動的節點將由Clusterware決定。VIP發生漂移現象之後,其當前的節點伺服器LOCAL LISTENER是不會監聽它的請求的,所以有客戶端向這個VIP傳送請求時,Clusterware的FAN會通知客戶端向別的VIP傳送請求,客戶端收到通知後通過Failover機制把請求重新傳送到ADDRESS列表中的其他VIP上。雖然有這種較複雜的過程,但始終對客戶端是透明進行的,而且這個過程完成時間非常短暫,客戶端也就幾乎感受不到有節點當機。等故障節點恢復正常,漂移的VIP也回到此節點上,繼續提供服務。

SCAN VIP : SCAN VIP就是我在剛開始常說的SCAN IP,也就是由DNS或者GNS、hosts解析出來的IP地址。上面也說過,SCAN VIP最多能有三個,它們迴圈地被客戶端所請求到。這裡大家可能會存在這樣的問題,SCAN VIP只有三個,那RAC是四節點或更多的節點情況怎麼辦?存在這種問題的原因歸咎於對SCAN VIP的瞭解不足。其實,SCAN VIP數量和節點數是沒有任何關係的,SCAN VIP會落到哪個節點上都是隨機的。

GNS VIP : GNS VIP同SCAN VIP,也是Oracle從11g R2開始提供的。GNS VIP是提供GNS服務的IP地址,它繫結到某個節點的PUBLIC IP所在網路卡上,當節點出現故障,GNS資源會自動切換到其他正常的節點繼續提供GNS解析服務。如果我們不使用GNS解析方法,那麼也不會存在GNS VIP。

LOCAL LISTENER : 本地監聽器,RAC的每個節點上都會有獨立的本地監聽器,它會監聽該節點的PUBLIC IP和VIP,而每個節點的例項在啟動的時候也向本地監聽器進行註冊,當然它也會向SCAN監聽器註冊,當VIP或者PUBLIC IP(這種情況比較少見)有連線請求的時候,本地監聽器就接受處理並和本地例項建立連線。如果某個節點故障,其上面的VIP會進行漂移,但本地監聽器並不會產生漂移。

SCAN LISTENER : SCAN監聽器,它是實現SCAN負載均衡的原理所在。如果RAC上有三個SCAN VIP,那麼SCAN監聽器也有三個,它們各自監聽SCAN VIP的連線請求。SCAN監聽器跟著SCAN VIP隨機分配到節點伺服器上,如果某個節點發生故障,執行在此節點上的SCAN VIP會進行漂移,這時候SCAN監聽器也跟著漂移到正常的節點上,繼續為SCAN VIP監聽連線請求,當PMON程式下次動態更新例項資訊到該SCAN監聽器之後,它又重新接受客戶端的連線。這和VIP產生漂移的時候是有所區別的。

LOCAL_LISTENER : 這是Oracle的引數,這個引數控制著本地監聽器的註冊,因為本地監聽器的工作機制關係,通過本地監聽器的資料庫連線請求只會連線到本地節點的例項上。

REMOTE_LISTENER :  同LOCAL_LISTENER是Oracle的引數,通過這個設定,任何例項都會向SCAN監聽器註冊,所以SCAN監聽器能夠負載均衡地分發連線請求到節點本地監聽器上,也就是連線到其本地節點上例項上。

關於LOCAL_LISTENER與REMOTE_LISTENER的配置,在下面講動態註冊的時候再看一下。

SCAN解析與配置
SCAN是在安裝GI(Grid Infrastructure)時配置的,作為Clusterware資源被管理。
忽略hosts解析之後,有兩種方式配置和解析SCAN: DNS和GNS(Grid Naming Service)。

這裡重點說一下DNS解析SCAN方式
使用DNS解析SCAN的時候,DNS伺服器會採用rr(round-robin)的方式迴圈解析為它準備的3個IP地址,與Oracle 11g R2的客戶端配合使不同的客戶端能夠連線到不同的SCAN Listener上,這相當於是Oracle 10g中配置的客戶端負載均衡(通過LOAD_BALANCE=yes配置)。

下面看一下客戶端通過SCAN連線到資料庫的過程,首先由DNS伺服器解析SCAN名稱,DNS伺服器返回SCAN對應的3個IP地址的列表,客戶端會選擇使用其中一個SCAN VIP地址作為連線地址,將命名方法解析後的連線資訊傳送到SCAN VIP對應的SCAN Listener上,SCAN Listener通過負載均衡機制再把請求轉發給比較空閒的伺服器上的本地監聽器,由本地監聽器完成例項與客戶端之間的連線。

使用SCAN連線資料庫例項,整個過程實現了客戶端的Failover(Oracle 10g R2是通過FAILOVER=on來配置),DNS伺服器返回的是一個SCAN VIP列表,客戶端會選擇其中一個連線到RAC,如果這個IP地址不能正常訪問,客戶端會選擇另一個IP地址繼續連線,直到所有的地址都不能正常連線,才返回錯誤給客戶端,整個過程對客戶端程式來說依然是透明的。

需要注意的是,使用SCAN連線到資料庫,不再需要客戶端能解析節點的PUBLIC IP和VIP,只需要客戶端能夠通過DNS伺服器正常解析SCAN就可以了。負載均衡工作交給伺服器端的SCAN實現。

至於GNS解析SCAN,因為目前GNS服務存在不穩定的情況,也很少有企業將其投入到生產環境使用,而且其工作原理也較為複雜,所以在這裡並不深入說明。

例項的動態註冊
上面已經介紹了LOCAL_LISTENER和REMOTE_LISTENER兩個和動態註冊有關的引數,那我們看看它們在資料庫中的表現形式:
本地監聽器註冊是由例項的LOCAL_LISTENER引數所控制的:
SQL> set line 150
SQL> show parameter local_listener

NAME                                 TYPE                   VALUE
———————————— ———————- ——————————
local_listener                       string                 (DESCRIPTION=(ADDRESS_LIST=(AD
                                                            DRESS=(PROTOCOL=TCP)(HOST=192.
                                                            168.0.194)(PORT=1521))))
– 這是我管理的一套RAC上的配置,當然我已經處理好IP地址了。

LOCAL_LISTENER設定為向本地VIP地址進行註冊,由於本地監聽器是在本地的PUBLIC IP和VIP上監聽,所以向VIP監聽註冊就能保證成功向本地監聽器註冊。

檢視本地監聽器的狀態:
[grid@pos2 ~]$ lsnrctl status listener

LSNRCTL for Linux: Version 11.2.0.3.0 – Production on 23-OCT-2012 12:01:21

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))
STATUS of the LISTENER
————————
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.3.0 – Production
Start Date                19-JUL-2012 15:31:45
Uptime                    95 days 20 hr. 29 min. 35 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/11.2.0/grid/network/admin/listener.ora
Listener Log File         /u01/app/grid/diag/tnslsnr/pos2/listener/alert/log.xml
Listening Endpoints Summary…
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.192)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.194)(PORT=1521)))
Services Summary…
Service "+ASM" has 1 instance(s).
  Instance "+ASM2", status READY, has 1 handler(s) for this service…
Service "pos" has 1 instance(s).
  Instance "pos2", status READY, has 1 handler(s) for this service…
Service "posXDB" has 1 instance(s).
  Instance "pos2", status READY, has 1 handler(s) for this service…
The command completed successfully
– 這裡注意:檢視本地監聽器資訊的時候每個節點只能看到其上執行的例項。

SCAN監聽器的註冊是由REMOTE_LISTENER引數控制的,任何例項都會向所有的SCAN監聽器註冊:
SQL> show parameter remote_listener

NAME                                 TYPE                   VALUE
———————————— ———————- ——————————
remote_listener                      string                 pos-cluster-scan:1521

下面是LISTENER_SCAN1的一個狀態資訊,當然你也可以檢視LISTENER_SCAN2和LISTENER_SCAN3的狀態。
[grid@pos2 ~]$ lsnrctl status listener_scan1

LSNRCTL for Linux: Version 11.2.0.3.0 – Production on 23-OCT-2012 12:06:56

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1)))
STATUS of the LISTENER
————————
Alias                     LISTENER_SCAN1
Version                   TNSLSNR for Linux: Version 11.2.0.3.0 – Production
Start Date                19-JUL-2012 15:31:45
Uptime                    95 days 20 hr. 35 min. 10 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/11.2.0/grid/network/admin/listener.ora
Listener Log File         /u01/app/11.2.0/grid/log/diag/tnslsnr/pos2/listener_scan1/alert/log.xml
Listening Endpoints Summary…
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN1)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.195)(PORT=1521)))
Services Summary…
Service "pos" has 2 instance(s).
  Instance "pos1", status READY, has 1 handler(s) for this service…
  Instance "pos2", status READY, has 1 handler(s) for this service…
Service "posXDB" has 2 instance(s).
  Instance "pos1", status READY, has 1 handler(s) for this service…
  Instance "pos2", status READY, has 1 handler(s) for this service…
The command completed successfully

由於任何例項啟動都會向所有的SCAN監聽器動態註冊,從LISTENER_SCAN1的SCAN監聽器執行狀態來看,SERVICE pos包括了所有的例項名稱。

就像我昨天回答那位朋友的時候簡單說“是通過內部機制”一樣,大家可能看到上面的內容並不知道SCAN監聽器如何找到比較空閒的例項的。
其實SCAN監聽器是實時瞭解所有例項的執行情況的,因此它能夠準確地將連線重定向到空閒伺服器的本地監聽器上。

下面我們通過日誌檢視例項的動態註冊與動態更新

1)本地監聽器動態註冊日誌:
[grid@pos2 ~]$ cd $ORACLE_BASE/diag/tnslsnr/pos2/listener/alert
[grid@pos2 alert]$ grep service_register log_1.xml | head -3
18-JUN-2012 13:58:23 * service_register * LsnrAgt * 0
18-JUN-2012 13:58:30 * service_register * +ASM2 * 0
18-JUN-2012 15:54:15 * service_register * pos2 * 0
-- 之所以選擇log_1.xml歷史檔案是因為發現我的log.xml裡基本都是更新日誌,沒有註冊日誌。

2)本地監聽器動態更新日誌:
[grid@pos2 alert]$ grep service_update log.xml | head -3
16-OCT-2012 16:07:09 * service_update * pos2 * 0
16-OCT-2012 16:07:33 * service_update * pos2 * 0
16-OCT-2012 16:08:03 * service_update * pos2 * 0

3)SCAN監聽器動態註冊日誌:
[grid@rac1 ~]$ cd $ORACLE_BASE/diag/tnslsnr/rac1/listener_scan2/alert/
[grid@rac1 ~]$ grep service_register log.xml | head -3
13-AUG-2012 05:25:00 * service_register * LsnrAgt * 0
13-AUG-2012 20:29:07 * service_register * luocs1 * 0
13-AUG-2012 20:58:05 * service_register * luocs1 * 0
-- 這是我另一套測試RAC環境。

4)SCAN監聽器動態更新日誌:
[grid@rac1 ~]$ grep service_update log.xml | head -3
13-AUG-2012 20:29:19 * service_update * luocs1 * 0
13-AUG-2012 20:30:19 * service_update * luocs1 * 0
13-AUG-2012 20:30:46 * service_update * luocs1 * 0
注意,如果你的RAC是通過hosts解析了SCAN域名的,那麼系統裡就找不到上面的SCAN監聽器日誌的路徑。

例項的動態註冊和動態更新過程是由例項的PMON程式完成的,正是因為SCAN監聽器能夠實時瞭解例項的負載情況,所以SCAN監聽器能夠負載均衡地將連線請求轉發給合適例項的本地監聽器來處理。


這裡談到負載均衡,那麼就說下負載均衡中的優先順序
共享伺服器配置中:

低負載節點
低負載例項
例項相關的低負載排程器
專用伺服器配置中:

低負載節點
低負載例項
SCAN相容性配置
介紹SCAN差不多了,這裡還有個相容性問題不能不說。
要完美實現SCAN功能特性,其實對客戶端的要求也是存在的。下面看下不同版本和SCAN之間的相容性

編號
客戶端軟體版本
伺服器端軟體版本
SCAN特性的使用
1
11g R2
11g R2
能夠充分使用SCAN的特性
2
早於11g R2版本
11g R2
不能充分感受到SCAN特性
3
11g R2
早於11g R2版本
在伺服器端沒有SCAN的概念
4
早於11g R2版本
早於11g R2版本
在伺服器端沒有SCAN的概念
這裡稍微詳細說一下第2種情況,如果客戶端低於11g R2的版本,在DNS解析的3個VIP地址中,可能只能固定地使用第一個SCAN VIP連線資料庫;如果該SCAN VIP對應的監聽器出現故障,那麼整個連線將會失敗,客戶端也會收到到錯誤資訊。

那針對相容性問題我們拿出各種客戶端配置方法

1)客戶端和伺服器端軟體版本都是11g R2的時候
Tnsnames.ora
RACSCAN =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = luocs-cluster-scan.grid.luocs.com)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
             (SERVICE_NAME = luocs10g)
    )
  )

2)客戶端是早於11g R2的版本,伺服器端是11g R2的時候
RACSCAN =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (LOAD_BALANCE=on)
      (FAILOVER=on)
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.193)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.194)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.195)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = luocs10g)
    )
  )

為了確保在早於11g R版本的客戶端負載均衡和失敗切換,我們需要在tnsnames.ora中新增3個SCAN VIP。

3)傳統的RAC客戶端配置方法
先從客戶端正常地解析伺服器所有節點的主機名稱和相應的VIP名稱,最好和服務端/etc/hosts一致。
當然,我們不解析名稱的情況下還可以使用VIP地址,比如:
LUOCSRAC =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.193)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.194)(PORT = 1521))
      (LOAD_BALANCE = yes)
      (FAILOVER = on)
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = luocs)
    )
  )

本地客戶端hosts解析之後,使用名稱:
LUOCSRAC =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip.luocs.com)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip.luocs.com)(PORT = 1521))
      (LOAD_BALANCE = yes)
      (FAILOVER = on)
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = luocs)
    )
  )

注意:傳統的客戶端配置方法其實還有多種,這個在這裡不細說。

4)JDBC字串配置
早期版本:
jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip.luocs.com)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip.luocs.com)(PORT = 1521))(LOAD_BALANCE = yes)(FAILOVER = on))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = luocs)))

11g R2:
jdbc:oracle:thin@luocs-cluster-scan:1521/luocs
注意:JDBC是不支援TAF的,所以通過JDBC連線無法實現Failover,那有沒有解決方法,我們可以使用應用的連線池來實現,也就是當連線的時候發現某些連線有故障,那自動切換到正常例項的連線。

最後我貼一下SCAN配置資訊的檢查方法和DNS、GNS方式SCAN解析例項:
首先SCAN配置資訊的檢查。

1)檢視SCAN解析的VIP地址:
[root@rac1 ~]# nslookup scan.luocs.com
Server: 192.168.77.145
Address: 192.168.77.145#53

Name: scan.luocs.com
Address: 192.168.77.197
Name: scan.luocs.com
Address: 192.168.77.195
Name: scan.luocs.com
Address: 192.168.77.196

2)檢視SCAN配置資訊:
[root@rac1 ~]# cd /u01/app/11.2.0/grid/bin
[root@rac1 bin]# ./srvctl config scan
SCAN name: scan.luocs.com, Network: 1/192.168.77.0/255.255.255.0/bond0
SCAN VIP name: scan1, IP: /scan.luocs.com/192.168.77.196
SCAN VIP name: scan2, IP: /scan.luocs.com/192.168.77.197
SCAN VIP name: scan3, IP: /scan.luocs.com/192.168.77.195

3)檢視SCAN監聽器配置資訊:
[root@rac1 bin]# ./srvctl config scan_listener
SCAN Listener LISTENER_SCAN1 exists. Port: TCP:1521
SCAN Listener LISTENER_SCAN2 exists. Port: TCP:1521
SCAN Listener LISTENER_SCAN3 exists. Port: TCP:1521

4)檢視SCAN VIP的節點分配:
[root@rac1 bin]# ./srvctl status scan
SCAN VIP scan1 is enabled
SCAN VIP scan1 is running on node rac1
SCAN VIP scan2 is enabled
SCAN VIP scan2 is running on node rac2
SCAN VIP scan3 is enabled
SCAN VIP scan3 is running on node rac2

5)檢視SCAN Listener的執行節點:
[root@rac1 bin]# ./srvctl status scan_listener
SCAN Listener LISTENER_SCAN1 is enabled
SCAN listener LISTENER_SCAN1 is running on node rac1
SCAN Listener LISTENER_SCAN2 is enabled
SCAN listener LISTENER_SCAN2 is running on node rac2
SCAN Listener LISTENER_SCAN3 is enabled
SCAN listener LISTENER_SCAN3 is running on node rac2
DNS方式配置SCAN:

以下操作在DNS伺服器上進行:

安裝bind三個包
# rpm -ivh bind-9.3.6-4.P1.el5_4.2.x86_64.rpm
# rpm -ivh bind-chroot-9.3.6-4.P1.el5_4.2.x86_64.rpm
# rpm -ivh caching-nameserver-9.3.6-4.P1.el5_4.2.x86_64.rpm

配置主區域
# cd /var/named/chroot/etc
# cp -p named.caching-nameserver.conf named.conf
# vi named.conf
options {
         listen-on port 53 { any; };
         listen-on-v6 port 53 { ::1; };
         directory       "/var/named";
         dump-file       "/var/named/data/cache_dump.db";
         statistics-file "/var/named/data/named_stats.txt";
         memstatistics-file "/var/named/data/named_mem_stats.txt";

         allow-query     { any; };
         allow-query-cache { any; };
};
logging {
         channel default_debug {
                 file "data/named.run";
                 severity dynamic;
         };
};
view localhost_resolver {
         match-clients      { any; };
         match-destinations { any; };
          recursion yes;
         include "/etc/named.zones";
};
# cp -p named.rfc1912.zones named.zones
# vi named.zones
zone “luocs.com" IN {
         type master;
         file “luocs.com.zone";
         allow-update { none; };
};

zone "77.168.192.in-addr.arpa" IN {
         type master;
         file "77.168.192.local";
         allow-update { none; };
};

# cd /var/named/chroot/var/named
# cp -p named.zero luocs.com.zone
# cp -p named.local 77.168.192.local

# vi luocs.com.zone
$TTL    86400
@               IN SOA  dns.luocs.com.      root.luocs.com. (
                                         42              ; serial (d. adams)
                                         3H              ; refresh
                                         15M             ; retry
                                         1W              ; expiry
                                         1D )            ; minimum
         IN      NS      dns.luocs.com.
scan   IN      A       192.168.77.195
scan   IN      A       192.168.77.196
scan   IN      A       192.168.77.197

# vi 77.168.192.local
$TTL    86400
@       IN      SOA     dns.luocs.com. root.luocs.com.  (
                                       1997022700 ; Serial
                                       28800      ; Refresh
                                       14400      ; Retry
                                       3600000    ; Expire
                                       86400 )    ; Minimum
         IN      NS      dns.luocs.com.
195     IN      PTR     scan.luocs.com.
196     IN      PTR     scan.luocs.com.
197     IN      PTR     scan.luocs.com.

# service named restart
# chkconfig named on

nslookup或dig檢查,通過檢查我們也可以判斷DNS提供rr方式:
[root@rac1 ~]# nslookup scan.luocs.com
Server: 192.168.77.145
Address: 192.168.77.145#53

Name: scan.luocs.com
Address: 192.168.77.197
Name: scan.luocs.com
Address: 192.168.77.195
Name: scan.luocs.com
Address: 192.168.77.196

[root@rac1 ~]# nslookup scan.luocs.com
Server: 192.168.77.145
Address: 192.168.77.145#53

Name: scan.luocs.com
Address: 192.168.77.196
Name: scan.luocs.com
Address: 192.168.77.197
Name: scan.luocs.com
Address: 192.168.77.195

[root@rac1 ~]# nslookup scan.luocs.com
Server: 192.168.77.145
Address: 192.168.77.145#53

Name: scan.luocs.com
Address: 192.168.77.195
Name: scan.luocs.com
Address: 192.168.77.196
Name: scan.luocs.com
Address: 192.168.77.197
然後我們在安裝GI的時候使用scan.luocs.com即可,當然要不選擇Configure GNS。
– 如果有不知道我在說什麼的朋友請嘗試一遍Oracle 11g R2 RAC的安裝。

GNS方式配置SCAN:

DNS配置部分
[root@oel1 ~]# rpm -ivh bind-9.3.6-4.P1.el5_4.2.x86_64.rpm
[root@oel1 ~]# rpm -ivh bind-chroot-9.3.6-4.P1.el5_4.2.x86_64.rpm
[root@oel1 ~]# rpm -ivh caching-nameserver-9.3.6-4.P1.el5_4.2.x86_64.rpm

[root@oel1 ~]# cd /var/named/chroot/etc
[root@oel1 etc]# cp -p named.caching-nameserver.conf named.conf
[root@oel1 etc]# vi named.conf
options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";

        // Those options should be used carefully because they disable port
        // randomization
        // query-source    port 53;
        // query-source-v6 port 53;

        allow-query     { any; };
        allow-query-cache { any; };
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
view localhost_resolver {
        match-clients      { any; };
        match-destinations { any; };
        recursion yes;
        include "/etc/named.zones";
};



# cp -p named.rfc1912.zones named.zones
[root@oel1 etc]# vi named.zones

zone "rac.com" IN {
        type master;
        file "rac.com.zone";
        allow-update { none; };
};

zone "77.168.192.in-addr.arpa" IN {
        type master;
        file "77.168.192.local";
        allow-update { none; };
};


[root@oel1 etc]# cd /var/named/chroot/var/named
# cp -p named.zero rac.com.zone
# cp -p named.local 77.168.192.local

# vi rac.com.zone
$TTL    86400
$ORIGIN rac.com.
@               IN SOA  dns.rac.com.      root.rac.com. (
                                        42              ; serial (d. adams)
                                        3H              ; refresh
                                        15M             ; retry
                                        1W              ; expiry
                                        1D )            ; minimum
        IN      NS      dns.rac.com.
dns     IN      A       192.168.100.145
gns     IN      A       192.168.100.200
grid    IN      NS      gns
$ORIGIN host.rac.com.
@       IN      NS      gns.rac.com.

[root@oel1 named]# vi 100.168.192.local
$TTL    86400
@       IN      SOA     dns.rac.com. root.rac.com.  (
                                      1997022700 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
        IN      NS      dns.rac.com.
145     IN      PTR     dns.rac.com.
200       IN      PTR     gns.rac.com.
~
# service named restart
# chkconfig named on

測試
[root@oel1 named]# nslookup gns-server.rac.com
Server:         127.0.0.1
Address:        127.0.0.1#53

Name:   gns-server.rac.com
Address: 192.168.77.95

[root@oel1 named]# nslookup 192.168.77.95
Server:         127.0.0.1
Address:        127.0.0.1#53

95.77.168.192.in-addr.arpa      name = gns-server.rac.com.

DHCP配置部分
[root@oel1 ~]# yum install dhcp

[root@oel1 ~]# cp /usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample /etc/dhcpd.conf
cp: overwrite `/etc/dhcpd.conf'? y
[root@oel1 ~]# vi /etc/dhcpd.conf

ddns-update-style. interim;
ignore client-updates;

subnet 192.168.77.0 netmask 255.255.255.0 {

# --- default gateway
        option routers                  192.168.77.250;
        option subnet-mask              255.255.255.0;

        option nis-domain               "rac.com";
        option domain-name              "rac.com";
        option domain-name-servers      192.168.77.145;

        option time-offset              -18000; # Eastern Standard Time
#       option ntp-servers              192.168.1.1;
#       option netbios-name-servers     192.168.1.1;
# --- Selects point-to-point node (default is hybrid). Don't change this unless
# -- you understand Netbios very well
#       option netbios-node-type 2;

        range dynamic-bootp 192.168.77.193 192.168.77.199;
        default-lease-time 21600;
        max-lease-time 43200;

        # we want the nameserver to appear at a fixed address
        #host ns {
        #       next-server marvin.redhat.com;
        #       hardware ethernet 12:34:56:78:AB:CD;
        #       fixed-address 207.175.42.254;
        #}
}

[root@oel1 ~]# service dhcpd start

[root@oel1 ~]# chkconfig dhcpd on

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

相關文章