Технологія PowerFlex: Помилка перемикання MDM через збої розподілу пам'яті - mos_MemMalloc
Summary: У разі зміни власника MDM (вручну або іншим способом) приймальна MDM не може відображатися належним чином через збої розподілу пам'яті, через що кластер не має основного MDM.
Symptoms
Події, виведені з приймального MDM /opt/emc/scaleio/mdm/bin/showevents.py, матимуть кілька записів для спроб взяти на себе основні обов'язки MDM протягом короткого часу один від одного:
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.
Файл exp.0 з отриманого MDM містить такі записи:
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]
Файл /var/log/messages показує кілька перезапусків служби MDM, як це робить 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
Це не проблема ScaleIO. ScaleIO працює за призначенням.
Щоб перевірити та/або змінити налаштування vm.overcommit, виконайте такі дії:
1. Увійдіть в SDS за допомогою SSH від імені root
2. Бігти
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. Виконайте наступні команди.
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
Перевірки
[root@sds-node logs]# cat /etc/sysctl.conf | grep "vm.overcommit" vm.overcommit_memory = 2 vm.overcommit_ratio = 100
Повторіть ці кроки для всіх SDS у середовищі, які зазнали впливу, щоб переконатися, що для них встановлено рекомендовані параметри найкращої практики. Вам не потрібно переводити SDS в режим обслуговування, щоб виконати цю операцію.
Щоб дізнатися більше про ці налаштування, перегляньте документацію ядра Linux про облік перекомітів
Additional Information
Перевірте параметри ядра sysctl на перевантаження пам'яті:
# sysctl -a |grep commit vm.overcommit_memory = 2 (default is 0) vm.overcommit_ratio = 50 (default is 50)
У цьому випадку, маючи "vm.overcommit_memory" встановлено на 2, це означає, що ви не перевантажуєте пам'ять. При цьому не вдається виділити пам'ять, яка перевищує ліміт перевантаження. Загальний коміт адресного простору для системи не повинен перевищувати swap + налаштовуваний обсяг (за замовчуванням 50%) фізичної оперативної пам'яті. Коли цей параметр дорівнює 0, він відхиляє очевидні запити на перекоти, але кореневим процесам дозволено виділяти вище ліміту перекоміту.
Щоб перевірити поточний ліміт перевищення зобов'язань та суму переплати, дивіться CommitLimit та Committed_AS, відповідно, з наступної команди:
#cat /proc/meminfo MemTotal: 8174572 kB .. CommitLimit: 4087284 kB Committed_AS: 3879388 kB
На цьому хості 8 ГБ оперативної пам'яті, а CommitLimit встановлений на ~4 ГБ, що становить 50% від загального адресного простору.
Щоб вирішити цю проблему, додайте/відредагуйте одне з наступних у /etc/sysctl.conf:
- Змініть "vm.overcommit_ratio" на 100, щоб ОС могла зафіксувати загальний доступний адресний простір і перезавантажитися.
Щоб дізнатися більше про ці налаштування, перегляньте документацію ядра Linux про облік перекомітів