PowerFlex: Switchover MDM non riuscito a causa di errori di allocazione della memoria - mos_MemMalloc
Summary: Quando si cambia la proprietà dell MDM (manualmente o in altro modo), l MDM ricevente non può essere attivato correttamente a causa di errori di allocazione della memoria che lasciano il cluster senza MDM primario. ...
Symptoms
L'output degli eventi dall MDM ricevente /opt/emc/scaleio/mdm/bin/showevents.py avrà più voci per tentare di assumere le responsabilità dell MDM primario, il tutto entro un breve periodo di tempo l'uno dall'altro:
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.
Il file exp.0 dell MDM ricevente contiene voci simili a queste:
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]
Il file /var/log/messages mostra i riavvii multipli del servizio MDM come 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
Non si tratta di un problema di ScaleIO. ScaleIO funziona come previsto.
Per controllare e/o modificare le impostazioni vm.overcommit, attenersi alla seguente procedura:
1. Accedere all SDS utilizzando SSH come root
2. Eseguire
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, Eseguire i seguenti comandi.
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
Convalida
[root@sds-node logs]# cat /etc/sysctl.conf | grep "vm.overcommit" vm.overcommit_memory = 2 vm.overcommit_ratio = 100
Ripetere questi passaggi su tutti gli SDS interessati nell'ambiente per assicurarsi che siano impostati sulle impostazioni delle best practice consigliate. Non è necessario impostare l SDS in modalità di manutenzione per eseguire questa operazione.
Per ulteriori informazioni su queste impostazioni, consultare la documentazione del kernel Linux sull'overcommit accounting
Additional Information
Controllare i parametri del kernel sysctl per l'overcommit della memoria:
# sysctl -a |grep commit vm.overcommit_memory = 2 (default is 0) vm.overcommit_ratio = 50 (default is 50)
In questo caso, avere "vm.overcommit_memory" impostato su 2 significa non sovraccaricare la memoria. In questo modo si riesce a qualsiasi allocazione di memoria che superi il limite di overcommit. Il commit totale dello spazio degli indirizzi per il sistema non può superare swap + una quantità configurabile (il valore predefinito è 50%) di RAM fisica. Quando questa impostazione è a 0, nega le richieste di overcommit evidenti, ma i processi root possono allocare oltre il limite di overcommit.
Per controllare il limite di overcommit corrente e la quantità di commit, vedere rispettivamente CommitLimit e Committed_AS dal seguente comando:
#cat /proc/meminfo MemTotal: 8174572 kB .. CommitLimit: 4087284 kB Committed_AS: 3879388 kB
Su questo host sono presenti 8 GB di RAM e il CommitLimit è impostato su ~4 GB, ovvero il 50% dello spazio degli indirizzi totale.
Per risolvere questo problema, aggiungere/modificare uno dei seguenti elementi in /etc/sysctl.conf:
- Modificare "vm.overcommit_ratio" in 100, in modo che il sistema operativo possa eseguire il commit dello spazio di indirizzi totale disponibile e riavviare.
Per ulteriori informazioni su queste impostazioni, consultare la documentazione del kernel Linux sull'overcommit accounting