PowerFlex: Přepnutí uzlu MDM selhává kvůli selhání přidělování paměti – mos_MemMalloc
Summary: Při přepínání vlastnictví uzlu MDM (ručně nebo jiného) se přijímající uzel MDM nemůže správně spustit kvůli selhání přidělování paměti, takže cluster nemá primární uzel MDM.
Symptoms
Výstup událostí z přijímajícího MDM /opt/emc/scaleio/mdm/bin/showevents.py bude mít několik položek pro pokus o převzetí zodpovědnosti primárního MDM, a to vše v krátkém časovém odstupu:
2017-10-04 12:08:33.915 MDM_CLUSTER_BECOMING_MASTER WARNING This MDM, ID 394760fd6714xxxx, took control of the cluster and is now the Master MDM. 2017-10-04 12:08:33.915 MDM_BECOMING_MASTER WARNING This MDM is switching to Master mode. MDM will start running. .. 2017-10-04 12:08:34.309 MDM_CLUSTER_BECOMING_MASTER WARNING This MDM, ID 394760fd6714xxxx, took control of the cluster and is now the Master MDM. 2017-10-04 12:08:34.309 MDM_BECOMING_MASTER WARNING This MDM is switching to Master mode. MDM will start running.
Soubor exp.0 z přijímajícího MDM obsahuje následující položky:
04/10 12:08:34.079823 Panic in file /data/build/workspace/ScaleIO-SLES12-2/src/mos/usr/mos_utils.c, line 73,
function mos_MemMalloc, PID 9978.Panic Expression bCanFail . /opt/emc/scaleio/mdm/bin/mdm-2.0.13000.211(
mosDbg_PanicPrepare+0x115) [0x6a86f5] /opt/emc/scaleio/mdm/bin/mdm-2.0.13000.211(mos_MemMalloc+0x81)
[0x6ac0d1] /opt/emc/scaleio/mdm/bin/mdm-2.0.13000.211(multiHeadMgr_GetUpdateMultiHeadsMsg+0x66) [0x57123c]
/opt/emc/scaleio/mdm/bin/mdm-2.0.13000.211(tgtMgr_ConfigureTgt+0x9c1) [0x4d579e]
/opt/emc/scaleio/mdm/bin/mdm-2.0.13000.211(tgtMgr_HandleWorkReq+0x41b) [0x4d6206]
/opt/emc/scaleio/mdm/bin/mdm-2.0.13000.211() [0x6c57d8]
/opt/emc/scaleio/mdm/bin/mdm-2.0.13000.211(mosUmt_StartFunc+0xea) [0x6c51af]
/opt/emc/scaleio/mdm/bin/mdm-2.0.13000.211(mosUmt_SignalHandler+0x51) [0x6c65d1]
/lib64/libpthread.so.0(+0x10b00) [0x7f844e8a6b00] /lib64/libc.so.6(sleep+0xd4) [0x7f844d8911a4]
Soubor /var/log/messages zobrazuje vícenásobné restartování služby MDM, stejně jako events.txt:
systemd[1]: mdm.service: Main process exited, code=exited, status=255/n/a systemd[1]: mdm.service: Unit entered failed state. systemd[1]: mdm.service: Failed with result 'exit-code'. systemd[1]: mdm.service: Service has no hold-off time, scheduling restart. systemd[1]: Stopped scaleio mdm. systemd[1]: mdm.service: Start request repeated too quickly. systemd[1]: Failed to start scaleio mdm. systemd[1]: mdm.service: Unit entered failed state. systemd[1]: mdm.service: Failed with result 'start-limit'.
Cause
Resolution
Nejedná se o problém ScaleIO. ScaleIO funguje standardním způsobem.
Pokud chcete zkontrolovat nebo upravit nastavení vm.overcommit, postupujte následovně:
1. Přihlaste se k SDS přes SSH jako uživatel root
2. Spustit
cat /etc/sysctl.conf | grep "vm.overcommit" Ex. [root@sds-node logs]# cat /etc/sysctl.conf | grep "vm.overcommit" vm.overcommit_memory = 2 vm.overcommit_ratio = 50
3, Spusťte následující příkazy.
sed -i 's/vm\.overcommit_memory = .*/vm\.overcommit_memory = 2/g' /etc/sysctl.conf sed -i 's/vm\.overcommit_ratio = .*/vm\.overcommit_ratio = 100/g' /etc/sysctl.conf sysctl -p
Ověření
[root@sds-node logs]# cat /etc/sysctl.conf | grep "vm.overcommit" vm.overcommit_memory = 2 vm.overcommit_ratio = 100
Opakujte tyto kroky u všech problémových úložišť SDS v prostředí, abyste měli jistotu, že jsou nastaveny na doporučená nastavení vzorových postupů. K provedení této operace není nutné přepínat SDS do režimu údržby.
Další informace o těchto nastaveních najdete v dokumentaci k linuxovému jádru o účtování nadměrného potvrzení.
Additional Information
Zkontrolujte parametry jádra sysctl, zda nedochází k přetížení paměti:
# sysctl -a |grep commit vm.overcommit_memory = 2 (default is 0) vm.overcommit_ratio = 50 (default is 50)
V tomto případě nastavení "vm.overcommit_memory" na 2 znamená, že nepřetěžujete paměť. Tím selže jakékoli přidělování paměti, které překračuje limit nadměrného potvrzení. Celkový commit adresního prostoru pro systém nesmí překročit swap + konfigurovatelné množství (výchozí hodnota je 50 %) fyzické paměti RAM. Pokud je toto nastavení na hodnotě 0, odepře zjevné požadavky na nadměrné potvrzení, ale kořenové procesy mohou přidělit více než limit nadměrného potvrzení.
Pokud chcete zkontrolovat aktuální limit nadměrného potvrzení a potvrzenou částku, podívejte se na CommitLimit a Committed_AS pomocí následujícího příkazu:
#cat /proc/meminfo MemTotal: 8174572 kB .. CommitLimit: 4087284 kB Committed_AS: 3879388 kB
Na tomto hostiteli je 8 GB paměti RAM a parametr CommitLimit je nastaven na ~4 GB, což je 50 % celkového adresního prostoru.
Chcete-li tento problém vyřešit, přidejte/upravte jednu z následujících položek v souboru /etc/sysctl.conf:
- Změňte hodnotu "vm.overcommit_ratio" na 100, aby operační systém mohl potvrdit celkový dostupný adresní prostor a restartovat se.
Další informace o těchto nastaveních najdete v dokumentaci k linuxovému jádru o účtování nadměrného potvrzení.