目錄

簡介

必要條件

需求

採用元件

背景資訊

問題

解決MongoPrimaryDB分段警報的過程

簡介

本檔案介紹在思科原則套件(CPS)中解決MongoPrimaryDB分段警報的程式。

必要條件

需求

思科建議您瞭解以下主題：

- Linux

- CPS

- MongoDB

附註：思科建議您必須具有對CPS CLI的超級使用者訪問許可權。

採用元件

本文中的資訊係根據以下軟體和硬體版本：

- CPS 20.2

- MongoDB v3.6.17

- 整合運算系統(UCS)-B

本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除（預設）的組態來啟動。如果您的網路運作中，請確保您瞭解任何指令可能造成的影響。

背景資訊

CPS使用MongoDB，其中在Sessionmgr虛擬機器(VM)上運行的單一進程構成其基本DataBase結構。

當文檔移動或移除時，它們會留下孔。MongoDB儘可能地嘗試在新文檔上重用這些孔，但隨著時間的推移，它發現自己緩慢而穩定地擁有許多孔，這些孔不能被重用，因為文檔無法容納這些孔中。這種效果稱為分段，在分配記憶體的所有系統(包括作業系統(OS))中都很常見。

碎片化的影響是浪費空間。由於MongoDB使用記憶體對映檔案，因此磁碟上的任何分段也反映在RAM中的分段中。這會導致RAM中容納的「工作集」的建立減少，並使磁碟交換更多。

CPS支援KPI以使用Grafana監控MongoDB級別分段，並在MongoDB分段百分比超過指定值時生成簡單網路管理協定(SNMP)警報。

其 /etc/collectd.d/dbMonitorList.cfg sessionmgr虛擬機器上的檔案包含資料庫及其各自的分段閾值百分比值的清單。預設情況下，分段閾值為40 %。可以根據需要更改預設的分段閾值。

使用以下命令可以檢查session_cache、sk_cache、diameter和Subscriber Profile Repository(SPR)資料庫(通過使用主成員)的分段統計資訊：

[root@installer ~]# diagnostics.sh --get_frag

CPS Diagnostics HA Multi-Node Environment

---------------------------

Ping check for qns03 Adding to IGNORED_HOSTS...[FAIL]

|----------------------------------------------------------------------------------------------------------------------------------------|

| Mongo:v3.6.17 DATABASE LEVEL FRAGMENTATION STATUS INFORMATION Date : 2022-09-17 07:19:29 |

| SET TYPE : HA [MEMBER_ROLE : PRIMARY] |

|----------------------------------------------------------------------------------------------------------------------------------------|

| setname dbName storageSize(MB) datasize(MB) indexSize(MB) fileSize(MB) derivedFS(MB) frag% |

|----------------------------------------------------------------------------------------------------------------------------------------|

| ADMIN:set06 |

| Status via sessionmgr01:27721 |

| set06 diameter 9.56 0.04 0.05 64.00 0 NoFrag |

|----------------------------------------------------------------------------------------------------------------------------------------|

| BALANCE:set02 |

| Status via sessionmgr01:27718 |

| set02 balance_mgmt db not found - - - - - - |

|----------------------------------------------------------------------------------------------------------------------------------------|

| SESSION:set01 |

| Status via sessionmgr01:27717 |

| set01 session_cache 0.02 0.00 0.02 16.00 0 NoFrag |

|----------------------------------------------------------------------------------------------------------------------------------------|

| SESSION:set01 |

| Status via sessionmgr01:27717 |

| set01 sk_cache 0.02 0.00 0.01 16.00 0 NoFrag |

|----------------------------------------------------------------------------------------------------------------------------------------|

| SPR:set04 |

| Status via sessionmgr01:27720 |

| set04 spr 0.04 0.00 0.13 64.00 0 NoFrag |

|----------------------------------------------------------------------------------------------------------------------------------------|

[root@installer ~]#

問題

當副本集的主要成員的碎片百分比超過配置的閾值碎片值時，將生成此警報。如果未配置閾值，則當分段百分比超出預設值(40%)時發出警報。

「MongoPrimaryDB分段超出閾值」警報示例：

