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).
The command completed successfully
– 這裡注意:檢視本地監聽器資訊的時候每個節點隻能看到其上運作的執行個體。
SCAN監聽器的注冊是由REMOTE_LISTENER參數控制的,任何執行個體都會向所有的SCAN監聽器注冊:
SQL> show parameter remote_listener
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
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1)))
Alias LISTENER_SCAN1
Uptime 95 days 20 hr. 35 min. 10 sec
Listener Log File /u01/app/11.2.0/grid/log/diag/tnslsnr/pos2/listener_scan1/alert/log.xml
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN1)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.195)(PORT=1521)))
Service "pos" has 2 instance(s).
Instance "pos1", status READY, has 1 handler(s) for this service…
Service "posXDB" has 2 instance(s).
由于任何執行個體啟動都會向所有的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
<txt>18-JUN-2012 13:58:23 * service_register * LsnrAgt * 0
<txt>18-JUN-2012 13:58:30 * service_register * +ASM2 * 0
<txt>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
<txt>16-OCT-2012 16:07:09 * service_update * pos2 * 0
<txt>16-OCT-2012 16:07:33 * service_update * pos2 * 0
<txt>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
<txt>13-AUG-2012 05:25:00 * service_register * LsnrAgt * 0
<txt>13-AUG-2012 20:29:07 * service_register * luocs1 * 0
<txt>13-AUG-2012 20:58:05 * service_register * luocs1 * 0
-- 這是我另一套測試RAC環境。
4)SCAN監聽器動态更新日志:
[grid@rac1 ~]$ grep service_update log.xml | head -3
<txt>13-AUG-2012 20:29:19 * service_update * luocs1 * 0
<txt>13-AUG-2012 20:30:19 * service_update * luocs1 * 0
<txt>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
能夠充分使用SCAN的特性
2
早于11g R2版本
不能充分感受到SCAN特性
3
在伺服器端沒有SCAN的概念
4
這裡稍微詳細說一下第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的時候
(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))
(SERVICE_NAME = luocs10g)
為了確定在早于11g R版本的用戶端負載均衡和失敗切換,我們需要在tnsnames.ora中添加3個SCAN VIP。
3)傳統的RAC用戶端配置方法
先從用戶端正常地解析伺服器所有節點的主機名稱和相應的VIP名稱,最好和服務端/etc/hosts一緻。
當然,我們不解析名稱的情況下還可以使用VIP位址,比如:
LUOCSRAC =
(LOAD_BALANCE = yes)
(FAILOVER = on)
(SERVICE_NAME = luocs)
本地用戶端hosts解析之後,使用名稱:
(ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip.luocs.com)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip.luocs.com)(PORT = 1521))
注意:傳統的用戶端配置方法其實還有多種,這個在這裡不細說。
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
Address: 192.168.77.195
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 {
file "77.168.192.local";
# 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
@ IN SOA dns.luocs.com. root.luocs.com. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
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方式:
然後我們在安裝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";
[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 {
file "77.168.192.local";
[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
@ IN SOA dns.rac.com. root.rac.com. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
145 IN PTR dns.rac.com.
200 IN PTR gns.rac.com.
~
# 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
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