結構如下:
說明:
節點IP,主機名的修改步驟來自ORACLE support文檔:
如何修改集群的公網信息(包括 VIP) (文檔 ID 1674442.1)
實驗環境情況如下:
實驗 |
節點名稱 |
數據庫實例名 |
操作系統 |
數據庫版本 |
公網IP/vip修改 |
rac1/rac3(舊機器) |
ogg1/ogg3 |
Linux 6.X |
Oracle 11.2.0.4 |
公網網卡/vip網卡修改 |
rac1/rac2(新機器) |
orcl1/orcl2 racdb1/racdb2 |
Linux 6.X |
|
Private IP/網卡修改 |
rac1/rac2(新機器) |
orcl1/orcl2
|
Linux 6.X |
grid:GRID_HOME 名稱為 ORACLE_HOME 路徑為:/u01/app/11.2.0/grid
oracle:ORACLE_HOME 路徑為:/u01/app/oracle/product/11.2.0/dbhome_1
注意:
在我們修改RAC的IP 地址之前,我們需要先備份一下OCR 和GPNP profile 文件,因為IP 地址信息是記錄在OCR中的,從Oracle 11.2.0.2 之后,private network 的配置除了記錄在OCR中之外,還會記錄在GPNP profile里。
--任意一節點手工執行OCR的備份
[root@rac1 ~]# /u01/app/11.2.0/grid/bin/ocrconfig -manualbackup
查看ocr的手工備份:
[root@rac1 ~]# /u01/app/11.2.0/grid/bin/ocrconfig –showbackup
用grid用戶兩個節點執行備份:
$ cd $ORACLE_HOME/gpnp/`hostname`/profiles/peer/
$ cp -p profile.xml profile.xml.bak
1. 修改公網對應的主機名
1. 步驟
集群公網對應的主機名是在安裝時輸入的,並且被記錄在 OCR 中。這個主機名在安裝之后是不能修改的。唯一的修改方法是刪除節點,修改主機名,之后將節點重新添加到集群,或者直接重新安裝集群軟件,並完成后續的克隆配置。
2. 只修改公網 IP或者VIP
注意:
以下的修改可以使用滾動的方式完成,例如:每次修改一個節點。
只修改公網 IP或者VIP,但是不修改網卡、子網或網絡掩碼信息,或者只是修改MAC地址,而不需要修改其他信息;
如果只需要修改公網 IP 地址或者VIP,而且新的地址仍然在相同的子網和相同的網絡接口上,或者只是修改公網IP的MAC地址,IP/interface/subnet/netmask仍舊保持不變,集群層面不需要做任何修改,所有需要的修改是在OS層面反映IP地址的變化。
1. 關閉 Oracle 集群管理軟件
1、關閉監聽
grid可以分別執行lsnrctl stop
2、關閉數據庫
srvctl stop database -d ogg
3、關閉集群軟件
所有節點ROOT關閉:
/u01/app/11.2.0/grid/bin/crsctl stop has
2. 修改
在網絡層面,DNS和/etc/hosts文件中修改IP地址,或者直接修改MAC地址
查看IP詳細情況:
# racdg1
172.16.10.220 racdg1
172.16.10.222 racdg1-vip
192.168.10.220 racdg1-priv
# scan-ip
172.16.10.225 scandg-vip
# racdg3
172.16.10.231 racdg3
172.16.10.232 racdg3-vip
192.168.10.231 racdg3-priv
1. 現在需要修改成:
# racdg1
172.16.10.200 racdg1
172.16.10.202 racdg1-vip
192.168.10.220 racdg1-priv
# scan-ip
172.16.10.225 scandg-vip
# racdg3
172.16.10.211 racdg3
172.16.10.212 racdg3-vip
192.168.10.231 racdg3-priv
2. 以及網卡信息也進行修改
vi /etc/sysconfig/network-scripts/ifcfg-bond0
IPADDR=XXX
3. 重新啟動 Oracle 集群管理軟件
ROOT啟動:
/u01/app/11.2.0/grid/bin/crsctl start has
查看修改后的IP以及集群資源狀態:
由於我是公有IP 和VIP一起修改,VIP 節點1,節點3都正常。
節點1:
節點3:
節點PUBLIC,VIP修改成功。
3. 改公網網卡(子網或網絡掩碼信息)
1. 說明
注意:
如果修改涉及到了不同的子網(網絡掩碼)或者網卡,需要將 OCR 中已經存在的網卡信息刪除並重新添加新的信息。在以下的示例中子網從 172.16.10.X修改為 172.16.20.X,需要執行兩個步驟 –首先’delif’,接下來 ‘setif’:
然后,在操作系統層面進行修改。除非 OS 層面的修改需要重新啟動節點,否則不需要重啟 Oracle 集群管理軟件。修改可以使用滾動的方式完成。
一旦公網信息被修改,與其相關的 VIP 和 SCAN VIP 也需要修改,請參考情況4和情況5。
2. 修改
情況介紹:
節點1運行的VIP,SCAN-IP,PUBLIC如下:
節點2運行的VIP,PUBLIC IP如下:
現在需要修改成公有網卡的信息如下(早就准備好網卡和IP):
節點1:
節點2:
即把原先172.16.10.X換成,172.16.20.X。
對於ORACLE 11G R2.需要兩個節點執行以下,命令,且由於更改后,VIP,SCAN-IP都需要相應的修改成對於網卡的網段IP,數據庫不需要停,但是業務用不了VIP,所以還是建議停止數據庫。
SUPPORT官方模板如下:
% $CRS_HOME/bin/oifcfg/oifcfg delif -global <if_name>[/<subnet>]
% $CRS_HOME/bin/oifcfg/oifcfg setif -global <if_name>/<subnet>:public
例如:
% $CRS_HOME/bin/oifcfg delif -global eth0/10.2.156.0
% $CRS_HOME/bin/oifcfg setif -global eth0/10.2.166.0:public
以下操作步驟:
- 停止數據庫
srvctl stop database -d racdb
- 修改公網網卡
查看信息:
/u01/app/11.2.0/grid/bin/oifcfg iflist
修改:(先刪除,在添加,這里IP 地址最一個為0,代表的是一個網段。)
注意: 11gR2,刪除命令要求集群在所有節點運行,否則報錯PRIF-33 和 PRIF-32。
l 節點1刪除:
/u01/app/11.2.0/grid/bin/oifcfg delif -global eth0/172.16.10.0
l 節點2刪除;
l 節點1和節點2添加公網網卡:
/u01/app/11.2.0/grid/bin/oifcfg setif -global eth2/172.16.20.0:public
/u01/app/11.2.0/grid/bin/oifcfg setif -global eth2/172.16.20.0:public
修改后驗證:
節點1:
/u01/app/11.2.0/grid/bin/oifcfg getif -global
節點2:
/u01/app/11.2.0/grid/bin/oifcfg getif –global
修改成功(后續還需要修改VIP,SCAN-IP)。
4. 修改 VIP 相關的公網信息
1. 說明
一般而言,只有 10.2.0.3 之前的版本需要完全的停機。從 10.2.0.3 開始,ASM 和數據庫實例對 VIP 資源的依賴關系已經被刪除,所以修改 VIP 不需要停止 ASM 和數據庫實例,只有當修改 VIP 時產生的客戶端連接會受影響。如果修改只涉及到特定的節點,那么只有連接到對應節點的客戶端鏈接在修改時會受影響。
首先,請參考情況3以確保公網信息被修改。如果在 OS 層面的網絡修改后發生了節點或者集群管理軟件重啟,VIP 將不會被啟動,請跳過步驟“修改 VIP 和相關屬性”。
2. 修改步驟
11g RAC R2修改如下
1、查看節點1,節點2 VIP相關公網信息
節點1:
節點2:
版本 10g 和 11gR1, 使用 Oracle 集群管理軟件的擁有者執行下面的命令:
$ srvctl config nodeapps -n <node> -a
例如:
$ srvctl config nodeapps -n racnode1 -a
VIP exists.: /racnode1-vip/101.17.80.184/255.255.254.0/eth1
2、查看VIP 狀態
crsctl stat res -t
3、停止 nodeapps 資源 (如果有必要的話,停止存在依賴關系的 ASM 和數據庫資源):
對於版本 10g 和 11gR1, 使用 Oracle 集群管理軟件的擁有者執行下面的命令:
$ srvctl stop instance -d <db_name> -i <inst_name> (對於 10.2.0.3 及以上版本,可以忽略)
$ srvctl stop asm -n <node_name> (對於 10.2.0.3 及以上版本,可以忽略)
$ srvctl stop nodeapps -n <node_name>
例如:
$ srvctl stop instance -d RACDB -i RACDB1
$ srvctl stop asm -n racnode1
$ srvctl stop nodeapps -n racnode1
對於版本 11gR2, 使用 Grid Infrastructure 的擁有者執行下面的命令:
$ srvctl stop instance -d <db_name> -n <node_name> (可以忽略)
$ srvctl stop vip -n <node_name> -f
例如:
$ srvctl stop instance -d RACDB -n racnode1
$ srvctl stop vip -n racnode1 -f (11gR2需要使用 -f 選項停止 listener 資源,否則會報錯誤)
由於我的數據庫已經停止,直接停止節點vip資源。
srvctl stop vip -n rac1 -f
srvctl stop vip -n rac2 -f
查看:
停止成功。
4. 確定新的 VIP 地址/子網/網絡掩碼或者 VIP 對應的主機名,在 OS 層面修改網絡配置信息,確認新的 VIP 地址應經注冊到 DNS 或者確認 /etc/hosts 文件(Unix/Linux 平台),\WINDOWS\System32\drivers\etc\hosts 文件(Windows平台)已經被修改。如果網卡信息被修改,確認在修改之前新的網卡在服務器上已經可用。
原來VIP:
現在修改成:
5、使用 root 用戶修改 VIP 資源
# srvctl modify nodeapps -n <node> -A <new_vip_address or new_vip_hostname>/<netmask>/<[if1[if2...]]>
例如:
# srvctl modify nodeapps -n racnode1 -A racnode1-nvip/255.255.255.0/eth2
注意 1:
從版本 11.2 開始,VIP 依賴於 network 資源(ora.net1.network),OCR 只記錄 VIP 主機名或者 VIP 資源相關的 IP 地址。集群公網的屬性(子網/網絡掩碼)通過網絡資源記錄。當 nodeapps 資源被修改后,network資源(ora.net1.network)相關的屬性也會隨之被修改。
從 11.2.0.2 開始,如果只修改子網/網絡掩碼信息,網絡資源可以通過以下的 srvctl modify network 命令直接修改。
使用 root 用戶:
# srvctl modify network -k <network_number>] [-S <subnet>/<netmask>[/if1[|if2...]]
例如:
# srvctl modify network -k 1 -S 110.11.70.0/255.255.255.0/eth2
如果其他屬性沒有變化,不需要修改 VIP 或 SCAN VIP。
注意 2:
在12.1.0.1的版本上由於Bug 16608577 - CANNOT ADD SECOND PUBLIC INTERFACE IN ORACLE 12.1 ,srvctl modify network 的命令會失敗並提示:
# srvctl modify network -k 1 -S 110.11.70.0/255.255.255.0/eth2
PRCT-1305 : The specified interface name "eth2" does not match the existing network interface name "eth1"
需要通過以下workaround來解決:
# srvctl modify network -k 1 -S 110.11.70.0/255.255.255.0
# srvctl modify network -k 1 -S 110.11.70.0/255.255.255.0/eth2
11G R2修改VIP如下;
幫助命令:
/u01/app/11.2.0/grid/bin/srvctl modify nodeapps -n rac1 -h
修改如下:
節點1:
/u01/app/11.2.0/grid/bin/srvctl modify nodeapps -n rac1 -A rac1-vip/255.255.255.0/eth2
節點2:
/u01/app/11.2.0/grid/bin/srvctl modify nodeapps -n rac2 -A rac2-vip/255.255.255.0/eth2
查看修改:
/u01/app/11.2.0/grid/bin/srvctl config nodeapps -a
節點1:
節點2:
修改成功。
3. 11gR2 修改 VIP 主機名
11gR2 修改 VIP 主機名,但是不修改IP地址;如果即需要修改VIP,又需要修改主機名,建議先修改IP,再修改主機名。
只把 VIP 主機名從 racnode1-vip 修改為 racnode1-nvip,IP 地址和其他屬性保持不變。
如果 IP 地址保持不變,以上的命令將不會改變命令‘crsctl stat res ora.racnode1.vip -p’的輸出中項目 USR_ORA_VIP 的值。請使用下面的命令:
# crsctl modify res ora.racnode1.vip -attr USR_ORA_VIP=racnode1-nvip
驗證項目 USR_ORA_VIP 的改變:
# crsctl stat res ora.racnode1.vip -p |grep USR_ORA_VIP
實驗室把:rac1-vip,rac2-vip改成:rac1vip,rac2vip
操作如下:
crsctl stat res -t
$ srvctl stop instance -d <db_name> -n <node_name> (可以忽略)
$ srvctl stop vip -n <node_name> -f
操作如下:
[grid@rac2 ~]$ srvctl stop database -d orcl
[grid@rac2 ~]$ srvctl stop vip -n rac1 -f
[grid@rac2 ~]$ srvctl stop vip -n rac2 -f
crsctl stat res -t
任意一節點修改VIP:
/u01/app/11.2.0/grid/bin/crsctl modify res ora.rac1.vip -attr USR_ORA_VIP=rac1vip
/u01/app/11.2.0/grid/bin/crsctl modify res ora.rac2.vip -attr USR_ORA_VIP=rac2vip
驗證修改VIP-HOSTNAME是否成功:
/u01/app/11.2.0/grid/bin/crsctl stat res ora.rac1.vip -p |grep USR_ORA_VIP
/u01/app/11.2.0/grid/bin/crsctl stat res ora.rac2.vip -p |grep USR_ORA_VIP
修改所有節點/etc/hosts
修改后結果:
啟動VIP:
srvctl start vip -n rac1
srvctl start vip -n rac2
查看修改后的結果:
修改成功。
4. 啟動 nodeapps 和其它資源
對於版本 10g 和 11gR1, 使用 Oracle 集群管理軟件的擁有者執行下面的命令:
$ srvctl start nodeapps -n <node_name>
$ srvctl start asm -n <node_name> (對於 10.2.0.3 及以上版本,可以忽略)
$ srvctl start instance -d <dbanme> -i <inst> (對於 10.2.0.3 及以上版本,可以忽略)
例如:
$ srvctl start nodeapps -n racnode1
$ srvctl start asm -n racnode1
$ srvctl start instance -d RACDB -i RACDB1
對於版本 11gR2, 使用 Grid Infrastructure 的擁有者執行下面的命令:
$ srvctl start vip -n <node_name>
$ srvctl start listener -n <node_name>
$ srvctl start instance -d <db_name> -n <node_name> (可以忽略)
例如:
$ srvctl start vip -n racnode1
$ srvctl start listener -n racnode1
$ srvctl start instance -d RACDB -n racnode1
[grid@rac1 peer]$ srvctl start vip -n rac1
[grid@rac1 peer]$ srvctl start vip -n rac2
注意:如果網絡的屬性做了修改,比如netmask 等做了修改,需要重新啟動nodeapps
驗證新的 VIP 狀態為 ONLINE 並且已經綁定到集群公網網卡
$ crs_stat -t (對於版本 11gR2,使用命令 $ crsctl stat res –t)
$ ifconfig -a
(HP 平台請使用 netstat –in, Windows 平台請使用 ipconfig /all)
如果集群中的其它節點也需要類似的改變,請重復同樣的步驟。
其它
如果需要,修改 listener.ora, tnsnames.ora 和 LOCAL_LISTENER/REMOTE_LISTENER 參數反應 VIP 的改變。
注意: ASM和DB實例的LOCAL_LISTENER參數,是GI自動設置的。VIP的改變,LOCAL_LISTENER會自動識別,並生效。但是由於Bug 22824602,一些特定情況下。 LOCAL_LISTENER參數沒有反應 VIP 的改變。workaround解決方法是重啟受影響的節點的集群軟件。
5. 修改SCAN-IP
注意: 文檔來自SUPPORT ID 952903.1(本次只是修改SCAN IP,不修改SCAN端口)
1、停止資源
$ $GRID_HOME/bin/srvctl stop scan_listener
$ $GRID_HOME/bin/srvctl stop scan
查看:
停止成功。
2、修改SCAN IP
查看之前的SCAN:
/u01/app/11.2.0/grid/bin/srvctl config scan
修改SCAN IP:
修改所有/etc/hosts scan-ip
/u01/app/11.2.0/grid/bin/srvctl modify scan -n scan-vip (一邊修改即可)
查看是否修改成功:
節點1:
節點2:
修改成功。
啟動SCAN到節點1
srvctl start scan -n rac1
crsctl stat res -t
6. 更改私有主機名
文檔來自support ID 2103317.1,在 11.2 oracle clusterware 之前的版本,私有主機名被記錄在 OCR 中, 它不能被更改,一般情況下私有主機名是不需要改變的,它附屬的ip 可以被更改,只有使用刪除/添加節點或重新安裝 oracle clusterware 來更改私有主機名。
在 11.2 Grid 結構中,私有主機名不在記錄在 OCR 中,並且不存在依賴關系,所以它可以在 /etc/hosts 文件中任意更改。
7. 只更改私有 ip 地址
只更改私有 ip 地址不更改網卡、子網及子網掩碼信息,不更改網卡、子網及子網掩碼信息。
私有 ip
節點1地址 192.168.10.21 更改至 192.168.10.31;
節點2地址:192.168.10.22 更改至 192.168.10.32;
網卡名字及子網保持不變。或者只改變MAC地址,保持private IP address/interface name/subnet/network不變
只要關閉需要更改主機上的 oracle clusterware 軟件,在操作系統層,根據需求更改私有 ip 地址或者MAC地址(如:/etc/hosts,OS network config 等等), 再重啟啟動 oracle clusterware 軟件即可。
查看當前的私有IP地址:
兩個節點關閉數據后,關閉集群資源,操作系統層面修改IP。
/u01/app/11.2.0/grid/bin/crsctl stop has ROOT停止集群資源,然后修改IP,重啟網絡服務
service network restart
/u01/app/11.2.0/grid/bin/crsctl start has 啟動集群服務
查看修改是否成功:
節點1:
節點2:
修改成功。
8. 只改變私有網絡的 MTU 值
將私有網絡 MTU 值從1500更改至9000(激活 jumbo frame),網卡名字保持不變。
1. 關閉集群中的所有節點。
2. 在操作系統層更改 MTU 需要設定的值,確保更改后 MTU 值的私有網卡可用並且可以 ping 通集群中的所有節點。
3. 重啟所有節點的集群管理軟件
9. 更改私有網卡名字,子網及掩碼
提示:當子網掩碼被更改,但是子網標識沒有改變時,如:
子網掩碼從 255.255.0.0 更改至 255.255.255.0,私網 ip 為 192.168.10.x,子網標識保持不變 192.168.10.0,網卡名字沒有改變.關閉所有需要更改的主機 oracle clusterware,在操作系統層修改私有網絡IP地址(如:操作系統 網絡配置等等)。並重啟集群中所有節點,請注意,這種更改是不能采用輪轉方式(rolling manaer)完成的。
當子網掩碼被改變,附屬的子網標識也經常會被改變,oracle 在 OCR 中只存儲網卡名字及子網標識的信息,而不存儲子網掩碼。可以使用oifcfg命令完成這樣的變更,oifcfg 命令只需在集群中的一個節點執行,而不是所有節點。
1. 11gR2以前的集群管理軟件
1. 使用 oifcfg 命令添加新的私有網絡信息,刪除舊的私有網絡信息:
% $ORA_CRS_HOME/bin/oifcfg/oifcfg setif -global <if_name>/<subnet>:cluster_interconnect
% $ORA_CRS_HOME/bin/oifcfg/oifcfg delif -global <if_name>[/<subnet>]]
舉例:
% $ORA_CRS_HOME/bin/oifcfg setif -global eth3/192.168.2.0:cluster_interconnect
% $ORA_CRS_HOME/bin/oifcfg delif -global eth1/192.168.1.0
校驗結果
% $ORA_CRS_HOME/bin/oifcfg getif
eth0 10.2.166.0 global public
eth3 192.168.2.0 global cluster_interconnect
2. 關閉 Oracle Clusterware
使用 root 用戶執行: # crsctl stop crs
3. 在操作系統層面更改網絡配置,修改集群內所有節點的 /etc/hosts 文件,確保集群內所有節點新的網絡設置都已生效:
% ping <private hostname/IP>
% ifconfig -a on Unix/Linux
或
% ipconfig /all on windows
4. 重新啟動 Oracle Clusterware
以 root 用戶:# crsctl start crs
提示:如果在 linux 系統上正在運行 OCFS2,則可能還需要更改 OCFS2 運行在其它節點的私有 ip 地址
2. 11gR2和12c上沒有使用flex ASM 的版本
針對於 11.2 的結構,私有網絡配置信息不但保存在 OCR 中,而且還保存在 gpnp 屬性文件中。如果私有網絡不可用或定義錯誤,則 CRSD 進程將無法啟動,任何隨后對於 OCR 的改變都是不可能完成的,因此需要注意當對私有網絡的配置信息進行修改,正確的改變順序是非常重要的。同時請注意,手動修改 gpnp 屬性文件是不支持的。
在對集群中所有節點操作之前,請先備份 profile.xml 配置文件。作為 grid 用戶執行:
用grid用戶兩個節點執行備份(首頁也說過的):
$ cd $ORACLE_HOME/gpnp/`hostname`/profiles/peer/
$ cp -p profile.xml profile.xml.bak
- 確保集群中的所有節點都已啟動並正常運行
[grid@rac1 ~]$ crsctl stat res –t
- 使用 grid 用戶獲取網卡
$ oifcfg getif
節點1:
節點2:
都是用的eth1網卡,192.168.10.0 網段。
- 現在要把私有網卡修改成:eth3/192.168.20.0(注意,都是先添加,后刪除,官方沒有說那個節點執行,測試只需要一個節點執行,且網卡名稱要所有節點一樣)
節點1,節點2加入新的集群私網通訊信息:
$ oifcfg setif -global <interface>/<subnet>:cluster_interconnect
節點1:
oifcfg getif
oifcfg setif -global eth3/192.168.20.0:cluster_interconnect
oifcfg getif
節點2:
oifcfg setif -global eth3/192.168.20.0:cluster_interconnect
oifcfg getif
以下是官方模板命令:
例如:
a. 加入新的並有相同子網的接口卡 bond0
$ oifcfg setif -global bond0/192.168.0.0:cluster_interconnect
b. add a new subnet with the same interface name but different subnet or new interface name
$ 添加一個新的子網具有相同網卡的名稱但不同的子網或新的網卡名
或
$ oifcfg setif -global eth3/192.168.1.96:cluster_interconnect
注意:
1. 如果網卡不可用,需要使用 -global 選項來完成,而不能使用 –node 選項,它將導致節點被驅逐。
2. 如果網卡在服務器上可用,則可以使用下面命令識別子網地址:
$ oifcfg iflist
它列出了網卡及子網地址,即使 oracle 集群沒有啟動,此命令也可以被執行。請注意,子網掩碼有可能不是 x.y.z.0 的格式,它可以是 x.y.z.24,x.y.z.64 或 x.y.z.128 等格式。如:
$ oifcfg iflist
lan1 18.1.2.0
lan2 10.2.3.64 << 這是一個私有網絡子網地址附屬的私有網絡 ip 地址為 10.2.3.86
3. 如果需要添加第二個私有網絡,而不是替換現有的私有網絡,則需要保證兩個網卡的 MTU 值相同,否則實例將無法啟動並報如下錯誤信息:
ORA-27504: IPC error creating OSD context
ORA-27300: OS system dependent operation:if MTU failed with status: 0
ORA-27301: OS failure message: Error 0
ORA-27302: failure occurred at: skgxpcini2
ORA-27303: additional information: requested interface lan1:801 has a different MTU (1500) than lan3:801 (9000), which is not supported. Check output from ifconfig command
4. 對於 11gR2 或更高版本, 不建議在 ASM 或 database 的 spfile 或 pfile 中設置 cluster interconnects 參數。無論什么原因如果設置了該參數,則需要在集群關閉之前需將新的私網 ip 地址設置在 spfile 或 pfile 中,否則它會由於私網信息不匹配而導致重啟失敗。
- 使用 root 用戶關閉集群中所有的節點並禁用集群:
節點1,2執行以下命令:
/u01/app/11.2.0/grid/bin/crsctl stop crs
/u01/app/11.2.0/grid/bin/crsctl disable crs
- 使網絡配置信息都已在 OS 層更改完成,確保更改完成后新的接口在所有的節點都可用有效:
1.修改所有節點/etc/hosts 文件。
2.OS所有節點修改私網IP
准備好所有節點即將更改的私有網卡,並且配置好即將修改的私有地址(OS層提前修改好)。
- 使用 root 用戶激活 oracle 集群並重新啟動集群中的所有節點:
/u01/app/11.2.0/grid/bin/crsctl enable crs
/u01/app/11.2.0/grid/bin/crsctl start crs
節點1:
節點2:
- 如果需要去除舊接口卡信息:
$ oifcfg delif -global <if_name>[/<subnet>]
任意一節點執行:
例如節點2:
oifcfg delif -global eth1/192.168.10.0
oifcfg getif
節點1查看:
oifcfg getif
3. 對於 12C flex ASM 結構(support 原文,沒有環境測試)
請檢查上面部分,並關注提示部分,按下面命令做備份:
在對集群中所有節點操作之前,請先備份 profile.xml 配置文件。 作為 grid 用戶執行:
$ cd $GRID_HOME/gpnp/<hostname>/profiles/peer/
$ cp -p profile.xml profile.xml.bk
1. 確保 oracle 集群中的所有節點都已正常運行。
2. 使用 grid 用戶:
得到現有信息,如下:
$ oifcfg getif
eth1 100.17.10.0 global public
eth0 192.168.0.0 global cluster_interconnect,asm
上面例子顯示網卡 ech0 被用作集群私網和 ASM 網絡。
加入新的集群私網信息:
$ oifcfg setif -global <interface>/<subnet>:cluster_interconnect[,asm]
如:
a. 加入一個新的具有相同子網網卡 bond0
$ oifcfg setif -global bond0/192.168.0.0:cluster_interconnect,asm
b. 加入一個新的並具有相同網卡名字的子網,或不同子網和具有新的接口名字
$ oifcfg setif -global eth0/192.68.10.0:cluster_interconnect,asm
或
$ oifcfg setif -global eth3/192.168.1.96:cluster_interconnect,asm
如果有不同的網絡用於私有網絡和 ASM 網絡,則可以對其進行相應的調整。
3. 當 ASMLISTENER 正被用作私有網絡,如果對其修改則會影響 ASMLISTENER。需要添加一個新的 ASMLISTENER 及新的網絡配置。如果 ASM 的子網網絡沒有改變則跳過這一步。
3.1. 加入一個新的 ASMLISTENE(例:ASMNEWLISNR_ASM)及新的子網,使用 grid 用戶:
$ srvctl add listener -asmlistener -l <new ASM LISTENER NAME> -subnet <new subnet>
如:
$ srvctl add listener -asmlistener -l ASMNEWLSNR_ASM -subnet 192.168.10.0
3.2. 刪除現有的 ASMLISTENER(這個例子中 ASMLSNR_ASM)並去除依賴關系,使用 grid 用戶:
$ srvctl update listener -listener ASMLSNR_ASM -asm -remove -force
$ lsnrctl stop ASMLSNR_ASM
注意. 需要使用 –force 選項,否則會出現下面錯誤:
$ srvctl update listener -listener ASMLSNR_ASM -asm -remove
PRCR-1025 : Resource ora.ASMLSNR_ASM.lsnr is still running
$ srvctl stop listener -l ASMLSNR_ASM
PRCR-1065 : Failed to stop resource ora.ASMLSNR_ASM.lsnr
CRS-2529: Unable to act on 'ora.ASMLSNR_ASM.lsnr' because that would require stopping or relocating 'ora.asm', but the force option was not specified
3.3 校驗配置信息:
$ srvctl config listener -asmlistener
$ srvctl config asm
4. 使用 root 用戶關閉集群中的所有節點並禁用集群:
# crsctl stop crs
# crsctl disable crs
5. 在操作系統層面更改網絡配置,更改之后,確保所有節點上的新網卡生效:
$ ifconfig -a
$ ping <private hostname>
6. 使用 root 用戶激活 oracle 集群並重新啟動集群中的所有節點:
# crsctl enable crs
# crsctl start crs
7. 刪除舊的網卡信息:
$ oifcfg delif -global <if_name>[/<subnet>]
如:
$ oifcfg delif -global eth0/192.168.0.0
10.關於 11gR2 的一些注意事項
1. 關於 11gR2 的一些注意事項
1. 如果底層網絡配置已經更改, 但是 oifcfg 尚未執行同樣的變更,則重啟 oracle 集群會導致 crsd 進程不能啟動。
crsd.log 日志將會顯示如下:
2010-01-30 09:22:47.234: [ default][2926461424] CRS Daemon Starting
..
2010-01-30 09:22:47.273: [ GPnP][2926461424]clsgpnp_Init: [at clsgpnp0.c:837] GPnP client pid=7153, tl=3, f=0
2010-01-30 09:22:47.282: [ OCRAPI][2926461424]clsu_get_private_ip_addresses: no ip addresses found.
2010-01-30 09:22:47.282: [GIPCXCPT][2926461424] gipcShutdownF: skipping shutdown, count 2, from [ clsinet.c : 1732], ret gipcretSuccess (0)
2010-01-30 09:22:47.283: [GIPCXCPT][2926461424] gipcShutdownF: skipping shutdown, count 1, from [ clsgpnp0.c : 1021], ret gipcretSuccess (0)
[ OCRAPI][2926461424]a_init_clsss: failed to call clsu_get_private_ip_addr (7)
2010-01-30 09:22:47.285: [ OCRAPI][2926461424]a_init:13!: Clusterware init unsuccessful : [44]
2010-01-30 09:22:47.285: [ CRSOCR][2926461424] OCR context init failure. Error: PROC-44: Error in network address and interface operations Network address and interface operations error [7]
2010-01-30 09:22:47.285: [ CRSD][2926461424][PANIC] CRSD exiting: Could not init OCR, code: 44
2010-01-30 09:22:47.285: [ CRSD][2926461424] Done.
以上錯誤顯示操作系統層面的設置(oifcfg iflist)與 gpnp profile.xml 配置文件設置不匹配。
解決方法:恢復操作系統網絡配置到最初的狀態,啟動 oracle 集群,然后再按照上面的步驟重新更改。
如果底層的網絡並沒有改變,但 oifcfg 已經被設置了一個錯誤的子網地址或接口名字,則會發生同樣的問題。
2. 如果集群中的任何一個節點關閉,oifcfg 命令將會失敗並顯示錯誤:
$ oifcfg setif -global bond0/192.168.0.0:cluster_interconnect
PRIF-26: Error in update the profiles in the cluster
解決方案:啟動 oracle 集群中沒有運行的節點,確保集群中所有的節點都已啟動,如果由於操作系統原因不能啟動的節點,請先將此節點從集群中刪除在執行私網網絡變更。
3. 如果執行上面命令的的用戶非 GI 的擁有者,則會出現相同的錯誤:
$ oifcfg setif -global bond0/192.168.0.0:cluster_interconnect
PRIF-26: Error in update the profiles in the cluster
解決方案:確保使用 GI 的擁有者登錄並執行上面命令。
4. 從 11.2.0.2 開始,如果在沒有加入一個新私有網卡,就試圖刪除最后一個私有網卡(集群私網)則會發生下面錯誤:
PRIF-31: Failed to delete the specified network interface because it is the last private interface
解決方案:在刪除舊的私有網卡之前,先加入新的私有網卡。
5. 如果主機節點的 oracle 集群關閉在關閉狀態,則會報下面錯誤:
$ oifcfg getif
PRIF-10: failed to initialize the cluster registry
解決方案:啟動該主機節點上的 oracle 集群軟件。
2. 關於 Windows 系統注意事項
更改網卡的語法在 windows/RAC 和Unix/Linux 集群是一樣的,但是網卡名稱會略有不同,在 windows 系統上,默認分配給接口通常的名稱為:
Local Area Connection
Local Area Connection 1
Local Area Connection 2
如果使用一個網卡名稱含有空格,則名稱必須使用引號括起來,同時,請注意這是區分大小寫的。例如,在 windows上,設置集群私網鏈接:
C:\oracle\product\10.2.0\crs\bin\oifcfg setif -global "Local Area Connection 1"/192.168.1.0:cluster_interconnect
然而,在 windows 上重新命名網卡按最佳實踐更有意義,如重命名為”ocwpublic” 和”ocwprivate”。如果 oracle 集群安裝完成后需要更改網卡名字,則需要運行”oifcfg”命令來添加新的網卡並刪除舊的。綜上所述。
您可以運行下面命令查看每個節點上可用的網卡名字。
oifcfg iflist -p -n
必須在每個節點上運行這個命令來驗證網卡名稱相同的定義。
3. oifcfg 命令
使用 oifcfg 命令更改網卡名字的影響
對於私網網卡,數據庫將使用存儲在 OCR 中定義為集群互聯的網卡作為節點間緩存融合通信。在告警日志開始的時候,就會顯示集群互聯有效的信息。在參數清單。例如:
For pre 11.2.0.2:
Cluster communication is configured to use the following interface(s) for this instance
192.168.1.1
For 11.2.0.2+: (HAIP address will show in alert log instead of private IP)
Cluster communication is configured to use the following interface(s) for this instance
169.254.86.97
如果上面信息不正確,則實例需要重啟以便 OCR 條目修正,這同樣適用於 ASM 實例和數據庫實例。在 windows 系統上,實例被關閉后,在 OCR 將被重讀之前,還需要停止/啟動 OracleService < SID >(或 OracleASMService < ASMSID > 。
Oifcfg 命令用法
查看 oifcfg 命令的全部選項,只需輸入:
$ <CRS_HOME>/bin/oifcfg
例5 對於 11gR2 或以上版本的 HAIP 添加或刪除集群私網
1. 添加另外的私有網絡到現有的使用 HAIP 的集群中,作為 grid 用戶執行:
$ oifcfg setif -global <interface>/<subnet>:cluster_interconnect
例如:
$ oifcfg setif -global enp0s8/192.168.57.0:cluster_interconnect
關閉 CRS 中的所有節點,通過重新啟動 crs 中的所有節點,來使 HAIP 讀入新的接口,不能使用滾動方式重啟。
2. 在使用 HAIP 的集群中刪除私有網絡,作為 grid 用戶執行:
$ oifcfg delif -global <if_name>
例如:
$ oifcfg delif -global enp0s8
HAIP 將切換至其它可用接口,在接口被刪除后,集群/數據庫會繼續采用此方式運行。
刪除多余的 HAIP 接口,應關閉 CRS 所有節點,然后重啟 CRS 所有節點。不能采用以滾動的方式重新啟動 CRS。