如何在 oracle 集群環境下修改私網信息 (文檔 ID 2103317.1)

  • 2019 年 10 月 11 日
  • 筆記

今天小麥苗給大家分享的是如何在 oracle 集群環境下修改私網信息

如何在 oracle 集群環境下修改私網信息

文檔內容

適用於:

Oracle Database – Enterprise Edition – 版本 10.1.0.2 到 12.2.0.1 [發行版 10.1 到 12.2] 本文檔所含信息適用於所有平台

目標

本文的目的是描述如何在 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 eth0 10.2.156.0 global public eth1 192.168.0.0 global cluster_interconnect

在 Unix/Linux 系統中,網卡名字是被系統自動分配的,依據系統平台的不同而不同。對於 windows 系統,請參考下面的附帶的文檔. 上面的例子顯示當前網卡 eth0 被用作公網並且子網為 10.2.156.0 eth1 被用作集群私網,子網為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.168.1.10 更改至 192.168.1.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 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 地址. 更多詳細的信息,請參考: 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 eth1 100.17.10.0 global public eth0 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.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 中,否則它會由於私網信息不匹配而導致重啟失敗。

校驗更改後的值:

$ 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 <if_name>[/<subnet>] 例如: $ oifcfg delif -global eth0/192.168.0.0

C. 對於 12C 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 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

關於 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:oracleproduct10.2.0crsbinoifcfg 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.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。

注意:本文內容太多,公眾號有字數限制,全文可點擊文末的閱讀原文,謝謝大家的理解。Oracle培訓和認證記得找小麥苗喲。

About Me:小麥苗

● 本文作者:小麥苗,只專註於數據庫的技術,更注重技術的運用

● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/

● 本系列題目來源於作者的學習筆記,部分整理自網絡,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

● 題目解答若有不當之處,還望各位朋友批評指正,共同進步