PowerFlex: Falha no switchover do MDM devido a falhas de alocação de memória – mos_MemMalloc
Summary: Ao alternar a propriedade do MDM (manualmente ou de outra forma), o MDM receptor não pode ser ativado corretamente devido a falhas de alocação de memória, deixando o cluster sem o MDM principal. ...
Symptoms
A saída de eventos do MDM de recebimento /opt/emc/scaleio/mdm/bin/showevents.py terá várias entradas para tentar assumir responsabilidades do MDM principal, todas dentro de um curto período de tempo uma da outra:
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.
O arquivo exp.0 do MDM de recebimento tem entradas como esta:
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]
O arquivo /var/log/messages mostra as várias reinicializações do serviço MDM como o events.txt faz:
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
Esse não é um problema do ScaleIO. O ScaleIO está funcionando conforme projetado.
Para verificar e/ou modificar as configurações vm.overcommit, siga estas etapas:
1. Faça log-in no SDS usando SSH como root
2. Execute
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. Execute os seguintes comandos.
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
Validação
[root@sds-node logs]# cat /etc/sysctl.conf | grep "vm.overcommit" vm.overcommit_memory = 2 vm.overcommit_ratio = 100
Repita essas etapas em todos os SDSs afetados no ambiente para garantir que eles estejam definidos com as configurações de práticas recomendadas (recomendadas). Você não precisa colocar o SDS no modo de manutenção para executar essa operação.
Para saber mais sobre essas configurações, consulte a documentação do Kernel do Linux sobre contabilidade de excesso de comprometimento
Additional Information
Verifique os parâmetros do kernel sysctl quanto à superalocação de memória:
# sysctl -a |grep commit vm.overcommit_memory = 2 (default is 0) vm.overcommit_ratio = 50 (default is 50)
Nesse caso, ter "vm.overcommit_memory" definido como 2 significa não comprometer memória em excesso. Isso fará com que qualquer alocação de memória que exceda o limite de superconfirmação. A confirmação de espaço total de endereço para o sistema não tem permissão para exceder swap + uma quantidade configurável (o padrão é 50%) de RAM física. Quando essa configuração está em 0, ela nega solicitações óbvias de superconfirmação, mas os processos raiz podem alocar acima do limite de superconfirmação.
Para verificar o limite atual de supercomprometimento e o valor confirmado, consulte CommitLimit e Committed_AS, respectivamente, a partir do seguinte comando:
#cat /proc/meminfo MemTotal: 8174572 kB .. CommitLimit: 4087284 kB Committed_AS: 3879388 kB
Há 8 GB de RAM nesse host, e o CommitLimit é definido como ~4 GB, que é 50% do espaço total do endereço.
Para corrigir esse problema, adicione/edite um dos seguintes em /etc/sysctl.conf:
- Altere "vm.overcommit_ratio" para 100, para que o sistema operacional possa confirmar o espaço total de endereço disponível e reinicializar.
Para saber mais sobre essas configurações, consulte a documentação do Kernel do Linux sobre contabilidade de excesso de comprometimento