【RAC】Oracle RAC如何修改心跳網路

xysoul_雲龍發表於2021-08-02

轉自Oracle 官方 mos文件,具體可檢視其他相關資訊:


文件內容


目標

解決方案

例1: 更改私有主機名

例2:只更改私有 ip 地址不更改網路卡、子網及子網掩碼資訊

例3:只改變私有網路的 MTU 值

例4:更改私有網路卡名字,子網及掩碼

A. 對於 11gR2 以前的叢集管理軟體

B. 對於 11gR2 和 12c 上沒有使用 flex ASM 的版本

C. 對於 12C和18C flex ASM 結構

關於 11gR2 的一些注意事項

關於 Windows 系統注意事項

使用 oifcfg 命令更改網路卡名字的影響

Oifcfg 命令用法

例5 對於 11gR2 或以上版本的 HAIP 新增或刪除叢集私網

參考

適用於:

Oracle Database Backup Service - 版本 N/A 和更高版本
Oracle Database Exadata Express Cloud Service - 版本 N/A 和更高版本
Oracle Database Cloud Service - 版本 N/A 和更高版本
Oracle Database - Enterprise Edition - 版本 10.1.0.2 到 12.2.0.1 [發行版 10.1 到 12.2]
Oracle Database Cloud Schema Service - 版本 N/A 和更高版本
本文件所含資訊適用於所有平臺

目標

本文的目的是描述如何在 oracle 叢集環境中更改或更新私有網路(cluster_interconnect)資訊。

有時我們需要更改或更新網路卡的名字,或者更改網路卡的子網掩碼,再或者更改當時原始安裝時就輸入了不正確的資訊,也許還有其它的原因,oifcfg 工具當時沒有成功的安裝。

請參考文件: Note 276434.1 for modifying public network and VIP associated information
和文件:  Note 1386709.1 for basics of IPv4 subnet and Oracle Clusterware。

提示:對於 oracle Engineered system(Exadata)和 oracle Applicance(ODA)不適用本文件。

 

解決方案

Oracle 叢集中的網路資訊(介面,子網及每個網路卡的角色)都可以被’oifcfg’ 命令管理, 但是沒有網路卡的IP地址除外,oifcfg 命令不能修改IP地址資訊. ‘oifcfg getif’ 命令可以用來顯示OCR中當前網路卡的配置資訊:

% $CRS_HOME/bin/oifcfg getif 
<interfacename>0 10.X.XXX.0 global public 
<interfacename>1 192.XXX.X.0 global cluster_interconnect

在 Unix/Linux 系統中,網路卡名字是被系統自動分配的,依據系統平臺的不同而不同。對於 windows 系統,請參考下面的附帶的文件. 上面的例子顯示當前網路卡 <interfacename>0 被用作公網並且子網為 10.2.156.0 <interfacename>1 被用作叢集私網,子網為192.168.0.0。

‘公有’ 網路是伺服器與客戶端之間的通訊(與 VIP 使用相同的網段並以不同的記錄儲存在 OCR 中),與之對應的’cluster_interconnect’網路是用來在 RDBMS/ASM 節點間快取融合。從 11gR2 開始,cluster_interconnect 同時被用作叢集間的心跳,相對於 11gR2 以前的版本,當配置叢集心跳資訊時指定主機名而言,這是一個標誌性的改變。

如果私有網路卡的子網或介面名字配置不正確,我們需要使用 crs/grid 使用者來更改。

例1: 更改私有主機名

在 11.2 oracle clusterware 之前的版本,私有主機名被記錄在 OCR 中, 它不能被更改,一般情況下私有主機名是不需要改變的,它附屬的 ip 可以被更改,只有使用刪除/新增節點或重新安裝 oracle clusterware 來更改私有主機名。

在 11.2 Grid 結構中,私有主機名不在記錄在 OCR 中,並且不存在依賴關係,所以它可以在 /etc/hosts 檔案中任意更改。

例2:只更改私有 ip 地址不更改網路卡、子網及子網掩碼資訊

舉例,私有 ip 地址從 192. XXX.X.10 更改至 192.XXX.X.21,網路卡名字及子網保持不變。或者只改變MAC地址,保持private IP address/interface name/subnet/network不變

只要關閉需要更改主機上的 oracle clusterware 軟體,在作業系統層,根據需求更改私有 ip 地址或者MAC地址(如:/etc/hosts,OS network config 等等), 再重啟啟動 oracle clusterware 軟體即可。

例3:只改變私有網路的 MTU 值

舉例, 將私有網路 MTU 值從1500更改至9000(啟用 jumbo frame),網路卡名字保持不變。

1. 關閉叢集中的所有節點。
2. 在作業系統層更改 MTU 需要設定的值,確保更改後 MTU 值的私有網路卡可用並且可以 ping 通叢集中的所有節點。
3. 重啟所有節點的叢集管理軟體。

例4:更改私有網路卡名字,子網及掩碼

提示:當子網掩碼被更改,但是子網標識沒有改變時,如:
子網掩碼從 255.255.0.0 更改至 255.255.255.0,私網 ip 為 192.168.0.x,子網標識保持不變 192.168.0.0,網路卡名字沒有改變.關閉所有需要更改的主機 oracle clusterware,在作業系統層修改私有網路IP地址(如:作業系統 網路配置等等)。並重啟叢集中所有節點,請注意,這種更改是不能採用輪轉方式(rolling manaer)完成的。

