rac環境下vip/public/private IP的區別
在Oracle RAC環境下,每個節點都會有多個IP地址,分別為Public/Private/Vip,這三個IP到底有啥區別呢?分別用在那些場合呢?來看看老外的回答。
1. private IP address is used only for internal clustering processing (Cache Fusion)
私有IP用於心跳同步,這個對於用戶層面,可以直接忽略,簡單理解,這個Ip用來保證兩台服務器同步數據用的私網IP。
2. VIP is used by database applications to enable fail over when one cluster node fails
虛擬IP用於客戶端應用,以支持失效轉移,通俗說就是一台掛了,另一台自動接管,客戶端沒有任何感覺。
這也是為什么要使用RAC的原因之一,另一個原因,我認為是負載均衡。
3. public IP adress is the normal IP address typically used by DBA and SA to manage storage, system and database.
公有IP一般用於管理員,用來確保可以操作到正確的機器,我更願意叫他真實IP。
通過上述解釋,不難理解作為一個DBA,在配置tnsnames.ora時,有些場合是要使用的vip,而有些場合又必須使用public IP。例如,當你在定位一個數據庫的死鎖時,使用public ip,可以確保連到你想處理的機器,相反此時使用虛擬ip時,會出現不確定性,因為服務器默認是開啟負載均衡的,也就是有可能你想連A機,系統卻給你分配了B機。
here is reference:
/etc/hosts
#Publict NIC
10.104.4.31 test1.aaa.com test1
10.104.4.32 test2.aaa.com test2
#Private NIC
192.168.5.31 test1-pn.aaa.com test1-pn
192.168.5.32 test2-pn.aaa.com test2-pn
#oracle Visal NIC for oracle RAC VIP
10.104.4.35 test1-vip.aaa.com test1-vip
10.104.4.36 test2-vip.aaa.com test2-vip
例如:
-
下面的例子就是使用的VIP
- infodb8 =
- (DESCRIPTION =
- (ADDRESS= (PROTOCOL= TCP)(HOST= 138.*.1.81)(PORT= 1521))
- (ADDRESS= (PROTOCOL= TCP)(HOST= 138.*.1.82)(PORT= 1521))
- (LOAD_BALANCE = yes)
- (FAILOVER = ON)
- (CONNECT_DATA =
- (SERVER= DEDICATED)
- (SERVICE_NAME = infodb)
- (FAILOVER_MODE =
- (TYPE= SELECT)
- (METHOD= BASIC)
- (RETRIES = 30)
- (DELAY = 5)
- )
- ))
- 下面的例子就是使用的Public IP,指定連接1機,注意紅色字體infodb1進一步限制連接的實例。
- INFODB83 =
- (DESCRIPTION =
- (ADDRESS_LIST =
- (ADDRESS= (PROTOCOL= TCP)(HOST= 138.*.1.83)(PORT= 1521))
- )
- (CONNECT_DATA =
- (SERVICE_NAME = infodb)
- (INSTANCE_NAME = infodb1)
- )
- (HS = OK)
- )
-
Oracle 11gR2 SCAN 詳解--Alan.Lee原創,轉載請注明出處 www.dbaleading.com
在Oracle 11gR2以前,如果數據庫采用了RAC架構,在客戶端的tnsnames中,需要配置多個節點的連接信息,從而實現諸如負載均衡,failover等等 RAC的特性。因此,當數據庫RAC集群需要添加或刪除節點時,需要及時對客戶端機器的tns進行更新,以免出現安全隱患。
在11gR2中,為了簡化該項配置工作,引入了SCAN(Single Client Access Name)的特性,該特性的好處在於,在數據庫與客戶端之間,添加了一層虛擬的服務層,就是所謂的scan ip以及scan ip listener,在客戶端僅需要配置scan ip的tns信息,通過scan ip listener,連接后台集群數據庫。這樣,不論集群數據庫是否有添加或者刪除節點的操作,均不會對client產生影響。
下面,具體介紹下SCAN(Single Client Access Name)的架構以及配置。
首先,簡要的看下在11gR2中,安裝RAC發生的巨大變化,在10g以及11gR1的時代,安裝RAC的步驟是先安裝CRS,再安裝DB,而到了 11gR2的時代,crs與asm被集成在一起,合稱為GRID,必須先安裝GRID后,才能繼續安裝DB,否則,你就跟11gR2的RAC無緣咯,呵 呵。
而被11gR2引入的SCAN,就是包含在安裝grid的過程中。SCAN的定義,有兩種途徑:
1. 在DNS中定義域名。
2. 通過oracle提供的Grid Naming Server(GNS)實現DHCP自定義。
如果通過dns來定義,則需要在網絡中定義3個SCAN IP地址,指向同一個域名,這3個ip地址必須處於同一個子網內,同時域名不能太長,否則您打字也麻煩不是,哈哈。另外,SCAN IP是由oracle clusterware管理的,因此在主機的集群軟件(如IBM HACMP,HP SERVICE GUARD)中不能將此ip配置進去,類似於10g中的vip,在grid安裝前,此IP是無法ping通的。
范例:
scan-ip.dbaleading.com IN A 192.168.1.111
IN A 192.168.1.112
IN A 192.168.1.113
如果使用GNS的方式,則必須有DHCP服務,在cluster的配置過程中,將會自動向DHCP服務器申請3個IP地址作為SCAN IP使用。除了SCAN IP,在cluster的配置過程中,SCAN IP LISTENER服務也會被建立,每個SCAN IP對應一個SCAN IP LISTENER,並且,為了提升高可用性,3個SCAN IP以及其對應的SCAN IP LISTENER將被獨立的分配到各個節點上。如果cluster中其中某個運行scan ip的節點出現異常,則其余兩個正常的scan ip節點將自動接管。注意,此處有個注意點,如果客戶端是11gR2的版本,則客戶端只需在tns中配置域名解析,即可實現failover,如果客戶端 版本低於11gR2,則無法通過域名解析出3個SCAN IP地址,因此如果要實現failover,必須在客戶端的tns中配置3個SCAN IP的地址進行解析,這也是為何oracle強烈建議在使用11gR2數據庫時,客戶端也最好使用11gR2的原因。
范例:
$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
$srvctl config scan
SCAN name: scan-ip, Network: 1/192.168.1.0/255.255.255.0/
SCAN VIP name: scan1, IP: /scan-ip.dbaleading.com/192.168.1.111
SCAN VIP name: scan2, IP: /scan-ip.dbaleading.com/192.168.1.112
SCAN VIP name: scan3, IP: /scan-ip.dbaleading.com/192.168.1.113
上回中,介紹了 11gR2中 SCAN IP的配置,以及 SCAN IP LISTENER的配置及其作用。本章中,我們來詳細了解下,SCAN IP在數據庫中的配置方法,以及如何用SCAN IP,配置oracle所謂的自動負載平衡(該功能的實際使用,我們將在后續的章節中詳細討論)。
看了第一篇中的SCAN IP介紹,相信很多朋友都有這樣一個疑問,既然SCAN IP是跟數據庫instance無關的,例如一個12節點的RAC或者24節點的RAC,都只有3個SCAN IP,並且SCAN IP是隨機分布在各個instance的,那么,SCAN IP LISTENER如何監聽各個節點的數據庫呢,同時,該怎么配置哪個instance去哪個SCAN IP LISTENER注冊呢。下面將一一解答。
首先,補充一個概念,在11gR2中,SCAN IP是作為一個新增IP出現的,原有的CRS中的VIP仍然存在,從這里,就能看出一點端倪,在11gR2的RAC架構中,SCAN IP並非獨立存在的,而是和原有的 VIP結合在一起的。那么他們是如何工作的呢,先來看下下面這個工作原理圖:
從這個原理圖,可以看出,scan ip其實是ora cle在客戶端與數據庫之間,新加的一個連接層,當有客戶端訪問時,連接到 SCAN IP LISTENER, 而SCAN IP LISTENER接收到連接請求時,會根據 LBA 算法(所謂LBA算法,就是least loaded instance),將該客戶端的連接請求,轉發給對應的instance上的VIP LISTENER,從而完成了整個客戶端與服務器的連接過程。簡化如下:
client -> scan listener -> local listener -> local instance了解了這個過程以后,對SCAN IP的整體架構,就全部清楚了。剩下的,我們再來講一些技術細節。
SCAN IP 和 SCAN LISTENER是獨立於RAC的各個節點的,而每個節點的 VIP , VIP LISTENER是跟instance綁定的,每個節點的VIP LISTENER,會監聽自己所屬節點的instance。因此,在數據庫中,我們需要設置remote_listener參數,這個參數設置很有講究,因為scan ip有3個,scan listener也有三個,但是他們對應的是同一個域名,因此,在數據庫中,我們需要使用easy connect naming method方式,就是在sqlnet.ora的配置文件中,必須有NAMES.DIRECTORY_PATH= (tnsnames,ezconnect)存在。
另外,配置remote_listener的方式也有講究,以前的版本中,我們通常是在tnsnames.ora中寫好remote_listener的 地址以及端口,但是對於scan listener,不能這么做,必須按照標准格式,設置成REMOTE_LISTENER=SCAN:PORT的形式,以我的測試系統為例,就是 REMOTE_LISTENER=scan-ip.dbaleading.com:1521,而不需要在tnsnames.ora中進行額外設置。
經過以上設置后,RAC數據庫的每個節點的PMON進程,會用廣播的方式向每個SCAN LISTENER進行注冊,同時CRS的后台進程ONS,會采集各個節點的負載狀況,通知scan listener,以便scan listener根據負載情況,將新連接分配到當前負載最低的節點上。
以上,就是11gR2 RAC中,新增的SCAN IP 以及 SCAN LISTENER的全部內容了,在下面一章中,我們將針對該新特性,開展一些拓展性的思考以及討論。 - 附錄:
- 其實在RAC環境, 網卡是工作在混雜模式的, 就像tcpdump那樣, 會把發給所有地址的包都抓進來.
- 每個節點兩個網卡,一個設置公共IP,一個設置私有的IP
在hosts文件里面要把兩個節點共6個IP都要寫進去 - VIP是不用綁的,ORACLE安裝自己會綁的,只需要綁PUBLIC和PRIVATE就可以
- Create an Oracle RAC 10g R2 using VMware Workstation 5
- http://www.idevelopment.info/data/Oracle/DBA_tips/VMware_Workstation_50/VMWARE_31.shtml
