IP packet reassembles failed導致例項被驅逐
n 資料庫第二個節點被驅逐出叢集,並且多次自動重啟以失敗告終
驅逐原因在GI Alert log顯示是私網通訊丟失,而重啟失敗也是因為ASM無法啟動,ASM db alert顯示IPC Send timeout. 當時ping和tracert並沒發現什麼異常,從OSW中的netstat -s檢視IP packet reassembles failed時間段值大量增長, 這是一套oracle 11.2.0.4 2Nodes RAC on RHEL 6.6的環境,另個每個資料庫伺服器CPU核數過百, 這個案例有多種巧合,如果CPU只有幾個,問題也可能不會發生,如果是RHEL7也不會發生等等。當然最終以調速OS引數解決,但是原因更值得分析。
Node1 GI ALERT LOG
2017-03-02 11:46:26.607:
[/u01/11.2.0/grid/bin/oraagent.bin(121496)]CRS-5011:Check of resource "testdb" failed: details at "(:CLSN00007:)" in "/u01/11.2.0/grid/log/anbob/agent/crsd/oraagent_oracle//oraagent_oracle.log"
2017-03-02 11:46:26.612:
[crsd(175117)]CRS-2765:Resource 'ora.testdb.db' has failed on server 'anbob'.
2017-03-02 11:46:42.866:
[cssd(172139)]CRS-1612:Network communication with node db2 (2) missing for 50% of timeout interval. Removal of this node from cluster in 14.620 seconds
2017-03-02 11:46:50.869:
[cssd(172139)]CRS-1611:Network communication with node db2 (2) missing for 75% of timeout interval. Removal of this node from cluster in 6.620 seconds
2017-03-02 11:46:54.870:
[cssd(172139)]CRS-1610: Network communication with node db2 (2) missing for 90% of timeout interval. Removal of this node from cluster in 2.620 seconds
2017-03-02 11:46:57.493:
[cssd(172139)]CRS-1607:Node db2 is being evicted in cluster incarnation 351512591; details at (:CSSNM00007:) in /u01/11.2.0/grid/log/anbob/cssd/ocssd.log.
2017-03-02 11:46:58.626:
[cssd(172139)]CRS-1662:Member kill requested by node db2 for member number 0, group DBHBCRM
Node2 GI ALERT LOG
2017-03-02 11:46:45.378:
[cssd(177450)]CRS-1663:Member kill issued by PID 84816 for 1 members, group DBCRM. Details at (:CSSGM00044:) in /u01/11.2.0/grid/log/db2/cssd/ocssd.log.
2017-03-02 11:46:58.982:
[cssd(177450)]CRS-1608:This node was evicted by node 1, anbob; details at (:CSSNM00005:) in /u01/11.2.0/grid/log/db2/cssd/ocssd.log.
2017-03-02 11:46:58.983:
[cssd(177450)]CRS-1656:The CSS daemon is terminating due to a fatal error; Details at (:CSSSC00012:) in /u01/11.2.0/grid/log/db2/cssd/ocssd.log
node2
因網路通訊失敗而自殺 member kill.
* allocate domain 7, invalid = TRUE
* domain 7 valid = 1 according to instance 1
Master broadcasted resource hash value bitmaps
Non-local Process blocks cleaned out
LMS 0: 0 GCS shadows cancelled, 0 closed, 0 Xw survived
Set master node info
Submitted all remote-enqueue requests
Dwn-cvts replayed, VALBLKs dubious
All grantable enqueues granted
Thu Mar 02 11:54:14 2017
IPC Send timeout detected. Sender: ospid 153935 [oracle@db2 (LMD0)]
Receiver: inst 1 binc 430132771 ospid 174276
IPC Send timeout to 1.0 inc 92 for msg type 65521 from opid 10
Thu Mar 02 11:54:16 2017
Communications reconfiguration: instance_number 1
Thu Mar 02 11:54:16 2017
Dumping diagnostic data in directory=[cdmp_20170302115416], requested by (instance=1, osid=174274 (LMON)), summary=[abnormal instance termination].
Reconfiguration started (old inc 92, new inc 96)
List of instances:
2 (myinst: 2)
Nested reconfiguration detected.
Global Resource Directory frozen
* dead instance detected - domain 1 invalid = TRUE
freeing rdom 1
* dead instance detected - domain 2 invalid = TRUE
freeing rdom 2
NODE2
的ASM因ipc time out失敗一直未啟動。
Node2 OSW netsat 資訊
zzz ***Thu Mar 2 11:40:31 CST 2017
75646 packet reassembles failed
zzz ***Thu Mar 2 11:40:52 CST 2017
77043 packet reassembles failed
zzz ***Thu Mar 2 11:46:33 CST 2017
131134 packet reassembles failed
這段時間產生了大量的IP packet reassembles failed. 彙總統計了之前的時間裡是不存在這個問題的。
當然到這裡如果你以以上資訊為關鍵字在MOS中應該已經可以找到解決方案RHEL 6.6: IPC Send timeout/node eviction etc with high packet reassembles failure (Doc ID 2008933.1)。在NOTE中記錄是因為OS過多的IP包重組失敗導致,解決方法是加大重組的BUFFER大小或啟用jumbo frame,對於jumbo frame需要硬體的支援,簡單的就是增加network IP 重組buffer的大小。如RHEL 6.6中的
net.ipv4.ipfrag_high_thresh = 16M --default 4M
net.ipv4.ipfrag_low_thresh = 15M -- default 3M
通常預設的應該滿足基本需求的,像上面的調整在ORACLE的RHEL的最佳實踐中也並未建議安裝裡調整,那後續的LINUX平臺都要調整該引數麼? 帶著這個問題我查開了LINUX 7.2的核心引數
[root@MiWiFi-srv ~]# sysctl -a|grep ipfrag
net.ipv4.ipfrag_high_thresh = 4194304
net.ipv4.ipfrag_low_thresh = 3145728
net.ipv4.ipfrag_max_dist = 64
net.ipv4.ipfrag_secret_interval = 600
net.ipv4.ipfrag_time = 30
如果是引數配置不是最佳,為什麼LINUX最新版並未改變,連ORACLE軟體也沒建議修改? 那我們可以再深入研究一些。
什麼是 IP packet reassembles failed ?
在linux平臺使用netstat -s命令時會看到packet reassembles failed項, 記錄的是IP重組包失敗的累計資料值,什麼時候要重組呢?當IP包通訊存在碎片時。在網路通訊協議中MTU(最大傳輸單元)限制了每次傳輸的IP 包的大小,一種是源端和目標端使用了不同的MTU時會交生碎片,這裡需要先確認傳輸過程中的MTU大小配置,確認使用了相同的MTU;還有就是當傳送的資料大於MTU時,回分成多個分片傳遞。這時調整MTU就不可能解決所有的IP包碎片的問題,可以透過加大通訊的buffer值,儘可能保留更多的資料在源端拆包,目標端快取等接收完整後再重組校驗。 在LINUX系統中調整BUFFER使用ipfrag_low_thresh 和ipfrag_high_thresh引數,如果調整了這個引數仍有較大的重組失敗還可以加大ipfrag_time 引數控制IP 碎片包在記憶體中保留的秒數時間。
如果在ORACLE RAC環境中一個節點突然產生了大量的資料包輸送給另一個節點,如應用設計問題,如資料檔案cache fusion或歸檔只能一個節點訪問時,都加大了網路通訊量,這裡需要檢查網路負載及丟包或包不一致的現象,因為ORACLE在網路通訊中使用了UDP和IP通訊協議,這兩類資訊都需要關注。
那是不是LINUX所有的系統都需要調整上面的引數呢?
不是的, 從RHEL瞭解這個問題基本也就出現在LINUX6.6,和部分6.7中,這個問題的根本原因是在linux6.6中引入了percpu counters計數器在核心 kernel-2.6.32-477.el6, 在後面的linux 6.8(kernel-2.6.32-642.el6)和linux 6.7.x(kernel-2.6.32-573.8.1.el6)已經修復了該問題, 所以在其它配置中沒有影響。
這個計數器是在每個CPU上一個,當CPU多時很容易超過預設的4M ipfrag_high_thresh, 所以這也是就是我一開始說的CPU多了也是這個問題的巧合,當網路傳輸大里更容易超過,而產生faild.
Summary:
當資料庫的某種場景觸發了大量的資料在節點間傳送, 剛好又是LINUX 6.6核心的一個bug, 剛好這又是一臺CPU非常多的伺服器,觸發了這次的IPC TIMEOUT和IP包重組失敗, 導致的私網資料包丟失,節點2被驅逐。解決方法可以通常調整作業系統引數,加大IP包buffer大小,儘可能的減少IP packet reassembles failed。無系統不網路,DBA也應該有所瞭解,希望對你有幫助。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23732248/viewspace-2887204/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一次詳細的RAC 節點例項驅逐分析文件
- 一次RAC例項驅逐詳細分析及解決方案
- 導致爬蟲使用代理IP卻仍被限制的原因爬蟲
- Redis CVE-2020-14147導致例項異常退出Redis
- MongoDB例項重啟失敗探究(大事務Redo導致)MongoDB
- 導致IP被封的原因
- led驅動程式例項
- CSS3 translate導致字型模糊的例項程式碼CSSS3
- MySQL Case-時間問題導致MySQL例項批次當機MySql
- insert變數太多導致例項重啟ORA-00600、ORA-01006變數
- 15、MySQL Case-時間問題導致MySQL例項批次當機MySql
- Failed to connect to ESP8266: Timed out waiting for packet headerAIHeader
- Linux中ip命令的使用例項Linux
- Kubernetes Pod驅逐策略
- 12.2.0.1bug導致的Failed to register in OCRLOCAL group.錯誤AI
- 測試驅動開發(TDD)例項演示
- SQL Server隱藏例項會導致Alwasy on手動故障轉移時報error 26SQLServerError
- 記一次ORA-01102導致資料庫例項無法啟動案例資料庫
- Containerd 的 Bug 導致容器被重建!如何避免?AI
- 導致爬蟲被限制的原因有哪些?爬蟲
- JS · \r\n被轉義導致出錯JS
- mysql的新建索引會導致insert被lockedMySql索引
- 驅動版本與庫檔案不匹配(Failed to initialize NVML: Driver/library version mismatch)導致nvidia驅動無法執行的解決思路(不重啟)AI
- kubernetes驅逐機制總結
- kubernetes-pod驅逐機制
- docker Redis 被任意連結 導致被 kdevtmpfsi 挖礦記錄DockerRedisdev
- 由於無法分配ip而導致的FailedCreatePodSandBoxAI
- 11.2.0.4單例項ASM安裝報錯ohasd failed to ... line 73.單例ASMAI
- Sector size導致ORA-27061: waiting for async I/Os failed with root.shAI
- Linux主機USB RNDIS網路卡驅動實現不完整導致的一例問題Linux
- Exim漏洞導致數百萬伺服器被接管伺服器
- 導致爬蟲代理IP超時的四種原因爬蟲
- Linux被DDOS&CC攻擊解決例項Linux
- ORA-21561: OID generation failed hostname與/etc/hosts不一致導致安裝報錯AI
- Stout Risius Ross:超過40%的美國租戶面臨被驅逐的風險ROS
- jmeter引數化導致反斜槓(\)被轉義JMeter
- 導致代理IP驗證不準確的四種原因
- Kubernetes-22:kubelet 驅逐策略詳解