當子網掩碼被改變,附屬的子網標識也經常會被改變,oracle 在 OCR 中只儲存網路卡名字及子網標識的資訊,而不儲存子網掩碼。可以使用 oifcfg 命令完成這樣的變更, oifcfg 命令只需在叢集中的一個節點執行,而不是所有節點。

A. 對於 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  <interfacename> 3/ 192.168.2.0:cluster_interconnect
% $ORA_CRS_HOME/bin/oifcfg delif -global  <interfacename>1/192.168.1.0

校驗結果
% $ORA_CRS_HOME/bin/oifcfg getif   
eth0 10. X.XXX.0 global public 
eth3  192. XXX.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 地址. 更多詳細的資訊,請參考:  Note 604958.1

 

B. 對於 11gR2 和 12c 上沒有使用 flex ASM 的版本

針對於 11.2 的結構,私有網路配置資訊不但儲存在 OCR 中,而且還儲存在 gpnp 屬性檔案中。如果私有網路不可用或定義錯誤,則 CRSD 程式將無法啟動,任何隨後對於 OCR 的改變都是不可能完成的,因此需要注意當對私有網路的配置資訊進行修改,正確的改變順序是非常重要的。同時請注意,手動修改 gpnp 屬性檔案是不支援的。

在對叢集中所有節點操作之前,請先備份 profile.xml 配置檔案。作為 grid 使用者執行:
$ cd $GRID_HOME/gpnp/<hostname>/profiles/peer/
$ cp -p profile.xml profile.xml.bk


1. 確保叢集中的 所有節點都已啟動並正常執行

2. 使用 grid 使用者:

獲取下面資訊, 例如:

$ oifcfg getif
<interfacename>1 100.17.10.0 global public
<interfacename>0 192.168.0.0 global cluster_interconnect


加入新的叢集私網通訊資訊:

$ oifcfg setif -global <interface>/<subnet>:cluster_interconnect

例如:
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.XX

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 中,否則它會由於私網資訊不匹配而導致重啟失敗。


校驗更改後的值:

$ oifcfg getif


3. 使用 root 使用者關閉叢集中所有的節點並禁用叢集:

# crsctl stop crs
# crsctl disable crs


4. 使網路配置資訊都已在 OS 層更改完成,確保更改完成後新的介面在所有的節點都可用有效:

$ ifconfig -a
$ ping <private hostname>


5. 使用 root 使用者啟用 oracle 叢集並重新啟動叢集中的所有節點:

# crsctl enable crs
# crsctl start crs


6. 如果需要去除舊介面卡資訊:

$ oifcfg delif -global <interface>[/<subnet>]
例如:
$ oifcfg delif -global eth0/192.168.0.0

 

C. 對於 12C和18C flex ASM 結構

請檢查上面部分B,並關注提示部分,按下面命令做備份:

在對叢集中所有節點操作之前,請先備份 profile.xml 配置檔案。 作為 grid 使用者執行:
$ cd $GRID_HOME/gpnp/<hostname>/profiles/peer/
$ cp -p profile.xml profile.xml.bk

1. 確保 oracle 叢集中的 所有節點都已正常執行。

2. 使用 grid 使用者:

得到現有資訊,如下:

$ oifcfg getif
<interfacename>1 100.17.10.0 global public
<interfacename>0 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 <interface>[/<subnet>]
如:
$ oifcfg delif -global <interfacename>0/192.168.0.0

 

 

關於 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 叢集軟體。

 

關於 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

必須在每個節點上執行這個命令來驗證網路卡名稱相同的定義。

使用 oifcfg 命令更改網路卡名字的影響

對於私網網路卡,資料庫將使用儲存在 OCR 中定義為叢集互聯的網路卡作為節點間快取融合通訊。在告警日誌開始的時候,就會顯示叢集互聯有效的資訊。在引數清單。例如:

For pre 11.2.0.2:
Cluster communication is configured to use the following interface(s) for this instance 
192. XXX.X.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. XXX.XX.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 <interfacename>/192.XXX.XX.0:cluster_interconnect

 關閉 CRS 中的 所有節點,透過重新啟動 crs 中的 所有節點,來使 HAIP 讀入新的介面,不能使用滾動方式重啟。

2. 在使用 HAIP 的叢集中刪除私有網路,作為 grid 使用者執行:

$ oifcfg delif -global <nterface>

例如:
$ oifcfg delif -global <interfacename>

HAIP 將切換至其它可用介面,在介面被刪除後,叢集/資料庫會繼續採用此方式執行。

刪除多餘的 HAIP 介面,應關閉 CRS 所有節點,然後重啟 CRS 所有節點。不能採用以滾動的方式重新啟動 CRS。

 

參考

NOTE:1054902.1  - How to Validate Network and Name Resolution Setup for the Clusterware and RAC
NOTE:1386709.1  - The Basics of IPv4 Subnet and Oracle Clusterware
NOTE:276434.1  - How to Modify Public Network Information including VIP in Oracle Clusterware
NOTE:604958.1  - OCFS2 Node Fence Caused by Removing the External Network Cable


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

相關文章