如何在 oracle 叢集環境下修改私網資訊 (文件 ID 2103317.1)
文件內容
|
目標 |
|
解決方案 |
例1: 更改私有主機名 |
例2:只更改私有 ip 地址不更改網路卡、子網及子網掩碼資訊 |
例3:只改變私有網路的 MTU 值 |
例4:更改私有網路卡名字,子網及掩碼 |
A. 對於 11gR2 以前的叢集管理軟體 |
B. 對於 11gR2 和 12c 上沒有使用 flex ASM 的版本 |
C. 對於 12C flex ASM 結構 |
關於 11gR2 的一些注意事項 |
關於 Windows 系統注意事項 |
使用 oifcfg 命令更改網路卡名字的影響 |
Oifcfg 命令用法 |
例5 對於 11gR2 或以上版本的 HAIP 新增或刪除叢集私網 |
|
參考 |
適用於:
Oracle Database - Enterprise Edition - 版本 10.1.0.2 到 12.1.0.2 [發行版 10.1 到 12.1]本文件所含資訊適用於所有平臺
目標
本文的目的是描述如何在 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 叢集中的網路資訊(介面,子網及每個網路卡的角色)都可以被’oifcfg’ 命令管理, 但是沒有網路卡的IP地址除外,oifcfg 命令不能修改IP地址資訊. ‘oifcfg getif’ 命令可以用來顯示OCR中當前網路卡的配置資訊:
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 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 檔案,確保叢集內所有節點新的網路設定都已生效:
% ifconfig -a on Unix/Linux
或
% ipconfig /all on windows
4. 重新啟動 Oracle Clusterware
以 root 使用者:# crsctl start crs
B. 對於 11gR2 和 12c 上沒有使用 flex ASM 的版本
針對於 11.2 的結構,私有網路配置資訊不但儲存在 OCR 中,而且還儲存在 gpnp 屬性檔案中。如果私有網路不可用或定義錯誤,則 CRSD 程式將無法啟動,任何隨後對於 OCR 的改變都是不可能完成的,因此需要注意當對私有網路的配置資訊進行修改,正確的改變順序是非常重要的。同時請注意,手動修改 gpnp 屬性檔案是不支援的。
$ cd $GRID_HOME/gpnp/<hostname>/profiles/peer/
$ cp -p profile.xml profile.xml.bk
1. 確保叢集中的所有節點都已啟動並正常執行
2. 使用 grid 使用者:
獲取下面資訊, 例如:
eth1 100.17.10.0 global public
eth0 192.168.0.0 global 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
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 中,否則它會由於私網資訊不匹配而導致重啟失敗。
校驗更改後的值:
3. 使用 root 使用者關閉叢集中所有的節點並禁用叢集:
# crsctl disable crs
4. 使網路配置資訊都已在 OS 層更改完成,確保更改完成後新的介面在所有的節點都可用有效:
$ ping <private hostname>
5. 使用 root 使用者啟用 oracle 叢集並重新啟動叢集中的所有節點:
# crsctl start crs
6. 如果需要去除舊介面卡資訊:
例如:
$ oifcfg delif -global eth0/192.168.0.0
C. 對於 12C flex ASM 結構
請檢查上面部分B,並關注提示部分,按下面命令做備份:
$ cd $GRID_HOME/gpnp/<hostname>/profiles/peer/
$ cp -p profile.xml profile.xml.bk
1. 確保 oracle 叢集中的所有節點都已正常執行。
2. 使用 grid 使用者:
得到現有資訊,如下:
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 使用者:
$ 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 asm
4. 使用 root 使用者關閉叢集中的所有節點並禁用叢集:
# crsctl disable crs
5. 在作業系統層面更改網路配置,更改之後,確保所有節點上的新網路卡生效:
$ ping <private hostname>
6. 使用 root 使用者啟用 oracle 叢集並重新啟動叢集中的所有節點:
# crsctl start crs
7. 刪除舊的網路卡資訊:
如:
$ oifcfg delif -global eth0/192.168.0.0
關於 11gR2 的一些注意事項
1. 如果底層網路配置已經更改, 但是 oifcfg 尚未執行同樣的變更,則重啟 oracle 叢集會導致 crsd 程式不能啟動。
crsd.log 日誌將會顯示如下:
..
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 命令將會失敗並顯示錯誤:
PRIF-26: Error in update the profiles in the cluster
解決方案:啟動 oracle 叢集中沒有執行的節點,確保叢集中所有的節點都已啟動,如果由於作業系統原因不能啟動的節點,請先將此節點從叢集中刪除在執行私網網路變更。
3. 如果執行上面命令的的使用者非 GI 的擁有者,則會出現相同的錯誤:
PRIF-26: Error in update the profiles in the cluster
解決方案:確保使用 GI 的擁有者登入並執行上面命令。
4. 從 11.2.0.2 開始,如果在沒有加入一個新私有網路卡,就試圖刪除最後一個私有網路卡(叢集私網)則會發生下面錯誤:
解決方案:在刪除舊的私有網路卡之前,先加入新的私有網路卡。
5. 如果主機節點的 oracle 叢集關閉在關閉狀態,則會報下面錯誤:
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上,設定叢集私網連結:
然而,在 windows 上重新命名網路卡按最佳實踐更有意義,如重新命名為”ocwpublic” 和”ocwprivate”。如果 oracle 叢集安裝完成後需要更改網路卡名字,則需要執行”oifcfg”命令來新增新的網路卡並刪除舊的。綜上所述。
您可以執行下面命令檢視每個節點上可用的網路卡名字。
必須在每個節點上執行這個命令來驗證網路卡名稱相同的定義。
使用 oifcfg 命令更改網路卡名字的影響
對於私網網路卡,資料庫將使用儲存在 OCR 中定義為叢集互聯的網路卡作為節點間快取融合通訊。在告警日誌開始的時候,就會顯示叢集互聯有效的資訊。在引數清單。例如:
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。
參考
NOTE:1386709.1 - The Basics of IPv4 Subnet and Oracle ClusterwareNOTE: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
NOTE:1054902.1 - How to Validate Network and Name Resolution Setup for the Clusterware and RAC
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31393455/viewspace-2130460/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何修改叢集的公網資訊(包括 VIP) (文件 ID 1674442.1)
- Mac 環境下 Redis 叢集的搭建MacRedis
- ORACLE RAC 環境下修改IPOracle
- 【RAC】Oracle RAC叢集環境下日誌檔案結構Oracle
- Zookeeper 叢集環境搭建
- es 5.5.3叢集環境搭建
- 【環境搭建】RocketMQ叢集搭建MQ
- hadoop叢集環境搭建Hadoop
- Glassfish叢集環境的搭建
- 修改RAC叢集私網地址和子網掩碼的實施步驟
- 基於docker環境下搭建redis主從叢集DockerRedis
- Hadoop框架:叢集模式下分散式環境搭建Hadoop框架模式分散式
- Linux 下 Hadoop 2.6.0 叢集環境的搭建LinuxHadoop
- OSCache叢集環境下快取同步的問題快取
- 【RAC】使用一條“ps”命令獲取Linux環境下全部RAC叢集程式資訊Linux
- Redis叢集環境搭建實踐Redis
- 12. Redis叢集環境搭建Redis
- HADOOP SPARK 叢集環境搭建HadoopSpark
- Docker構建redis叢集環境DockerRedis
- Redis叢集環境安裝指南Redis
- Linux 環境下搭建Hadoop叢集(全分佈)LinuxHadoop
- 容器雲多叢集環境下如何實踐 DevOpsdev
- Linux下Hadoop2.6.0叢集環境的搭建LinuxHadoop
- ZooKeeper 系列(二)—— Zookeeper單機環境和叢集環境搭建
- Linux叢集環境下NTP伺服器時間同步Linux伺服器
- Redis叢集環境下的-RedLock(真分散式鎖) 實踐Redis分散式
- 高可用叢集環境搭建-留檔
- 分散式系統與叢集環境分散式
- Elastic認證叢集環境準備AST
- k8s——搭建叢集環境K8S
- RAC 環境中 gc block lost 和私網通訊效能問題的診斷 (文件 ID 1674865.1)GCBloC
- 如何在Mac下配置Ruby環境Mac
- Windows 10環境簡單搭建ELK叢集Windows
- Hadoop叢集環境啟動順序Hadoop
- Docker環境搭建redis叢集(主從模式)DockerRedis模式
- 【MOS】RAC 環境中 gc block lost 和私網通訊效能問題的診斷 (文件 ID 1674865.1)GCBloC
- Oracle RAC 高可用性體系結構與叢集 單例項環境與 Oracle RAC 環境對比Oracle單例
- Windows環境下的資訊收集Windows