id=7100,values={sub_id=7107, event_host=sessionmgr01, status=down, msg=MongoPrimaryDB fragmentation exceeded the threshold value, CURR_FRAG = 40%, THRESHOLD = 40% at sessionmgr01:27717 for session_cac

解決MongoPrimaryDB分段警報的過程

為了降低分段百分比，請在生成警報時收縮資料庫。一旦資料庫縮小（分段百分比下降），將傳送明確的警報。

此過程用於解決提供的示例中的MongoPrimaryDB分段警報。

步驟1.從Cluster Manager或pcrfclient運行此命令，以驗證複製副本集中主要和輔助成員的狀態。

#diagnostics.sh --get_r

|----------------------------------------------------------------------------------------------------------------------------------------|

|SESSION:set01a|

|Status via sessionmgr01:27717 sessionmgr02:27717 |

|Member-1-27717 : 192.168.29.14-ARBITER-pcrfclient01- ON-LINE--0| --------|

|Member-2-27717 : 192.168.29.35-PRIMARY-sessionmgr01- ON-LINE--3| --------|

|Member-3-27717 : 192.168.29.36-SECONDARY-sessionmgr02- ON-LINE--2| 1 sec|

|----------------------------------------------------------------------------------------------------------------------------------------|

步驟2.從群集管理器或pcrfclient運行此命令以更改sessionmgr01的優先順序並使其成為輔助成員。

#sh set_priority.sh --db session --replSet set01a --asc

Expected output in #diagnostics.sh --get_r

|----------------------------------------------------------------------------------------------------------------------------------------|

|SESSION:set01a|

|Status via sessionmgr02:27717 sessionmgr01:27717 |

|Member-1-27717 : 192.168.29.14-ARBITER-pcrfclient01- ON-LINE--0| --------|

|Member-2-27717 : 192.168.29.35-PRIMARY-sessionmgr02- ON-LINE--3| --------|

|Member-3-27717 : 192.168.29.36-SECONDARY-sessionmgr01- ON-LINE--2| 1 sec|

|----------------------------------------------------------------------------------------------------------------------------------------|

附註：確保sessionmgr01不再為主節點(diagnostics.sh —get_r)，並且有一個主成員可用於副本集。

步驟3.從Sessionmgr01運行此命令以停止AIDO客戶端。

#monit stop aido_client

步驟4.從Sessionmgr01運行此命令以停止各自的Mongo例項（portNum是分段成員的埠號）。

Command syntax:

#/etc/init.d/sessionmgr-<portNum> stop

Example:

#/etc/init.d/sessionmgr-27717 stop

步驟5.若要清除sessionmgr01中的資料庫目錄，請從mongo命令的 — dbpath屬性中提到的路徑中刪除資料目錄。從Sessionmgr01運行此命令以檢索值（使用分段成員的portNum）。

附註：由於與其他sessionmgr dbs關聯的埠號和目錄不同，請確保您具有清除其他sessionmgr dbs的正確目錄。

Command syntax:

#grep -w DBPATH= /etc/init.d/sessionmgr-<portNum>

Example:

#grep -w DBPATH= /etc/init.d/sessionmgr-27717

Sample Output: DBPATH=/var/data/sessions.1/a

Copy the DBPATH from output.

Command syntax:

#rm -rf <DBPATH>/*

Example:

#rm -rf /var/data/sessions.1/a/*

步驟6.從Sessionmgr01運行此命令以啟動各自的Mongo例項。

Command syntax:

#/etc/init.d/sessionmgr-<portNum> start

Example:

#/etc/init.d/sessionmgr-27717 start

步驟7.從Sessionmgr01運行此命令以啟動AIDO客戶端。

#monit start aido_client

步驟8.從群集管理器或pcrfclient運行此命令以重置複製副本整合員的優先順序。

#sh set_priority.sh --db session --replSet set01a

步驟9.從群集管理器或pcrfclient運行此命令，以驗證複製副本集中主要和輔助成員的狀態。

#diagnostics.sh --get_r

|----------------------------------------------------------------------------------------------------------------------------------------|

|SESSION:set01a|

|Status via sessionmgr01:27717 sessionmgr02:27717 |

|Member-1-27717 : 192.168.29.14-ARBITER-pcrfclient01- ON-LINE--0| --------|

|Member-2-27717 : 192.168.29.35-PRIMARY-sessionmgr01- ON-LINE--3| --------|

|Member-3-27717 : 192.168.29.36-SECONDARY-sessionmgr02- ON-LINE--2| 1 sec|

|----------------------------------------------------------------------------------------------------------------------------------------|